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 2 von 2     12   
hoika

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

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

  Alt 23. Jan 2007, 09:50
Hallo,

sicher dass du nicht irgendwo noch nen Insert drinstehen hast.
Packe deinen Update-Befehl mal auf einen Testbutton.

Ansonsten hilft vielleicht mal ne Reorganisation (Umstruktieren + Komprimieren)
oder ne andere Datenbank


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
 
#12

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

  Alt 23. Jan 2007, 12:29
Hallo Heiko,

ich hab den Update-Befehl bereits auf einem eigenen Button und wenn ich mir nach dem Befehl den Inhalt des Felds "ID" in einem Label anzeigen lasse, wird sie um eins erhöht.

Aber eine andere Datenbank ist ja das Ziel der ganzen Aktion, vorher war alles über datensensitive Komponenten angesteuert, die sollen nun weg.

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
hoika

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

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

  Alt 23. Jan 2007, 13:16
Hallo,

du nimmst hoffentlich nicht lblID als Label,
das hast du ja schon im Update-Query benutzt.

Zeigt denn auch DBD an, das ein neuer Datensatz drinsteht ?.

Du machst irgendwas verkehrt.

Ist vielleicht noch ein TTable auf der gleichen Tabelle offen ?.
Ein Table.Edit auf dem letzten Datensatz erzeugt ein Append.
Vielleicht wird das unbewusst aufgerufen,
über deine datensensitiven Dingens.

Mach mal nen eigenes Form, wo nur das TQuery drinsteht
und dort das Update.


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
 
#14

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

  Alt 23. Jan 2007, 13:23
Hmm,

komisch kommts mir auch vor, ich werd noch mal alles durchgehen, evtl. ist ja doch noch ein TTable offen..

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
 
#15

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

  Alt 23. Jan 2007, 13:54
Hallo,

die Werte werden zwar korrekt abgespeichert, aber die ID wird immernoch um eins erhöht.

Das mit dem Label funktioniert durchaus, weil der ExecSQL-Befehl, der die ID (leider) ändert, erst nach dem Zusammenstellen des SQL-Strings erfolgt. Im Formular gibt es keine datensensitiven Komponenten mehr, das einzige TTable-Element, das auf diese Tabelle verweist, ist nicht aktiv.

Beispiel:

Delphi-Quellcode:
      if dmGeneral.tblSD_Cust.Active then
        dmGeneral.tblSD_Cust.Close;
      with dmQueries.qryUpdate do begin
        SQL.Text := 'UPDATE SD_CUST SET ' +
                    'STRSHORTNAME = ' + QuotedStr(edtShortName.Text) + ', ' +
                    'STRNAME1 = '     + QuotedStr(edtName1.Text) + ' ' +
                    'WHERE ID = ' + lblID.Caption + ';';
        try
          showmessage(SQL.Text);
          ExecSQL;
        except
          On E:Exception do begin
            strMsg := 'Fehler bei Aktualisieren Datensatz, Meldung: ' + E.Message;
            Beep;
            MessageDlg(strMsg, mtError, [mbOK], 0);
            Exit;
          end;
        end;
      end;
Wenn die aktuelle Datensatz-ID z. B. 122 ist, zeigt der Showmessage-Befehl "...WHERE ID = 122;", was ja korrekt ist.
Wenn ich nach dem ExecSQL in die Tabelle schaue, steht im Feld ID des gleichen Datensatzes (es wird kein neuer angefügt) eine 123 drin....und ich habe keine Ahnung, wieso

Edit: Hab jetzt mal ein kleines Testprojekt angelegt, dass genau das gleiche tut und siehe da, das Feld "ID" wird nicht verändert, also muss noch irgendwo im Programm der Wurm sein, aber wenn ich mit F7 durchgehe, kommt nach dem ExecSQL direkt die nächste Anweisung, aber da ist der Wert schon verändert...



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
 
#16

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

  Alt 23. Jan 2007, 15:37
Hallo,

ich bin jetzt einen Schritt weiter: Das Feld "strShortname" ist ein Indexfeld. Sobald dieses im Update-Befehl aktualisiert wird, wird der Zähler von ID um eins erhöht (auch wenn sich der Inhalt nicht geändert hat). Dies konnte ich auch im Testprojekt nachvollziehen.

Kann ich das irgendwie umgehen oder abschalten?

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 2 von 2     12   


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 01:58 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