![]() |
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. |
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 |
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). |
Re: DBGrid Zeile selektieren
Wenn du die Daten mit dem vorhandenen Dataset schon im Zugriff hast, dann nimm ein Bookmark:
Delphi-Quellcode:
marabu
var
bm: TBookmark; begin bm := Query.GetBookmark; ... Query.GotoBookmark(bm); Query.FreeBookmark(bm); end; |
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. |
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:
Der gefundene Datensatz wird zum aktuellen Datensatz - ohne dein Zutun.
Query.Locate('Nachname;Vorname', VarArrayOf(['Schmidt', 'G']), [loCaseInsensitive, loPartialKey]);
marabu |
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 |
Re: DBGrid Zeile selektieren
Zitat:
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. |
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 |
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 19:22 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