Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi DBGrid Zeile selektieren (https://www.delphipraxis.net/49453-dbgrid-zeile-selektieren.html)

Smiley 11. Jul 2005 17:26

Datenbank: ADO Access • Zugriff über: ADO-Query

DBGrid Zeile selektieren
 
Ich verwende eine Datenbank mit ADO und einer SQL-Query zum Filtern der Daten. Die daten werden in einem DBGrid und der aktuelle Datensatz in einer Liste von Edit-Feldern dargestellt. In den Edit-Feldern wird die Dateneditierung vorgenommen. Das DBGrid ist nur zur Auswahl des Datensatzes vorgesehen. Auf diese Weise kann ich die Dateneingabe genau prüfen und Eingabefehler abfangen.

Ich möchte in einem DBGrid den aktuellen Datensatz markiert anzeigen, wie bekomme ich das hin ?
Der Grund ist, ich will einen Datensatz der mit dem DBGrid ausgewählt wurde, in Editfeldern, bearbeiten und dann nach dem speichern der Daten auf den nächsten Datensatz springen. Dieser soll in dem DBGrid dann in der Mitte des Grid ausgewählt sein, sodass man gleich beim nächsten Datensatz wieder weitermachen kann.

Ist es möglich mit einem SQL-Query einen Datensatz anzuwählen und trotzdem alle Datensätze im Grid anzuzeigen.
Oder geht das nur mit einer Table-Componente und dem Locate oder Seek-Befehl, oder sollte ich lieber mit dem ADO-Dataset arbeiten.

Kann es sein, dass diese beiden Befehle mir bei der Lösung meines Problemes helfen ?

Grid.DataSource.DataSet.GotoBookmark(pointer(Grid. SelectedRows.Items[i]));
DataSet.GotoBookmark(pointer(Grid.SelectedRows.Ite ms[i])

wie setze ich das für mein Problem richtig ein.

marabu 11. Jul 2005 17:41

Re: DBGrid Zeile selektieren
 
Hallo Smiley,

die Markierung des aktuellen Datensatzes im DBGrid wird von der Komponente schon selbst erledigt. Du kannst ein wenig an der Optik feilen, indem du in den Options deines DBGrid dgAllwaysShowSelection und dgRowSelect hinzufügst.

Die ständige Positionierung des aktuellen Datensatzes in der Mitte des Grids halte ich nicht für notwendig, da dass bei n sichtbaren Zeilen genau für n Zeilen gar nicht möglich sein wird - n/2 jeweils am Beginn der Query und an deren Ende. Außerdem fällt mir auf die Schnelle auch nicht ein, wie ich das elegant lösen könnte.

Grüße vom marabu

Smiley 11. Jul 2005 18:47

Re: DBGrid Zeile selektieren
 
Danke marabu,
die optionen hatte ich schon gesetzt, das klappt auch.
Ich muss nur leider nach dem speichern der Daten noch eine Summe aus der Datenbank berechnen und danach muss ich die Liste wieder mit der alten Position anzeigen.
Das mit der Markierung in der Mitte ist nicht so wichtig.
Jetzt die Frage, soll ich die Summenberechnung über eine andere Datasource machen oder nach der Berechnung neu positionieren.
Wie mache ich das mit den Bookmark-Befehlen, muss ich da über das Dataset gehen oder das Grid oder das Query.
(Bitte ein Beispiel für get.bookmark und gotobookmark).

marabu 11. Jul 2005 19:02

Re: DBGrid Zeile selektieren
 
Wenn du die Daten mit dem vorhandenen Dataset schon im Zugriff hast, dann nimm ein Bookmark:

Delphi-Quellcode:
var
  bm: TBookmark;
begin
  bm := Query.GetBookmark;
  ...
  Query.GotoBookmark(bm);
  Query.FreeBookmark(bm);
end;
marabu

Smiley 11. Jul 2005 19:45

Re: DBGrid Zeile selektieren
 
Hat prima geklappt, jetzt funktioniert das alles.

Nur noch zu der anderen Frage mit dem suchen im Query.
Ich möchte nach einem Datensatz in der Datenbank suchen aber alle Datensätze anzeigen.
Nur der gefundene soll aktiv sein.
Lösung 1: Mit SQL-Befehl suchen und Datensatz mit Bookmark merken, dann Select ohne Filter und Bookmark setzen.
Lösung 2: Über zusätzliche Table-Komponente oder ADO-Dataset suchen wärend die Query bestehen bleibt. Wie kann ich dann den gefundenen Satz aktuell machen oder wirkt sich das auch auf die Query aus ?
Die zweite Lösung wäre gut, wenn ich in den gesuchten Daten nur etwas auslesen und verarbeiten will, die Anzeige aber bestehen bleiben soll.

marabu 11. Jul 2005 20:29

Re: DBGrid Zeile selektieren
 
Wenn der von dir gesuchte Datensatz bereits in der offenen Query enthalten ist, dann würde sich Lösung 3 anbieten:

Delphi-Quellcode:
Query.Locate('Nachname;Vorname', VarArrayOf(['Schmidt', 'G']), [loCaseInsensitive, loPartialKey]);
Der gefundene Datensatz wird zum aktuellen Datensatz - ohne dein Zutun.

marabu

Smiley 11. Jul 2005 20:53

Re: DBGrid Zeile selektieren
 
Waaaaaaaass ich kann im Query den locate befehl benutzen ?????? dann mach ich mir ja ganz umsonst soviele Gedanken.

Wie kann ich herausfinden, was ich z.B. mit dem Query Befehl alles machen kann, ich befinde mich mit der Delphi-Hilfe nämlich im Kriegszustand. Sie sagt mir nie das was ich suche und wenn ja, dann so unverständlich, dass ich es nicht ganz verstehe.
Möglicherweise habe ich einfach die Bedienung der Hilfe nicht richtig verstanden. (Wären da mehr Beispiele drin, hätte ich schon viel mehr verstanden).

Kannst Du mir anhand des Query Befehles sagen, wie ich vorgehe um alle Möglichkeiten erklärt zu bekommen.

Danke

Sharky 12. Jul 2005 05:09

Re: DBGrid Zeile selektieren
 
Zitat:

Zitat von Smiley
... Kannst Du mir anhand des Query Befehles sagen, wie ich vorgehe um alle Möglichkeiten erklärt zu bekommen. ...

Hai Smiley,

selektiere auf deiner Form die TQuery-Komponente und drücke F1. Jetzt siehst Du die allgemeine Hilfe zu deinem TQuery. Wenn Du jetzt auf Methoden klickst sollte ein zusätzliches Fenster mit allen Methoden die bei einem TQuery zur verfügungstehen aufgehen und Du kannst dir die Erklärungen ansehen.

Smiley 12. Jul 2005 19:02

Re: DBGrid Zeile selektieren
 
Auf die Idee auf dem Form etwas anzuklicken und dann F1 zu drücken bin ich gar nicht gekommen.
Habe es immer nur aus dem Edito probiert.

Es sind zwar viele Dinge in der Hilfe nicht ausführlich genug erklärt, aber das Grundprinzip wird beschrieben.

Danke für Eure Geduld

marabu 12. Jul 2005 19:07

Re: DBGrid Zeile selektieren
 
Der Objekt-Inspektor ist auch F1-sensitiv - also nach der Auswahl einer Komponente (in Palette oder auf Form) einfach eine Eigenschaft oder ein Ereignis markieren und F1 drücken...

marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:21 Uhr.

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