Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL update, wie geht das? (https://www.delphipraxis.net/166881-sql-update-wie-geht-das.html)

BBoy 4. Mär 2012 09:36

Datenbank: TurboDB • Version: 5 • Zugriff über: TurboDB

SQL update, wie geht das?
 
Ich füge in meine Datenbank neue Datensätze hinzu wie folgt:
Delphi-Quellcode:
 TdbQuery_insert.DatabaseName := tdbtable1.DatabaseName;
  tdbquery_insert.SQL.Text := 'insert into tour (gccode,tourpos) values (:code, :tpos)' ;
  tdbquery_insert.Prepare;

  tdbquery_insert.ParamByName('code').AsString := 'GC12149';
  tdbquery_insert.ParamByName('tpos').AsString := '1';
  tdbquery_insert.ExecSQL;
Nur mit wesentlich mehr Datenfeldern als oben im Beispiel gezeigt.
Nun möchte ich mein Programm erweitern und es sollen vorhandene Datensätze überschrieben/aktualisiert werden. Also der aktuelle Datensatz soll überschreiben werden mit den aktuellen daten. Wie lautet in meinem Fall dazu der SQL Befehl?

Danke für eure Hilfe!

mkinzler 4. Mär 2012 09:52

AW: SQL update, wie geht das?
 
Du bleibst deinem Prinzip treu, auf Grundlagenwissen komplett zu verzichten. Jedes noch so einfaches unvollständige SQL-Tutorial geht auf die die wichtigsten SQL-Befehel wie Insert, Update und Delete ein.

http://www.torsten-horn.de/techdocs/sql.htm

BBoy 4. Mär 2012 10:36

AW: SQL update, wie geht das?
 
Dieses sql liegt mir nicht, das will mir einfach nicht rein :):oops: In den tutorials ist immer alles anders erklärt als es bei mir ist :?
Vielleicht erbarmt sich ja doch noch jemand mit dem delphi code. Wäre nett, Danke!

RWarnecke 4. Mär 2012 10:51

AW: SQL update, wie geht das?
 
Was verstehst Du denn jetzt nicht ? Ein Update-Befehl könnte so aussehen :
Code:
UPDATE tabelleAutor
SET Name = Otto, GebJahr = 1954, Beruf = NULL
WHERE Nr = 10;
Hier wird in der Tabelle "tabelleAutor" das Feld Name, GebJahr und Beruf vom Datensatz Nr. 10 geändert. Mit dem Wert NULL, wird der Inhalt des Feldes Beruf komplett gelöscht. Das Beispiel musst Du jetzt selber umbauen auf Deine Tabelle, wo Du einen Datensatz ändern möchtest.

BBoy 4. Mär 2012 10:57

AW: SQL update, wie geht das?
 
ja so habe ich das auch verstanden. der unterschied ist, dass ich in meinem programm mit feldnamen in sql arbeite, also so:
Delphi-Quellcode:
 tdbquery_insert.SQL.Text := 'insert into tour (gccode,tourpos) values (:code, :tpos)' ;
:code usw meine ich.
Wie setze ich das ein? So das ich die felder dann folgendermaßen füllen kann:
Delphi-Quellcode:
TdbQuery_insupd.ParamByName('TourPos').AsInteger   :=

So in etwa?
Delphi-Quellcode:
UPDATE tabelleAutor
SET Name = :name, GebJahr = :gebjahr, Beruf = NULL
WHERE Nr = 10;

RWarnecke 4. Mär 2012 11:11

AW: SQL update, wie geht das?
 
Zitat:

Zitat von BBoy (Beitrag 1154401)
So in etwa?
Delphi-Quellcode:
UPDATE tabelleAutor
SET Name = :name, GebJahr = :gebjahr, Beruf = NULL
WHERE Nr = 10;

Ja, jeder Wert für ein Feld kann durch einen Parameter ersetzt werden. Die Parameter können dann später genau so befüllt werden wie bei Deim INSERT INTO.

BBoy 4. Mär 2012 13:14

AW: SQL update, wie geht das?
 
und wie ist der syntax? Ich versuche es so und es kommt ne fehlermeldung:
Delphi-Quellcode:
update tour set TourPos= :TourPos, CacheLat= :CacheLat, CacheLon= :CacheLon

RWarnecke 4. Mär 2012 13:18

AW: SQL update, wie geht das?
 
Was für eine Fehlermeldung ? Meine :glaskugel: ist heute defekt.

Du musst den Update-Befehl genau so durchführen, wie den INSERT-Befehl. Also den Update-Befehl in die Query schreiben, den Parametern die Werte zuweisen und dann ausführen.

Edit:
Zitat:

Zitat von BBoy (Beitrag 1154424)
und wie ist der syntax? Ich versuche es so und es kommt ne fehlermeldung:
Delphi-Quellcode:
update tour set TourPos= :TourPos, CacheLat= :CacheLat, CacheLon= :CacheLon

Wo ist die Where-Abfrage ? Woher soll die Query wissen, welchen Datensatz Du ändern möchtest ? Siehe Beispiel aus Beitrag 4.

BBoy 5. Mär 2012 12:58

AW: SQL update, wie geht das?
 
Die Fehlermeldung: "Records must be unique with respect to 'GCCode'

Wieso muss bei einem update der index einmalig sein?

Hier meine Anweisung:
Delphi-Quellcode:
TdbQuery_insupd.SQL.Text := 'update logs set GCCode= :GCCode, LogId= :LogId, LogDate= :LogDate, LogType= :LogType, LogFinderId= :LogFinderId, LogFinder= :LogFinder, LogTextEn= :LogTextEn, LogText= :LogText where gccode = '+QuotedStr(CName);

Sir Rufo 5. Mär 2012 13:05

AW: SQL update, wie geht das?
 
SQL-Code:
update
  logs
set
  LogId =      :LogId,
  LogDate =    :LogDate,
  LogType =    :LogType,
  LogFinderId = :LogFinderId,
  LogFinder =  :LogFinder,
  LogTextEn =  :LogTextEn,
  LogText =    :LogText
where
  gccode =    :GCCode
So wird ein Schuh draus. Und warum soll beim Update der Index-Spalte (nach der du einschränkst) ein Wert zugewiesen werden - auch wenn es der gleiche Wert ist.

Bei einem Update muss der Index nicht eindeutig sein, es wird halt bei jedem Datensatz geschrieben, der gefunden wird.

ABER, wenn du in der Tabelle einen PRIMARY KEY hast (z.B. das Feld id) und willst den per
SQL-Code:
Update MyTable Set id=1
da Änderungen rein bringen, was wird dann deiner Meinung nach passieren.
Jo, jeder Datensatz bekommt also im Feld id die 1 reingedrückt. Und dann, ist dann id immer noch eindeutig, also ein PRIMARY KEY?


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