Results 1 to 2 of 2
  1. #1
    Join Date
    Feb 2002
    Location
    Silver Spring, Maryland
    Posts
    74

    Unanswered: SQLConfigDataSource(....) with "UID=sa" & "PWD=" dont work. Why

    SQLConfigDataSource(....) with "UID=sa" & "PWD=" dont work.

    When I do not send in a user id and password, I can create
    a DSN and open a database (remote database on a remote server) and everything is fine.
    (This works on all Windows 2000 nmachines that I know and some WIN NT 4.0 machines).

    For those where the "SQLConnect(....)" ( in the 2nd function) fails, I checked the ODBC connection and
    and found that a the Server was the correct one but the "Login ID" was "administrator".
    Trying to proceed in the ODBC panel fails. Apparentl

    To try to solve the problem, I try to include specifically a User ID and a password.
    When I include "UID=sa" & "PWD=",
    creating a DSN fails. can someone show mo please!! I have noticed that a lot of people have the
    same problem as I have.



    //Retrieving a List of All ODBC Data Sources
    bool CSQLdbImportDlg::CreateODBCDataSourceName()
    {

    CString dsn_str;
    CString server_str;
    CString description_str;
    CString database_str;
    CString wholeString;
    CString userIDStr;
    CString dsnPassWordStr;

    // for diagnostics only
    int iCount = 0;
    WORD iError = 1;
    DWORD pfErrorCode;
    char lpszErrorMsg[301];
    WORD cbErrorMsgMax = 300;
    RETCODE retcode;

    BOOL bretcoderemovedsn;
    BOOL bretcodeadddsn;
    LPTSTR szDriver = "SQL Server";

    // add datasource name if it exixts
    dsn_str = "DSN=" + m_MyProgramaticDSN + "\0"; // m_MyProgramaticDSN = "MemexDataDSN"
    LPTSTR lpszMyProgramaticDSN = new TCHAR[dsn_str.GetLength()+1];
    _tcscpy(lpszMyProgramaticDSN, dsn_str);

    server_str = "SERVER=" + m_cmbSQLservername + "\0";
    LPTSTR lpszSQLservername = new TCHAR[server_str.GetLength()+1];
    _tcscpy(lpszSQLservername, server_str);

    LPTSTR lpszDATABASE = "DATABASE=VersaScanMeSQL\0";
    LPTSTR lpszDESCRIPTION = "DESCRIPTION=Dynamically created datasetname\0";

    //// I pass in a blank CString "m_sqlserverdsnpassword"
    dsnPassWordStr = "PWD=" + m_sqlserverdsnpassword + "\0";
    LPTSTR lpszPassWord = new TCHAR[dsnPassWordStr.GetLength()+1];
    _tcscpy(lpszPassWord, dsnPassWordStr);


    // I pass in m_sqlserverdsnuserid = "sa"
    userIDStr = "UID=" + m_sqlserverdsnuserid + "\0";
    LPTSTR lpszUSERID = new TCHAR[userIDStr.GetLength()+1];
    _tcscpy(lpszUSERID, userIDStr);


    // remove the local datasource name if it exixts
    TCHAR szAttributesRemove[1028];
    TCHAR* szSubStringRemove = &(szAttributesRemove[0]);

    _tcscpy(szSubStringRemove, lpszMyProgramaticDSN);
    szSubStringRemove = (TCHAR*) (((int) szSubStringRemove) + strlen(lpszMyProgramaticDSN)
    + sizeof(TCHAR));

    // send in the server name
    _tcscpy(szSubStringRemove, lpszSQLservername);
    szSubStringRemove = (TCHAR*) (((int) szSubStringRemove) + strlen(lpszSQLservername) +
    sizeof(TCHAR));

    *szSubStringRemove = 0; // second null to end the list

    // remove an existing DSN
    bretcoderemovedsn = SQLConfigDataSource(NULL,
    ODBC_REMOVE_SYS_DSN,
    szDriver,
    &(szAttributesRemove[0]) /*szAttributes*/);


    // if removing a dsn fails
    if (bretcoderemovedsn == 0) // || rc == SQL_SUCCESS_WITH_INFO)
    {
    while (SQL_NO_DATA != (retcode = SQLInstallerError(
    iError ++,
    & pfErrorCode,
    lpszErrorMsg,
    cbErrorMsgMax,
    NULL )))

    iCount++;
    }

    // Add the local datasource name
    // _tstrlen does not exist
    TCHAR szAttributes[1028];
    TCHAR* szSubString = &(szAttributes[0]);

    // the DSN
    _tcscpy(szSubString, lpszMyProgramaticDSN);
    szSubString = (TCHAR*) (((int) szSubString) + strlen(lpszMyProgramaticDSN)
    + sizeof(TCHAR));

    // description
    _tcscpy(szSubString, lpszDESCRIPTION);
    szSubString = (TCHAR*) (((int) szSubString) + strlen(lpszDESCRIPTION) +
    sizeof(TCHAR));

    // server name
    _tcscpy(szSubString, lpszSQLservername);
    szSubString = (TCHAR*) (((int) szSubString) + strlen(lpszSQLservername) +
    sizeof(TCHAR));

    // database
    _tcscpy(szSubString, lpszDATABASE);
    szSubString = (TCHAR*) (((int) szSubString) + strlen(lpszDATABASE) +
    sizeof(TCHAR));

    //////////////////////////////////////////////////////////////////////
    /*
    // password
    _tcscpy(szSubString, lpszPassWord);
    szSubString = (TCHAR*) (((int) szSubString) + strlen(lpszPassWord) +
    sizeof(TCHAR));
    // user id
    _tcscpy(szSubString, lpszUSERID);
    szSubString = (TCHAR*) (((int) szSubString) + strlen(lpszUSERID) +
    sizeof(TCHAR));
    */
    //////////////////////////////////////////////////////////////////////

    *szSubString = 0; // second null to end the list

    bretcodeadddsn = SQLConfigDataSource(NULL,
    ODBC_ADD_SYS_DSN,
    szDriver,
    &(szAttributes[0]) /*szAttributes*/);

    // if adding a dsn fails
    if (bretcodeadddsn == 0) // || rc == SQL_SUCCESS_WITH_INFO)
    {
    while (SQL_NO_DATA != (retcode = SQLInstallerError(
    iError ++,
    & pfErrorCode,
    lpszErrorMsg,
    cbErrorMsgMax,
    NULL )))

    iCount++;

    // do not proceed beyond trying to dynamically create a dataset name
    return false;
    }

    return true;
    }//CreateODBCDataSourceName()

    /*************************************************
    Function
    Odbc_DBase::Connect_ToInput
    Description
    This is the Odbc_DBase constructor.
    **************************************************/
    SQLRETURN CODBC_Dbase::Connect_ToDbase(CString &Db_Name_In, // "MemexDataDSN"
    CString &strUserID, // "sa"
    CString &strPassWord)// "" it is blank
    {


    CString cause_str;

    // Declare The Local Memory Variables
    SQLRETURN return_code = SQL_SUCCESS;

    // mmk 01.03.2002
    // The default user id for SQl Server is "sa"
    SQLCHAR DBUser[10]; // = "sa"; // *** hard coded user name


    // there is no pswd
    SQLCHAR DBPswd[10]; // = _T(""); // *** hard coded password


    strcpy((char *) DBUser, strUserID);
    strcpy((char *) DBPswd, strPassWord);

    SQLINTEGER Terminator;
    Terminator = SQL_NTS;

    // Connect to access database
    // Keep this handle open for as long as you are accessing data
    if (ConnHandle != NULL)
    {

    // data set name
    LPTSTR lpszDataSetName = new TCHAR[Db_Name_In.GetLength()+1];

    _tcscpy(lpszDataSetName, Db_Name_In);

    // connect/open the database
    return_code = SQLConnect(ConnHandle,
    (SQLCHAR*) lpszDataSetName,
    SQL_NTS,
    DBUser,
    SQL_NTS,
    DBPswd,
    SQL_NTS);

    TCHAR lpError[1024];

    // if the sql connection failed
    if ((return_code == SQL_ERROR) || (return_code == SQL_INVALID_HANDLE))
    {
    // delete this before quitting due to failure to connect
    delete [] lpszDataSetName;

    // Following provides diagnotic for function
    cause_str =
    CString("Most likely the connection failed due to a wrong server name.\n")
    + CString("The server picked must have the [VersascanMeSQL] database in it.\n\n");

    SQLErrors(SQL_HANDLE_DBC, ConnHandle, lpError, cause_str);
    return (return_code);
    }

    delete [] lpszDataSetName;
    }

    // Return last ODBC return code to calling program.
    return(return_code);
    }

  2. #2
    Join Date
    Feb 2007
    Posts
    1
    i'm having the same problem here .....
    please , if you found any way to solve this problem ????

    thanks ..

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •