TDBF und Einfügen von Datensätzen ?

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
PeterS
Beiträge: 161
Registriert: So 22. Feb 2015, 11:36
OS, Lazarus, FPC: L 3.8
CPU-Target: win32

Re: TDBF und Einfügen von Datensätzen ?

Beitrag von PeterS »

af0815 hat geschrieben: Fr 20. Sep 2024, 13:54 Man muss die Spalte ja nirgends dem Benutzer anzeigen, ..
Das Offenlegen der ID-Spalte war halt so, im simplen Beispiel-Programm.

Hier der Link zum Original:
https://wiki.freepascal.org/Example:_TD ... _of_index)

Benutzeravatar
Zvoni
Beiträge: 396
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz 2.2.2 FPC 3.2.2)
CPU-Target: 32Bit
Wohnort: BW

Re: TDBF und Einfügen von Datensätzen ?

Beitrag von Zvoni »

PeterS hat geschrieben: Fr 20. Sep 2024, 14:14
af0815 hat geschrieben: Fr 20. Sep 2024, 13:54 Man muss die Spalte ja nirgends dem Benutzer anzeigen, ..
Das Offenlegen der ID-Spalte war halt so, im simplen Beispiel-Programm.

Hier der Link zum Original:
https://wiki.freepascal.org/Example:_TD ... _of_index)
Schon klar.
Zu deiner Frage wegen SQL:
im Wiki gibts genug Beispiele, wie man die SQLite-Komponenten auf eine Form wirft, diese untereinander verbindet.
https://wiki.freepascal.org/SQLdb_Tutorial1

Sobald das erledigt ist, ist es nur noch SQL

EDIT: Aufpassen: Um bereits beim Design schon Daten in der Form sehen zu können, muss die passende sqlite3.dll in der richtigen Bitness sowohl neben der Lazarus.exe liegen, als auch dann im Projekt-Ordner.

Oder eben von hand (Nicht während Design)
Mal schnell zusammengeklopft (aus dem Gedächtnis heraus, kann sein, dass ich noch was vergessen habe)

Code: Alles auswählen

Uses ...., sqldb,db,sqlite3conn,..... ;

Var
MyCN:TSQLite3Connection;
MyTA:TSQLTransaction;
MyQY:TSQLQuery;
.........
Begin
  MyCN:=TSQLite3Connection.Create(Nil);
  MyCN.DatabaseName:='countries.db';
  MyTA:=TSQLTransaction.Create(MyCN);
  MyCN.Transaction:=MyTA;
  MyQY:=TSQLQuery:Create;
  MyQY.Database:=MyCN;
  MyQY.Transaction:=MyTA;
  MyCN.Open;  //Ab hier steht die Verbindung
 .....
   MyQY.SQL.Text:='SELECT ID, CountryName, City FROM CountryTable ORDER BY CountryName';
   MyQY.Open;
 End;
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

Sieben
Beiträge: 292
Registriert: Mo 24. Aug 2020, 14:16
OS, Lazarus, FPC: Ubuntu Xenial 32, Lazarus 2.2.0, FPC 3.2.2
CPU-Target: i386

Re: TDBF und Einfügen von Datensätzen ?

Beitrag von Sieben »

Damit das nicht ganz untergeht - mein Hinweis, Datums- und Zeitangaben doch im ISO-Format zu speichern wäre mit SQLite sogar noch relevanter, da SQLite ein ganzes Bündel an Funktionen auf dieser Basis bereitstellt, es ist sogar das von SQLite empfohlene Format. Für die Umrechnung in TDateTime innerhalb Lazarus stellt die Unit DateUtils die TryISOStrTo*-Funktionen bereit, der umgekehrte Weg geht mit FormatDateTime.

PeterS
Beiträge: 161
Registriert: So 22. Feb 2015, 11:36
OS, Lazarus, FPC: L 3.8
CPU-Target: win32

Re: TDBF und Einfügen von Datensätzen ?

Beitrag von PeterS »

Sieben hat geschrieben: Fr 20. Sep 2024, 14:52 .. im ISO-Format zu speichern wäre mit SQLite sogar noch relevanter ..
Für die Umrechnung in TDateTime innerhalb Lazarus stellt die Unit DateUtils die TryISOStrTo*-Funktionen bereit, der umgekehrte Weg geht mit FormatDateTime.
Okay, habe ich gefunden ..

https://www.freepascal.org/docs-html/cu ... odate.html
https://www.freepascal.org/docs-html/cu ... etime.html
https://www.freepascal.org/docs-html/cu ... otime.html

Danke !

PeterS
Beiträge: 161
Registriert: So 22. Feb 2015, 11:36
OS, Lazarus, FPC: L 3.8
CPU-Target: win32

Re: TDBF und Einfügen von Datensätzen ?

Beitrag von PeterS »

Zvoni hat geschrieben: Fr 20. Sep 2024, 14:25 Mal schnell zusammengeklopft (aus dem Gedächtnis heraus, kann sein, dass ich noch was vergessen habe)
...
Ja, hat funktioniert.

Jetzt muss ich noch lernen wie man mit SQL eine Datenbank "zu Fuß" erzeugt.
Oder geht das nicht mit SQL ?

Benutzeravatar
Zvoni
Beiträge: 396
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz 2.2.2 FPC 3.2.2)
CPU-Target: 32Bit
Wohnort: BW

