![]() |
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; |
Re: Zeilen editieren und updaten
Kann mir wirklich keiner sagen wie ich das dann updaten kann??
|
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 |
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 |
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? |
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:
Das war ein UPDATE von bestehenden Daten.
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; 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. |
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; |
Re: Zeilen editieren und updaten
Zitat:
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". |
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 |
Re: Zeilen editieren und updaten
Zitat:
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 10:25 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz