AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

RecNo gibt ergibt immer -1

Ein Thema von HolgerCW · begonnen am 19. Mai 2021 · letzter Beitrag vom 20. Mai 2021
Antwort Antwort
HolgerCW

Registriert seit: 28. Nov 2006
Ort: Marl
1.207 Beiträge
 
Delphi XE7 Enterprise
 
#1

AW: RecNo gibt ergibt immer -1

  Alt 20. Mai 2021, 09:17
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
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.368 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: RecNo gibt ergibt immer -1

  Alt 20. Mai 2021, 09:34
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:
https://stackoverflow.com/questions/...lick-in-dbgrid
oder das hier (scheint einfacher zu sein):
https://www.swissdelphicenter.ch/en/...de.php?id=1900
Ich hoffe, dass dir das weiterhilft.
Peter

Geändert von Jasocul (20. Mai 2021 um 09:44 Uhr)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.555 Beiträge
 
Delphi 7 Professional
 
#3

AW: RecNo gibt ergibt immer -1

  Alt 20. Mai 2021, 10:05
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 von Delphi 7 - Hilfe zu TDBGrid:
SelectedRows hat nur eine Bedeutung, wenn die Eigenschaft Options die Werte dgRowSelect und dgMultiSelect enthält.
Multiselect allein reicht da nicht zwingend aus.

Und: Die BDE unterstützt nicht bei allen Datenbank RecNo und RecordCount korrekt.
Zitat von HolgerCW:
Im Endeffekt brauche ich eine Lösung für Mausklick+Shift im DBGrid Datensätze markieren.
Das wird eigentlich vom TDBGrid (ohne jedewede weitere Programmierung) unterstützt.
  Mit Zitat antworten Zitat
Benutzerbild von newIndy
newIndy

Registriert seit: 18. Dez 2018
29 Beiträge
 
Delphi XE3 Professional
 
#4

AW: RecNo gibt ergibt immer -1

  Alt 20. Mai 2021, 12:17
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;
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.342 Beiträge
 
Delphi 12 Athens
 
#5

AW: RecNo gibt ergibt immer -1

  Alt 20. Mai 2021, 20:26
Oder notfalls einfach in die Records/Datensätze eine laufende Nummer einfügen
SELECT ROW_NUMBER() OVER () AS RecNo, ...
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.368 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: RecNo gibt ergibt immer -1

  Alt 20. Mai 2021, 13:05
Zitat von HolgerCW:
Im Endeffekt brauche ich eine Lösung für Mausklick+Shift im DBGrid Datensätze markieren.
Das wird eigentlich vom TDBGrid (ohne jedewede weitere Programmierung) unterstützt.
Leider nicht. Ich habe das extra für TDBGrid nochmal geprüft. Bei TJVDBGrid mag das allerdings funktionieren.
Peter
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
655 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: RecNo gibt ergibt immer -1

  Alt 20. Mai 2021, 16:55
RecNo kannst du bei den meisten (glaube sogar bei allen) SQLLink Serverdatenbanken mit der BDE nicht nutzen. Da wird die nötige Information vom Server nicht geliefert. RecNo geht nur mit lokalen DB's wie Paradox oder DBase. Was du aber machen willst, geht definitv mit Bookmarks, die du dann in einer Liste speichern und entfernen musst, je nachdem was der Anwender macht, also markieren oder Markierung löschen.

Ich bin eigentlch auch der Meinung, dass sowas in der Art bereits im TDBGrid eingebaut ist. Ich selber nutze das TDBGrid schon seit Jahren nicht mehr, da es da viel zu viele Limitierungen gibt. Eventuell solltest du auch darüber nachdenken, eventuell ein 3rd Party DBGrind zu nutzen.
  Mit Zitat antworten Zitat
HolgerCW

Registriert seit: 28. Nov 2006
Ort: Marl
1.207 Beiträge
 
Delphi XE7 Enterprise
 
#8

AW: RecNo gibt ergibt immer -1

  Alt 20. Mai 2021, 16:55
Hallo zusammen,

vielen Dank für Euren Input. nun habe ich es hinbekommen.

