Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Datensatz-Nummer im DBGrid (https://www.delphipraxis.net/100222-datensatz-nummer-im-dbgrid.html)

marabu 25. Sep 2007 06:23

Re: Datensatz-Nummer im DBGrid
 
Herzlich willkommen in der Delphi-PRAXiS, Ralph.

Was war nochmal der Grund warum die Eigenschaft RecNo nicht verfügbar sein sollte?

Delphi-Quellcode:
procedure TDataForm.CalcFields(DataSet: TDataSet);
begin
  with Dataset do
    FieldByName('RecNo').AsInteger := RecNo;
end;
Die per Filter ausgeblendeten Datensätze ändern nichts an der Satznummer.

Freundliche Grüße vom marabu

mkinzler 25. Sep 2007 06:40

Re: Datensatz-Nummer im DBGrid
 
Ich hatte ihn so verstanden, daß er laufende Nummern im Grid haben will

SMALLID 25. Sep 2007 06:42

Re: Datensatz-Nummer im DBGrid
 
Genau, RecNo gibt genau das zurück, was du brauchst. Was du meintest, war sicher ein AutoIncrement Feld (ID, Pos, oder wie auch immer genannt), dass man natürlich nicht zur Anzeige nehmen kann. RecNo und RecordCount beziehen sich aber immer auf die aktuelle Menge von Datensätzen, also beachten die auch Filter etc.

Aber Achtung: Ich meine mich zu erinnern, dass es mit RecNo und RecordCount einige kleine Probleme bei der Verwendung bestimmter Datenbanken gab. Ich weiß aber leider nicht mehr, welche das waren. War auch kein schwer verbreitetes Problem, also kannst du es ruhig über RecNo machen :)

Hmmm, wenn natürlich nur das GRID gefiltert wird, und nicht die zugrundeliegende Table, ist das wieder was anderes, aber wieso sollte man das so machen? Filterst du die Table oder nur die Grid?

RPW 25. Sep 2007 21:15

Re: Datensatz-Nummer im DBGrid
 
Hi, da ist ja richtig was los früh um sieben, war leider nicht meine Zeit, deshalb reagiere ich erst jetzt. Erstmal Danke für die rege Anteilnahme....

versuche mal alles klarzustellen:

- die Datenbank wird über TTable.OnFilterRecord gefiltert
- die Daten werden im DBGrid angezeigt
- wenn z.Bsp. Datensatz 2 herausgefilter wird und ich verwende RecNo, dann ist die Nummerierung im Grid 1 3 4 5 6 ...
- das Ganze hat weniger mit der Datenbank als vielmehr mit der Nummer der Zeile im DBGrid zu tun, die ich nicht ermitteln kann

Ich suche die Nummer der aktuellen Zeile im DBGrid, egal auf welchem Datensatz sich der Fokus befindet, wenn z.Bsp. RecNo = 321 ist und der datensatz in der 234 Zeile angezeigt wird (wegen dem Filter), dann will ich diese 234 irgendwie rauskriegen.

Gruß Ralph

marabu 26. Sep 2007 10:47

Re: Datensatz-Nummer im DBGrid
 
Hallo,

das DBGrid ist auch nur ein Grid wie jedes andere ....

An die Zeilennummer kommst du so:

Delphi-Quellcode:
type
  TGridCracker = class(TDBGrid);

procedure TDataForm.DBGridDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
var
  rn: Integer;
begin
  with TGridCracker(Sender) do
    rn := Row;
  // ...
end;
Freundliche Grüße

RPW 26. Sep 2007 18:46

Re: Datensatz-Nummer im DBGrid
 
Hi, Marabu
danke für den Tipp, leider wird dabei nur der sichtbare Teil des Grids bedient, wenn mann scrollt, sieht man das Dilemma.
Muß wohl weiterforschen... :(

Gruß Ralph

haentschman 26. Sep 2007 21:18

Re: Datensatz-Nummer im DBGrid
 
Hallo...

ich hätte noch einen Tip über Umwege...

-Du kannst in der Tabelle ein Feld anlegen z.B. 'Datensatznummer'.
-vor dem Anzeigen des Grids setzt du eine Variable z.B. 'Nummer' auf 1.
-in OnDrawColumCell schreibst du die Variable 'Nummer' in die Tabelle in Feld 'Datensatznummer' und erhöhst die Variable um 1

...dann hast du zu jedem gefilterten Datensatz eine laufende Nummer, welche nicht der eigentlichen
RecNo entspricht.

....ungetestet aber als Idee machbar.. :zwinker:

[edit] ist vieleicht nicht nicht die genialste Lösung ein Tabellenfeld für die Durchnummerierung zu mißbrauchen, aber wie Du weißt ist das Grid ja datensensitiv und zeigt nur das an, was in der Tabelle vorhanden ist... [edit/]

Hansa 27. Sep 2007 02:21

Re: Datensatz-Nummer im DBGrid
 
Menschenskinder, dann bastele eben eine FOR-SELECT-SP zusammen und übergebe die Ergebnismenge. Z.B. so :

SQL-Code:
CREATE PROCEDURE ERMITTLE_ALLE_DATEN_MIT_NR
RETURNS (
    NR INTEGER,
    ANZAHL INTEGER)
AS
BEGIN
  ANZAHL = 0;
FOR
  SELECT NR FROM TABLEX
  ORDER BY NR INTO :NR DO BEGIN
    ANZAHL = ANZAHL + 1;
    SUSPEND;
  END
END^
P.S.: das ist auch getestet. Die Antwort bezieht sich aber eher auf meinen Vorredner und den Vorschlag, die Tabelle unnötig aufzublähen ! :P

P.S.2 : sehe gerade BDE. :shock: :gruebel: Wenn die die stored Procedure überhaupt verkraftet, dann muss die Datenmenge so abgerufen werden (Dataset.SelectSQL) :
SQL-Code:
SELECT * FROM ERMITTLE_ALLE_DATEN_MIT_NR
Im Delphi - Programm dann wie üblich bis EOF durchwandern oder eben DBGrid.

mkinzler 27. Sep 2007 05:19

Re: Datensatz-Nummer im DBGrid
 
SPs in Paradox? Wusste gar nicht das die damals so weit waren :gruebel:

Hansa 27. Sep 2007 05:42

Re: Datensatz-Nummer im DBGrid
 
Gibts die echt nicht ? War sowieso nur als Denkanstoß für Fragesteller gedacht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:26 Uhr.
Seite 2 von 3     12 3      

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