Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Zeilen editieren und updaten (https://www.delphipraxis.net/52259-zeilen-editieren-und-updaten.html)

scuby 26. Aug 2005 09:59

Datenbank: Delphidatenbank • Zugriff über: SQL

Zeilen editieren und updaten
 
Hallo zusammen,

ich habe ein winziges Problem und zwar, wenn ich eine Komplette Zeile aus meiner Datenabnk auslesen lasse, und die dann .Astring in Edit-Felder einfüge und dann dort editiere und anschließend wieder in die selbe zeile einfügen möchte, bekomme ich eine Fehlermeldung.
Ich denke, das ich nur den Falschen Befehl für das Updaten benutze, villeicht könnt ihr mir ja helfen.
Hier mein Code zur entsprechenden Stelle:

Delphi-Quellcode:
procedure TForm6.Button7Click(Sender: TObject);
begin
query1.last;
edit2.Text := query1.Fieldbyname('Name').AsString;
edit3.Text := query1.Fieldbyname('Vorname').AsString;
edit4.Text := query1.Fieldbyname('Gebdat').AsString;
edit5.Text := query1.Fieldbyname('Straße').AsString;
edit6.Text := query1.Fieldbyname('Hnr').AsString;
edit7.Text := query1.Fieldbyname('PLZ').AsString;
edit8.Text := query1.Fieldbyname('Ort').AsString;
edit9.Text := query1.Fieldbyname('tel').AsString;
edit10.Text := query1.Fieldbyname('Fahrschule').AsString;
edit11.Text := query1.Fieldbyname('Kurs').AsString;
edit12.Text := query1.Fieldbyname('adatum').AsString;
edit13.Text := query1.Fieldbyname('edatum').AsString;
edit14.Text := query1.Fieldbyname('Lort').AsString;
edit15.Text := query1.Fieldbyname('Ausbilder').AsString;
end;

procedure TForm6.Button8Click(Sender: TObject);
var s,t : string;
begin
s := 'select Name,Vorname,Gebdat,Straße,hnr,plz,ort,tel,fahrschule,LFDNR from teilnehmer';
query1.close;
Query1.Sql.Text := s;
Query1.Active:=true;

t:= 'INSERT INTO teilnehmer (name, vorname, gebdat,straße,hnr,plz,ort,tel,fahrschule,ausbilder,adatum,edatum,kurs,Nummer,LOrt,LFDNR) VALUES ('+#39+ Edit2.Text+#39+','+#39+Edit3.Text+#39+','+#39+Edit4.Text+#39+','+#39+ Edit5.Text+#39+','+#39+Edit6.Text+#39+','+#39+Edit7.Text+#39+','+#39+
Edit8.Text+#39+','+#39+ Edit9.Text+#39+','+#39+ Edit10.Text+#39+','+#39+ Edit11.Text+#39+','+#39+ Edit12.Text+#39+','+#39+ Edit13.Text+#39+','+#39+ Edit14.Text+#39+','+#39+ Edit15.Text+#39+')';
query1.close;
Query1.Sql.Clear;
Query1.Sql.Add(t);
Query1.Append;

end;

scuby 26. Aug 2005 12:24

Re: Zeilen editieren und updaten
 
Kann mir wirklich keiner sagen wie ich das dann updaten kann??

kiar 26. Aug 2005 12:29

Re: Zeilen editieren und updaten
 
hallo Scuby,

1. pushen ist nicht erwünscht innerhalb von 24 Stunden
2. schon mal nach Update und Sql gesucht?

raik

Die Muhkuh 26. Aug 2005 12:31

Re: Zeilen editieren und updaten
 
Hi scuby,

das pushen der Beiträge ist erst nach 24h erlaubt :) . Bitte halte dich daran. Danke ;)

Desweiteren. Schau dir mal Parameter an:

Delphi-Quellcode:
t:= 'INSERT INTO teilnehmer (name, vorname, gebdat,straße,hnr,plz,ort,tel,fahrschule,ausbilder,adatum,edatum,kurs,Nummer,LOrt,LFDNR) VALUES (:name, :vorname, :geb, :str, ...)';
query1.close;
Query1.Sql.Clear;
Query1.Sql.Add(t);
Query1.ParamByName('name').AsString := Editx.text;
Query1.ParamByName('vorname').AsString := Editx.text;
Query1.ParamByName('geb').AsString := Editx.text;
...
Query1.ExecSQL; // <-- Das hier ist besser als Append IMHO

scuby 26. Aug 2005 12:32

Re: Zeilen editieren und updaten
 
OK werde mcih dran halten wegen dem pushen, ja nach update habe ich schon gesucht, funktioniert genausowenig wie ExecSql.
Gibt es noch andere Möglichkeiten?

shmia 26. Aug 2005 12:38

Re: Zeilen editieren und updaten
 
Keine Ahnung, warum du unbedingt mit SQL / INSERT arbeiten möchtest. :roll:
Ist LFDNR dein Primär Schlüssel ??
Dann ist klar, das du keinen 2. Datensatz mit gleichem Key einfügen kannst.

Dabei geht das doch so einfach direkt über die Query:
Delphi-Quellcode:
procedure TForm6.Button8Click(Sender: TObject);
var s,t : string;
begin
s := 'select Name,Vorname,Gebdat,Straße,hnr,plz,ort,tel,fahrschule,LFDNR from teilnehmer';
query1.close;
Query1.Sql.Text := s;
Query1.Open;

