Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Datenbank (https://www.delphipraxis.net/104289-datenbank.html)

Seppel 30. Nov 2007 21:12

Datenbank: Access • Zugriff über: ADO

Datenbank
 
Hi,
ne Frage.
Wenn ich mein Programm und meine DB(Access) an einen Kumpel schicke dann hat er das Problem mit dem Pfad, wie kann ich das machen, dass z.B. der Pfad immer da ist wo die Anwendung leigt also im selben Ordner.

mkinzler 30. Nov 2007 21:16

Re: Datenbank
 
Dann setze ihn zu Laufzeit (Pfad der Exe kannst du mit
Delphi-Quellcode:
ExtractFilePath( Application.Exename)
bzw.
Delphi-Quellcode:
ExtractFilePath( ParamStr(0))
ermitteln)

Seppel 30. Nov 2007 21:22

Re: Datenbank
 
Zitat:

Zitat von mkinzler
Dann setze ihn zu Laufzeit (Pfad der Exe kannst du mit
Delphi-Quellcode:
ExtractFilePath( Application.Exename)
bzw.
Delphi-Quellcode:
ExtractFilePath( ParamStr(0))
ermitteln)

An welcher Stelle dann??
Ich mein, ich lade am anfang ja net gleich alles, erst wenn ich auf einen Button klicken werden die Daten aus der Db in das Listview geladen.

Wo soll ich denn jetzt den Paf angeben?
Delphi-Quellcode:
var ListItem: TListItem;

begin
Listview1.Items.Clear;
Query1.SQL.Text := 'Select * from apezdb order by STUID';
Query1.open;

 while not Query1.Eof do
  begin
    ListItem := Listview1.Items.Add;
    ListItem.Caption:=Query1.FieldByName('id').AsString;
    ListItem.SubItems.Add(Query1.FieldByName('STUID').AsString);
    ListItem.SubItems.Add(Query1.FieldByName('Name').AsString);
    ListItem.SubItems.Add(Query1.FieldByName('Rasse').AsString);
    ListItem.SubItems.Add(Query1.FieldByName('Planet1').AsString);
    ListItem.SubItems.Add(Query1.FieldByName('Planet2').AsString);
    ListItem.SubItems.Add(Query1.FieldByName('Planet3').AsString);
    ListItem.SubItems.Add(Query1.FieldByName('Mond1').AsString);
    ListItem.SubItems.Add(Query1.FieldByName('Mond2').AsString);
    ListItem.SubItems.Add(Query1.FieldByName('Mond3').AsString);
   Query1.Next;
  end;



end;

mkinzler 30. Nov 2007 21:24

Re: Datenbank
 
Am Besten im onCreate des Datenmoduls.

Seppel 30. Nov 2007 21:25

Re: Datenbank
 
Datenmodul verwende ich net... meine Anwendung is übersichtlich genug.
Wo soll ich den bei dem COde da oben oder hier noch ma, den Pfad zum laden angeben.
Delphi-Quellcode:
var ListItem: TListItem;

begin
Listview1.Items.Clear;
Query1.SQL.Text := 'Select * from apezdb order by STUID';
Query1.open;

 while not Query1.Eof do
  begin
    ListItem := Listview1.Items.Add;
    ListItem.Caption:=Query1.FieldByName('id').AsString;
    ListItem.SubItems.Add(Query1.FieldByName('STUID').AsString);
    ListItem.SubItems.Add(Query1.FieldByName('Name').AsString);
    ListItem.SubItems.Add(Query1.FieldByName('Rasse').AsString);
    ListItem.SubItems.Add(Query1.FieldByName('Planet1').AsString);
    ListItem.SubItems.Add(Query1.FieldByName('Planet2').AsString);
    ListItem.SubItems.Add(Query1.FieldByName('Planet3').AsString);
    ListItem.SubItems.Add(Query1.FieldByName('Mond1').AsString);
    ListItem.SubItems.Add(Query1.FieldByName('Mond2').AsString);
    ListItem.SubItems.Add(Query1.FieldByName('Mond3').AsString);
   Query1.Next;
  end;



end;

mkinzler 30. Nov 2007 21:28

Re: Datenbank
 
Delphi-Quellcode:
Query1.DataBaseName := ExtractFilePath( ParamStr(0));
Und dann die Query vor dem Kompilieren schließen.

Privateer3000 30. Nov 2007 21:28

Re: Datenbank
 
Hallo,

um den Programmpfad immer "in der Hand" zu haben
lege ihn mittels
Delphi-Quellcode:
var
programmpfad: String;
...
programmpfad:=ExtractFilePath( Application.Exename);
...
in einen string.
Wann immer er benötigt wird setzt du ihn einfach davor.
Delphi-Quellcode:
zB
SaveToFile(programmpfad+'datei.ext');
Grüße

Seppel 30. Nov 2007 21:31

Re: Datenbank
 
Zitat:

Zitat von mkinzler
Delphi-Quellcode:
Query1.DataBaseName := ExtractFilePath( ParamStr(0));
Und dann die Query vor dem Kompilieren schließen.

Em bei ADO gibts beim QUery kein Databasename und was meisnte mit Query vorm kompilieren schließen, ich kann doch erst was machen, wenn kompiliert wird^^

mkinzler 30. Nov 2007 21:34

Re: Datenbank
 
Bei ADO musst du dann die DSN anpassen

Seppel 30. Nov 2007 21:35

Re: Datenbank
 
Zitat:

Zitat von mkinzler
Bei ADO musst du dann die DSN anpassen

DSN?
edit:
Kannste mir einfach sagen, wo ich bei meinem COde den Pfad eingeben soll^^
Hab ja den Quellcode mehrmals gepostet.

mkinzler 30. Nov 2007 21:38

Re: Datenbank
 
Verbindungs-String
http://www.dsdt.info/tutorials/ado/?page=2&x=2&y=4

Seppel 30. Nov 2007 21:40

Re: Datenbank
 
Zitat:

Zitat von mkinzler

Das is aber was mit Regestry, es muss doch ganz einfach sein, dass ich den Connectionstring so ändere, dass es einfach nur dieses Expath rein geht und immer darin findet und nix mit Regestry.

mkinzler 30. Nov 2007 21:42

Re: Datenbank
 
Lass dir mal den Connections-String anzeigen und erzeuge ihn so zur Laufzeit mit dem richtigen Pfad

Seppel 30. Nov 2007 21:44

Re: Datenbank
 
Zitat:

Zitat von mkinzler
Lass dir mal den Connections-String anzeigen und erzeuge ihn so zur Laufzeit mit dem richtigen Pfad

Also:

Code:
Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=C:\Dokumente und Einstellungen\Sebastian\Desktop\Apezdb\neu\db1.mdb;Mode=Share Deny None;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 jetzt soll ich an stelle vonC:\Dokumente und Einstellungen\Sebastian\Desktop\Apezdb\neu\db1.mdb ja irgendwie was rein machen, wie soll ich das jetzt machen??

mkinzler 30. Nov 2007 21:46

Re: Datenbank
 
Ja den mit
Delphi-Quellcode:
ExtractFilePath( ParamStr(0))
ermittelten Pfad

Seppel 30. Nov 2007 21:46

Re: Datenbank
 
Zitat:

Zitat von mkinzler
Ja den mit
Delphi-Quellcode:
ExtractFilePath( ParamStr(0))
ermittelten Pfad

Dann tausche ich das aus, vorher alles mit '' umklammern und dann + Extractfilepath...+'' oder?

mkinzler 30. Nov 2007 21:48

Re: Datenbank
 
Ja, das sollte so funktionieren.

Seppel 30. Nov 2007 21:51

Re: Datenbank
 
Zitat:

Zitat von mkinzler
Ja, das sollte so funktionieren.

Jetzt ist der String nur zu lang^^edit: Ok selbst ist der Mann einfach ''+''+''^^

Seppel 30. Nov 2007 21:55

Re: Datenbank
 
Es funzt aber net, da kommt dann so ein Fehler.
Ich post den morgen ma muss jetzt noch wohin, aber der String ist auch einfach zu lang, das macht das PRog richtig lahm.

mkinzler 30. Nov 2007 21:56

Re: Datenbank
 
Hast du den namen der DB dem Pfad zugefügt?

Seppel 1. Dez 2007 08:15

Re: Datenbank
 
Zitat:

Zitat von mkinzler
Hast du den namen der DB dem Pfad zugefügt?

Also der String sieht so aus:
Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=C:\Dokumente und Einstellungen\Sebastian\Desktop\Apezdb\neu\db1.mdb ;Mode=Share Deny None;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

Ich muss ja dann ein '' machen und dann + Exe...+ '' was meisnte jetzt soll ich dann noch bei dem Ex... db1.mdb hinschreiben? in dioe Klammern?

Also so siehts mom aus:
Delphi-Quellcode:
Adoconnection1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source='+ExtractFilePath( ParamStr(0))+';Mode=Share Deny None;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';
Adoconnection1.Connected := true;
Es kommt jetzt ein fehler, und zwar Installierbares ISAM nicht gefunden.

mkinzler 1. Dez 2007 08:28

Re: Datenbank
 
Delphi-Quellcode:
...Data Source='+ExtractFilePath( ParamStr(0))+'db1.mdb+';...

Seppel 1. Dez 2007 08:31

Re: Datenbank
 
Zitat:

Zitat von mkinzler
Delphi-Quellcode:
...Data Source='+ExtractFilePath( ParamStr(0))+'db1.mdb+';...

Das hab ich eben auch schon getestet trodzdem kommt "Installierbares ISAM nicht gefunden."


Das muss ich ja auch machen, da ja alles deaktiviert ist oder?
Delphi-Quellcode:
Adoconnection1.Connected := true;
Query1.Active := true;

DeddyH 1. Dez 2007 08:54

Re: Datenbank
 
Zur Designzeit alle Verbindungen kappen, zur Laufzeit Connectionstring zusammensetzen und verbinden.

Seppel 1. Dez 2007 08:55

Re: Datenbank
 
Zitat:

Zitat von DeddyH
Zur Designzeit alle Verbindungen kappen, zur Laufzeit Connectionstring zusammensetzen und verbinden.

Is ja gemacht:
Delphi-Quellcode:
Query1.Close;
Adoconnection1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source='+ExtractFilePath( ParamStr(0))+'db1.mdb'+';Mode=Share Deny None;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';
Adoconnection1.Connected := true;
Query1.Active := true;
edit: Ich denke auch es funktioniert nur es sagt immer ISAM nicht gefunden, was auch immer das ist!

DeddyH 1. Dez 2007 09:00

Re: Datenbank
 
Versuch es mal mit Format.

Seppel 1. Dez 2007 09:08

Re: Datenbank
 
Zitat:

Zitat von DeddyH
Versuch es mal mit Format.

?
Meinste ich soll alles in Format = Reinschreiben und dann Format nur bie Adoconnection.string angeben??

DeddyH 1. Dez 2007 09:13

Re: Datenbank
 
Ich habe das hier gerade mal unter Linux mit Lazarus ausprobiert. Sieht eigentlich ganz gut aus (testen kann ich es natürlich nicht):
Delphi-Quellcode:
const sConn = 'Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=%sdb1.mdb;'+
              'Mode=Share Deny None;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';
var Pfad: string;
begin
  Pfad := IncludeTrailingPathDelimiter(ExtractFilePath(ParamStr(0)));
  ShowMessage(Format(sConn,[Pfad]));
end;

Seppel 1. Dez 2007 09:20

Re: Datenbank
 
Zitat:

Zitat von DeddyH
Ich habe das hier gerade mal unter Linux mit Lazarus ausprobiert. Sieht eigentlich ganz gut aus (testen kann ich es natürlich nicht):
Delphi-Quellcode:
const sConn = 'Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=%sdb1.mdb;'+
              'Mode=Share Deny None;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';
var Pfad: string;
begin
  Pfad := IncludeTrailingPathDelimiter(ExtractFilePath(ParamStr(0)));
  ShowMessage(Format(sConn,[Pfad]));
end;

Ok das funzt.
Danke. Also, du hast folgendes gemacht oben hast du ne constante definiert und mkit dem %s hast du dann später fürs Format gemacht, damit du dann den Pfad reinschreiben kannst, wo es gerade liegt.

DeddyH 1. Dez 2007 09:23

Re: Datenbank
 
Genau so ;). Wenn sich der Pfad ändert, macht das somit nichts.

Seppel 1. Dez 2007 09:31

Re: Datenbank
 
Zitat:

Zitat von DeddyH
Genau so ;). Wenn sich der Pfad ändert, macht das somit nichts.

Ja es klappt auch!


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:18 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