DB Anwendung mit Zeos oder Bordeigene Komponenten

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
DL3AD
Beiträge: 478
Registriert: Fr 13. Sep 2013, 12:07
OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
CPU-Target: 64Bit
Wohnort: Rügen

Re: DB Anwendung mit Zeos oder Bordeigene Komponenten

Beitrag von DL3AD »

Hallo,

Danke, nun Funktioniert es.

Habe gleich mal eine Suchfunktion gebastelt - in einem TEdit gebe ich Zeichen für Zeichen den Suchstring ein und es reduziert sich das Datenaufkommen im DataGrid

Code: Alles auswählen

 
//Suche
procedure TForm1.Edit1Change(Sender: TObject);
var
  SuchStr : String;
begin
  SuchStr:= chr(39) + Edit1.Text + '%' + chr(39); //39 ist Hochkomma
  ZQuery1.SQL.Text:= 'Select * From tblAdressen Where Nachname Like ' + SuchStr;
  ZQuery1.Open;
end;         


Gruß Frank

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

Re: DB Anwendung mit Zeos oder Bordeigene Komponenten

Beitrag von theo »

Siehste. Vielleicht gibt es ein spezielles DB-Such-TEdit, aber das weiß ich nicht und so geht's doch auch ganz gut. :wink:

Das mit den Hochkomma kann man noch hübscher lösen:

Code: Alles auswählen

SuchStr:= QuotedStr(Edit1.Text + '%');


Noch eleganter wäre wahrsch. etwas in dieser Art:

Code: Alles auswählen

 ZQuery1.SQL.Text:= 'Select * From tblAdressen Where Nachname Like :namesearch'; //Bräuchte man eig. nicht bei jedem Tastendruck repetieren, close reicht auch.
ZQuery1.Params.Parambyname('namesearch').asstring := Edit1.Text + '%';
ZQuery1.Open;   


Da gibt es aber sicher größere Spezialisten als mich.

DL3AD
Beiträge: 478
Registriert: Fr 13. Sep 2013, 12:07
OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
CPU-Target: 64Bit
Wohnort: Rügen

Re: DB Anwendung mit Zeos oder Bordeigene Komponenten

Beitrag von DL3AD »

Hallo theo,

... solchen Input liebe ich DANKE :wink:

Vieleicht ließt ja ein DB Spezi mit und läßt noch ein paar Tipps hier. :wink:

Soo nun kann ich auch suchen - nächster Test den ich machen möchte ist ein Suchergebniss in eine andere Tabelle schreiben.
D.h. in dem DataGrid mit den Suchergebnissen auf eine Zeile doppelklicken und damit den Datensatz übernehmen.
Gibt es da passende Zeos-Werkzeuge - oder wie geht man dass an ?

Gruß Frank

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

Re: DB Anwendung mit Zeos oder Bordeigene Komponenten

Beitrag von theo »

Zeos spezifisch kenne ich mich nicht aus.

Grundsätzlich fügt man Daten mit SQL mit "INSERT INTO" ein :

https://www.w3schools.com/sql/sql_insert.asp

DL3AD
Beiträge: 478
Registriert: Fr 13. Sep 2013, 12:07
OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
CPU-Target: 64Bit
Wohnort: Rügen

Re: DB Anwendung mit Zeos oder Bordeigene Komponenten

Beitrag von DL3AD »

Hallo theo,

Danke für den Tipp - war mir bekannt - hatte mal in den anfang 90er einige Sachen mit Access gemacht - da ist noch ein bischen Restwissen übrig :)
Schade dass es keine Beispiele gibt wo man mal als Anfänger sich etwas abschauen kann - so muss man das Rad wieder neu erfinden :shock:
Ich freue mich jedenfalls dass man hier Hilfe bekommt 8)

Gruß Frank

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6197
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: DB Anwendung mit Zeos oder Bordeigene Komponenten

Beitrag von af0815 »

DL3AD hat geschrieben:Schade dass es keine Beispiele gibt wo man mal als Anfänger sich etwas abschauen kann - so muss man das Rad wieder neu erfinden :shock:


Sorry, aber irgendwie kann ich diese Aussage übehaupt nicht nachvollziehen.

Bei den Grundlagen ist es egal, welche DB. Man verwendet da einen Bereich des SQL der von allen unterstützt wird. Ich finde jede Menge an Beispiele mittels Google oder auch Startpage.

Andreas

Sorry aber bei manchen Frage zu SQL greife ich nicht einmal mehr in die Tasten, da es jede Menge Suchmaschinen gibt. Auch in der Wiki von Lazarus findet man etliches, halt allgemein und nicht spezifisch zu ZEOS.
Dateianhänge
LazInfos_66_68.pdf
Auszug aus den Lazinfos
(197.88 KiB) 77-mal heruntergeladen
LazInfos_28_41.pdf
Auszug aus den Lazinfos
(149.61 KiB) 88-mal heruntergeladen
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6197
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: DB Anwendung mit Zeos oder Bordeigene Komponenten

