![]() |
Datenbank: Access • Version: 2003 • Zugriff über: ADO/SQL
Datenbankverbindung zur Laufzeit erstellen
Hallo
Ich Habe folgendes Problem ich möchte einen Datenbankverbindung zur Laufzeit ändern können. Das habe ich über den OpenDialog auch schon verwirklicht diese Daten werden in einer INI-Datei gespeichert. Diese klappt auch aber das aufrufen der Verbindungsdaten beim Programmstart klappt nicht da ich immer die Fehlermeldeung "Fehler bei der Authentifizierung" bekomme. Wenn ich den ConnetionString mit einer Datenbankzuweisung belege bekomme ich die Meldung nicht! Wenn ich aber die Datenbank verschiebe bekomme ich trotz richtigen Verbindungsstring in der Ini-Datei die meldung das die Datenbank nicht gefunden wurde. der Aufruf für den Start des Programms sieht wie volkt aus:
Delphi-Quellcode:
Hat jemand ne Idee wo mein Fehler liegt?
{Starten des Datenbankverbindung}
procedure TFRM_Main.FormShow(Sender: TObject); var ini: TIniFile; Dir : String; begin ini:=TIniFile.Create('Konfiguration.ini'); try ini.ReadString('DB','Pfad',Dir); TAB_Daten.Connection.ConnectionString := Dir; finally ini.Free; end; {öffnen der Datenbankverbindung und der Tabellen} Begin TAB_DATEN.Connection.Connected := True; TAB_DATEN.TAB_Anlagen.Active := True; TAB_Daten.TAB_Anlagentyp.Active := True; TAB_Daten.TAB_A_Arbeiten.Active := True; TAB_Daten.TAB_A_Stoerungen.Active := True; TAB_Daten.TAB_Bahnhof.Active := True; TAB_Daten.TAB_Erbauer.Active := True; TAB_Daten.TAB_Halle.Active := True; TAB_Daten.TAB_Hersteller.Active := True; TAB_Daten.TAB_Ersatzteil.Active := True; TAB_Daten.TAB_EAnlagentyp.Active := True; TAB_Daten.TAB_Zuordnung.Active := True; TAB_Daten.TAB_Materialanlagen.Active := True; TAB_Daten.TAB_Materialanlagentyp.Active := True; TAB_Daten.TAB_MA_Arbeiten.Active := True; TAB_Daten.TAB_MA_Stoerungen.Active := True; TAB_Daten.TAB_Werk.Active := True; end; end; {Ende} MFG MCOP2001DE |
Re: Datenbankverbindung zur Laufzeit erstellen
Moin moin,
also das kann auch nicht funkltionieren...
Delphi-Quellcode:
gibt dir einen String zurück, aber wo weist du den zu?
ini.readstring(..);
Die Variable "dir" ist bei dir gar nicht gefüllt.
Delphi-Quellcode:
So würde es eher funktionieren, vorrausgesetzt im aktuellen Pfad befindet sich die db1.mdb
dir := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;Persist Security Info=False';
TAB_DATEN.Connection.ConnectionString := Format(dir,[ini.readstring('DB','Pfad','db1.mdb')]); |
Re: Datenbankverbindung zur Laufzeit erstellen
Ich mach es einfach mal so, dann spare ich mir etwas Getippe :mrgreen:
![]() Schöne Grüße, Jens :hi: |
Re: Datenbankverbindung zur Laufzeit erstellen
evtl. nur n Dreher drinnen und sollte so aussehen ??? :gruebel:
Delphi-Quellcode:
try
ini.ReadString('DB','Pfad',Dir); // <-- Vorher dir := ini.ReadString('DB','Pfad',''); // <-- Nachher |
Re: Datenbankverbindung zur Laufzeit erstellen
Hallo x000x
Zu deiner Frage Zitat:
Delphi-Quellcode:
Ich brauche also eigentlich nur den String aus der INI Datei lesen und in den ConnectinString einfügen.
{ändern der Datenbankverbindung}
procedure TFRM_Main.Verbindungndern1Click(Sender: TObject); var ini : TIniFile; Dir : String; begin {schliessen aller Datenverbindungen} TAB_DATEN.Connection.Connected := False; TAB_DATEN.TAB_Anlagen.Active := False; TAB_Daten.TAB_Anlagentyp.Active := False; TAB_Daten.TAB_A_Arbeiten.Active := False; TAB_Daten.TAB_A_Stoerungen.Active := False; TAB_Daten.TAB_Bahnhof.Active := False; TAB_Daten.TAB_Erbauer.Active := False; TAB_Daten.TAB_Halle.Active := False; TAB_Daten.TAB_Hersteller.Active := False; TAB_Daten.TAB_Ersatzteil.Active := False; TAB_Daten.TAB_EAnlagentyp.Active := False; TAB_Daten.TAB_Zuordnung.Active := False; TAB_Daten.TAB_Materialanlagen.Active := False; TAB_Daten.TAB_Materialanlagentyp.Active := False; TAB_Daten.TAB_MA_Arbeiten.Active := False; TAB_Daten.TAB_MA_Stoerungen.Active := False; TAB_Daten.TAB_Werk.Active := False; {auswählen der neuen Datenquelle und speichern dieser} if openDialog.Execute then Dir := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+openDialog.FileName +';Persist Security Info=False' ; begin ini:=TIniFile.create(ExtractFilePath(ParamStr(0))+'Konfiguration.ini'); ini.WriteString('DB', 'Pfad', Dir); ini.Free; end; {auslesen der neuen Datenverbindung und eintragen der Werte in den ConnectionString} Begin ini:=TIniFile.Create('Konfiguration.ini'); try ini.ReadString('DB','Pfad',Dir); TAB_Daten.Connection.ConnectionString := Dir; finally ini.Free; end; {öffnen der Datenbankverbindung und der Tabellen} TAB_DATEN.Connection.Connected := True; TAB_DATEN.TAB_Anlagen.Active := True; TAB_Daten.TAB_Anlagentyp.Active := True; TAB_Daten.TAB_A_Arbeiten.Active := True; TAB_Daten.TAB_A_Stoerungen.Active := True; TAB_Daten.TAB_Bahnhof.Active := True; TAB_Daten.TAB_Erbauer.Active := True; TAB_Daten.TAB_Halle.Active := True; TAB_Daten.TAB_Hersteller.Active := True; TAB_Daten.TAB_Ersatzteil.Active := True; TAB_Daten.TAB_EAnlagentyp.Active := True; TAB_Daten.TAB_Zuordnung.Active := True; TAB_Daten.TAB_Materialanlagen.Active := True; TAB_Daten.TAB_Materialanlagentyp.Active := True; TAB_Daten.TAB_MA_Arbeiten.Active := True; TAB_Daten.TAB_MA_Stoerungen.Active := True; TAB_Daten.TAB_Werk.Active := True; end; end; {Ende} Und das klappt irgentwie nicht. TeronG ich habe deinen Code mal versucht mit dem selben Ergebnis "Fehler bei der Authentifizierung" Hat noch jemand ne Idee?? MCop2001DE |
Re: Datenbankverbindung zur Laufzeit erstellen
Liste der Anhänge anzeigen (Anzahl: 1)
Habs :mrgreen:
Hier ist dein Fehler
Delphi-Quellcode:
So muss es aussehen
ini.ReadString('DB','Pfad',Dir);
Delphi-Quellcode:
"Dir" war bei Dir :mrgreen: immer ''
Dir:=ini.ReadString('DB','Pfad','');
Wenn die in "dir" angegebene DB nicht existiert kommt der beschriebene Fehler. Jetzt wäre es natürlich elegant, wenn du nur Opendialog.filename in die ini schreibst anstatt des ConnectionString-Geraffels. Bei Jet Datenbanken reicht das auch völlig aus ... So hättest du eine Möglichkeit die Konfig-Einstellungen sauber zu prüfen
Delphi-Quellcode:
if Fileexists(dir) then
begin AdoConn.ConnectionString := Dir; AdoConn.Connected := True end else begin Showmessage('Konfigurationen.ini oder DB wurde nicht gefunden. Wählen Sie eine DB'); //hier Opendialog und neue DB wählen ... end; Habe dir mein "Spielprojekt" mal angehängt Schöne Grüße, Jens :hi: |
Re: Datenbankverbindung zur Laufzeit erstellen
Das hier kannst du dir übrigens Sparen.
Delphi-Quellcode:
Wenn die AdoConn geschlossen wird, werden die angebundenen DataSets automatisch geschlossen.
TAB_DATEN.TAB_Anlagen.Active := False;
TAB_Daten.TAB_Anlagentyp.Active := False; TAB_Daten.TAB_A_Arbeiten.Active := False; TAB_Daten.TAB_A_Stoerungen.Active := False; TAB_Daten.TAB_Bahnhof.Active := False; TAB_Daten.TAB_Erbauer.Active := False; TAB_Daten.TAB_Halle.Active := False; TAB_Daten.TAB_Hersteller.Active := False; TAB_Daten.TAB_Ersatzteil.Active := False; TAB_Daten.TAB_EAnlagentyp.Active := False; TAB_Daten.TAB_Zuordnung.Active := False; TAB_Daten.TAB_Materialanlagen.Active := False; TAB_Daten.TAB_Materialanlagentyp.Active := False; TAB_Daten.TAB_MA_Arbeiten.Active := False; TAB_Daten.TAB_MA_Stoerungen.Active := False; TAB_Daten.TAB_Werk.Active := False; |
Re: Datenbankverbindung zur Laufzeit erstellen
Hallo Jensw_2000
Danke für den Tip hat geklappt :lol: MCOP2001DE |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz