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 mitTCHAR 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