AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Datenbankverbindung zur Laufzeit erstellen
Thema durchsuchen
Ansicht
Themen-Optionen

Datenbankverbindung zur Laufzeit erstellen

Ein Thema von MCOP2001DE · begonnen am 20. Jul 2005 · letzter Beitrag vom 1. Aug 2005
Antwort Antwort
MCOP2001DE

Registriert seit: 19. Jun 2004
89 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

Datenbankverbindung zur Laufzeit erstellen

  Alt 20. Jul 2005, 01:26
Datenbank: Access • Version: 2003 • Zugriff über: ADO/SQL
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:
{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}
Hat jemand ne Idee wo mein Fehler liegt?

MFG

MCOP2001DE
  Mit Zitat antworten Zitat
Benutzerbild von x000x
x000x

Registriert seit: 21. Jan 2004
Ort: Bei Hamburg
308 Beiträge
 
Delphi XE2 Professional
 
#2

Re: Datenbankverbindung zur Laufzeit erstellen

  Alt 20. Jul 2005, 02:02
Moin moin,
also das kann auch nicht funkltionieren...
ini.readstring(..); gibt dir einen String zurück, aber wo weist du den zu?
Die Variable "dir" ist bei dir gar nicht gefüllt.
Delphi-Quellcode:
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')]);
So würde es eher funktionieren, vorrausgesetzt im aktuellen Pfad befindet sich die db1.mdb
Peter
-= Gruss Peter =-
-= alias x000x =-
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#3

Re: Datenbankverbindung zur Laufzeit erstellen

  Alt 20. Jul 2005, 07:08
Ich mach es einfach mal so, dann spare ich mir etwas Getippe

http://www.delphipraxis.net/internal...nnectionstring

Schöne Grüße,
Jens

  Mit Zitat antworten Zitat
Benutzerbild von TeronG
TeronG

Registriert seit: 19. Jul 2004
Ort: München
960 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Datenbankverbindung zur Laufzeit erstellen

  Alt 20. Jul 2005, 08:58
evtl. nur n Dreher drinnen und sollte so aussehen ???
Delphi-Quellcode:
try
ini.ReadString('DB','Pfad',Dir); // <-- Vorher
dir := ini.ReadString('DB','Pfad',''); // <-- Nachher
龍 Der Unterschied zwischen Theorie und Praxis ist in der Praxis größer als in der Theorie.
  Mit Zitat antworten Zitat
MCOP2001DE

Registriert seit: 19. Jun 2004
89 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#5

Re: Datenbankverbindung zur Laufzeit erstellen

  Alt 21. Jul 2005, 23:27
Hallo x000x

Zu deiner Frage

Zitat:
gibt dir einen String zurück, aber wo weist du den zu?
Die Variable "dir" ist bei dir gar nicht gefüllt.
Delphi-Quellcode:
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')]);
So würde es eher funktionieren, vorrausgesetzt im aktuellen Pfad befindet sich die db1.mdb
Der komplette String wird in die Ini Datei geschrieben und zwar so

Delphi-Quellcode:
{ä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}
Ich brauche also eigentlich nur den String aus der INI Datei lesen und in den ConnectinString einfügen.
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
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#6

Re: Datenbankverbindung zur Laufzeit erstellen

  Alt 22. Jul 2005, 01:23
Habs

Hier ist dein Fehler

ini.ReadString('DB','Pfad',Dir); So muss es aussehen
Dir:=ini.ReadString('DB','Pfad',''); "Dir" war bei Dir immer ''

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
Angehängte Dateien
Dateityp: zip jetdb_w_hlen_145.zip (572,9 KB, 15x aufgerufen)
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#7

Re: Datenbankverbindung zur Laufzeit erstellen

  Alt 22. Jul 2005, 01:29
Das hier kannst du dir übrigens Sparen.

Delphi-Quellcode:
     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;
Wenn die AdoConn geschlossen wird, werden die angebundenen DataSets automatisch geschlossen.
  Mit Zitat antworten Zitat
MCOP2001DE

Registriert seit: 19. Jun 2004
89 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#8

Re: Datenbankverbindung zur Laufzeit erstellen

  Alt 1. Aug 2005, 22:56
Hallo Jensw_2000

Danke für den Tip hat geklappt

MCOP2001DE
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz