AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SQL: Update-Befehl löscht Datensatz?
Thema durchsuchen
Ansicht
Themen-Optionen

SQL: Update-Befehl löscht Datensatz?

Ein Thema von FBrust · begonnen am 22. Jan 2007 · letzter Beitrag vom 23. Jan 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von FBrust
FBrust

Registriert seit: 4. Okt 2002
Ort: Saarbrücken
654 Beiträge
 
Delphi 10.4 Sydney
 
#1

SQL: Update-Befehl löscht Datensatz?

  Alt 22. Jan 2007, 13:20
Datenbank: BDE • Version: 5.1 • Zugriff über: BDE-Komponenten
Hallo,

ich möchte in meinem Programm per SQL-Befehl eine Tabelle aktualisieren, habe aber das Problem, dass der Update-Befehl den zu ändernden Datensatz löscht, sobald ein Memo-Feld bearbeitet werden soll.

Zum Verständnis:

Dieser Befehl löscht den Datensatz kommentarlos aus der Tabelle:

Delphi-Quellcode:
        SQL.Text := 'UPDATE SD_CUST SET ' +
                    'STRSHORTNAME = ' + QuotedStr(edtShortName.Text) + ', ' +
                    'STRNAME1 = '     + QuotedStr(edtName1.Text) + ', ' +
                    'STRNAME2 = '     + QuotedStr(edtName2.Text) + ', ' +
                    'STRNAME3 = '     + QuotedStr(edtName3.Text) + ', ' +
                    'STRSTREET = '    + QuotedStr(edtStreet.Text) + ', ' +
                    'STRPOSTCODE = '  + QuotedStr(edtPostcode.Text) + ', ' +
                    'STRCITY = '      + QuotedStr(edtCity.Text) + ', ' +
                    'STRPHONE1 = '    + QuotedStr(edtPhone1.Text) + ', ' +
                    'STRPHONE2 = '    + QuotedStr(edtPhone2.Text) + ', ' +
                    'STRFAX = '       + QuotedStr(edtFax.Text) + ', ' +
                    'MMREMARKS = '    + QuotedStr(mRemarks.Text) + ' ' +
'WHERE ID = ' + lblID.Caption + ';';
Wenn ich die letzte Zeile mit dem Feld "MMREMARKS" (das ist das Memo-Feld) rausnehme, funktionierts:


Delphi-Quellcode:
        SQL.Text := 'UPDATE SD_CUST SET ' +
                    'STRSHORTNAME = ' + QuotedStr(edtShortName.Text) + ', ' +
                    'STRNAME1 = '     + QuotedStr(edtName1.Text) + ', ' +
                    'STRNAME2 = '     + QuotedStr(edtName2.Text) + ', ' +
                    'STRNAME3 = '     + QuotedStr(edtName3.Text) + ', ' +
                    'STRSTREET = '    + QuotedStr(edtStreet.Text) + ', ' +
                    'STRPOSTCODE = '  + QuotedStr(edtPostcode.Text) + ', ' +
                    'STRCITY = '      + QuotedStr(edtCity.Text) + ', ' +
                    'STRPHONE1 = '    + QuotedStr(edtPhone1.Text) + ', ' +
                    'STRPHONE2 = '    + QuotedStr(edtPhone2.Text) + ', ' +
                    'STRFAX = '       + QuotedStr(edtFax.Text) + ', ' +
'WHERE ID = ' + lblID.Caption + ';';
Wenn ich nur das Memofeld update, funktionierts aber auch

Delphi-Quellcode:
        SQL.Text := 'UPDATE SD_CUST SET ' +
                            'MMREMARKS = '    + QuotedStr(mRemarks.Text) + ' ' +
'WHERE ID = ' + lblID.Caption + ';';
Muss ich bei einem Update zwei Befehle absetzen, einmal für das Memo-Feld und einmal für den Rest?

Vielleicht hat jemand einen Tip.


Gruß
Frank
"Ich habe Dinge gesehen, die ihr Menschen niemals glauben würdet. Gigantische Schiffe, die brannten, draußen vor der Schulter des Orion" - Roy Batty
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: SQL: Update-Befehl löscht Datensatz?

  Alt 22. Jan 2007, 13:23
Versuchs mal mit Parametern
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von FBrust
FBrust

Registriert seit: 4. Okt 2002
Ort: Saarbrücken
654 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: SQL: Update-Befehl löscht Datensatz?

  Alt 22. Jan 2007, 13:39
Hallo,

die Abfrage hat allerdings variable SQL-Befehle, so dass ich keine Parameter hinterlegen kann.

Gruß
Frank
"Ich habe Dinge gesehen, die ihr Menschen niemals glauben würdet. Gigantische Schiffe, die brannten, draußen vor der Schulter des Orion" - Roy Batty
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: SQL: Update-Befehl löscht Datensatz?

  Alt 22. Jan 2007, 13:49
Auch dann kann man Parameter verwenden. Ist halt ein Bisschen mehr Aufwand. Wäre m.E. aber ein Test wert. (Vielleicht nur für das Memofeld)
Markus Kinzler
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: SQL: Update-Befehl löscht Datensatz?

  Alt 22. Jan 2007, 14:59
Hallo,

ich hatte damals die Memos in Pdx über TTable aktualisiert.
Aber du kannst mit Parametern ja mal

ParamByName(theFieldName).AsBlob:= theText; probieren.


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von FBrust
FBrust

Registriert seit: 4. Okt 2002
Ort: Saarbrücken
654 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: SQL: Update-Befehl löscht Datensatz?

  Alt 22. Jan 2007, 15:16
