AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Den Feld-Editor einer TQuery zur Laufzeit füllen
Thema durchsuchen
Ansicht
Themen-Optionen

Den Feld-Editor einer TQuery zur Laufzeit füllen

Ein Thema von Smodibo · begonnen am 10. Feb 2005 · letzter Beitrag vom 11. Feb 2005
Antwort Antwort
Smodibo
(Gast)

n/a Beiträge
 
#1

Den Feld-Editor einer TQuery zur Laufzeit füllen

  Alt 10. Feb 2005, 11:39
Datenbank: ORACLE, SQL Server 2000 • Version: 9i, 8.0 • Zugriff über: BDE
Hallo.

Ich benutze eine TQuery-Komponente. Zur Entwurfszeit kann über Doppelklick der Feldeditor dieser Query geöffnet werden und die Felder der angegeben Tabelle eingefügt werden.

Ich möchte aber diesen Feld-Editor zur Laufzeit füllen, doch ich weis nicht, wie ich das machen soll.

Kann mir jemand helfen?

Mfg
Smodibo
  Mit Zitat antworten Zitat
urs.liska

Registriert seit: 6. Aug 2003
Ort: Freiburg
195 Beiträge
 
Delphi 6 Professional
 
#2

Re: Den Feld-Editor einer TQuery zur Laufzeit füllen

  Alt 10. Feb 2005, 11:51
Der Feld-Editor steht doch zur Laufzeit gar nicht zur Verfügung.
Wieso willst Du ihn dann Füllen?

Urs
  Mit Zitat antworten Zitat
shmia

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

Re: Den Feld-Editor einer TQuery zur Laufzeit füllen

  Alt 10. Feb 2005, 12:01
Zitat von Smodibo:
Ich benutze eine TQuery-Komponente. Zur Entwurfszeit kann über Doppelklick der Feldeditor dieser Query geöffnet werden und die Felder der angegeben Tabelle eingefügt werden.

Ich möchte aber diesen Feld-Editor zur Laufzeit füllen, doch ich weis nicht, wie ich das machen soll.
Die Felder eines TDataset (TQuery, TTable,...) sind entweder persistent (zur Entwurfszeit erzeugt) oder nicht (sie werden beim Öffen aus den Felder der unterliegenden Datenmenge generiert).
Wenn du keine persistenten Felder hast, kannst du direkt nach dem Öffnen Einfluss auf die Felder nehmen:
Delphi-Quellcode:
procedure TForm1.Query1AfterOpen(DataSet:TDataset);
begin
   Dataset.FieldByName('Password').Visible := False; // nie anzeigen

   Dataset.FieldByName('MasterKey').ReadOnly := True; // darf nie geändert werden

   TDateTimeField(Dataset.FieldByName('LastSaved')).DisplayFormat := 'YYYY.MM';
end;
So kannst du jede Eigenschaft oder Event zur Laufzeit ändern; nur eben nicht so bequem wie mit
dem Feldeditor + Objektinspektor.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.354 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Den Feld-Editor einer TQuery zur Laufzeit füllen

  Alt 10. Feb 2005, 12:11
Was hast du damit denn genau vor?
Ich frage, weil ich eine Komponente habe, die zumindest die Darstellung in einem DBGrid konfigurieren lässt.
Wenn du es aber ReadOnly, EditMask u.ä. benötigst, würde die nicht genügen.
Peter
  Mit Zitat antworten Zitat
Smodibo
(Gast)

n/a Beiträge
 
#5

Re: Den Feld-Editor einer TQuery zur Laufzeit füllen

  Alt 10. Feb 2005, 12:28
Ich fülle ein TwwDBGrid zur Laufzeit mit bestimmten Feldern der Datenmenge. Da der Feldeditor bei mir leer ist, ist die Eigenschaft DisplayLabel der Felder nicht angepasst (z.B. NAME = Name).
Nun passiert folgendes zur Laufzeit:
- Beim drücken auf eine Spalte im Grid wird die Datenmenge nach dieser Spalte sortiert.

Bspl.:

Code:
Query.close;
Query.SQL.clear;
Query.SQL.Add('SELECT A.*, (SELECT COUNT(0) FROM TESTEN2 WHERE ID_TESTEN = A.ID_TESTEN) ANZAHL');
Query.SQL.Add('FROM TESTEN A');
Query.SQL.Add('ORDER BY A.NAME'); {Diese ORDER BY Klausel ermittle ich aus der Spalte, die ich gedrückt habe}
Query.Open;
Danach werden alle Feldnamen wieder so angezeigt, wie sie in der Datenbank stehen.
Wäre der Feld-Editor gefüllt, wie zur Entwurfszeit, dann würden die DisplayLabels so bleiben, wie
sie vor dem erneuten Öffnen der Query waren.

Durch dieses (SELECT COUNT(0) ...) in der Query kommt es zwischen ORACLE und SQL Server zu einem Konflikt, da die Feldtypen nicht gleich sind.
Folgende Fehlermeldung erscheint:
Unterschiedliche Typen für Feld 'ANZAHL'; erwartet: Float, gefunden: Integer

Mfg

Smodibo
  Mit Zitat antworten Zitat
urs.liska

Registriert seit: 6. Aug 2003
Ort: Freiburg
195 Beiträge
 
Delphi 6 Professional
 
#6

Re: Den Feld-Editor einer TQuery zur Laufzeit füllen

  Alt 10. Feb 2005, 13:14
Ich glaube, wenn Du vorher (zur Entwurfszeit) nicht weißt, welche Felder Du brauchst, musst Du - entsprechend shmias Anmerkungen eben zur Laufzeit die entsprechenden Eigenschaften setzen, etwaDataset.FieldByName('Password').DisplayLabel := 'Passwort'; Das musst Du nach dem Neussortieren nochmal machen, aber das sollte kein Problem sein, Du kennst dann ja die Felder.

Viel Erfolg
Urs
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.354 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Den Feld-Editor einer TQuery zur Laufzeit füllen

  Alt 10. Feb 2005, 15:29
Dann sollte meine Komponente eigentlich passen, wenn sie mit deinem Grid zurecht kommt.
Formatier-Komponente
Im Programm musst du noch die Funktion ExecuteFieldmanager aufrufen.
Dokumentiert ist die Komponente noch nicht. Aber die Eigenschaften und die Einstellungsfunktion sind nicht so kompliziert.
Das ganze ist unter D5 entwickelt.
Falls du nicht zurecht kommst, melde dich.
Peter
  Mit Zitat antworten Zitat
Smodibo
(Gast)

n/a Beiträge
 
#8

Re: Den Feld-Editor einer TQuery zur Laufzeit füllen

  Alt 11. Feb 2005, 11:00
Die Formatier-Komponente ist nicht schlecht, aber schreibt in die Registry
rein.

Ich werde dann den Weg mit dem DisplayLabel zur Laufzeit setzen gehen.

Vielen Dank für die Hilfe

Smodibo
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.354 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Den Feld-Editor einer TQuery zur Laufzeit füllen

  Alt 11. Feb 2005, 11:28
Du musst nur UseINIFile auf True setzen und eine INI-Datei angeben. Dann schreibt er da rein. Ist aber zur Zeit noch etwas langsamer als die Registry. Bin gerade dabei, dass zu überarbeiten.
Peter
  Mit Zitat antworten Zitat
Smodibo
(Gast)

n/a Beiträge
 
#10

Re: Den Feld-Editor einer TQuery zur Laufzeit füllen

  Alt 11. Feb 2005, 12:08
Habe eine andere Lösung gefunden.
Ich wandle das Feld ANZAHL unter SQL Server mit CAST in einen Float-Wert (DECIMAL) um.
Beispiel:
Code:
Query.close;
Query.SQL.clear;
Query.SQL.Add('SELECT A.*, CAST( (SELECT COUNT(0) FROM TESTEN2 WHERE ID_TESTEN = A.ID_TESTEN) AS DECIMAL) ANZAHL');
Query.SQL.Add('FROM TESTEN A');
Query.SQL.Add('ORDER BY A.NAME');
Query.Open;
Dadurch kann ich den Feld-Editor zur Entwurfszeit mit den Feldern füllen und die DisplayLabels bleiben bei einer Neusortierung erhalten.

Mfg
Smodibo
  Mit Zitat antworten Zitat
Antwort Antwort


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 00:03 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