Umfrage: Beispiele mit Datenbanken

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
PascalDragon
Beiträge: 825
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: Umfrage: Beispiele mit Datenbanken

Beitrag von PascalDragon »

af0815 hat geschrieben:
Mi 2. Nov 2022, 20:30
Probiert auch ? Oder nur wissen ?
Das ist so.
FPC Compiler Entwickler

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6200
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Umfrage: Beispiele mit Datenbanken

Beitrag von af0815 »

PascalDragon hat geschrieben:
Do 3. Nov 2022, 07:45
af0815 hat geschrieben:
Mi 2. Nov 2022, 20:30
Probiert auch ? Oder nur wissen ?
Das ist so.
Wie bekomme ich die Treiber für SQLite, MS-SQL,... dann dort hinein, so das sie auch von Lazarus und den damit erzeugten Programmen gefunden werden ? Darauf hat sich mein "Probiert auch ?" bezogen. Weil, "Nur wissen" heisst, das man den Ort kennt, nicht aber unbedingt ob das funktioniert.

Mein aktueller Stand ist, die DLL für die jeweilige DB ins Verzeichnis des Programmes mitgeben, das funktioniert. Ich habe bisher nur nichts gefunden, wie man das für die verschiedenen Windows Version richtig macht, so das es out of the Box über die Systemverzeichnisse geht. Es ist eventuell mehr eine Windows Wissenslücke, die aber in Lazarus hineinreicht. Im Lazarusbuch und Lazarus Handbook wird sowas auch ausgespart und ansonsten habe ich noch nicht wirklich was zum Thema gefunden.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: Umfrage: Beispiele mit Datenbanken

Beitrag von charlytango »

ist es vermessen dabei weiter zu denken, denn diese Verbindung von (Server)DB, Zugriffs-DLL/SO(aka Treiber) und Lazarus ist schon eine ziemliche Hürde für einen Einsteiger.
Natürlich bleibt niemandem wirklich erspart sich irgendwann damit auseinander zu setzen, aber so ein "kleines" Installationstool (a la fpcupdeluxe) das einem Neuling oder hochoptimierten Oldie die gewünschte Umgebung zaubert um einfach loslegen zu können.

--aktuelle DLL/SO/Treiber downloaden und an die richtigen Stellen kopieren
--Bei Bedarf auch für die Lazarus GUI
--Datenmodul oder Zugriffsobjekt anpassen und bereitstellen.

ich weiß, manchmal hab ich schon Halluzinationen gggg

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6200
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Umfrage: Beispiele mit Datenbanken

Beitrag von af0815 »

charlytango hat geschrieben:
Do 3. Nov 2022, 11:28
--aktuelle DLL/SO/Treiber downloaden und an die richtigen Stellen kopieren
--Bei Bedarf auch für die Lazarus GUI
--Datenmodul oder Zugriffsobjekt anpassen und bereitstellen.

ich weiß, manchmal hab ich schon Halluzinationen gggg
Eben das für Lazarus und die Programme sollte 'Out of the box' sein, wenn die Pfade so klar sind, wie erklärt wird. Für den ersten Punkt ein Installationspaket, aber der Rest sollte dann gegessen sein. Aktuell habe ich noch nicht geschafft.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

shokwave
Beiträge: 470
Registriert: Do 15. Nov 2007, 16:58
OS, Lazarus, FPC: Win11/Ubuntu Budgie (L 3.0 FPC 3.2.2)
CPU-Target: i386, x64
Wohnort: Gera

Re: Umfrage: Beispiele mit Datenbanken

Beitrag von shokwave »

af0815 hat geschrieben:
Mi 2. Nov 2022, 20:30
Probiert auch ? Oder nur wissen ?
Läuft bei mir mit den sqlite.dlls so auf 2 Rechnern.

Details zur Suchreihenfolge https://learn.microsoft.com/de-de/windo ... arch-order. Bissl weiter unten "Standardsuche für Desktopanwendungen".
mfg Ingo

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6200
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Umfrage: Beispiele mit Datenbanken

Beitrag von af0815 »

shokwave hat geschrieben:
Do 3. Nov 2022, 13:13
af0815 hat geschrieben:
Mi 2. Nov 2022, 20:30
Probiert auch ? Oder nur wissen ?
Läuft bei mir mit den sqlite.dlls so auf 2 Rechnern.