Hallo,

natürlich kann ich zum Updaten der BDE-Tabellen auch fest definierte Abfragen (mit Parametern) nehmen.

Hintergrund der ganzen Geschichte ist jedoch, dass das ganze Programm auf eine andere Datenbank umgestellt werden soll (wahrscheinlich Firebird). Da die Tabellen bisher per Edit und Post aktualisiert werden und dies nachher nicht mehr funktionieren wird, war meine Idee, die bestehenden Tabellen über TQuery zu aktualisieren und den Befehl zur Laufzeit zu erstellen, so dass die Komponenten möglichst wenig fest definierte Eigenschaften haben und ich sie später einfacher austauschen kann.

Wenn ich jetzt für Insert- und Update-Aktionen wieder für jede Stammdatentabelle andere Abfragen (jeweils für Insert und Update) hinterlegen muss, wird die Umstellerei m. E. zu kompliziert.

Daher der Versuch, den SQL-Befehl zur Laufzeit zu erstellen und einer allgemeingültigen Abfrage zuzuweisen.

Aber anscheinend muss ich mir für Memo-Felder was gesondertes überlegen.


Gruß
Frank

Nachtrag: mKinzler, ich hab Deinen Beitrag erst jetzt gelesen, wie funktioniert das denn?

Noch ein Nachtrag: Ausserdem erklärt das nicht, warum der Befehl funktioniert, wenn das Memo-Feld alleine aktualisiert wird.
"Ich habe Dinge gesehen, die ihr Menschen niemals glauben würdet. Gigantische Schiffe, die brannten, draußen vor der Schulter des Orion" - Roy Batty
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: SQL: Update-Befehl löscht Datensatz?

  Alt 22. Jan 2007, 15:18
Zitat:
Da die Tabellen bisher per Edit und Post aktualisiert werden und dies nachher nicht mehr funktionieren wird,
Funktionieren wirds schon, davon ist aber abzuraten.

[Edit:
Zitat:
Nachtrag: mKinzler, ich hab Deinen Beitrag erst jetzt gelesen, wie funktioniert das denn?
Delphi-Quellcode:
SQL.Text := 'UPDATE SD_CUST SET ' +
                    'STRSHORTNAME = ' + QuotedStr(edtShortName.Text) + ', ' +
                    'STRNAME1 = '     + QuotedStr(edtName1.Text) + ', ' +
                    'STRNAME2 = '     + QuotedStr(edtName2.Text) + ', ' +
                    'STRNAME3 = '     + QuotedStr(edtName3.Text) + ', ' +
                    'STRSTREET = '    + QuotedStr(edtStreet.Text) + ', ' +
                    'STRPOSTCODE = '  + QuotedStr(edtPostcode.Text) + ', ' +
                    'STRCITY = '      + QuotedStr(edtCity.Text) + ', ' +
                    'STRPHONE1 = '    + QuotedStr(edtPhone1.Text) + ', ' +
                    'STRPHONE2 = '    + QuotedStr(edtPhone2.Text) + ', ' +
                    'STRFAX = '       + QuotedStr(edtFax.Text) + ', ' +
                    'MMREMARKS = :remarks WHERE ID = ' + lblID.Caption + ';';
ParamByName('remarks').asBlob := mRemarks.Text;
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von FBrust
FBrust

Registriert seit: 4. Okt 2002
Ort: Saarbrücken
654 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: SQL: Update-Befehl löscht Datensatz?

  Alt 22. Jan 2007, 15:24
Hallo,

danke für die Tips, werds ausprobieren.


Gruß
Frank
"Ich habe Dinge gesehen, die ihr Menschen niemals glauben würdet. Gigantische Schiffe, die brannten, draußen vor der Schulter des Orion" - Roy Batty
  Mit Zitat antworten Zitat
Benutzerbild von FBrust
FBrust

Registriert seit: 4. Okt 2002
Ort: Saarbrücken
654 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: SQL: Update-Befehl löscht Datensatz?

  Alt 22. Jan 2007, 16:52
So,

hab jetzt den Vorschlag von mkinzler mal umgesetzt, leider wird der zu aktualisierende Datensatz noch immer gelöscht , ich werd mal (nur um weiterarbeiten zu können) das Update für das Memofeld in einen eigenen Befehl legen, vielleicht hat noch jemand eine Idee...


Gruß
Frank
"Ich habe Dinge gesehen, die ihr Menschen niemals glauben würdet. Gigantische Schiffe, die brannten, draußen vor der Schulter des Orion" - Roy Batty
  Mit Zitat antworten Zitat
Benutzerbild von FBrust
FBrust

Registriert seit: 4. Okt 2002
Ort: Saarbrücken
654 Beiträge
 
Delphi 10.4 Sydney
 
#10

Re: SQL: Update-Befehl löscht Datensatz?

  Alt 22. Jan 2007, 17:19
So,

die Geschichte mit dem Update funktioniert nicht, aber aus einem anderen Grund:

Die Tabelle beinhaltet ein AutoIncrement-Feld namens ID, das tatsächlich bei jedem UPDATE-Befehl (!!) unverständlicherweise um eins hochgezählt wird. Das dieses Feld für die referenzielle Integrität wichtig ist, kann ich diesen Weg wohl vergessen .

Gruß
Frank
"Ich habe Dinge gesehen, die ihr Menschen niemals glauben würdet. Gigantische Schiffe, die brannten, draußen vor der Schulter des Orion" - Roy Batty
  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 13:32 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