| Autor |
Beitrag |
wilfried
Hält's aus hier
Beiträge: 5
Win98 Win2000 Linux MVS
D3 Client Server
|
Verfasst: Do 18.08.05 20:09
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
      
Beiträge: 616
Erhaltene Danke: 33
Win XP, Vista, 7
Delphi 5 Prof., BDS 2006 Prof. RAD Studio XE
|
Verfasst: 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 
Hält's aus hier
Beiträge: 5
Win98 Win2000 Linux MVS
D3 Client Server
|
Verfasst: 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
      
Beiträge: 616
Erhaltene Danke: 33
Win XP, Vista, 7
Delphi 5 Prof., BDS 2006 Prof. RAD Studio XE
|
Verfasst: 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
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Do 18.08.05 20:41
Delphi-Quelltext 1:
| Table1.locate ('KeyField',KeyValue, []); |
|
|
wilfried 
Hält's aus hier
Beiträge: 5
Win98 Win2000 Linux MVS
D3 Client Server
|
Verfasst: 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
      
Beiträge: 616
Erhaltene Danke: 33
Win XP, Vista, 7
Delphi 5 Prof., BDS 2006 Prof. RAD Studio XE
|
Verfasst: 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
Zuletzt bearbeitet von Blawen am Do 18.08.05 21:04, insgesamt 1-mal bearbeitet
|
|
Blawen
      
Beiträge: 616
Erhaltene Danke: 33
Win XP, Vista, 7
Delphi 5 Prof., BDS 2006 Prof. RAD Studio XE
|
Verfasst: 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 
Hält's aus hier
Beiträge: 5
Win98 Win2000 Linux MVS
D3 Client Server
|
Verfasst: 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
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Fr 19.08.05 20:42
|
|
Blawen
      
Beiträge: 616
Erhaltene Danke: 33
Win XP, Vista, 7
Delphi 5 Prof., BDS 2006 Prof. RAD Studio XE
|
Verfasst: Fr 19.08.05 23:34
|
|