Entwickler-Ecke
Datenbanken - Zeile in DBGRID auswaehlen
wilfried - Do 18.08.05 20:09
Titel: Zeile in DBGRID auswaehlen
Hallo,
ich habe folgendes Problem: Ich habe eine Tabelle und eine SQL Abfage auf einer Form. Die Tabelle läuft auf Datasource 1 und wird mit einem DBGrid angezeigt während die Query auf Data Source 2 läuft und mit 2 DBEdit Feldern das Ergebnis anzeigt. Jetzt möchte ich aber dass im DBGrid nicht der erste Datensatz mit dem Markierungspfeil angezeigt wird sondern auch dort auf den aktuellen (von TQuery gefundenen Satz) zeigt. Wie kann ich das programmieren? Ein Versuch mit recno schlug fehl.
Delphi-Quelltext
1: 2: 3: 4:
| .... i := Query1.recno; Table1.recno :=i; .... |
Über hilfe würde ich mich sehr freuen.
Vielen Dank
Wilfried
Moderiert von
Tino: Delphi-Tags hinzugefügt & überflüssige Zeilenumbrüche entfernt.
Blawen - Do 18.08.05 20:16
Wieso verwendest Du für das DBGrid nicht auch gleich die Query?
Ansonsten Stichwort:
Delphi-Quelltext
1: 2:
| Table.FieldbyName('Feldname').AsString := Query.FieldByName('Feldname').AsString; Table.GotoKey; |
Moderiert von
Tino: Delphi-Tags hinzugefügt
wilfried - Do 18.08.05 20:31
Hallo Blawen,
wenn das so einfach wäre.
Das DBgrid soll ja immer die ganze Tabelle anzeigen. Das Ergebnis wird ja in den Edit Feldern angezeigt. Wenn ich das Grid auf die Query lege wird ja immer nur der ausgewählte Satz angezeigt. Das Grid soll sozusagen zum Blättern sein aber nach der Suche soll es den gefundenen Satz markieren.
Wilfried
Moderiert von
Tino: Überflüssige Zeilenumbrüche entfernt.
Blawen - Do 18.08.05 20:35
Verstehe ich es richtig, dass Du im Prinzip ein Edit-Feld hast und beim eingeben eines Wertes einfach zum "nächsten" Datensatz springen möchtest? Dann brauchst Du aber die Query nicht...
alzaimar - Do 18.08.05 20:41
Delphi-Quelltext
1:
| Table1.locate ('KeyField',KeyValue, []); |
wilfried - Do 18.08.05 20:45
Hallo Blawen,
das ganze soll so funktionieren: Ich habe ein normales Edit Feld. Dort wird der Suchbegriff eingegeben. Daraus wird dann eine SQL Abfrage erzeugt an die Query übergeben und das Ergebnis in den DBEdit Feldern angezeigt. Das DBGrid ist eigentlich unabhängig von der Query zeigt aber die gleiche Tabelle an in der auch die Suche stattfindet. Jetzt möchte ich nur dass im Grid auf den von der Query gefundenen Satz navigiert wird (normal steht das Grid auf Satz1 wird jetzt durch die Abfrage Satz 128 gefunden soll das Grid auch auf Satz 128 springen)
Moderiert von
Tino: Überflüssige Zeilenumbrüche entfernt.
Blawen - Do 18.08.05 20:46
Ich habe es "früher" so gelöst gehabt: (OnKeyUp Ereignis des Editfeldes)
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure TAuswDebitor.Edit_sucheKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin Table_Debitor.SetKey; Table_Debitor.FieldbyName('Feldname').AsString := Edit_Suche.Text; Table_Debitor.GotoNearest; end; |
//Edit
Hinweise:
Wie bereits geschrieben brauchst Du in diesem Falle kein Query. Betreffs Edit-Feldern musst Du selbstverständlich nichts unternehmen, das Ändern der Anzeige geschieht völlig automatisch. Einmal zuweisen und fertig.
Ich hoffe Dein Problem ist nun gelöst.
Gruss
Blawen
Moderiert von
Tino: Code- durch Delphi-Tags ersetzt
Blawen - Do 18.08.05 21:02
alzaimar hat folgendes geschrieben: |
Delphi-Quelltext 1:
| Table1.locate ('KeyField',KeyValue, []); | |
Hat den Nachteil
| Zitat: |
| Wird ein übereinstimmender Datensatz gefunden, gibt Locate den Wert True zurück und aktiviert den gefundenen Datensatz. Andernfalls wird False zurückgegeben. |
Somit müsste der Name m.E. exakt gleich geschrieben werden.
wilfried - Fr 19.08.05 19:09
Hallo,
das Problem ist gelöst. Blawen's Code hat einwandfrei funktioniert. Die DBF Edit Felder sind übrigens als Read only deklariert so daß dort nichts eingegeben werden kann.
Zur Anwendung: Das Programm ist für Amateurfunk Conteste und soll nach Eingabe eines Rufzeichens in Das Standard Editfeld das dazugehörende Land anzeigen. Das wird in den beiden DBEdit Feldern gemacht in die der User aber nichts eingeben darf. Die Eingabe erfolgt nur über das Text Edit Feld. Daraus wird dann eine SQL Query gebastelt und über ein TQuery in der Datenbank gesucht und das ganze über eine Data Source mit beiden DB Editfeldern verbunden. Das DBGrid hängt an über eine 2. Data Source direkt an der Table. Dass im Grid auf den gefundenen Satz gesprungen wird ist eigentlich nur ein bischen Kosmetik für die eigentliche Funktion nich nötig.
Aber wie schon gesagt es funktioniert jetzt. Danke Blawen für deine Hilfe.
Wilfried
Moderiert von
Tino: Überflüssige Zeilenumbrüche entfernt.
alzaimar - Fr 19.08.05 20:42
Blawen hat folgendes geschrieben: |
alzaimar hat folgendes geschrieben: | Delphi-Quelltext 1:
| Table1.locate ('KeyField',KeyValue, []); | |
Hat den Nachteil | Zitat: | | Wird ein übereinstimmender Datensatz gefunden, gibt Locate den Wert True zurück und aktiviert den gefundenen Datensatz. Andernfalls wird False zurückgegeben. | Somit müsste der Name m.E. exakt gleich geschrieben werden. |
Lies mal genauer bzw. den Rest der OH. Man kann in den Optionen [] noch angeben, ob die Gross/Kleinschreibung berücksichtigt wird, und/oder ob auch ein Teilschlüssel angegeben werden kann.
Blawen - Fr 19.08.05 23:34
| Zitat: |
| Lies mal genauer bzw. den Rest der OH. Man kann in den Optionen [] noch angeben, ob die Gross/Kleinschreibung berücksichtigt wird, und/oder ob auch ein Teilschlüssel angegeben werden kann. |
OK. Du hast recht, man kann sich ganze zwei Zeilen sparen... :wink:
Delphi-Quelltext
1: 2: 3: 4: 5:
| procedure TAuswDebitor.Edit_sucheKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin Table_Debitor.locate('Feldname',Edit_Suche.Text, [loCaseInsensitive, loPartialKey]) end; |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!