ODBC - Registrierung
-
Hallo,
Irgendwie bekomm ich das mit dem registrieren von ODBC-Datenbanken nicht so richtig hin.
Hab das aus den FAQ:
SQLConfigDataSource(NULL, // Handle des Fensters, welsches die Registrierung durchführt ODBC_ADD_DSN, // Ein Datensatz soll hinzugefügt werden "Microsoft Access Driver (*.mdb) "DSN=Name\0" "Description=Meine Datenquelle\0" "FileType=Access\0" "DBQ=C:\\Verzeichniss\\Name.mdb\0" "MaxScanRows=20\0" };
-> http://www.c-plusplus.net/forum/viewtopic.php?t=39099
Aber leider komm ich mit dem 4. Parameter nicht ganz klar.
Kann mir da bitte jemand helfen.Registry: www.8ung.at/meisterm/odbc.jpg
Systemsteuerung: www.8ung.at/meisterm/odbc2.jpgDanke
-
Der Regestry screenshot zeigt doch alles was du braucht
es ist ne .mdb also:
"Microsoft Access Driver (.mdb)\0"
Die DSN (Name der Datenquelle) ist:
"DSN=Teak\0"
Eine kurze Beschreibung dazu:
"Description=Teak\0"
Filetype steht auh auf dem screenshot:
"FileType=Access\0"
ebenso die Quelle:
"DBQ=C:\\Data.mdb\0"
-
Hm, danke funktioniert.
Stellt sich mir nur noch die Frage warum ich da das meiste doppelt eingeben muss.
-
Nächste Frage
Wie kann ich in die Funktion jetzt meine eigene Pfadangabe reinbringen.
Habs mal so versucht, aber das geht nicht:sDriver.Format("\"Microsoft Access Driver (*.mdb)\\0\"\"DSN=test\\0\"\"Description=test\\0\"\"FileType=Access\\0\"\"DBQ=C:\\\\test.mdb\\0\"\"MaxScanRows=20\\0\""); sAttributes.Format("\"Microsoft Access Driver (*.mdb)\\0\"\"DSN=test\\0\"\"Description=test\\0\"\"FileType=Access\\0\"\"DBQ=C:\\\\test.mdb\\0\""); MessageBox(sDriver); MessageBox(sAttributes); SQLConfigDataSource(NULL,ODBC_ADD_DSN,sDriver,sAttributes);
Die beiden MessageBoxes haben folgenden Inhalt:
www.8ung.at/meisterm/msg1.JPG
www.8ung.at/meisterm/msg2.JPGSinn der Sache soll sein, dass ich die Pfadangabe später durch einen Pfad ersetzen kann, der in einer CString-Variable steht.
Gibts dafür einen einfacheren Weg, oder kann mir hier jemand helfen ?Danke
-
was sollen denn die ganzen \\ im string ?
Das \0 termieniert einen String. Das \\ im String der Pathangabe ist drinnen, damit es nicht als escape sequence behandlet und dann auch ein wirklich ein \ in der variable landet. Du brauchst da nicht gleich 4 stück davon, 2 tun es auch..CString CreateParams(CString driver,CString DSN,CString description, CString FileType, CString DBQ) { CString ret; ret.Format("%s\0DSN=%s\0Description=%s\0FileType=%s\0DBQ=%s\0",driver,DSNName,description,FileType,DBQ) return ret; }
-
Hm, hab da ne ganze Weile rumprobiert.
Zuerst warens auch nur 2, dann hab ich mal die ganzen \0 rausgeschmissen.Schlussendlich hab ich nur probiert, od ich in die MessageBoxes das gleiche bekomme wie ansonsten im Funktionsaufruf drinnen steht.
Da waren's dann halt einige '\'Danke für die schnelle Antwort, ich werds mal probieren.
-
Ich glaub ich bin echt zu blöd dazu.
Jetzt hab ich das:
CString sDriver,sDSN,sDescription,sFileType,sDBQ,sMaxRows; CString sDriv,sAttr; sDriver = "Microsoft Access Driver (*.mdb)"; sDSN = "Test"; sDescription = "Test"; sFileType = "Access"; sDBQ = "C:\\Data.mdb"; sMaxRows = "20"; sDriv.Format("%s\0DSN=%s\0Description=%s\0FileType=%s\0DBQ=%s\0MaxScanRows=%s",sDriver,sDSN,sDescription,sFileType,sDBQ,sMaxRows); sAttr.Format("%s\0DSN=%s\0Description=%s\0FileType=%s\0DBQ=%s",sDriver,sDSN,sDescription,sFileType,sDBQ); SQLConfigDataSource(NULL,ODBC_ADD_DSN,sDriv,sAttr);
geht aber nicht, wobei Folgendes einwandfrei funktioniert:
SQLConfigDataSource(NULL, ODBC_ADD_DSN, "Microsoft Access Driver (*.mdb)\0" "DSN=Test\0" "Description=Test\0" "FileType=Access\0" "DBQ=C:\\Data.mdb\0" "MaxScanRows=20\0", "Microsoft Access Driver (*.mdb)\0" "DSN=Test\0" "Description=Test\0" "FileType=Access\0" "DBQ=C:\\Data.mdb\0" );
-
sory war ein fehler von mir in FAQ beitrag.. wede es ausbessern.. habe ein , veschlampt
Als erste paramter reicht ein "Microsoft Access Driver (*.mdb)", das ist nur 1 String und gibt den driver an. Der 2. parameter sind mehrere String hintereinander, wleche die paramter beinhalten. Damit die funktion weiss wenn parameter zu ende sind, hat der letzte String die länge 0.
Bsp:
String1\0String2\0String3\0String4\0\0sAttr.Format("s\0DSN=%s\0Description=%s\0FileType=%s\0DBQ=%s",sDriver,sDSN,sDescription,sFileType,sDBQ);
Format stellt die String zusammen und shließt ihn mit \0 ab. Soweit so gut, aber wie weis die Funktion jetzt das fertig ist? kann sie nicht
sAttr.Format("s\0DSN=%s\0Description=%s\0FileType=%s\0DBQ=%s\0",sDriver,sDSN,sDescription,sFileType,sDBQ);
-
Immer noch das alte Problem:
So gehts:
SQLConfigDataSource(NULL,ODBC_ADD_DSN,"Microsoft Access Driver (*.mdb)\0","DSN=Test\0""Description=Test\0""FileType=Access\0""DBQ=C:\\Data.mdb\0");
Aber sobald ich aus den ganzen Daten einen String baue funktioniert gar nix mehr.
So gehts auch, aber mit dem 2. String hab ich immer noch Probleme:
CString s; s.Format("\"Microsoft Access Driver (*.mdb)\0\""); SQLConfigDataSource(NULL,ODBC_ADD_DSN,s,"DSN=Test\0""Description=Test\0""FileType=Access\0""DBQ=C:\\Data.mdb\0");
-
mist.. noch ein fehler.. mit CString kann das ja nicht klappen...
void CreateParams(char* result,const char* DSN,const char* description, const char* FileType, const char* DBQ) { sprintf(result,"%DSN=%s\0Description=%s\0FileType=%s\0DBQ=%s\0",DSN,description,FileType,DBQ); } void TestFunc() { char params[256]; CreateParams(params,"Test","Test","Access","C:\\Data.mdb"); SQLConfigDataSource(NULL,ODBC_ADD_DSN,"Microsoft Access Driver (*.mdb)",params); }
das sollte jetzt endlich hinhauen..
-
So gehts auch
sAttr.Format("DSN=%s|Description=%s|FileType=%s|DBQ=%s|",sDSN,sDescription,sFileType,sDBQ); char *szAttr = new char[sAttr.GetLength() + 1]; strcpy(szAttr, sAttr); if (NULL != strtok(szAttr, "|")) { while (NULL != strtok(NULL, "|")) {}; } SQLConfigDataSource(NULL, ODBC_ADD_DSN, sDriver, szAttr); delete szAttr;
-
@Unix-Tom:
Hab gesehen, dass du den Beitrag in den FAQ schon editiert hast.
Ich denke es wäre gut, wenn du die letzten 2 Postings (also natürlich nicht das hier) aus diesem Beitrag noch zu dem FAQ-Beitrag hinzufügen könntest.
Danke nochmals