AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Wie definiere ich ein Lookup-Feld für eine TQuery?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie definiere ich ein Lookup-Feld für eine TQuery?

Ein Thema von MPirnstill · begonnen am 9. Jan 2006 · letzter Beitrag vom 11. Jan 2006
Antwort Antwort
Seite 2 von 2     12   
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#11

Re: Wie definiere ich ein Lookup-Feld für eine TQuery?

  Alt 9. Jan 2006, 15:05
Ich habe leider kein D2 zum Testen parat, aber unter D7 habe ich mir ein kleines Testprojekt erstellt, bei dem ich die Anrede (Herr oder Frau) über eine Lookup-Tabelle auswähle. Die Lookup-Tabelle und auch die Query sind zu Beginn inaktiv und werden erst nach der Erstellung des Lookup-Feldes aktiviert.

Delphi-Quellcode:
procedure TDataForm.FormCreate(Sender: TObject);
begin
  CreateLookupField;
  Database.Connected := true;
  Anreden.Open;
  QKontakte.Open;
end;

procedure TDataForm.CreateLookupField;
var
  f: TStringField;
begin
  f := TStringField.Create(QKontakte);
  with f do
  begin
    Name := QKontakte.Name + FieldName;
    Size := 50;
    DisplayLabel := 'Anrede';
    DisplayWidth := 21;
    FieldName := 'ANREDE';
    FieldKind := fkLookup;
    LookupDataSet := Anreden;
    KeyFields := 'ANR_ID';
    LookupKeyFields := 'ID';
    LookupResultField := 'PHRASE';
    DataSet := QKontakte; // Feld in Feldliste aufnehmen
    Index := 2; // Feld an gewünschte Stelle verschieben
  end;
end;
Ich habe den thread erst jetzt genau durchgelesen. Andreas hat klar erkannt, wenn du die Query dynamisch erstellst, dann müssen alle Felder per Code persistent gemacht werden. Ohne eine Routine wie CreateAllFields() kannst du gar nicht anfangen zu testen.

Nachtrag: Wahrscheinlich ist es nur ein ganz kleiner Fehler im Code von Andreas - vor dem Aufruf vom FieldDefs.Update muss noch FieldDefs.Updated auf false gesetzt werden - der dir den Erfolg verweigert. Und ganz zum Schluss wirst du die Schlüsselfelder noch verstecken wollen.

marabu
  Mit Zitat antworten Zitat
Benutzerbild von MPirnstill
MPirnstill

Registriert seit: 19. Jul 2004
Ort: Burgdorf
197 Beiträge
 
Delphi XE8 Enterprise
 
#12

Re: Wie definiere ich ein Lookup-Feld für eine TQuery?

  Alt 10. Jan 2006, 08:13
Zitat von marabu:
Ich habe den thread erst jetzt genau durchgelesen. Andreas hat klar erkannt, wenn du die Query dynamisch erstellst, dann müssen alle Felder per Code persistent gemacht werden. Ohne eine Routine wie CreateAllFields() kannst du gar nicht anfangen zu testen.

marabu
Hallo Marabu,

du hast jetzt in deinem Beispiel diese 'CreateAllFields()' auch nicht verwendet.

Ich habe jetzt jedenfalls mal versucht dein Beispiel in mein Programm einzubauen. Wenn ich dann den 'Open' für meine Query ausführe, bekomme ich die Fehlermeldung
Zitat:
Feld 'ID_Mitglied' nicht gefunden.
So heißt mein 'KeyField' in 'FQry'. Und da ich mit '*' selektiere müßte es eigentlich da sein.

Ist dies jetzt z.B. so ein Fall, daß die anderen Felder nicht mit 'CreateAllFields' erzeugt wurden?

Ich habe beim Testen vorm 'Open' nachgesehen, in der FieldDefs-Liste sind alle 16 Spalten meiner Tabelle, aber in der Fields-Liste steht nur das Lookup-Feld. Wenn ich das jetzt richtig interpretiere, muß ich vorm erzeugen des Lookup-Feldes noch
Zitat:
- vor dem Aufruf vom FieldDefs.Update muss noch FieldDefs.Updated auf false gesetzt werden -
Die Eigenschaft 'FieldDefs.Updated' kennt Delphi unter 2.0 anscheined noch nicht, hab mal einfach
Delphi-Quellcode:
FQry.FieldDefs.Clear;
FQry.FieldDefs.Update;
probiert, aber der Erfolg bzw. Mißerfolg bleibt derselbe. Mein KeyField 'ID_Mitglied' kennt Delphi nicht.

Gruß
Micha
Ich habe fertig!

DP - hier werden Sie geholfen!
  Mit Zitat antworten Zitat
Benutzerbild von MPirnstill
MPirnstill

Registriert seit: 19. Jul 2004
Ort: Burgdorf
197 Beiträge
 
Delphi XE8 Enterprise
 
#13

Re: Wie definiere ich ein Lookup-Feld für eine TQuery?

  Alt 10. Jan 2006, 08:47
Hallo nochmal!

Wie komme ich denn jetzt an diese Methoden (DestroyFields, CreateFields) des TDataSet.

Zitat:
Ohne eine Routine wie CreateAllFields() kannst du gar nicht anfangen zu testen.
Ich habe, wie gesagt, in der Unit DB.PAS nachgesehen, dort sind die unter Delphi 2.0 leider in Private deklariert und nicht in Protected. Kann ich die einfach verschieben oder würde das böse viel durcheinander bringen?

Gruß
Micha
Ich habe fertig!

DP - hier werden Sie geholfen!
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#14