Beitrag von af0815 »

Vielleicht doch noch als Hint:

Wenn man eine aktualisierbare Datenmenge in einer Query abfrage, so hat die Query die Möglichkeit selbstständig die richtigen Update, Insert und Delete Befehle zu erzeugen.

Meine Erfahrung ist, erst wenn man das SELECT - Statement (wirklich) versteht kann man sich in SQL freier bewegen :-)

Abschreckendes Beispiel - siehe https://support.microsoft.com/de-at/help/186133/how-to-dynamically-number-rows-in-a-select-transact-sql-statement

Code: Alles auswählen

SELECT rank=count(*), s1.pub_id, sales=sum(s1.sales)
   FROM    (SELECT t.pub_id, sales=sum(s.qty*t.price)
           FROM sales s, titles t
           WHERE s.title_id=t.title_id
             AND t.price IS NOT NULL
           GROUP BY t.pub_id) s1,
           (SELECT t.pub_id, sales=sum(s.qty*t.price)
           FROM sales s, titles t
           WHERE s.title_id=t.title_id
             AND t.price IS NOT NULL
           GROUP BY t.pub_id) s2
   WHERE s1.sales>= s2.sales
   GROUP BY s1.pub_id
   ORDER BY rank


Nur so, das ist genaugenommen nur einfaches SELECT mit ein paar Aggregaten, soll aber zeigen warum ich oben gemeint habe, das man das SELECT verstehen sollte :-)

Andreas

BTW: Bei solchen Konstrukten MUSS man UPDATE, INSERT und DELETE man natürlich der Query vorgeben, das kann die nicht auflösen (und viel einfacheres auch nicht)
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

DL3AD
Beiträge: 478
Registriert: Fr 13. Sep 2013, 12:07
OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
CPU-Target: 64Bit
Wohnort: Rügen

Re: DB Anwendung mit Zeos oder Bordeigene Komponenten

Beitrag von DL3AD »

Hallo,

das Problem ist nicht SQL - da habe ich Werkzeuge mit denen ich das testen kann.
Ich habe mal ein kleines Testprogramm angehängt.
Im oberen DataGrid selektiere ich Daten aus der Datasource1(tblAdressen) nun möchte ich mit einem Klick auf den Button "Übernehmen" oder noch besser
mit einem direkten Klick auf den selektierten Datensatz der Datensource2 zufügen.
Die Datasourcen funktionieren ja Bidirektional - d.h. wenn das Datagrid nicht "readonly" ist kann ich Änderungen vornehmen uns sei werden in die Datenbank geschrieben.
Kann man z.b. der Datasource2 sagen

Datasource2.Tabellenfeld_Nachname := Datasource1.Tabellenfeld_Nachname

Gibt es so eine Möglichkeit - wenn ja wo finde ich ein Beispiel dazu oder eine Doku ?

Gruß Frank
Dateianhänge
DBTest03.zip
(710.63 KiB) 82-mal heruntergeladen

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6197
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: DB Anwendung mit Zeos oder Bordeigene Komponenten

Beitrag von af0815 »

Synchonisieren von DS geht IMHO nicht. Master-Detail ja.

Da einzige was man machen könnte, wäre in einem OnChange Event das zweite DS zu adaptieren. Ich muss mir aber dein Beispiel erst ansehen, wenn ich wieder zu Hause bin.

Andreas
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

wp_xyz
Beiträge: 4864
Registriert: Fr 8. Apr 2011, 09:01

Re: DB Anwendung mit Zeos oder Bordeigene Komponenten

Beitrag von wp_xyz »

Wenn du mit den visuellen Komponenten arbeitest, brauchst du Du brauchst für die Wald- und Wiesen-Anwendungsfälle gar kein SQL. Hier die OnClick-Prozedur deines "Übernehmen"-Buttons - das funktioniert auch für TMemoryDataset o.ä., der gar kein SQL kann:

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
begin
  ZQuery2.Insert;
  ZQuery2.FieldByName('Nachname').AsString := ZQuery1.FieldByName('Nachname').AsString;
  ZQuery2.FieldByName('Vorname').AsString := ZQuery1.FieldByName('Vorname').AsString;
  ZQuery2.Post;
end;


P.S.
Analog ginge z.B. das Ändern eines Datensatz, indem man ZQuery2.Edit statt ZQuery2.Insert aufruft.
Oder das Löschen des aktuellen Datensatzes geht mit ZQuery2.Delete (kein Post erforderlich).
Zuletzt geändert von wp_xyz am Mi 10. Mai 2017, 18:16, insgesamt 1-mal geändert.

