String



  • hallo,

    habe eine datenbank-anwendung geschrieben.
    lege das programm u. die datenbank bei der installation unter
    c:\Users\NamedesBenutzers..... ab.
    soweit alles ok.

    nur wenn ich das programm öffne, wird ja in "set.h" --> OpenDataSource
    der Pfad zur datenbank abgefragt.

    hr = _db.OpenFromInitializationString(L"Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=C:\\Users\\Name\\Fixxx\\Data\\Kunden-Datenbank.mdb;Mode=ReadWrite;Extended Properties=\"\";Jet OLEDB:System database=\"\";Jet OLEDB:Registry Path=\"\";Jet OLEDB:Database Password=\"\";Jet OLEDB:Engine Type=4;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password=\"\";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False");
    

    ich hole mir beim programmstart den namen des anwenders. diesen muss ich aber irgenwie in den string oben reinbekommen (Name als variable).

    Bei normalen cstrings funktioniert das:

    CString Name="xxx";
    CString test="C:\\Users\\"+ Name +"\\Datenbank.mdb"
    

    aber im oberen code bring ich das irgendwie nicht hin. gibt es da irgendeine möglichkeit?



  • Du musst eigentlich nur den Pfad der Exe ermitteln und laut deinen Angaben liegt dort auch die Datenbank.
    Den Pfad der Exe ermittelt man mit

    TCHAR	szFullPath[_MAX_PATH];
    TCHAR	szDrive[_MAX_DRIVE];
    TCHAR	szDir[_MAX_DIR];
    TCHAR	szFileName[_MAX_FNAME];
    
    GetModuleFileName( NULL, szFullPath, sizeof(szFullPath) );
    
    _tsplitpath( szFullPath, szDrive, szDir, szFileName, NULL );
    
    CString sDatenbank;
    sDatenbank.Format( _T("%s%s%s"), szDrive, szDir, "db.mdb" );
    


  • mein problem ist, daß ich "sDatenbank" nicht in den string:

    hr = _db.OpenFromInitializationString(L"Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=C:\\Users\\Name\\Fixxx\\Data\\Kunden-Datenbank.mdb;Mode=ReadWrite;Extended Properties=\"\";Jet OLEDB:System database=\"\";Jet OLEDB:Registry Path=\"\";Jet OLEDB:Database Password=\"\";Jet OLEDB:Engine Type=4;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Pass
    

    einfügen kann! Bei Source:.................



  • neu_er schrieb:

    hr = _db.OpenFromInitializationString(L"Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=C:\\Users\\Name\\Fixxx\\Data\\Kunden-Datenbank.mdb;Mode=ReadWrite;Extended Properties=\"\";Jet OLEDB:System database=\"\";Jet OLEDB:Registry Path=\"\";Jet OLEDB:Database Password=\"\";Jet OLEDB:Engine Type=4;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password=\"\";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False");
    

    Jaaaaa, wir haben wiiiiide-Screens 😃

    Zusammenbasteln:

    #include <iostream>
    #include <string>
    
    typedef std::basic_string< wchar_t > wstring;
    
    #include <atldbcli.h>
    
    int main()
    {
    	CDataSource db;
    	wstring name = L"foo";
    	HRESULT hr = db.OpenFromInitializationString(
    		wstring( wstring(
    		L"Provider=Microsoft.Jet.OLEDB.4.0;\
    		 User ID=Admin;\
    		 Data Source=C:\\Users\\" ) + name + L"\\Fixxx\\Data\\Kunden-Datenbank.mdb;\
    		 Mode=ReadWrite;\
    		 Extended Properties=\"\";\
    		 Jet OLEDB:System database=\"\";\
    		 Jet OLEDB:Registry Path=\"\";\
    		 Jet OLEDB:Database Password=\"\";\
    		 Jet OLEDB:Engine Type=4;\
    		 Jet OLEDB:Database Locking Mode=0;\
    		 Jet OLEDB:Global Partial Bulk Ops=2;\
    		 Jet OLEDB:Global Bulk Transactions=1;\
    		 Jet OLEDB:New Database Password=\"\";\
    		 Jet OLEDB:Create System Database=False;\
    		 Jet OLEDB:Encrypt Database=False;\
    		 Jet OLEDB:Don't Copy Locale on Compact=False;\
    		 Jet OLEDB:Compact Without Replica Repair=False;\
    		 Jet OLEDB:SFP=False" ).c_str()
    	);
    }
    


  • na dann mach doch:

    CString sConn;
    sConn.Format( L"...;Data Source:%s;...", sDatenbank );
    
    hr = _db.OpenFromInitializationString( sConn );
    

    anstelle von %s setzt ::Format den Inhalt aus sDatenbank


Anmelden zum Antworten