Re: TDBF und Einfügen von Datensätzen ?

Beitrag von Zvoni »

PeterS hat geschrieben: Fr 20. Sep 2024, 21:27
Zvoni hat geschrieben: Fr 20. Sep 2024, 14:25 Mal schnell zusammengeklopft (aus dem Gedächtnis heraus, kann sein, dass ich noch was vergessen habe)
...
Ja, hat funktioniert.

Jetzt muss ich noch lernen wie man mit SQL eine Datenbank "zu Fuß" erzeugt.
Oder geht das nicht mit SQL ?
Natürlich geht das.
CreateDB vom connection-object, der rest ist CREATE TABLE dein freund
Siehe auch offizielle sqlite docs

bzw. Bei sqlite kein createdb. Wenn die datei bei Open nicht existiert, wird sie erzeugt

Was Tabellen angeht cheate ich: ich nutz DBBrowser for sqlite, lege dort alles an, und kopiere mir die SQL-Statements dann raus
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

PeterS
Beiträge: 161
Registriert: So 22. Feb 2015, 11:36
OS, Lazarus, FPC: L 3.8
CPU-Target: win32

Re: TDBF und Einfügen von Datensätzen ?

Beitrag von PeterS »

Zvoni hat geschrieben: Fr 20. Sep 2024, 21:46
PeterS hat geschrieben: Fr 20. Sep 2024, 21:27 Jetzt muss ich noch lernen wie man mit SQL eine Datenbank "zu Fuß" erzeugt.
Oder geht das nicht mit SQL ?
Natürlich geht das.
CreateDB vom connection-object, der rest ist CREATE TABLE dein freund
Siehe auch offizielle sqlite docs

bzw. Bei sqlite kein createdb. Wenn die datei bei Open nicht existiert, wird sie erzeugt
Was Tabellen angeht cheate ich: ich nutz DBBrowser for sqlite, lege dort alles an, und kopiere mir die SQL-Statements dann raus
Ich habe (endlich) das Tutorial mal überflogen ..
https://wiki.freepascal.org/Database_tutorial_SQLdb1/de
und ich sehe, das alles hat eine höhere Komplexität als ich gerade gebrauchen kann.

Natürlich habt Ihr recht daß man mit SQL weiter kommt,
aber ich schlage mich im Moment eh schon mit viel "Neuland" herum.
TCP, Serial (COM), und insbesondere das komplexe TAChart mit seinen 1000 Möglichkeiten.
Ich muss das mit dem SQL lernen auf die Zukunft verschieben.

PeterS
Beiträge: 161
Registriert: So 22. Feb 2015, 11:36
OS, Lazarus, FPC: L 3.8
CPU-Target: win32

Re: TDBF und Einfügen von Datensätzen ?

Beitrag von PeterS »

Aber dann noch eine Frage hierzu:
Sieben hat geschrieben: Fr 20. Sep 2024, 12:01
.. Datum + Uhrzeit "letzter Daten-Input". Also konkret z.B. 2024-09-20 23:59:320
Ich würde das - genau so wie in deinem Beispiel - im Format ISO8601 in einem Textfeld speichern - ist indexierbar und jederzeit problemlos lesbar, auch mit externen Tools.
Ich hatte die Denke, schreibe lieber TDateTime in die Tabelle (= Datenbank),
das kann man ohne zu wandeln direkt in Lazarus einlesen.
Also ich wollte die Umrechnungs-Zeit sparen weil ich das TDateTime so direkt brauchen kann.

Wenn ich aber Text erst wieder in TDateTime wandeln muss,
bedeutet das einen zusätzlichen Rechenaufwand.


Hat das Text-Format ISO8601 im Handling am Ende dann doch mehr Vorteile als Nachteile ?

Sieben
Beiträge: 292
Registriert: Mo 24. Aug 2020, 14:16
OS, Lazarus, FPC: Ubuntu Xenial 32, Lazarus 2.2.0, FPC 3.2.2
CPU-Target: i386

Re: TDBF und Einfügen von Datensätzen ?

Beitrag von Sieben »

Der 'Rechenaufwand' ist wirklich minimalst, besonders wenn man sich vor Augen hält, dass man hier in einer ereignisgesteuerten Umgebung unterwegs ist - jede einzelne Mausbewegung löst mehr Rechenaufwand aus.

Vorteile sind hingegen

- die von dir gewünschte Indexierbarkeit - eine simple alphanumerische Sortierung des Felds ergibt das gewünschte Ergebnis
- die direkte Lesbarkeit auch mit externen Tools (wie zB bei SQLite der schon empfohlene DBBrowser)
- wiederum in SQLite die schon erwähnten Funktionen auf Basis des ISO-Formats, die Operationen in Abfragen, Zuweisungen etc auch direkt in der Datenbank ermöglichen.

Im übrigen denke ich dass sich das ISO-Format gerade im Datenbankbereich immer mehr durchsetzen wird, nicht zuletzt weil sich auch Beschränkungen anderer Formate wie TDateTime damit umgehen lassen, zB was historische Daten betrifft.

PS Ich habe erst jetzt deinen vorletzten Post gelesen - bleibt immer noch die Indexierbarkeit und die Lesbarkeit der Werte auch ohne umgebendes Programm.

Antworten