AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Zeilen editieren und updaten
Thema durchsuchen
Ansicht
Themen-Optionen

Zeilen editieren und updaten

Ein Thema von scuby · begonnen am 26. Aug 2005 · letzter Beitrag vom 26. Sep 2005
Antwort Antwort
Seite 1 von 2  1 2      
scuby

Registriert seit: 31. Jul 2005
122 Beiträge
 
#1

Zeilen editieren und updaten

  Alt 26. Aug 2005, 09:59
Datenbank: Delphidatenbank • Zugriff über: SQL
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;
  Mit Zitat antworten Zitat
scuby

Registriert seit: 31. Jul 2005
122 Beiträge
 
#2

Re: Zeilen editieren und updaten

  Alt 26. Aug 2005, 12:24
Kann mir wirklich keiner sagen wie ich das dann updaten kann??
  Mit Zitat antworten Zitat
Benutzerbild von kiar
kiar

Registriert seit: 2. Aug 2003
Ort: Aschersleben
1.362 Beiträge
 
Delphi 5 Professional
 
#3

Re: Zeilen editieren und updaten

  Alt 26. Aug 2005, 12:29
hallo Scuby,

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

raik
verhältnisse die einem nicht passen,
muss man verändern oder verlassen
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#4

Re: Zeilen editieren und updaten

  Alt 26. Aug 2005, 12:31
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
  Mit Zitat antworten Zitat
scuby

Registriert seit: 31. Jul 2005
122 Beiträge
 
#5

Re: Zeilen editieren und updaten

  Alt 26. Aug 2005, 12:32
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?
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#6

Re: Zeilen editieren und updaten

  Alt 26. Aug 2005, 12:38
Keine Ahnung, warum du unbedingt mit SQL / INSERT arbeiten möchtest.
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.
Andreas
  Mit Zitat antworten Zitat
scuby

Registriert seit: 31. Jul 2005
122 Beiträge
 
#7

Re: Zeilen editieren und updaten

  Alt 26. Aug 2005, 12:59
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;
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#8

Re: Zeilen editieren und updaten

  Alt 26. Aug 2005, 13:06
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".
Andreas
  Mit Zitat antworten Zitat
Emilio

Registriert seit: 14. Dez 2003
65 Beiträge
 
#9

Re: Zeilen editieren und updaten

  Alt 25. Sep 2005, 21:25
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
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#10

Re: Zeilen editieren und updaten

  Alt 26. Sep 2005, 09:56
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.
Andreas
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:05 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