Details zur Suchreihenfolge https://learn.microsoft.com/de-de/windo ... arch-order. Bissl weiter unten "Standardsuche für Desktopanwendungen".
Danke für den Link.

Wie hast du die DLLs auf den Rechner gebracht, einfach in die Verzeichnisse kopiert oder mit einem Installationsprogramm ?
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

shokwave
Beiträge: 470
Registriert: Do 15. Nov 2007, 16:58
OS, Lazarus, FPC: Win11/Ubuntu Budgie (L 3.0 FPC 3.2.2)
CPU-Target: i386, x64
Wohnort: Gera

Re: Umfrage: Beispiele mit Datenbanken

Beitrag von shokwave »

Die hab ich einfach reinkopiert. Benötigt Adminrechte, aber mehr auch nicht.
mfg Ingo

charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: Umfrage: Beispiele mit Datenbanken

Beitrag von charlytango »

Kann mir bitte jemand mal das projekt in Linux testen?

SQLdb hat die Namen von default Libraries eingebaut und man kann das auch mit getConnectionList abfragen. Dann werden alle per uses inkludierten Zugriffsmöglichkeiten als verfügbar gelistet.

zB
SQLite3, Default library name: sqlite3.dll

einfach mal im Projekt den Button drücken.

Mein Ansatz wäre dass der Benutzer keine Standardlibrary angeben muss und die aus dieser Quelle stammt. Für Windows scheint das zu stimmen, aber wie ist das unter Linux?
werden da die .so Files angezeigt?
Hab aktuell kein Linux, kann das bitte jemand testen? THX
Dateianhänge
published.zip
(138.42 KiB) 39-mal heruntergeladen

Benutzeravatar
theo
Beiträge: 10468
Registriert: Mo 11. Sep 2006, 19:01

Re: Umfrage: Beispiele mit Datenbanken

Beitrag von theo »

Ja, das zeigt die .so Namen an.
Aber ich weiss nicht genau, was du damit auf Linux willst.
Auf Linux lädt man solche Standard Bibliotheken nicht von irgendwo herunter und legt die irgendwo hin, sondern man benutzt den Paketmanager.
Auf Ubuntu reicht z.B. die Zeile
sudo apt install sqlite3
Oder man nimmt ein GUI Tool, wie z.B. Yast auf OpenSUSE:

packman.png
packman.png (156.63 KiB) 904 mal betrachtet

Dabei muss man weder die Download URL kennen, noch den Installationspfad.
Die Lib ist dann einfach da und allfällige Abhängigkeiten auch. :wink:

charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: Umfrage: Beispiele mit Datenbanken

Beitrag von charlytango »

was ich möchte ist mehrstufig.

ein Entwickler soll sich einen Connectortype auswählen.
z.B. "SQLite3"

Aufgrund dieser Entscheidung holt das Programm den Standardnamen für die Zugriffs-Bibliothek

Code: Alles auswählen

function Tsqldbruntime.GetStandardLibraryName(sConnector: string): string;
var
  S : TStringList;
  I : Integer;
begin
  result:=cUNDEF;
  S:=TStringList.Create;
  try
    getConnectionList(S);
    For I:=0 to S.Count-1 do
      if S[i] = sConnector then begin
        result := GetConnectionDef(S[i]).DefaultLibraryName;
        exit;
      end;
  finally
    S.free;
  end;
end;
und versucht sie in den üblich verdächtigen Verzeichnissen zu finden.

Dazu gibt es die Funktion:

Code: Alles auswählen

function GuessLibraryLocation(sLibraryName:string):string;
var
  s: string;
  sSearched:string;
  sPathString:string;
  sLibName:string;
