Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi ADO SQL UPDATE (https://www.delphipraxis.net/133655-ado-sql-update.html)

thiagojonas 6. Mai 2009 13:58

Datenbank: Accsses • Zugriff über: ADO

ADO SQL UPDATE
 
Hallo Leute,
ich habe ein komisches Problem :-D

Also ich Update mit ADOQuery meine Werte in der DB.

Delphi-Quellcode:
ADOQuery1.SQL.Text := 'UPDATE `Profil` SET `Anrede` = '''+geschlecht+''','+
  '`Vorname`='''+vorname.Text+''','+
  '`Nachname`='''+nachname.Text+''','+
  '`Alter`='''+birthday+''','+
  '`Strasse`='''+strasse.Text+''' WHERE `Profil_ID` = '''+main_win.profil_ID+''';';
  ADOQuery1.ExecSQL;
Bei main_win.profil_ID bekommen ich eine Fehlermeldung:
profil_ID habe ich unter publich als string deklariert und mit ShowMessage wird es angezeigt, also kann es nicht daran liegen, dass der Wert nicht geladen wird.

Zitat:

Im Projekt Valho_Student.exe ist eine Exception der Klasse EOleException mit der Meldung 'Datentypen in Kriterienausdruck unverträglich' aufgetreten.
Wenn ich main_win.profil_ID durch eine vorhandenen ID Wert in der DB ersetzte dann klappt es.

Delphi-Quellcode:
ADOQuery1.SQL.Text := 'UPDATE `Profil` SET `Anrede` = '''+geschlecht+''','+
  '`Vorname`='''+vorname.Text+''','+
  '`Nachname`='''+nachname.Text+''','+
  '`Alter`='''+birthday+''','+
  '`Strasse`='''+strasse.Text+''' WHERE `Profil_ID` = ''2'';';
  ADOQuery1.ExecSQL;
Vielleicht kann mir einer weiterhelfen. Danke :-D

DeddyH 6. Mai 2009 14:34

Re: ADO SQL UPDATE
 
Versuch es mal mit SQL-Parametern.

nahpets 6. Mai 2009 14:41

Re: ADO SQL UPDATE
 
Hallo,

wenn es mitt DeddyH's Vorschlag nicht funktioniert, versuchs bitte mal damit:
Delphi-Quellcode:
  ADOQuery1.SQL.Text := 'UPDATE `Profil` SET `Anrede` = ' + QuotedStr(geschlecht) + ',' +
  '`Vorname` = ' + QuotedStr(vorname.Text) + ',' +
  '`Nachname` = ' + QuotedStr(nachname.Text) + ',' +
  '`Alter` = ' + QuotedStr(birthday) + ',' +
  '`Strasse` = ' + QuodetStr(strasse.Text) +
  ' WHERE `Profil_ID` = ' + QuotedStr(main_win.profil_ID) + ';';
  ADOQuery1.ExecSQL;
QuotedStr sorgt für die entsprechenden Hochkommata, dann muss Du nicht soviele '' machen.
Von welchem Typ ist main_win.profil_ID, eine Zeichenfolge? Wenn nein, dann bitte mit
Delphi-Quellcode:
' WHERE `Profil_ID` = ' + main_win.profil_ID + ';';
versuchen.

taveuni 6. Mai 2009 14:42

Re: ADO SQL UPDATE
 
Was für ein Datentyp hat denn profil_id in der Datenbank?
Die Fehlermeldung sagt dass Du vermutlich einen String in ein
INT Datenfeld schreiben willst.

Wie schon vom Vor-Poster erwähnt kannst Du Dir sowieso
mit Parametern solche '''+''' Übungen sparen.

shmia 6. Mai 2009 14:47

Re: ADO SQL UPDATE
 
Bitte gewöhn' dir gleich auch mal die falsche Verwendung von dem Akzentzeichen ` ab.
Dieses Zeichen hat in einer SQL-Anweisung nichts verloren.
Sollte ein Tabellen- oder Feldname gequotet werden müssen, dann sind doppelte Anführungszeichen zu verwenden:
SQL-Code:
SELECT "42_Feld_das_mit_ner Zahl_beginnt" FROM "Tabelle mit Leerzeichen"
Man sollte es grundsätzlich vermeiden, Tabellen- oder Feldnamen so zu benennen, dass man sie in Anführungszeichen setzen muss.
Dies ist immer ein Indiz dafür, dass der Datenbankdesigner nicht richtig nachgedacht hat.

String-Literale werden in einfache Hochkommas gesetzt:
SQL-Code:
SELECT * FROM Auskunft WHERE TelefonNr='110'

thiagojonas 6. Mai 2009 22:20

Re: ADO SQL UPDATE
 
Hallo, Danke für die Hilfen, leider funktioniert es nicht :cry:

shmia 7. Mai 2009 10:08

Re: ADO SQL UPDATE
 
Zitat:

Zitat von thiagojonas
... leider funktioniert es nicht :cry:

WAS funktioniert nicht?
Fehlerberichte - wie Sie Softwarefehler melden sollten
Zeige den Sourcecode, den du verwendet hast und nenne die Fehlermeldung.

thiagojonas 7. Mai 2009 16:15

Re: ADO SQL UPDATE
 
Folgende Fehlemeldung:

Zitat:

---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Valho_Student.exe ist eine Exception der Klasse EOleException mit der Meldung 'Datentypen in Kriterienausdruck unverträglich' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------

taveuni 7. Mai 2009 16:30

Re: ADO SQL UPDATE
 
Zitat:

Zitat von thiagojonas
Folgende Fehlemeldung:

Zitat:

---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Valho_Student.exe ist eine Exception der Klasse EOleException mit der Meldung 'Datentypen in Kriterienausdruck unverträglich' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------

Nochmal:
- Von welchem Datentyp ist Profil_ID?
- Hast Du die Ratschläge umgesetzt?
- Falls ja: Wo kommt die Exception? (Sourcecode)

thiagojonas 7. Mai 2009 16:39

Re: ADO SQL UPDATE
 
Also Datentyp ist Integer, primary key und halt autoincrement.

Also 1,2,3,4,etc.

Habe es so gemacht wie nahpets es mir vorgeschlagen hat, mit
Delphi-Quellcode:
' WHERE `Profil_ID` = ' + main_win.profil_ID + ';';
Bekomme dann diese Fehlermeldung:

Zitat:

---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Valho_Student.exe ist eine Exception der Klasse EOleException mit der Meldung 'Syntaxfehler (fehlender Operator) in Abfrageausdruck '`Profil_ID` ='' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------

DeddyH 7. Mai 2009 16:46

Re: ADO SQL UPDATE
 
Und so?
Delphi-Quellcode:
ADOQuery1.SQL.Text := 'UPDATE Profil SET Anrede = :geschlecht,'+
'Vorname = :vorname,'+
'Nachname = :nachname,'+
'Alter = :birthday,'+
'Strasse = :strasse WHERE Profil_ID = :id';
ADOQuery1.Parameters.ParamByName('geschlecht').Value := geschlecht;
ADOQuery1.Parameters.ParamByName('vorname').Value := vorname.Text;
ADOQuery1.Parameters.ParamByName('nachname').Value := nachname.Text;
ADOQuery1.Parameters.ParamByName('birthday').Value := birthday;
ADOQuery1.Parameters.ParamByName('strasse').Value := strasse.Text;
ADOQuery1.Parameters.ParamByName('id').Value := main_win.profil_ID;
ADOQuery1.ExecSQL;

thiagojonas 7. Mai 2009 16:50

Re: ADO SQL UPDATE
 
Zitat:

---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Valho_Student.exe ist eine Exception der Klasse EOleException mit der Meldung 'Syntaxfehler in UPDATE-Anweisung' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------

DeddyH 7. Mai 2009 16:51

Re: ADO SQL UPDATE
 
Lass Dir doch das SQL mal von diesem unsäglichen Access generieren, dann sollte man sehen, was da nicht passt.

thiagojonas 7. Mai 2009 16:56

Re: ADO SQL UPDATE
 
Wie kann ich das machen?

DeddyH 7. Mai 2009 16:57

Re: ADO SQL UPDATE
 
Da muss ich passen, ich benutze kein Access.

thiagojonas 7. Mai 2009 16:59

Re: ADO SQL UPDATE
 
Es muss irgenwie an ProfilID liegen, denn wenn ich dort einfach eine Zahl einstetze dann klappt es.

DeddyH 7. Mai 2009 17:01

Re: ADO SQL UPDATE
 
Und main_win.profil_ID ist ganz sicher ein ganzzahliger Typ?

thiagojonas 7. Mai 2009 17:02

Re: ADO SQL UPDATE
 
Hat sich erledigt, ich habe nur für eine Bestimmte Bedingung und zwar, wenn RowCount = 1 ist, die ProfilID nicht geladen :wall:
Danke Euch allen :-D

p80286 7. Mai 2009 17:04

Re: ADO SQL UPDATE
 
Erstelle eine Auswahlabfrage mit den Fällen die Du ändern willst.

Dann ändere sie in Aktualisierungsabfrage.

Trage in "Aktualisieren" den neuen Wert ein.

Wähle die SQL-Ansicht.
Da sollte dann so etwas erscheinen:
SQL-Code:
UPDATE VTP_TABDOS SET
WHERE (((VTP_TABDOS.CODDOS) Like "T*"));
(meine Meinung hierzu spar ich mir)

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:41 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-2025 by Thomas Breitkreuz