![]() |
Datenbank: Firebird • Version: 2 • Zugriff über: IB
Count() + Datensätze überschreiben
Moin ! Ich hab ein seltsames Problem zu dem mir keine Überschrift einfällt ^...
Folgendes habe ich vor: 1. Zähle alle Datensätze die den Status Valid haben. 2. Überschreibe alle Datensätze mit dem Status Waiting die nicht den Status Valid haben. --> Nach dem überschreiben hatte ich aufeinmal weniger "Valids" als vor dem schreiben. Also mach ich noch: 3. Zähle nochmal alle Datensätze Ergebnis zu 1.: 119 Ergebnis zu 3.: 71 Source:
Delphi-Quellcode:
//Zählung 1
JobQuery1.Close; JobQuery1.SQL.Clear; JobQuery1.SQL.Add('SELECT COUNT(STATUS) FROM JOBTABLE WHERE STATUS=''Valid'';'); JobQuery1.Open; ShowMessage(JobQuery1.Fields[0].AsString); //Alle nicht "Valid" überschreiben JobDBGrid1.DataSource.DataSet.DisableControls; JobTable1.First; while not JobTable1.Eof do begin RowNumber:=JobTable1.FieldByName('ROWNUMBER').AsString; if not (JobTable1.FieldByName('STATUS').AsString='Valid') then begin myList.Add(RowNumber); JobQuery1.Close; JobQuery1.SQL.Clear; JobQuery1.SQL.Add(Format('UPDATE %s SET '+ '%s = ''%s'''+ 'WHERE ROWNUMBER = ''%s'';', [fMain.JobTable1.TableName,'STATUS','Waiting',RowNumber])); JobQuery1.Open; JobQuery1.Close; end; JobTable1.Next; end; JobDBGrid1.DataSource.DataSet.EnableControls; //Zählung 2 JobQuery1.Close; JobQuery1.SQL.Clear; JobQuery1.SQL.Add('SELECT COUNT(STATUS) FROM JOBTABLE WHERE STATUS=''Valid'';'); JobQuery1.Open; ShowMessage(JobQuery1.Fields[0].AsString); :?::?::?: Edit: Moment, eine Sache prüfe ich nochmal :) |
AW: Count() + Datensätze überschreiben
Ich kapier deine Logik nicht so recht :gruebel: Du willst alle Datensätze ändern, die nicht den Status Valid haben, richtig? Du willst dann den Wert von der Spalte Status auf Waiting setzen? Warum machst du das nicht in einer Query?
Code:
Zudem solltest du deine Queries parametrisieren -- mein Query ist das wahrlich nicht, ich weiß. Es ging dabei ja auch nur um die Query selbst.
UPDATE table SET Status = 'Waitung' WHERE Status <> 'Valid'
PS: Danach kannst du via Query.RowsAffected die Anzahl der geänderten Datensätze abfrage. Je nach Komponenten heißt die Property evtl. anders. |
AW: Count() + Datensätze überschreiben
Versteh ich nicht, warum du soviel Logik in die Client-Applikation bringst.
Reicht nicht einfach ein simples:
Code:
???
update jobtable set status = 'Waiting' where status <> 'Valid'
Thomas |
AW: Count() + Datensätze überschreiben
Hmm :) Warum einfach wenns auch kompliziert geht ? ..keine Ahnung warum ich es mir so schwer gemacht habe. Danke für den Ansatz, damit stimmt die Zählung.
Trotzdem versteh ich nicht warum mein Code nicht funktioniert. (Abgesehen von dem Schwachsinn den ich da gemacht hab) :thumb: |
AW: Count() + Datensätze überschreiben
Vielleicht wegen deiner ROWNUMBER-Einschränkung?
|
AW: Count() + Datensätze überschreiben
Abhaken und gar keine Zeit mehr verschwenden, warum es nicht funktioniert. Mach ich auch. :-D
lg, Thomas |
AW: Count() + Datensätze überschreiben
Na ja so einfach kann ich es mir nicht machen :) Vielleicht habt ihr "myList.Add(RowNumber);" übersehen. Die Liste verarbeite ich später noch.
//Edit: @Armin, falls du auf Duplicates hinaus willst, das habe ich bereits geprüft -> Keine Dups vorhanden. |
AW: Count() + Datensätze überschreiben
Weil er vermutlich mit JobQuery1.Open dein DML-Statement gar nicht ausführt. Du musst dazu JobQuery1.Execute oder Ähnliches verwenden.
Thomas |
AW: Count() + Datensätze überschreiben
Nein, darauf wollte ich nicht hinaus. Denn dann hätte die UPDATE-Query halt zwei Datensätze geupdatet, d.h. das Problem definitiv wo anders.
Die ROWNUMBER kannst ja in einem weiteren SELECT mit WHERE Status <> 'Valid' abfragen und in eine Liste werfen. |
AW: Count() + Datensätze überschreiben
Jap, hab es jetzt umgebaut -> Funktioniert :thumb:
Trotzdem, werde da vielleicht nochmal nachhaken 8-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:53 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