begin
  result:=cUNDEF;
  sSearched:='';

  if sLibraryName='' then
    sLibName:=cSQLdbLibraryName 
  else
    sLibName:=sLibraryName;

  {$ifdef Unix}
  sPathString:='to define'
  {$else}
  sPathString := 'dll@sql';
  {$endif}

  result:=GuessFile(sLibName,sPathString,sSearched);

  //Search in default directories
  {$if Defined(WINDOWS)}
  if result=cUNDEF  then begin
    if GetTargetCPUinfo = 'i386' then
        result :=  GetWindowsSpecialDir(CSIDL_WINDOWS,false) + 'sysWOW64'+ DirectorySeparator  + sLibName
    else
       result :=  GetWindowsSpecialDir(CSIDL_SYSTEM,false)  + sLibName;

  end;
  sSearched:=sSearched+ LineEnding+result;
  {$elseif Defined(Linux)}
    //regrettably i use Windows only
  {$elseif Defined(Darwin)}

  {$endif}

  if not FileExists(result) then  result := cUNDEF;

  if result=cUNDEF  then
  raise Exception.Create( LineEnding
                          + 'File: ' + {$INCLUDE %FILE%} + LineEnding
                          + 'Methodname: ' +  {$I %CURRENTROUTINE%} + LineEnding
                          + 'Linenumber: ' + {$INCLUDE %LINE%} + LineEnding +LineEnding
                          + 'tried to find Library ' + cSQLdbLibraryName + ' in '
                          + LineEnding + LineEnding
                          + sSearched
                          + 'but it was not found!' + LineEnding+ LineEnding
                          + 'Please provide ' + cSQLdbLibraryName +' in one of the searchpaths');

end; 
und das soll idealerweise auch unter Linux klappen. Deswegen hab ich gefragt ob die .so Namen unter Linux zurückgegeben werden. Das hast du schonmal bestätigt.
Wo müsste ich unter Linux nach solchen Dateien suchen? Oder reicht einfach der filename und das OS macht den Rest?

Benutzeravatar
theo
Beiträge: 10468
Registriert: Mo 11. Sep 2006, 19:01

Re: Umfrage: Beispiele mit Datenbanken

Beitrag von theo »

charlytango hat geschrieben:
Sa 5. Nov 2022, 22:08
Wo müsste ich unter Linux nach solchen Dateien suchen? Oder reicht einfach der filename und das OS macht den Rest?
Mir scheint, das Problem welches du zu lösen versuchst, ist sehr Windows-spezifisch.
Wenn die Bibliothek normal installiert wurde, ist sie bei Linux unter "/usr/lib64/" o.ä.
Die Anwendung "findet" die von selbst, da braucht man nichts weiter machen.

charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: Umfrage: Beispiele mit Datenbanken

Beitrag von charlytango »

fein, danke.
kennt jemand eine Möglichkeit aus SQLDB heraus zu bekommen was eine filebasierte DB ist und was nicht.
Die müssten dann unterschiedlich behandelt werden und ggfs auch eine Datenbankdatei erzeugt werden.

Ist jetzt nicht highest railway denn für SQLite klappt das perfekt und das ist ja die Zielgruppe für meine Idee. Nur hat sich gezeigt dass man das alles schnell verallgemeinern kann.

Benutzeravatar
theo
Beiträge: 10468
Registriert: Mo 11. Sep 2006, 19:01

Re: Umfrage: Beispiele mit Datenbanken

Beitrag von theo »

charlytango hat geschrieben:
So 6. Nov 2022, 11:19
fein, danke.
kennt jemand eine Möglichkeit aus SQLDB heraus zu bekommen was eine filebasierte DB ist und was nicht.
Die müssten dann unterschiedlich behandelt werden und ggfs auch eine Datenbankdatei erzeugt werden.
Alle SQLDB Verbindungen brauchen einen Server afaics, ausser SQLite. Firebird "depends".
ODBC ist wieder ein anderer Fall.

https://wiki.freepascal.org/Databases#S ... _databases

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6200
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Umfrage: Beispiele mit Datenbanken

Beitrag von af0815 »

SQLite ist keine Filebasierende DB im strengeren Sinn. Das wäre nur csv und dbf. SQLite ist ein Serverbasierendes DBSytem. Nur steht halt ein File vor deiner Nase. Ist aber strenggenommen auch beim MS-SQL und Firebird so. Nur halt nicht so offensichtlich.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: Umfrage: Beispiele mit Datenbanken

Beitrag von charlytango »

af0815 hat geschrieben:
So 6. Nov 2022, 12:03
SQLite ist keine Filebasierende DB im strengeren Sinn. Das wäre nur csv und dbf. SQLite ist ein Serverbasierendes DBSytem. Nur steht halt ein File vor deiner Nase. Ist aber strenggenommen auch beim MS-SQL und Firebird so. Nur halt nicht so offensichtlich.
Dass das alles auf Files basiert ist mir durchaus klar -- schlecht ausgedrückt.
Wollte wissen ob Firebird/Interbase auch so funktionieren wie SQLite und scheinbar ist es "it depends".
Auch ok, denn die Zielplattform soll ja SQLite3 sein, alles andere ist nice to have

Antworten