Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Datensätze in DB einfügen (https://www.delphipraxis.net/44310-datensaetze-db-einfuegen.html)

elduchte 17. Apr 2005 16:01

Datenbank: Access • Version: 2000 • Zugriff über: ADO

Datensätze in DB einfügen
 
Hallo,

ich bin auf dem Gebiet der Datenbankprogrammierung in/mit Delphi noch ziemlich unerfahren. Mein Programm funktioniert allerdings nach einigen Anlaufschwierigkeiten ohne Probleme. Doch je mehr in diesem forum lese, desto mehr zweifel ich an der Richtigkeit meines Programmes:

Ich trage mit meinem Programm mittels ADOConnection, Dataset und DataSource Daten in meine Datenbank ein. Dazu greife ich beim Dataset mit der SQL-Anweisung

Delphi-Quellcode:
Select * from TabellenNamen
auf meine Tabelle zu.

Im Source-Code meines Programmes schreibe ich dann folgerdermaßen in die Datenbank:

Delphi-Quellcode:
  ADODataSet1.Append;
  ADODataSet1.FieldByName('Name').AsString := Firmenname.Text;
  ADODataSet1.Post;
Mittlerweile lese ich immer INSERT und UPDATE.

Kann mir da mal jemand bitte helfen, mache ich das eigentlich richtig, oder wird es anders gemacht?

Denn wenn ich nur in die Datenbank schreiben will, muss ich trotzdem die SELECT-Anweisung schreiben. Oder macht man dies anders?

Vielen Dank für Eure Hilfe
Andreas

Die Muhkuh 17. Apr 2005 16:10

Re: Datensätze in DB einfügen
 
Hi,

Z.B. du hast eine Tabelle "highscore" die so aufgebaut ist:

Code:
name | punkte
Wenn du nun einen neuen Datensatz einfügen willst, ginge das so:
Delphi-Quellcode:
Query1.SQL.Text := 'INSERT INTO highscores VALUES (:name, :punkte);
Query1.ParamByName('name').AsString := edName.Text;
Query1.ParamByName('punkte').AsInteger := StrToInt(edPunkte.Text);
Query1.ExecSQL;
Das SQL-Statement bedeutet folgendes: "Füge einen neuen Datensatz in die Tabelle highscores mit den Werten :name und :punkte".
:name und :punkte sind Parameter. Diese werden mit ParamByName('Parametername ohne den Doppelpunkt') angesprochen. Du kannst aber auch gleich sowas machen:

Delphi-Quellcode:
Query1.SQL.Text := 'INSERT INTO highscores VALUES ('Friedrich', 5000);
Wobei ich die Variante mit den Parametern bevorzuge, aber jedem das seine ;).

Query.ExecSQL bedeutet, dass das SQL-Statement ausgeführt wird.


Wenn du allerdings Daten aus der Datenbanken holen willst, geht alles genauso, nur musst du Query1.Open aufrufen anstatt Query1.ExecSQL.

elduchte 17. Apr 2005 16:17

Re: Datensätze in DB einfügen
 
Hi,

das sieht ja ganz anders aus, als wie bei mir, obwohl das nun auch tadellos funktioniert. Wo ist denn jetzt der Unterschied? In meinen Büchern finde ich immer die Geschicht mit ADOQuery bzw ADODataset und Append und Post?

Das ist mir noch nicht so klar ...

Gruß
Andi

elduchte 17. Apr 2005 16:21

Re: Datensätze in DB einfügen
 
Ich habe noch was vergessen:

... wenn ich nun beim Query oder DataSet die SQL-Anweisung weglasse, bekomme ich immer eine Fehlermeldung, also muss diese wohl vorhanden sein, oder kann ich eine andere Komponente nutzen (ausser TTable) ?

Sharky 17. Apr 2005 16:26

Re: Datensätze in DB einfügen
 
Hai elduchte,

es gehen beide Wege. In dem einem Fall erzeugst Du selber die INSERT, UPDATE SQL-Kommandos im anderen wird dies durch dein TQuery erledigt.

Es ist allerdings zu empfehlen es selber zu machen. Dadurch bist Du, meiner Meinung nach, viel flexibler im Code.
Ausserdem wird der Datensatz auf dem Server nur solange im Edit-Modus gehalten wie es gerade notwendig ist.

Guckst Du:
Delphi-Quellcode:
begin
  Query1.Edit; // Datensatz in den Editmodus bringen. Query1.Append hat das selbe Ergebniss.
  // Jetzt kommen beliebig
  // viele und auch
  // lange (zeitlich) Anweisungen
  Query1.Post; // Erst jetzt wird der Datensatz geschrieben und ist damit nicht mehr im Edit-Mode

elduchte 17. Apr 2005 16:40

Re: Datensätze in DB einfügen
 
Vielen Dank für die Erklärung, jemand hat aber mal gesagt, dass es nicht zeitgemäß ist, ein TQuery zu nutzen, sondern den Dataset.

Und ich muss wohl immer die SQL-Anweisung schreiben....

Gruß
Andreas


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