Re: Wie definiere ich ein Lookup-Feld für eine TQuery?

  Alt 10. Jan 2006, 08:52
Zitat von MPirnstill:
Ich habe, wie gesagt, in der Unit DB.PAS nachgesehen, dort sind die unter Delphi 2.0 leider in Private deklariert und nicht in Protected. Kann ich die einfach verschieben oder würde das böse viel durcheinander bringen?
Du kannst die Unit in dein Projektverzeichnis kopieren und zum Projekt hinzufügen.
Danach kannst du DB.PAS ändern.
Von der Orginalen Datei würde ich die Finger lassen !
Auf die Verwendung von Packages musst du dann aber verzichten.
Hat Delphi 2 überhaupt schon Packages ? Lange her...
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von MPirnstill
MPirnstill

Registriert seit: 19. Jul 2004
Ort: Burgdorf
197 Beiträge
 
Delphi XE8 Enterprise
 
#15

Re: Wie definiere ich ein Lookup-Feld für eine TQuery?

  Alt 10. Jan 2006, 09:11
Hallo shmia,

hab die Unit DB.PAS rüberkopiert in mein Projektverzeichnis und meinem Projekt hinzugefügt.
Die 'uses'-Anweisung in meiner Source bleibt aber unverändert, oder?

Hab die beiden Methoden in der Interface-Section von Private nach Protected verschoben, aber der Delphi-Compiler meckert nach wie vor, das DestroyFields und CreateFields undefinierte Bezeichner sind. Das mit dem TDatasetCracker hab ich auch noch so in meiner Source wie du es in deinem Beispiel geschrieben hast.

Ich glaub bald ich bin zu blöd für diese Welt.

Hast du noch Vorschläge was ich machen könnte, das der Delphi-Compiler die Methoden erkennt, oder evtl. einen anderen Weg?

Gruß
Micha
Ich habe fertig!

DP - hier werden Sie geholfen!
  Mit Zitat antworten Zitat
Benutzerbild von MPirnstill
MPirnstill

Registriert seit: 19. Jul 2004
Ort: Burgdorf
197 Beiträge
 
Delphi XE8 Enterprise
 
#16

Re: Wie definiere ich ein Lookup-Feld für eine TQuery?

  Alt 10. Jan 2006, 09:21
Bin jetzt noch mal einen Schritt weiter gegangen und habe die beiden Methoden sogar unter Public verschoben, aber der gleiche Fehler. Ich glaube fast, daß Delphi sich immer noch die Original Unit DB.PAS zieht.

Gruß
Micha
Ich habe fertig!

DP - hier werden Sie geholfen!
  Mit Zitat antworten Zitat
Benutzerbild von MPirnstill
MPirnstill

Registriert seit: 19. Jul 2004
Ort: Burgdorf
197 Beiträge
 
Delphi XE8 Enterprise
 
#17

Re: Wie definiere ich ein Lookup-Feld für eine TQuery?

  Alt 10. Jan 2006, 11:18
Tja, irgendwie hab ich das Gefühl ich bin wieder allein mit meinem Problem!

Es funzt zwar nich, aber trotzdem vielen Dank an euch. Muß ich mir irgendwie was anderes einfallen lassen.

Gruß
Micha
Ich habe fertig!

DP - hier werden Sie geholfen!
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#18

Re: Wie definiere ich ein Lookup-Feld für eine TQuery?

  Alt 10. Jan 2006, 17:12
Hallo Micha,

ich war im Keller und habe D2 gefunden. Installiert habe ich es dann auch noch. Das Demo-Projekt im Anhang ist dabei heraus gekommen. Die Quintessenz ist - es geht, aber anders als wir dachten. D2 ist halt nicht D5 oder D7.

Grüße vom marabu
Angehängte Dateien
Dateityp: zip d2lookup_133.zip (4,1 KB, 10x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von MPirnstill
MPirnstill

Registriert seit: 19. Jul 2004
Ort: Burgdorf
197 Beiträge
 
Delphi XE8 Enterprise
 
#19

Re: Wie definiere ich ein Lookup-Feld für eine TQuery?

  Alt 11. Jan 2006, 07:13
Zitat von marabu:
Hallo Micha,

ich war im Keller und habe D2 gefunden. Installiert habe ich es dann auch noch. Das Demo-Projekt im Anhang ist dabei heraus gekommen. Die Quintessenz ist - es geht, aber anders als wir dachten. D2 ist halt nicht D5 oder D7.

Grüße vom marabu
Hallo marabu,

ich bin der Meinung:
Zitat:
Das war Spitze!

um das mal mit den Worten eines längst verstorbenen Showmasters zu sagen.

Ich hatte gestern Nachmittag eine ähnliche, aber sehr unelegante, Lösung funden. Ich hatte mir die Felddefinitionen im Programm definiert um die persistenten Felder anzulegen und das ist ja doppelt-gemoppelt und außerdem eine große Fehlerquelle falls man mal die Tabelle ändern sollte.

Das du extra noch mal den Dinosaurier, welche ich hier tagtäglich quäle (oder er mich), aus dem Keller gekrammt und installiert hast, ist einfach Wahnsinn. Ich komme davon (D2) leider nicht los, da dieses alte Projekt an dem ich hier arbeit sehr viele Quickreports hat und deswegen die Umstellung zu aufwendig wäre (bekomme einfach nicht die Zeit dafür). Sonst würde ich ja auch mit eine neueren Version arbeiten.

Super-spitzenmäßig! Tausend Dank, nochmal!
Micha
Ich habe fertig!

DP - hier werden Sie geholfen!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:01 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