![]() |
Datenbank: Paradox • Zugriff über: BDE
Datensatz-Nummer im DBGrid
Hallo,
ich suche eine Möglichkeit, in einem DBGrid beim Zeichnen einer Zelle (MainDrawColumnCell...) die laufende Nummer der gerade zu zeichnenden Zeile zu ermitteln. Problem dabei ist, daß einige Datensätze wg. Filterung nicht angezeigt werden und die Nummer über RecNo nicht zu ermitteln ist; ich brauche die laufende Nummer der Zeilen im Grid. Hat jemand eine Idee??? Gruß Ralph |
Re: Datensatz-Nummer im DBGrid
Erweitere das DataSet doch um ein lokales berechnetes Feld
|
Re: Datensatz-Nummer im DBGrid
was soll ich'n da rein berechnen???
|
Re: Datensatz-Nummer im DBGrid
Na die Nummer
|
Re: Datensatz-Nummer im DBGrid
Ja, aber die will ich ja erst rauskriegen.
Vielleicht muß ich's genauer erklären: - ich habe eine Datenbank mit Adressen, die z.Bsp. gefiltert ist --> nur Adressen die mit "B" beginnen - im Grid werden dann z.B. nur die Datensätze 5 8 12 15 38 angezeigt - ich suche nun die Nummer der Zeile im Grid zu den angezeigten Datensätzen (DS) also 1 für DS 5, 2 für DS 8, 3 für DS 12 ... - ich kann aber aus DBGrid nicht die Nummer der aktuellen Zeile herauslesen, wie z.Bsp. Count aus einer Liste Die gesuchte Nummer hat also nichts mehr mit der Datenbank zu tun, sondern nur noch mit der angezeigten Liste im DBGrid. Vielleicht gibts ja noch ne versteckte Funktione oder Eigenschaft, die mit das verrät??? Gruß Ralph |
Re: Datensatz-Nummer im DBGrid
Deshlab bietet sich es ja an, die Datensätze lokal durchzunummerieren
|
Re: Datensatz-Nummer im DBGrid
das gibt ein performance-problem, da mehrere tausend DS und schnelle Änderung der Filter, z.Bsp. bei Eingabe Suchstring und Echtzeitaktualisierung des Filters :(
|
Re: Datensatz-Nummer im DBGrid
Die Berechnung erfolgt ja nur bei der Anzeige
|
Re: Datensatz-Nummer im DBGrid
wie würdest Du die Nummer errechnen?
|
Re: Datensatz-Nummer im DBGrid
Einfach Nummer := <vorige Nr> + 1
|
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.
|
Re: Datensatz-Nummer im DBGrid
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Ralph,
Zitat:
Freundliche Grüße |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:15 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