DB Anwendung mit Zeos oder Bordeigene Komponenten

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.

Re: DB Anwendung mit Zeos oder Bordeigene Komponenten

Beitragvon DL3AD » 9. Mai 2017, 12:09 Re: DB Anwendung mit Zeos oder Bordeigene Komponenten

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
DL3AD
 
Beiträge: 163
Registriert: 13. Sep 2013, 11:07
Wohnort: Rügen
OS, Lazarus, FPC: Win7 (L 1.6.4 FPC 3.0.2) und Debian 8 (L 1.6.4 FPC 3.0.2) | 
CPU-Target: 32Bit
Nach oben

Beitragvon theo » 9. Mai 2017, 12:21 Re: DB Anwendung mit Zeos oder Bordeigene Komponenten

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.
theo
 
Beiträge: 7765
Registriert: 11. Sep 2006, 18:01

Beitragvon DL3AD » 9. Mai 2017, 13:02 Re: DB Anwendung mit Zeos oder Bordeigene Komponenten

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
DL3AD
 
Beiträge: 163
Registriert: 13. Sep 2013, 11:07
Wohnort: Rügen
OS, Lazarus, FPC: Win7 (L 1.6.4 FPC 3.0.2) und Debian 8 (L 1.6.4 FPC 3.0.2) | 
CPU-Target: 32Bit
Nach oben

Beitragvon theo » 9. Mai 2017, 14:14 Re: DB Anwendung mit Zeos oder Bordeigene Komponenten

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
theo
 
Beiträge: 7765
Registriert: 11. Sep 2006, 18:01

Beitragvon DL3AD » 9. Mai 2017, 18:51 Re: DB Anwendung mit Zeos oder Bordeigene Komponenten

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
DL3AD
 
Beiträge: 163
Registriert: 13. Sep 2013, 11:07
Wohnort: Rügen
OS, Lazarus, FPC: Win7 (L 1.6.4 FPC 3.0.2) und Debian 8 (L 1.6.4 FPC 3.0.2) | 
CPU-Target: 32Bit
Nach oben

Beitragvon af0815 » 9. Mai 2017, 21:37 Re: DB Anwendung mit Zeos oder Bordeigene Komponenten

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.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
af0815
 
Beiträge: 3004
Registriert: 7. Jan 2007, 10:20
Wohnort: Niederösterreich
OS, Lazarus, FPC: Win7/Linux (L stable FPC stable) per fpcup | 
CPU-Target: 32Bit (64Bit)
Nach oben

Beitragvon af0815 » 9. Mai 2017, 21:49 Re: DB Anwendung mit Zeos oder Bordeigene Komponenten

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).
af0815
 
Beiträge: 3004
Registriert: 7. Jan 2007, 10:20
Wohnort: Niederösterreich
OS, Lazarus, FPC: Win7/Linux (L stable FPC stable) per fpcup | 
CPU-Target: 32Bit (64Bit)
Nach oben

Beitragvon DL3AD » 10. Mai 2017, 12:08 Re: DB Anwendung mit Zeos oder Bordeigene Komponenten

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
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
DL3AD
 
Beiträge: 163
Registriert: 13. Sep 2013, 11:07
Wohnort: Rügen
OS, Lazarus, FPC: Win7 (L 1.6.4 FPC 3.0.2) und Debian 8 (L 1.6.4 FPC 3.0.2) | 
CPU-Target: 32Bit
Nach oben

Beitragvon af0815 » 10. Mai 2017, 13:25 Re: DB Anwendung mit Zeos oder Bordeigene Komponenten

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).
af0815
 
Beiträge: 3004
Registriert: 7. Jan 2007, 10:20
Wohnort: Niederösterreich
OS, Lazarus, FPC: Win7/Linux (L stable FPC stable) per fpcup | 
CPU-Target: 32Bit (64Bit)
Nach oben

Beitragvon wp_xyz » 10. Mai 2017, 14:40 Re: DB Anwendung mit Zeos oder Bordeigene Komponenten

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 10. Mai 2017, 17:16, insgesamt 1-mal geändert.
wp_xyz
 
Beiträge: 1802
Registriert: 8. Apr 2011, 08:01

Beitragvon DL3AD » 10. Mai 2017, 16:07 Re: DB Anwendung mit Zeos oder Bordeigene Komponenten

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
DL3AD
 
Beiträge: 163
Registriert: 13. Sep 2013, 11:07
Wohnort: Rügen
OS, Lazarus, FPC: Win7 (L 1.6.4 FPC 3.0.2) und Debian 8 (L 1.6.4 FPC 3.0.2) | 
CPU-Target: 32Bit
Nach oben

Beitragvon wp_xyz » 10. Mai 2017, 17:18 Re: DB Anwendung mit Zeos oder Bordeigene Komponenten

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.
wp_xyz
 
Beiträge: 1802
Registriert: 8. Apr 2011, 08:01

Beitragvon DL3AD » 10. Mai 2017, 17:41 Re: DB Anwendung mit Zeos oder Bordeigene Komponenten

... 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.
DL3AD
 
Beiträge: 163
Registriert: 13. Sep 2013, 11:07
Wohnort: Rügen
OS, Lazarus, FPC: Win7 (L 1.6.4 FPC 3.0.2) und Debian 8 (L 1.6.4 FPC 3.0.2) | 
CPU-Target: 32Bit
Nach oben

Beitragvon af0815 » 10. Mai 2017, 18:45 Re: DB Anwendung mit Zeos oder Bordeigene Komponenten

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).
af0815
 
Beiträge: 3004
Registriert: 7. Jan 2007, 10:20
Wohnort: Niederösterreich
OS, Lazarus, FPC: Win7/Linux (L stable FPC stable) per fpcup | 
CPU-Target: 32Bit (64Bit)
Nach oben

Beitragvon af0815 » 10. Mai 2017, 19:17 Re: DB Anwendung mit Zeos oder Bordeigene Komponenten

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).
af0815
 
Beiträge: 3004
Registriert: 7. Jan 2007, 10:20
Wohnort: Niederösterreich
OS, Lazarus, FPC: Win7/Linux (L stable FPC stable) per fpcup | 
CPU-Target: 32Bit (64Bit)
Nach oben

» Weitere Beiträge siehe nächste Seite »
VorherigeNächste

Zurück zu Datenbanken



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste

porpoises-institution
accuracy-worried