DL3AD
Beiträge: 478
Registriert: Fr 13. Sep 2013, 12:07
OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
CPU-Target: 64Bit
Wohnort: Rügen

Re: DB Anwendung mit Zeos oder Bordeigene Komponenten

Beitrag von DL3AD »

Hallo wp_xyz,

Danke für den Tipp - genau so sollte es funktionieren :D
Wo kann ich die ganzen Funktionalitäten der Z-Komponenten, der Data Controls und der DataAccess nachlesen - die interne Hilfe gibt es dazu nicht.
Ich suche warscheinlich unter den falschen Suchbegriffen im Netz - ein Link würde mir da weiterhelfen.

Gruß Frank

wp_xyz
Beiträge: 4864
Registriert: Fr 8. Apr 2011, 09:01

Re: DB Anwendung mit Zeos oder Bordeigene Komponenten

Beitrag von wp_xyz »

Ich habe jetzt etwas herumgesucht, aber etwas Solides, und nicht das übliche Detail-Gefrickel, habe ich nicht gefunden. Wie habe ich das eigentlich damals gelernt? Ich bin damals viel in die Bibliothek gegangen und habe die damals noch zahlreichen Delphi-Bücher verschlungen. Das Buch "Delphi 4" von Elmar Warken gab es mal im Sonderangebot, so dass ich es mir gekauft habe. Und ich habe noch "Lazarus - Klassenbibliothek und IDE" von Michael van Canneyt u.a. Vielleicht findest du sowas mal auf einem Flohmarkt oder auf ebay. Diese Bücher haben jeweils etwa 50-100 Seiten über Datenbank-Grundlagen.

Nochmals zu meinem vorigen Post: Das mit "ZQuery.Insert/Post" hat natürlich nichts mit visuellen Komponenten zu tun, der Nebensatz ist reiner Blödsinn, ich habe ihn jetzt durchgestrichen.

DL3AD
Beiträge: 478
Registriert: Fr 13. Sep 2013, 12:07
OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
CPU-Target: 64Bit
Wohnort: Rügen

Re: DB Anwendung mit Zeos oder Bordeigene Komponenten

Beitrag von DL3AD »

... Danke
tja dass ist leider nicht so schön - Werde mal bischen auf Delph-Seiten suchen, vielleicht findet sich dort etwas - ansonsten muss ich mich hier Durchfragen mit meinen Problemchen.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6197
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: DB Anwendung mit Zeos oder Bordeigene Komponenten

Beitrag von af0815 »

Vom Gedanklichen ist einiges gleich mit Delphi und C#. Infos zu der 'alten' BDE (Borland Database Engine) sind auch noch brauchbar. ZB. Zeos enstand als Ersatz für die BDE.

Grundlegend ist es so, das die Funktion der Datenbank-Komponenten über die Sprachgrenzen hinweg relativ ähnlich ist.

Bücher (aus dem Antiquariat) - Autoren:

Walter Doberenz/Thomas Kowalski - mit ihrer Reihe Borland Delphi x Grundlagen und Profiwissen
Andreas Kosch - Client/Server DBEntwickung mit Delpi
Andreas Kosch - ADO und Delphi

Publikationen:
Andreas Frieß - LazInfos (pdf) und LazSnippets (sourcen) auf Sourceforge (Der Autor hat das Projekt eingestellt, nachdem es kein Echo gegeben hat) :shock:
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6197
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: DB Anwendung mit Zeos oder Bordeigene Komponenten

Beitrag von af0815 »

DL3AD hat geschrieben:... Danke
tja dass ist leider nicht so schön - Werde mal bischen auf Delph-Seiten suchen, vielleicht findet sich dort etwas - ansonsten muss ich mich hier Durchfragen mit meinen Problemchen.


Ich habe mir gerade den DB-Test angesehen.

Vielleicht ist es dir möglich in Schritten zu erklären wo du hin willst. Wenn ich das Ziel in der Ferne sehe, dann kann man leichter helfen, die Schritte dorthin zu lenken.

Die Datenbanktreiber würde ich an deiner Stelle nicht fix kodieren, sondern an 2 Stellen hinterlegen 1x in das Verzeichnis der exe und einmal in das Verzeichnis der Lazarus.exe. Ersteres wirkt zur Laufzeit, das zweitere zur Designtime. Vor allen hat aktuell nur ZEOS den Komfort der Library-Location. Falls du Versuche mit SqlDB machst hast du dann Probleme. Die Datenbank lege bitte ins Exe-Verzeichnis, dann brauchst du keine absoluten Pfade. Das stört nur beim Testen.

Vielleicht nehme ich dein Beispiel um wieder ein bischen was zu schreiben. BTW: Der Restart der Lazinfos/LazSnippets erfolgt auf Github.

Andreas
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Antworten