// Datensatz updaten
Query1.Edit;
Query1['name'] := Edit2.Text;
Query1['vorname'] := Edit3.Text;
// weitere Felder
...
Query1.Post; // in die Tabelle schreiben
end;
Das war ein UPDATE von bestehenden Daten.
Einfügen geht genau gleich; du musst nur Query1.Append statt Query1.Edit schreiben.
Natürlich verwendet man für Einfügen und Ändern die gleich (Unter-)Prozedur; man will ja das Rad nicht 2 Mal erfinden.

PS: er gibt auch keinen Grund, warum du Query1.SQL an verschiedenen Stellen zuweisen musst. Einmal reicht doch.
Als Anfänger in Sachen Datenbank würde ich dir empfehlen, mit datensensitiven Steuerelementen (alles was mit TDB.. beginnt) zu arbeiten.
Diese DB-Controls haben zwar gewisse Nachteile, aber für so eine Standardsituation sind sie optimal.

scuby 26. Aug 2005 12:59

Re: Zeilen editieren und updaten
 
Hallo,

ich habe es nun so probiert wie du mir das gesagt hast, doch nun bekomme ich eine andere Fehlermeldung und zwar:

Query1 ist eine Datenmende, die nur zum lesen ist, kann nicht geändert werden.

Anbei den neuen Quelltext:

Delphi-Quellcode:
procedure TForm6.Button8Click(Sender: TObject);
var s,t : string;
begin
s := 'select Name,Vorname,Gebdat,Straße,hnr,plz,ort,tel,fahrschule,LFDNR,Bemerkung1,Bemerkung2,Bemerkung3 from teilnehmer';
query1.close;
Query1.Sql.Text := s;


{
t:= 'INSERT INTO teilnehmer (name, vorname, gebdat,straße,hnr,plz,ort,tel,fahrschule,ausbilder,adatum,edatum,kurs,Nummer,LOrt,LFDNR,Bemerkung1,Bemerkung2,Bemerkung3) VALUES ('+#39+ Edit2.Text+#39+','+#39+Edit3.Text+#39+','+#39+Edit4.Text+#39+','+#39+ Edit5.Text+#39+','+#39+Edit6.Text+#39+','+#39+Edit7.Text+#39+','+#39+
Edit8.Text+#39+','+#39+ Edit9.Text+#39+','+#39+ Edit10.Text+#39+','+#39+ Edit11.Text+#39+','+#39+ Edit12.Text+#39+','+#39+ Edit13.Text+#39+','+#39+ Edit14.Text+#39+','+#39+ Edit15.Text+#39+','+#39+ edit16.Text+#39+','+#39+ edit17.Text+#39+','+#39+ edit18.Text+#39+')';
query1.close;
Query1.Sql.Clear;
Query1.Sql.Add(t);
Query1.Append;
}
Query1.Open;
Query1.Edit;
Query1['name'] := edit12.Text;
Query1.post;
end;

shmia 26. Aug 2005 13:06

Re: Zeilen editieren und updaten
 
Zitat:

Zitat von scuby
ich habe es nun so probiert wie du mir das gesagt hast, doch nun bekomme ich eine andere Fehlermeldung und zwar:
Query1 ist eine Datenmende, die nur zum lesen ist, kann nicht geändert werden.

Query1.RequestLive auf True setzen.
Es gibt Queries, bei denen das nicht nützt (das sind dann joins über mehrere Tabellen oder GROUP BY wird verwendet),
aber in deinem Fall sollte das funktionieren.
Falls doch nicht, dann lies in der Hilfe mit Stichwort "RequestLive".

Emilio 25. Sep 2005 21:25

Re: Zeilen editieren und updaten
 
Hi allerseits,

beim Suchen zu einem vergleichbaren Problem bin auf dieses Thema gestoßen.

@shmia,

[Es gibt Queries, bei denen das nicht nützt (das sind dann joins über mehrere Tabellen oder GROUP BY wird verwendet), ]

ich habe eine query über 9 tables (in einem davon sollen Änderungen durchgeführt werden können). Die Query enthält außerdem Berechnungen und einen ORDER BY. Die neuen Feldwerte soll der User über EDIT-Felder eingeben, wobei es sein kann, dass er nur 1 Wert ändern will, (z.B. Einkaufspreis), während die anderen Felder "leer" bleiben - also in der zugrundeliegenden Tabelle nicht geändert werden sollen.

Hast Du einen Vorschlag, wie ich am besten vorgehen sollte?

VG Emilio

shmia 26. Sep 2005 09:56

Re: Zeilen editieren und updaten
 
Zitat:

Zitat von Emilio
ich habe eine query über 9 tables (in einem davon sollen Änderungen durchgeführt werden können). Die Query enthält außerdem Berechnungen und einen ORDER BY. Die neuen Feldwerte soll der User über EDIT-Felder eingeben, wobei es sein kann, dass er nur 1 Wert ändern will, (z.B. Einkaufspreis), während die anderen Felder "leer" bleiben - also in der zugrundeliegenden Tabelle nicht geändert werden sollen.

Du musst wohl von der Idee, dem Benutzer eine "inplace" Editiermöglichkeit zu bieten, Abschied nehmen.
Statt dessen bietest du dem Benutzer (über Menu oder Buttons) die Formulare an, mit denen der Artikelstamm normalerweise editiert wird.
Da es mehrere Tabellen gibt, gibt es auch mehrere Formulare. Der Benutzer muss entscheiden, was er editieren möchte.
Jedes Formular editiert nur eine Tabelle.
Als Bonus hat jedes Formular ein zusätzl. Property KeyFieldValue.
Damit kannst du dann mit Locate() gleich auf den Datensatz springen, den der Benutzer in der "9-Table-Query" gerade betrachtet hat.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:28 Uhr.
Seite 1 von 2  1 2      

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