DB Auswahl am Anfang entfernen! <Bitte wieder mal um Hilfe>
-
Hi an alle ich muss mal wieder in Anspruch nehmen. Ich weiß so eine Frage gab es hier schon mal aber hab sie nicht gefunden weder über Suche noch so durch blättern. Hier das Problem:
Wenn ich meine SDI Anwendung starte sagt der immer das ich die Datenbank auswählen soll. Ich hab da noch eine ODBC anbidnung drin. Jetzt meine Frage wo kann ich den Pfad der Datenbank im QuellCode selber gleich eintragen das diese Frage nicht mehr kommt. Hab selber ma bissl gefrimmelt aber das hat alles nichts gebracht. Ich weiß ihr bekommt das hin danke schon mal im vorraus!
-
In der (den?) von CRecordset abgeleiteten Klasse gibt es die Funktion GetDefaultConnect.
Wenn du da einen vollständigen Connectstring zurückgibst, sollte die Frage nicht mehr kommen.
So sieht das bei mir aus:CString CFehlerSet::GetDefaultConnect() { return _T("ODBC;DSN=myDB;UID=sa;PWD=passwort"); }
-
Hmm bei mir bringt der immer Fehler. Wo ich das eintragen muss hab ich gefunden hatte vorhin schon mal damit experimentiert. Hier die Fehlermeldung:
Der Datenquellname wurde nicht gefunden, und es wurde kein Standardtreiber angegeben.
Vieleicht kannst du mir mal sagen wo der Name und wo der Pfad reinkommt.
Ich habs so gemacht:
return _T("ODBC;DSN=rechnungstool;UID=rechnungstool.mdb");
Wird wohl sicher falsch sein hab aber auch mal bissl rumgefrimmelt.
Aber danke schon mal für deine Hilfe.
Hoffe wir finden das noch raus!
-
Öhm kann es sein dass genau die DSN dein Problem ist?
wenn ja mach mal Systemsteuerung / Verwaltung / ODBC-DatenQuellen und richte dir da ne ODBC Datenquelle ein die auf deine DB verweist. wenn es dann klappt, dann können wir das ganze dynamisch machen
-
UID ist die User Identifikation!
das ist nur wenn du es PWD geschützt hast! Lass get defaultconnection wie es war und mach mal was ich oben geschrieben hab
-
Cool danke jetzt gehts. Nur hab das Problem wenn ich das dann ma bei einem anderen Rechner machen will muss ich den Treiber dann ja wieder hinzufügen. Ich weiß net ob man sowas über ein Istallationsprogramm machen kann ich arbeite hier mit InstallShield 11. Aber muss ich halt mal schauen. Danke an euch beide die mir geholfen haben ist ne dicke sache.
-
Such mal nach SQLConfigDataSource.
Oder warte, bis Polofreak sich wieder meldet, der hat da neulich nach gefragt.
-
und hier kommt es schon!
mach in deinen Header vom RecordSetvoid CreateDSN();
indie CPP machste
void CDeine-KlasseSet::CreateDSN()//EDIT hier natürlich die eigene Klasse!! { SQLConfigDataSource(NULL, // Handle des Fensters, welsches die Registrierung durchführt ODBC_ADD_SYS_DSN, // Ein Datensatz soll hinzugefügt werden "Microsoft Access Driver (*.mdb)", "DSN=rechnungstool\0" //so heißt nach dem erzeugen deine DSN "Description=rechnungstool\0" //das steht danach in der DSN Beschreibung "FileType=Access\0" "DBQ=C:\\DEIN-PFAD\\rechnungstool.mdb\0"//<-nur hier Pfad eintragen "MaxScanRows=20\0"); }
So jetzt musste nur noch an ner geeigneten Stelle die DSN erzeugen in dem du die FKT aufrufst.
was du beachten musst, wenn eine DSN mit dem Namen schon existiert wird diese nicht überschrieben!!!!
Hört sich logisch an und man denkt sich ist ja auch gut so. Wenn sich aber der Pfad zu DB ändert oder so dann bleibt die alte DSN mit altem Pfad bestehen! Du solltest also wenn du das vermeiden willst in der Registry nachschaue ob eine DSN mit dem Namen besteh und wenn ja diese löschen und neu erzeugen.
-
Klingt ganz gut hab das in die Header gekickt nur in der CPP gibts Fehler:
CDokumentenVerwaltungSet' : Keine Klasse oder Namespace
SQLConfigDataSource' : nichtdeklarierter Bezeichner
ODBC_ADD_SYS_DSN' : nichtdeklarierter BezeichnerHier das was ich eingebunden habe:
void CDokumentenVerwaltungSet::CreateDSN() { SQLConfigDataSource(IDD_DB_ACCESTOOL_FORM, ODBC_ADD_SYS_DSN, "Microsoft Access Driver (*.mdb)", "DSN=rechnungstool\0" "Description=Test\0" "FileType=Access\0" "DBQ=C:\\Dokumente und Einstellungen\\Praktikant\\Eigene Dateien\\rechnungstool.mdb\0" "MaxScanRows=20\0"); }
-
Schreib das in den Header mal wieder hin, das brauchst du gleich, wenn der Cpp-Fehler weg ist.
Und dann passe bitte den Klassennamen an. Deine Klasse heißt anders als die von Polofreak.
-
tja so sind se!
Wenn se sich nicht mehr melden hat es entweder geklappt oder sie haben aufgegeben
-
Oder man hat mehrere Baustellen und widmet sich aus Frust erstmal einer anderen.
Ich kann momentan auch weder dlls noch List&Label sehen - deswegen arbeite ich seit 2 Tagen Tooltips und Logging nach.
-
OK ich dachte ich bin da ein Ausnahmefall, drum hab ich das nicht in Betracht gezogen dass er das auch so macht
Aber scheinbar ist das ja "normal" *gg* (ja da war doch noch was mit DB bei dir gell?)
-
Ja, DB war auch noch was...
Das hab ich ganz nach hinten geschoben. Win98-kompatibel *grummel*...
-
So da bin ich wieder. Ich hatte gestern Außendienst und hab 13 Stunden gearbeitet da hab ich mir dann 21 Uhr gedacht ach heute machst du mal früher schluss. Also ich hatte alle Hände voll zutun. Ich werd das noch ma Testen. Also bis denne!!!
-
So ich hab den Klassennamen angepasst war mein Fehler bissl dumm. Aber nun kommen die beiden Fehler:
error C2065: 'SQLConfigDataSource' : nichtdeklarierter Bezeichner
error C2065: 'ODBC_ADD_SYS_DSN' : nichtdeklarierter BezeichnerMuss ich noch irgendeine Klasse einbinden oder sowas? Hoffe ihr helft mir. Hier noch ma ein jetziger Quelltext:
void CDB_AccesToolSet::CreateDSN() { SQLConfigDataSource(IDD_DB_ACCESTOOL_FORM ODBC_ADD_SYS_DSN, "Microsoft Access Driver (*.mdb)", "DSN=rechnungstool\0" "Description=Test\0" "FileType=Access\0" "DBQ=C:\\Dokumente und Einstellungen\\Praktikant\\Eigene Dateien\\rechnungstool.mdb\0 "MaxScanRows=20\0"); }