Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi ADO connection string zur laufzeit verändern (https://www.delphipraxis.net/25442-ado-connection-string-zur-laufzeit-veraendern.html)

Butterflyz 6. Jul 2004 18:13


ADO connection string zur laufzeit verändern
 
ich hätte da mal eine frage: kann man die den ConnectionString einer ADO-Connection zur laufzeit verändern?
der string sieht ja in etwa so aus:

Code:
Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=C:\Dokumente und Einstellungen\username\Eigene Dateien\Fussball EM\data.mdb;Mode=ReadWrite;Extended Properties="";Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;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
und ich möchte den user die Datenbank zur laufzeit ändern und aussuchen lassen. die frage ist nur: der opendialog liefert mir ja nur den pfad - kann ich den dann einfach der ADO-Connection zuweisen?
und wo ich schon dabei bin: könnte man den pfad dann auch speichern? so dass die datenbank nicht immerwieder neu aufgerufen werden muss.

[edit=sakura] CODE Tags Mfg, sakura[/edit]

Kevin 6. Jul 2004 18:35

Re: ADO connection string zur laufzeit verändern
 
Dann ist dieses Tutorial das richtige für Dich: Flexible ADO-Connection

Butterflyz 7. Jul 2004 19:29

Re: ADO connection string zur laufzeit verändern
 
danke für den link, aber irgendwie klappt das alles nicht so recht... ich habe mir überlegt, dass es eigentlich auch reichen würde, wenn das programm vor jedem start guckt, ob sich die datenbank im rootverzeichnis befindet, aber jetzt kriege ich beim öffnen einen fehler von wegen zugriffsverletzung bei adresse bla bla bla....
hier die prozedur:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  if DataModule1.ADOConnection1.Connected = false then
  try
    DataModule1.ADOConnection1.ConnectionString := GetCurrentDir+'data.mdb';
    DataModule1.ADOConnection1.Open;
    showmessage(datamodule1.ADOConnection1.ConnectionString);
  except
    MessageDlg('Es befindet sich keine Datenbank im Programm-Verzeichnis!',
    mtError, [mbOK], 0);
    halt; //hier kommt der fehler
  end;

Kevin 7. Jul 2004 22:48

Re: ADO connection string zur laufzeit verändern
 
Zitat:

Zitat von Butterflyz
aber irgendwie klappt das alles nicht so recht...

Ich hab das Tutorial 1:1 übernommen und es funktioniert einwandfrei...

Allerdings macht mich Dein ConnectionString etwas stutzig. Denn nur mit der Übergabe eines Verzeichnisses und der *.mdb allein ist es noch lange nicht getan. Das muß ja in einen Fehler laufen. Du hast doch oben selber einen kompletten ConnectionString gepostet... :gruebel:

Butterflyz 7. Jul 2004 23:05

Re: ADO connection string zur laufzeit verändern
 
habe es auch 1:1 so übernommen wie es da steht, aber dann ging bei mir garnichts mehr. vielleicht sollte ichs nochmal versuchen... aber mich würde trotzdem intressieren wie meine variante denn jetzt funzt, habs ein bisschen umgeschrieben:

Delphi-Quellcode:
 DataModule1.ADOConnection1.ConnectionString
   := 'Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source='+GetCurrentDir
      +'data.mdb;Mode=ReadWrite;Extended Properties="";Jet OLEDB:System database="";'
      +'Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=5;'
      +'Jet OLEDB:Database Locking Mode=1;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:Dont Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica'
      +'Repair=False;Jet OLEDB:SFP=False';
immer noch das gleiche...

Stevie 8. Jul 2004 08:08

Re: ADO connection string zur laufzeit verändern
 
Setzt deinen ConnectionString mal im DesignModus über diese DialogBox und kopier ihn dir hinterher aus dem OI.

Butterflyz 8. Jul 2004 20:49

Re: ADO connection string zur laufzeit verändern
 
so, hab jetzt echt alles versucht... hab mich letztendlich dann doch für kevins variante entschieden - allerdings kommt jetzt beim starten der anwednung immer ein fehler:
Im Projekt fussball_em.exe ist eine Exception der Klasse EAccessViolation aufgetreten. Meldung: 'Zugriffsverletzung bei Adresse 004CDBAC in Modul 'fussball_em.exe'. Lesen von Adresse 00000058'. Prozess wurde angehalten. Mit Einzelen Anweisung oder Start fortsetzen.
hm... ich kann damit nicht so viel anfangen, aber hier kommen die fehler:

Delphi-Quellcode:
function TDataModule1.OpenDatabase: Boolean;
begin
  OpenDatabase := true; //hier der erste
  try
    ADOConnection1.Open;
  except
    OpenDatabase := false;
  end;
end;
Delphi-Quellcode:
function TDataModule1.EditFussballEM_DSN(var DSN: string): Boolean;
begin
  EditFussballEM_DSN := true;
  if ADOConnection1.Connected = true then //und hier der zweite
    if CloseDatabase = false then
    begin
      EditFussballEM_DSN := false;
      exit;
    end;
  if EditConnectionString(ADOConnection1) = true then
    DSN := ADOConnection1.ConnectionString
  else
    EditFussballEM_DSN := false;
end;
das prgramm läuft zwar normal weiter danach, aber wüsste trotzdem gerne was das soll? könnte es vielleicht was mit der datenbank zu tun haben und den zugriffsrechten oder so...?

Stevie 9. Jul 2004 11:08

Re: ADO connection string zur laufzeit verändern
 
Was machst du denn da? Einer Funktion einen Wert zuweisen??? Ähem, das wird folgendermaßen gemacht!
Delphi-Quellcode:
function TDataModule1.OpenDatabase: Boolean;
begin
  Result := true;
  try
    ADOConnection1.Open;
  except
    Result := false;
  end;
end;
Delphi-Quellcode:
function TDataModule1.EditFussballEM_DSN(var DSN: string): Boolean;
begin
  Result := true;
  if ADOConnection1.Connected then //und hier der zweite
    if not CloseDatabase then
    begin
      Result := false;
      Exit;
    end;
  if EditConnectionString(ADOConnection1) then
    DSN := ADOConnection1.ConnectionString
  else
    Result := false;
end;

Butterflyz 10. Jul 2004 12:08

Re: ADO connection string zur laufzeit verändern
 
Zitat:

Zitat von Stevie
Was machst du denn da? Einer Funktion einen Wert zuweisen??? Ähem, das wird folgendermaßen gemacht!

naja, wenn mich nicht alles täuscht, kann man für die wertzuweisung sowohl den function-namen nehmen als auch result. dieser code ist 1:1 übernommen von der seite, die kevin gepostet hat. habs mit result versucht, immer noch der gleiche fehler... :?
danke trotzdem!

Alter Mann 10. Jul 2004 22:26

Re: ADO connection string zur laufzeit verändern
 
Hi Butterflyz,

was willst Du eigendlich? Eine ODBC-Verbindung oder ADO-Verbindug?
ADO`mäßig ist es ganz Einfach, Du nimmst eine ADO-Connetction Componente; Füllst den Verbindungsassisenten aus, d.w. . Anstelle des Pfades im ConnectionString kannst Du
auch jeden anderen gültigen String zu Deiner DB angeben.
Getreu:

Delphi-Quellcode:

"Provider:=..., C:\MeineDatenBanken\Test\User.mdb,..."
usw.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:05 Uhr.
Seite 1 von 2  1 2      

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