![]() |
Delphi-Version: XE7
RecNo gibt ergibt immer -1
Hallo zusammen,
ich versuche im MouseUp Ereignis die Zeilennummer zu speichern: var Grd: TDBGrid; FirstPosMouse: Integer; begin FirstPosMouse := Grd.DataSource.DataSet.RecNo; RecNo liefert aber immer -1 ? Warum ? Was braucht Ihr noch für Infos ? Gruss Holger Folgenden Code will ich zum laufen bringen: (Beim DBGrid durch Shift+Mouseklick einen Bereich markieren)
Code:
procedure TFormT.DBG_UWMouseUp(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var LastPos: Integer; TempBookmark: Integer; Grd: TDBGrid; begin Grd := TDBGrid(Sender); if (Shift = [ssShift]) and (Button = mbLeft) and (dgMultiSelect in Grd .Options) and (FirstPosMouse > 0) then begin LastPos := Grd.DataSource.DataSet.RecNo; with Grd.DataSource.DataSet do begin DisableControls; Grd.DataSource.DataSet.MoveBy(FirstPosMouse - LastPos); repeat Grd.SelectedRows.CurrentRowSelected := True; if (FirstPosMouse < LastPos) then Next else Prior; TempBookmark := Grd.DataSource.DataSet.RecNo; until (TempBookmark = LastPos); EnableControls; end; end else FirstPosMouse := Grd.DataSource.DataSet.RecNo; end; |
AW: RecNo gibt ergibt immer -1
Unterstützt denn das verwendete DataSet überhaupt RecNo?
![]() Zitat:
|
AW: RecNo gibt ergibt immer -1
Hallo,
das habe ich mir auch schon irgendwie gedacht. Ich nutze TDataSource und daran TQuery Gibt es eine andere Möglichkeit um den Code zum laufen zu bekommen ? Gruss Holger |
AW: RecNo gibt ergibt immer -1
Zitat:
Hier ein Beispiel: ![]() Da wird zwar mit with gearbeitet, aber das kann man ja mal ignorieren. :wink: Im Beispiel fehlt allerdings noch ein FreeBookmark. |
AW: RecNo gibt ergibt immer -1
Hallo,
Zitat:
Das ist das entscheidende Detail. |
AW: RecNo gibt ergibt immer -1
Was hoika meint, ist die Frage nach der Datenbank, die du verwendest.
Du bekommst von einigen Datenbanken die Information RecNo und RecordCount nicht korrekt geliefert. Teilweise gar nicht. Daher auch der Wert -1. Man kann sich mit Tricks behelfen (Calculated Fields) aber das sind auch nur krücken. Spätestens, wenn der Anwender die Sortierung verändert oder Filter setzt, geht das nach hinten los. Kurz gesagt, auf die Info RecNo und RecordCount kannst du dich nicht verlassen, außer du nutzt eine Datenbank, von der du weißt, dass es immer funktioniert. Bei sogenannten Desktop-Datenbanken (z.B. Paradox) ist das in der Regel so. Es gibt allerdings TDataSets, die das dann auch bei den "problematischen" Datenbanken unterstützen. Aber wenn du auf Nummer sicher gehen willst, wähle einen anderen Weg für die Lösung deines Problems. |
AW: RecNo gibt ergibt immer -1
Ich verwende die Datenbank Oracle und an der stelle noch die BDE.
TBooksmark würde also gehen ? Kann mich da jemand etwas anstupsen und mir helfen wie ich den Codes anstatt Recno's in Bookmarks ändere, oder anders ? Im Endeffekt brauche ich eine Lösung für Mausklick+Shift im DBGrid Datensätze markieren. Gruss Holger |
AW: RecNo gibt ergibt immer -1
Ah, dein Problem ist ja was ganz anderes.
MultiSelect ist bei dir schon aktiv, aber Shift-Click, um einen Bereich zu markieren, funktioniert nicht. Ich habe mal kurz Google bemüht und das hier gefunden: ![]() oder das hier (scheint einfacher zu sein): ![]() Ich hoffe, dass dir das weiterhilft. |
AW: RecNo gibt ergibt immer -1
Also bei dem von mir verwendeten TJVDBGrid funktioniert das Markieren von Datensätzen mit Shift+Mausklick problemlos.
Shift drücken und festhalten. Mit der Maus in den ersten zu selektierenden Datensatz klicken. Shift weiterhin festhalten, den letzten zu markierenden Datensatz ansteuern und wiederum mit der Maus in den Datenssatz klicken. Shift loslassen und der Bereich zwischen diesen beiden Datensätzen wird selektiert. Mit Strg+Mausklick kann man einzelnen Sätze markieren, sie müssen nicht hintereinanderliegen. Markiert wird jeder angeklickte Datensatz, solange Strg gedrückt bleibt. Klickt man nach dem Loslassen von Shift bzw. Strg, so wird die Selektierung aufgehoben. Zitat:
Und: Die BDE unterstützt nicht bei allen Datenbank RecNo und RecordCount korrekt. Zitat:
|
AW: RecNo gibt ergibt immer -1
Hast du folgendes schon versucht?
Delphi-Quellcode:
procedure TMainForm.DBGridMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); begin ShowMessage(IntToStr((Sender as TDBGrid).DataSource.DataSet.RecNo)); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:23 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