Zitat:
procedure TMainForm.DBGridMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ShowMessage(IntToStr((Sender as TDBGrid).DataSource.DataSet.RecNo));
end;
Das ging leider nicht

Zitat:
Das wird eigentlich vom TDBGrid (ohne jedewede weitere Programmierung) unterstützt.
Das ist nur bei dem TJVDBGrid so

So hat es geklappt:

Code:
procedure TForm1.DBG1MouseUp(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin

 if ssShift in Shift then
  SetBookMarkRange(Sender as TDBGrid,DM1.Query1);

end;

-----------------


procedure TDM1.Query1AfterScroll(DataSet: TDataSet);
begin

 if SettingBookmarkRange then exit;

 PreviousRowID := CurrentRowID;
 CurrentRowID := DM1.Query1.FieldByName('ID').AsInteger;

end;


----------------

var
 SettingBookmarkRange: Boolean;
 CurrentRowID,
 PreviousRowID: Integer;

procedure SetBookmarkRange(DBGrid_Shift:TDBGrid;Query_Shift:TQuery);
var
 BM,
 TempBM : TBookmark;
 NewBM : TBookmarkStr;
 FoundPrevious : Boolean;
begin

  //  This code is called after the user does a Shift-Click in the grid
  //  First we set a flag to temporarily prevent the CurrrentRowID and
  //  PreviousrowID from being updated during the dataset's OnScroll event
  SettingBookmarkRange := True;

  BM := Query_Shift.GetBookmark;

  //  Set a flag to keep track of whether we've found the row with the PreviousRowID
  FoundPrevious := False;
  try

   Query_Shift.DisableControls;

   //  First, search forwards to see if we can find the the row with the PreviousRowID
   //  In other words, we're first checking that the Shift-Click was on a row *above*
   //  the previous row
   Query_Shift.Next;

   while not FoundPrevious and not Query_Shift.Eof do
   begin

    if Query_Shift.FieldByName('ID').AsInteger = PreviousRowID then
    begin

     FoundPrevious := True;

     //  We found the row with the PreviousRowID, so now get the Grid to add it, and
     //  all the rows back to where we started, in its SelectedRows list
     while not Query_Shift.Bof and (Query_Shift.FieldByName('ID').AsInteger <> CurrentRowID) do
     begin

      DBGrid_Shift.SelectedRows.CurrentRowSelected := True;
      Query_Shift.Prior;

     end;

    end
    else

     Query_Shift.Next;

    end;

    if not FoundPrevious then
    begin
     //  If we get here, the Shift-Click must have been in a row further down the
     //  grid than the previously-current one
     while not FoundPrevious and not Query_Shift.Bof do
     begin

      if Query_Shift.FieldByName('ID').AsInteger = PreviousRowID then
      begin

       FoundPrevious := True;
       //  We found the row with the PreviousRowID, so now get the Grid to add it, and
       //  all the rows back to where we started, in its SelectedRows list
       while not Query_Shift.Eof and (Query_Shift.FieldByName('ID').AsInteger <> CurrentRowID) do
       begin

        DBGrid_Shift.SelectedRows.CurrentRowSelected := True;
        Query_Shift.Next;

       end;

      end
      else

       Query_Shift.Prior;

      end;

    end;

  finally

   Query_Shift.GotoBookmark(BM);
   Query_Shift.FreeBookmark(BM);
   Query_Shift.EnableControls;
   SettingBookmarkRange := False;

  end;

end;
Gruss

Holger
  Mit Zitat antworten Zitat
HolgerCW

Registriert seit: 28. Nov 2006
Ort: Marl
1.207 Beiträge
 
Delphi XE7 Enterprise
 
#9

AW: RecNo gibt ergibt immer -1

  Alt 20. Mai 2021, 16:58
Rolf du hast Recht.

Das Projekt ist schon sehr alt, aber sehr groß. es wird auch bald abgelöst durch eine andere Software, aber bis dahin wird es halt noch ein wenig gepflegt und wünsche umgesetzt.

Gruss

Holger
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:20 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