Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Frage zu insert und update variationen (https://www.delphipraxis.net/125279-frage-zu-insert-und-update-variationen.html)

khh 3. Dez 2008 13:55

Datenbank: mysql • Version: 5 • Zugriff über: ZEOS

Frage zu insert und update variationen
 
hallo zusammen,
nach folgendem beispiel (welches hier aus der DP stammt):

Query1.SQL.Text := 'SELECT * FROM '+tablename+' WHERE 0=1';
Query1.Open; // liefert ein leere Datenmenge

Query1.Append; // Einfügemodus
Query1['feld1'] := ...
Query1['feld2'] := ...
Query1.Post; // Daten abschicken

speichere ich einen neuen DS aus meiner TKundenKlasse.

Leider gibt es so keine Möglichkeit mit der selben Abfrage geänderte Daten per update in die DB einzutragen.

Gibt es ein ähliches, abwandelbares Konstrukt, oder muss ich ein separates Statement verwenden?



Danke Gruss KH

mkinzler 3. Dez 2008 13:57

Re: Frage zu insert und update variationen
 
Delphi-Quellcode:
Query1.Edit;
statt .Append

khh 3. Dez 2008 14:32

Re: Frage zu insert und update variationen
 
Zitat:

Zitat von mkinzler
Delphi-Quellcode:
Query1.Edit;
statt .Append

mh, wäre ja zu einfach ;-)



so bekomme ich einen fehler: Duplikate Entry in field kundennummer.
Auf dem Feld kundennummer ist ein Uniquekey
EDIT: und wenn ich den key lösche schreibt er mir einen neuen satz :-(

Gruss Kh

khh 3. Dez 2008 15:55

Re: Frage zu insert und update variationen
 
mache ich etwas falsch, oder gehtswirklich nicht ?


Gruss Kh

nahpets 3. Dez 2008 16:07

Re: Frage zu insert und update variationen
 
Deine Fehlerbeschreibung läßt darauf schließen, dass Du bei der Kundennummer beim Edit einen Wert zuweist, der schon in der Datenbank enthalten ist. Das heißt dann aber nicht, dass das mit Edit nicht funktioniert, sondern nur, dass die Daten nicht so ganz zusammenpassen.
Poste bitte mal den ganzen Code, eventuell läßt sich da ja dann eine Fehlerursache finden. So ist's doch ein bisserl schwierig.

khh 3. Dez 2008 16:23

Re: Frage zu insert und update variationen
 
Zitat:

Zitat von nahpets
Deine Fehlerbeschreibung läßt darauf schließen, dass Du bei der Kundennummer beim Edit einen Wert zuweist, der schon in der Datenbank enthalten ist. Das heißt dann aber nicht, dass das mit Edit nicht funktioniert, sondern nur, dass die Daten nicht so ganz zusammenpassen.
Poste bitte mal den ganzen Code, eventuell läßt sich da ja dann eine Fehlerursache finden. So ist's doch ein bisserl schwierig.


ja klar,
ich hab ja vorher die daten aus der db gelesen und will sie jetzt zurückspeichern.
hier der code:
Delphi-Quellcode:
 FkundenQuery1.connection                           := FDBVerbindung;
     FkundenQuery1.sql.clear;
     FkundenQuery1.SQL.add('select ');
     FkundenQuery1.SQL.add('*');
     FkundenQuery1.SQL.add('from kunden where loeschkz = "0" and 0=1');
     FkundenQuery1.open; // liefert eine leere datenmenge
     if (FNeukunde = true) then
     begin
       FkundenQuery1.append;
     end else
     begin
       FkundenQuery1.edit;
     end;
     FkundenQuery1['name']:= Fname;
     FkundenQuery1['kundennummer']:= Fkdnr;
     FkundenQuery1['firma']:= Ffirma;
     FkundenQuery1['name']:= Fname ;
     FkundenQuery1['vorname']:= Fvorname;
     FkundenQuery1['strasse']:= Fstrasse;
     FkundenQuery1['nr']:= Fnr ;
     FkundenQuery1['plz']:= Fplz;
     FkundenQuery1['ort']:= Fort ;
     FkundenQuery1['vorwahl']:= Fvorwahl;
     FkundenQuery1['tel']:= Ftel;
     FkundenQuery1['tel2']:= Ftel2 ;
     FkundenQuery1['fax']:= Ffax;
     FkundenQuery1['handy']:= Fhandy ;
     FkundenQuery1['email']:= Femail ;
     FkundenQuery1['info']:= Finfo;
   
     FkundenQuery1.post;
if fkdnr steht die Kundennummer, die es natürlich im Falle der Änderung schon in der DB gibt.
EDIT: und in den andern feldern stehen die geänderten Werte
EDIT: das Ganze läuft in meiner Klasse TKunde.

Gruss KH

DeddyH 3. Dez 2008 16:44

Re: Frage zu insert und update variationen
 
Ich verstehe nicht ganz, wozu Du eine Abfrage brauchst, die Dir in jedem Fall eine leere Datenmenge liefert :gruebel:

khh 3. Dez 2008 17:01

Re: Frage zu insert und update variationen
 
Zitat:

Zitat von DeddyH
Ich verstehe nicht ganz, wozu Du eine Abfrage brauchst, die Dir in jedem Fall eine leere Datenmenge liefert :gruebel:

so stand es im Beispiel.
wenn ich die zeile:

FkundenQuery1.open; // liefert eine leere datenmenge

weglasse, bekomme ich in jedem Fall eine excepion: operation can not be performed on an inactive dataset :-(

EDIT: ich hab diese Art der Abfrage so auch zum ersten Mal hier gesehen

EDIT: hier : http://www.delphipraxis.net/internal...ct.php?t=26406

shmia 3. Dez 2008 17:04

Re: Frage zu insert und update variationen
 
Das Feld "kundennummer" muss das Primärschlüsselfeld sein.
Delphi-Quellcode:
FkundenQuery1.SQL.add('select * from kunden');
FkundenQuery1.SQL.add('where kundennummer='+QuotedStr(FKdnr)); // hier wäre ein Parameter vorteilhaft
FkundenQuery1.open; // liefert eine leere datenmenge oder Genau einen Datensatz
if FkundenQuery1.IsEmpty then
begin
  FkundenQuery1.append; // neuen Datensatz anhängen
end else
begin
  FkundenQuery1.edit; // bestehenden Datensatz ändern
end;

khh 3. Dez 2008 17:08

Re: Frage zu insert und update variationen
 
Zitat:

Zitat von shmia
Das Feld "kundennummer" muss das Primärschlüsselfeld sein.
Delphi-Quellcode:
FkundenQuery1.SQL.add('select * from kunden');
FkundenQuery1.SQL.add('where kundennummer='+QuotedStr(FKdnr)); // hier wäre ein Parameter vorteilhaft
FkundenQuery1.open; // liefert eine leere datenmenge oder Genau einen Datensatz
if FkundenQuery1.IsEmpty then
begin
  FkundenQuery1.append; // neuen Datensatz anhängen
end else
begin
  FkundenQuery1.edit; // bestehenden Datensatz ändern
end;


aha, na dann probier ich das gleich mal


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