Autor Beitrag
wilfried
Hält's aus hier
Beiträge: 5

Win98 Win2000 Linux MVS
D3 Client Server
BeitragVerfasst: 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.
ausblenden 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 user profile iconTino: Delphi-Tags hinzugefügt & überflüssige Zeilenumbrüche entfernt.
Blawen
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 616
Erhaltene Danke: 33

Win XP, Vista, 7
Delphi 5 Prof., BDS 2006 Prof. RAD Studio XE
BeitragVerfasst: Do 18.08.05 20:16 
Wieso verwendest Du für das DBGrid nicht auch gleich die Query?

Ansonsten Stichwort:
ausblenden Delphi-Quelltext
1:
2:
Table.FieldbyName('Feldname').AsString := Query.FieldByName('Feldname').AsString;  // oder Integer,... je nach Bedarf
Table.GotoKey;


Moderiert von user profile iconTino: Delphi-Tags hinzugefügt
wilfried Threadstarter
Hält's aus hier
Beiträge: 5

Win98 Win2000 Linux MVS
D3 Client Server
BeitragVerfasst: 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 user profile iconTino: Überflüssige Zeilenumbrüche entfernt.
Blawen
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 616
Erhaltene Danke: 33

Win XP, Vista, 7
Delphi 5 Prof., BDS 2006 Prof. RAD Studio XE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Do 18.08.05 20:41 
ausblenden Delphi-Quelltext
1:
Table1.locate ('KeyField',KeyValue, []);					
wilfried Threadstarter
Hält's aus hier
Beiträge: 5

Win98 Win2000 Linux MVS
D3 Client Server
BeitragVerfasst: 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 user profile iconTino: Überflüssige Zeilenumbrüche entfernt.
Blawen
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 616
Erhaltene Danke: 33

Win XP, Vista, 7
Delphi 5 Prof., BDS 2006 Prof. RAD Studio XE
BeitragVerfasst: Do 18.08.05 20:46 
Ich habe es "früher" so gelöst gehabt: (OnKeyUp Ereignis des Editfeldes)


ausblenden 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 user profile iconTino: Code- durch Delphi-Tags ersetzt


Zuletzt bearbeitet von Blawen am Do 18.08.05 21:04, insgesamt 1-mal bearbeitet
Blawen
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 616
Erhaltene Danke: 33

Win XP, Vista, 7
Delphi 5 Prof., BDS 2006 Prof. RAD Studio XE
BeitragVerfasst: Do 18.08.05 21:02 
user profile iconalzaimar hat folgendes geschrieben:
ausblenden 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 Threadstarter
Hält's aus hier
Beiträge: 5

Win98 Win2000 Linux MVS
D3 Client Server
BeitragVerfasst: 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 user profile iconTino: Überflüssige Zeilenumbrüche entfernt.
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Fr 19.08.05 20:42 
user profile iconBlawen hat folgendes geschrieben:
user profile iconalzaimar hat folgendes geschrieben:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 616
Erhaltene Danke: 33

Win XP, Vista, 7
Delphi 5 Prof., BDS 2006 Prof. RAD Studio XE
BeitragVerfasst: 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:
ausblenden 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;