Autor Beitrag
rolli2
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mi 04.11.09 17:09 
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
ausblenden 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
ausblenden 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 user profile iconUGrohne: Beitragsformatierung überarbeitet.
Andreas L.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1703
Erhaltene Danke: 25

Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
BeitragVerfasst: Mi 04.11.09 18:03 
Ich vermute das du ExecQuery aufrufen musst bevor du über
ausblenden Delphi-Quelltext
1:
ParamByName('Vorname').AsString:= Vorname;					
auf die Tabelle zugreifst.
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Mi 04.11.09 18:03 
Mach mal nach dem Öffnen der Tabelle ein FetchAll.
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1336
Erhaltene Danke: 119

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Mi 04.11.09 19:02 
Nimm zum probieren ob es an RecordCount liegt mal :
ausblenden 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.

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: 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)

_________________
PROGRAMMER: A device for converting coffee into software.