![]() |
Datenbank: Interbase • Zugriff über: IB
Datensätze Zählen klappt nicht ! Finde Fehler nicht.
Hallo,
ich benutze eine Interbase Datenbankmit zwei tabellen. Jetzt möchte ich wissen wie viel Datensätze in einer Tabelle sind und benutze folgende Zeilen:
Delphi-Quellcode:
in dem Form wo das Script leigt, sind noch drei DBGrid's Inkl. je einen Datasource. Die IBDataSet ist auf Activ = True.
procedure TFilmFact.FormActivate(Sender: TObject);
var anzKunden: integer; begin DM.IBKunde.Close; DM.IBKunde.SelectSQL.Text := 'SELECT Count(*) FROM KUNDEN'; DM.IBKunde.Open; AnzKunden := DM.IBKunde.Fields[0].AsInteger; StatusBar1.Panels[0].Text := 'Kunden Gesammt: '+ inttostr(AnzKunden); end; Wenn ich das Script so ausführe, kommt folgende Meldung: Zitat:
Zitat:
Ich möchte einfach nur die Anzahl der Datensätze in einer Variabel stehen haben. Bevor mich jemand da drauf Aufmerksam macht, das dieses schon in einem anderem Forum steht ! Ja ich habe das auch woander gepostet, leider nicht die Antworten bekommen die ich suchte. Ich möchte nur wissen wo der Hacken ist um mein Hintergrund Wissen zu vertieven. Mit Aussagen wie Lies ein Buch oder Schmeichelnd umschrieben du bist zu Blöd kann ich nichts anfagen. Ich hoffe, das mir Einsteiger jemand erkären kann wie so die Fehler kommen und was ich bei einer DB wie Interbase Beachten muß in Delphi. Danke schon einmal für die Antworten. |
Re: Datensätze Zählen klappt nicht ! Finde Fehler nicht.
Zitat:
Delphi-Quellcode:
Was soll das Fields [0] ? :shock: Woher soll die DB wissen, was AnzKunden ist usw. ??
AnzKunden := DM.IBKunde.Fields[0].AsInteger;
|
Re: Datensätze Zählen klappt nicht ! Finde Fehler nicht.
Zitat:
|
Re: Datensätze Zählen klappt nicht ! Finde Fehler nicht.
Ja, das stimmt. Im Prinzip müßte es so schon gehen. Einen Array - Index anzugeben, das ist aber schlecht. 8) Vielleicht liegts nur an dem AS.
Delphi-Quellcode:
DM.KuDS.Close;
DM.KuDS.SelectSQL.TEXT :='SELECT COUNT (*) AS Z FROM KUNDE'; DM.KuDS.Open; Button1.Caption := IntToStr (DM.KuDS.FieldByName ('Z').AsInteger); |
Re: Datensätze Zählen klappt nicht ! Finde Fehler nicht.
Hai wlfmario,
kann es sein das Du dem DataSet IBKunde über den Feldeditor (rechter Mausklick auf die Komponente) Felder zugewiesen hast? Wenn ja wäre dies nämlich die Erklärung für den Fehler. Wenn im Feldeditor Einträge vorhanden sind erwartet das DataSet diese auch bei jeder SELECT-Abfrage und giebt genau diese Felder zurück. Ich würde an deiner Stelle eine extra Funktion in deinem DataModule erzeugen welches Dir die Anzahl der Datensätze aus einer Tabelle zurückgibt:
Delphi-Quellcode:
Diese Funktion kannst Du dann in deiner Form benutzen.
function TDM.TableCount(aTable: string): integer;
begin Result := -1; with TIBQuery.Create(nil) do begin try Database := IBDataBase1; Close; SQL.Text := Format('SELECT Count(*) FROM %s', [aTable]); Open; Result := Fields[0].AsInteger; finally Free; end; end; end;
Delphi-Quellcode:
procedure TFilmFact.FormActivate(Sender: TObject);
begin StatusBar1.Panels[0].Text := Format ('Kunden Gesammt: %d',[DM.TableCount('kunde')]); end; |
Re: Datensätze Zählen klappt nicht ! Finde Fehler nicht.
Guten Morgen Mario,
wie Sharky schon geschrieben hat ... Irgendetwas an Deinem Programm (und nicht der dargestellte Code) verlangt nach dem Feld KDID. Eine Möglichkeit sind die von Sharky genannten Datenbankfelder die über den Feldeditor der Query oder Tabelle festgelegt sein könnten. Ein anderer Grund könnten Objekte vom Register "DB-Steuerung" auf Deinem Formular sein. Wenn eines davon auf dieses Feld verweist (z.B. weil Du vorher mit dieser Abfrage die Inhalte der Tabelle dargestellt hast) dann kracht es jetzt, weil die neue Abfrage nur ein Feld mit der Summe zurückliefert. Viel Erfolg Niels |
Re: Datensätze Zählen klappt nicht ! Finde Fehler nicht.
Zitat:
Gibt es eine möglichkei auch ohne TIBQuery damit zu arbeiten ? |
Re: Datensätze Zählen klappt nicht ! Finde Fehler nicht.
Hallo wlfmario,
es gibt die Alternative mit einer IBTable zu arbeiten und mit FetchAll alle Datensätze zu holen. Dann kannst du mit RecordCount die Anzahl der Datensätze ermitteln. Dabei werden aber alle Datensätze ggf. übers Netz übertragen, was natürlich um einiges länger dauert als das Absetzen einer Query, die nur einen Wert übers Netz als Antwort liefert. |
Re: Datensätze Zählen klappt nicht ! Finde Fehler nicht.
Ne, IBTable ist nicht die Alternative. Sowohl IBTable als auch IBQuery ist nur für BDE geschädigte gedacht. 8) Benutze besser immer IBDataset.
|
Re: Datensätze Zählen klappt nicht ! Finde Fehler nicht.
Das wollte ich wissen !
Da ich IBDataSet in meinem Prg. benutze und nicht IBQuerry oder Table. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:32 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