Entwickler-Ecke
Datenbanken - RecordCount stop immer bei 1
rolli2 - Mi 04.11.09 17:09
Titel: RecordCount stop immer bei 1
Also ich benutze Firebird und Recordcount gibt bei vorhandenen Namen immer 1 wieder habe extra in die Datenbank 3 mal den Namen eingetragen er findet bzw gibt nur immer 1 wieder.
SqlAbfrage
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure TDataModuleMain.VornameSuchen; begin with IBSQLMain do begin Close; SQL.Clear; SQL.Add('SELECT ma.Vorname'); SQL.Add(' FROM TblMitarbeiter ma'); SQL.Add(' WHERE ma.Vorname = :Vorname'); ParamByName('Vorname').AsString:= [b]Vorname[/b]; ExecQuery; if RecordCount > 0 then MessageDlg((IntToStr(IBSQLMain.RecordCount) + ' mal gefunden!! '), mtConfirmation, [mbOK],0) else MessageDlg('Mitarbeiter nicht gefunden!!',mtConfirmation, [mbOk],0); Close; end; end; |
Vorname ist eine public Variable damit ich sie mit EditVorname.Text eingeben kann
ButtonClick
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| procedure TSDIAppForm.Button2Click(Sender: TObject); begin DataModuleMain.Vorname := EditVorname.Text; DataModuleMain.VornameSuchen; DataModuleMain.Vorname := ''; EditVorname.Clear; end; |
Woran liegts??? Er sollte eigentlich bei den Namen "3 mal gefunden" angeben.
Jedoch wird nur "1 mal gefunden" ausgegeben.
Moderiert von
UGrohne: Beitragsformatierung überarbeitet.
Andreas L. - Mi 04.11.09 18:03
Ich vermute das du ExecQuery aufrufen musst bevor du über
Delphi-Quelltext
1:
| ParamByName('Vorname').AsString:= Vorname; |
auf die Tabelle zugreifst.
jasocul - Mi 04.11.09 18:03
Mach mal nach dem Öffnen der Tabelle ein FetchAll.
Sinspin - Mi 04.11.09 19:02
Nimm zum probieren ob es an RecordCount liegt mal :
SQL-Anweisung
1:
| SELECT Count(*) As RC FROM.... |
Und lies dann mal via
FieldByName('RC').AsInteger den Wert aus der da kommt. Das müsste dann eigentlich die passende Anzahl sein.
Wenn das nicht passt sind deine drei gleichen Namen nicht gleich.
UGrohne - Mi 04.11.09 21:03
jasocul liegt hier schon richtig. Nach ExecQuery liegt der Datensatzzeiger auf dem ersten Element und nur wenn über ein Element iteriert wurde, wird es auch gezählt. Mittels FetchAll holst Du alle Rows von der Datenbank in Deinen Speicher und kannst sie dann auch zählen. Ich würde dies aber nur tun, wenn es nicht sehr viele sind und Du mit den Datena uch wirklich etwas machen willst. Zum Spaß 100.000 Datensätze zu holen, ist nicht sinnvoll. Wenn Du nur die Anzahl brauchst, ist ein simples Count wie von Sinspin sehr viel sinnvoller.
Xentar - Mi 04.11.09 21:31
Jo, das Problem wurde ja schon erklärt.
Noch eine Anmerkung: Ich selber bin der Meinung, dass man with ... do ... möglichst vermeiden sollte.
Kann zu sehr merkwürdigen Effekten führen, spätestens, wenn du mehrere With verschachtelst, und nimmer weißt, welches davon der Compiler nun wirklich verwendet.
Ist nur ne persönliche Meinung - ich mach da lieber nen Bogen drum, und schreib alles aus (bzw. Copy Paste)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!