![]() |
Datenbank: ORACLE, SQL Server 2000 • Version: 9i, 8.0 • Zugriff über: BDE
Den Feld-Editor einer TQuery zur Laufzeit füllen
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 |
Re: Den Feld-Editor einer TQuery zur Laufzeit füllen
Der Feld-Editor steht doch zur Laufzeit gar nicht zur Verfügung.
Wieso willst Du ihn dann Füllen? :wiejetzt: Urs |
Re: Den Feld-Editor einer TQuery zur Laufzeit füllen
Zitat:
Wenn du keine persistenten Felder hast, kannst du direkt nach dem Öffnen Einfluss auf die Felder nehmen:
Delphi-Quellcode:
So kannst du jede Eigenschaft oder Event zur Laufzeit ändern; nur eben nicht so bequem wie mit
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; dem Feldeditor + Objektinspektor. |
Re: Den Feld-Editor einer TQuery zur Laufzeit füllen
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. |
Re: Den Feld-Editor einer TQuery zur Laufzeit füllen
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:
Danach werden alle Feldnamen wieder so angezeigt, wie sie in der Datenbank stehen.
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; 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 |
Re: Den Feld-Editor einer TQuery zur Laufzeit füllen
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, etwa
Delphi-Quellcode:
Das musst Du nach dem Neussortieren nochmal machen, aber das sollte kein Problem sein, Du kennst dann ja die Felder.
Dataset.FieldByName('Password').DisplayLabel := 'Passwort';
Viel Erfolg Urs |
Re: Den Feld-Editor einer TQuery zur Laufzeit füllen
Dann sollte meine Komponente eigentlich passen, wenn sie mit deinem Grid zurecht kommt.
![]() 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. |
Re: Den Feld-Editor einer TQuery zur Laufzeit füllen
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 |
Re: Den Feld-Editor einer TQuery zur Laufzeit füllen
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.
|
Re: Den Feld-Editor einer TQuery zur Laufzeit füllen
:thumb: Habe eine andere Lösung gefunden.
Ich wandle das Feld ANZAHL unter SQL Server mit CAST in einen Float-Wert (DECIMAL) um. Beispiel:
Code:
Dadurch kann ich den Feld-Editor zur Entwurfszeit mit den Feldern füllen und die DisplayLabels bleiben bei einer Neusortierung erhalten.
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; Mfg Smodibo |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz