AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Count() + Datensätze überschreiben
Thema durchsuchen
Ansicht
Themen-Optionen

Count() + Datensätze überschreiben

Ein Thema von -187- · begonnen am 11. Mai 2011 · letzter Beitrag vom 12. Mai 2011
Antwort Antwort
Seite 1 von 2  1 2      
-187-

Registriert seit: 24. Sep 2005
483 Beiträge
 
Delphi 2010 Architect
 
#1

Count() + Datensätze überschreiben

  Alt 11. Mai 2011, 23:05
Datenbank: Firebird • Version: 2 • Zugriff über: IB
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

Geändert von -187- (11. Mai 2011 um 23:11 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#2

AW: Count() + Datensätze überschreiben

  Alt 11. Mai 2011, 23:11
Ich kapier deine Logik nicht so recht 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:
UPDATE table SET Status = 'Waitung' WHERE Status <> 'Valid'
Zudem solltest du deine Queries parametrisieren -- mein Query ist das wahrlich nicht, ich weiß. Es ging dabei ja auch nur um die Query selbst.

PS: Danach kannst du via Query.RowsAffected die Anzahl der geänderten Datensätze abfrage. Je nach Komponenten heißt die Property evtl. anders.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
tsteinmaurer

Registriert seit: 8. Sep 2008
Ort: Linz, Österreich
530 Beiträge
 
#3

AW: Count() + Datensätze überschreiben

  Alt 11. Mai 2011, 23:15
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
  Mit Zitat antworten Zitat
-187-

Registriert seit: 24. Sep 2005
483 Beiträge
 
Delphi 2010 Architect
 
#4

AW: Count() + Datensätze überschreiben

  Alt 11. Mai 2011, 23:18
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)
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#5

AW: Count() + Datensätze überschreiben

  Alt 11. Mai 2011, 23:19
Vielleicht wegen deiner ROWNUMBER-Einschränkung?
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
tsteinmaurer

Registriert seit: 8. Sep 2008
Ort: Linz, Österreich
530 Beiträge
 
#6

AW: Count() + Datensätze überschreiben

  Alt 11. Mai 2011, 23:20
Abhaken und gar keine Zeit mehr verschwenden, warum es nicht funktioniert. Mach ich auch.

lg,
Thomas
  Mit Zitat antworten Zitat
-187-

Registriert seit: 24. Sep 2005
483 Beiträge
 
Delphi 2010 Architect
 
#7

AW: Count() + Datensätze überschreiben

  Alt 11. Mai 2011, 23:21
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.
  Mit Zitat antworten Zitat
tsteinmaurer

Registriert seit: 8. Sep 2008
Ort: Linz, Österreich
530 Beiträge
 
#8

AW: Count() + Datensätze überschreiben

  Alt 11. Mai 2011, 23:26
Weil er vermutlich mit JobQuery1.Open dein DML-Statement gar nicht ausführt. Du musst dazu JobQuery1.Execute oder Ähnliches verwenden.

Thomas
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#9

AW: Count() + Datensätze überschreiben

  Alt 11. Mai 2011, 23:28
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.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
-187-

Registriert seit: 24. Sep 2005
483 Beiträge
 
Delphi 2010 Architect
 
#10

AW: Count() + Datensätze überschreiben

  Alt 11. Mai 2011, 23:36
Jap, hab es jetzt umgebaut -> Funktioniert

Trotzdem, werde da vielleicht nochmal nachhaken
  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 09:09 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