![]() |
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:
Die per Filter ausgeblendeten Datensätze ändern nichts an der Satznummer.
procedure TDataForm.CalcFields(DataSet: TDataSet);
begin with Dataset do FieldByName('RecNo').AsInteger := RecNo; end; Freundliche Grüße vom marabu |
Re: Datensatz-Nummer im DBGrid
Ich hatte ihn so verstanden, daß er laufende Nummern im Grid haben will
|
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? |
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 |
Re: Datensatz-Nummer im DBGrid
Hallo,
das DBGrid ist auch nur ein Grid wie jedes andere .... An die Zeilennummer kommst du so:
Delphi-Quellcode:
Freundliche Grüße
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; |
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 |
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/] |
Re: Datensatz-Nummer im DBGrid
Menschenskinder, dann bastele eben eine FOR-SELECT-SP zusammen und übergebe die Ergebnismenge. Z.B. so :
SQL-Code:
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
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.2 : sehe gerade BDE. :shock: :gruebel: Wenn die die stored Procedure überhaupt verkraftet, dann muss die Datenmenge so abgerufen werden (Dataset.SelectSQL) :
SQL-Code:
Im Delphi - Programm dann wie üblich bis EOF durchwandern oder eben DBGrid.
SELECT * FROM ERMITTLE_ALLE_DATEN_MIT_NR
|
Re: Datensatz-Nummer im DBGrid
SPs in Paradox? Wusste gar nicht das die damals so weit waren :gruebel:
|
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 01:50 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 by Thomas Breitkreuz