![]() |
Datenbank: MS Access :-) • Version: BDE • Zugriff über: BDE
Existiert ein Feldname einer TQuery ?
kann man eigendlich feststellen ob ein bestimmter Feldname in der TQuery Existiert.
In der Registry kann man z.B. per
Delphi-Quellcode:
ermitteln ob eine value existiert. Geht das auf per
registry.valueexists('feld')
Delphi-Quellcode:
???
TQuery.ValueExists('feldname')
:P euer Andreas |
Re: Existiert ein Feldname einer TQuery ?
Du könntest es mit Query.FieldList.Find('Feldname') machen, wenn das Result NIL ist, hat er ein entsprechendes Feld nicht in der Query gefunden.
|
Re: Existiert ein Feldname einer TQuery ?
Hallo Andreas,
musst du fürchten, dass sich der Tabellenaufbau zwischen zwei Programmstarts verändert hat? In dem Fall solltest du zu Beginn des Programms prüfen, dass der Aufbau deinen Erwartungen entspricht. Das geht mit den Methoden der Database-Komponente: GetTableNames() und GetFieldNames(). Grüße vom marabu |
Re: Existiert ein Feldname einer TQuery ?
Hallo spacewolf,
Delphi-Quellcode:
mfg
if Query1.FindField('Fldname') = nil then begin
// Feld fehlt end; eddy |
Re: Existiert ein Feldname einer TQuery ?
danke Leute das funzt super !!! :bounce1: :hello: :hello: :party:
|
AW: Existiert ein Feldname einer TQuery ?
Aber wie gebe ich denn dann an in welcher Tabelle er das Feld suchen soll ?
|
AW: Existiert ein Feldname einer TQuery ?
Delphi-Quellcode:
query1.sql.text := 'select * from InDerTabelleWirdDasFeldGesucht';
query1.open; if Query1.FindField('Feldname') = nil then begin // Feld fehlt end; |
AW: Existiert ein Feldname einer TQuery ?
Habe es jetzt so gelöst
Code:
Procedure Tform1.UpgradeBetreiber;
var Tabname : String; begin Try ztable1.TableName := 'Betreiber'; Tabname := ztable1.TableName; ztable1.Active := true; if ztable1.Fields.FindField('Webseite') = nil then Begin // Feld erzeugen zquery1.SQL.Text := 'ALTER TABLE '+Trim(TABNAME)+' ADD COLUMN Webseite TEXT'+ ';'; zquery1.ExecSQL ; End; if ztable1.Fields.FindField('Support') = nil then Begin // Feld erzeugen zquery1.SQL.Text := 'ALTER TABLE '+Trim(TABNAME)+' ADD COLUMN Support TEXT'+ ';'; zquery1.ExecSQL ; End; Ztable1.active := false; except End; end; |
AW: Existiert ein Feldname einer TQuery ?
Zitat:
|
AW: Existiert ein Feldname einer TQuery ?
Nahezu jedes DBMS bietet irgendwie Zugriff auf virtuelle Tabellen mit Datenbankinformationen.
für MS Access z.B.
SQL-Code:
SELECT NOT EXISTS(SELECT * FROM sys.columns WHERE name = 'columnName' AND object_id = OBJECT_ID('tableName'))
Viele bieten aber inzwischen auch "allgemeine" im SQL standardisierte VIEWs mit Zugriff auf die systemeneigenen Daten. Hierfür wäre das z.B. information_schema.columns ![]() ![]() |
AW: Existiert ein Feldname einer TQuery ?
Prinzipiell ist das richtig, aber leider nicht so wirklich einheitlich umgesetzt.
Wenn man Software nur für eine bestimmte Datenbank schreibt, ist das klar der bessere Weg. Muss man "allgemeinverbindlich" sein, hilft leider nur der Weg über 'ne mehr oder weniger sinnvolle Krücke. Das select * from Tabelle hat den Nachteil: Bei vielen Daten in der entsprechenden Tabelle kann das schon was dauern. Man sollte also die Abfrage einschränken. Da gäbe es z. B.:
SQL-Code:
Irgendwie nach Jahrzehnten immernoch ein leidiges Thema :-(
select first 1 * from tabelle;
select top 1 * from tabelle; select * from tabelle where rownum <= 1; select * from tabelle limit 1; -- eventuell können dashier ja alle: select * from tabelle where 1 = 2; |
AW: Existiert ein Feldname einer TQuery ?
Zitat:
Rechteckige Klammer oder doppelte Anführungszeichen. |
AW: Existiert ein Feldname einer TQuery ?
Zitat:
Gruß K-H |
AW: Existiert ein Feldname einer TQuery ?
Ich denke er meint Tabellennamen mit nicht alphanumerischen Zeichen aus dem ASCII Raum, also so was wie
Select * from Oma's Küchentricks Select * from [Oma's Küchentricks] (Access) Select * from ´Oma's Küchentricks´ (mySQL) Select * from "Oma's Küchentricks" (Oracle) usw. Ich würde da dann kuechentricks drauß machen und eine Spalte für den Urheber (Oma oder andere) anlegen. |
AW: Existiert ein Feldname einer TQuery ?
Meine Erfahrung ist es auch das es von DB zu Db verschieden ist.
Dies hier war ein Beispiel der sqlite ich nutze aber oft auch die Firebird. Ich meine das es da erhebliche Unterschiede gibt. Ich habe die Sqlite für eine kleine Verwaltungssoftware genutzt die normal nur von einem Platz aus bedient wird. Sqlite ist glaube ich gelesen zu haben nicht so richtig Mehrplatz fähig... aber dafür echt leicht zu handeln |
AW: Existiert ein Feldname einer TQuery ?
Moin,
also ich kann mir im Moment kein in der Praxis relevantes Beispiel vorstellen, bei dem ich zur Laufzeit der Software noch Tabellenstrukturen anpassen müsste ... das muss doch vorher geklärt sein, maximal noch während der Entwicklung - oder? Freilich - über die Prüfung der Felder, so wie Ihr es vorgestellt habt mit der Abfrage der FIELDS-Informationen ist das schon ok. Grüße - und einen schönen Montag und ne gute Woche! |
AW: Existiert ein Feldname einer TQuery ?
Zitat:
Software ist nichts statisches, sondern entwickelt sich. Sei es, weil die Kunden neue Anforderungen haben (Wir brauchen hier noch die Bezeichnung in Englisch!), sei es weil sich die Welt ändert (gesetzliche Vorschriften). Möglicherweise hat auch der Softwarehersteller eine coole Idee, die bei einem Update eingebracht werden soll. Für mich ist es eher genau umgekehrt: Es ist davon auszugehen, dass sich die Tabellenstrukturen ändern werden. |
AW: Existiert ein Feldname einer TQuery ?
Zitat:
Im "normalen Betrieb" der Software wird dann aber nichts mehr angepasst. |
AW: Existiert ein Feldname einer TQuery ?
Hallo,
das ist natürlich klar, aber wenn sich die Anforderung ändert, ändert sich neben der DB natürlich auch das Programm - aber dann sind wir ja wieder an der Weiterentwicklung ... Und ganz allgemein: Wir bauen die DB in der Regel mit den Tools, die dafür zuständig sind: MS SQL Server Management Studio, IBM System i Navigator oder meinetwegen auch mit dem tollen DBeaver. Aber aus meiner (Anwendungs-)Software heraus, hab ich das quasi noch nie benötigt. Und "Data driven software" halte ich persönlich doch eher für schwierig. Greez |
AW: Existiert ein Feldname einer TQuery ?
Zitat:
Die vorgestellte Methode ist mMn nur sinnvoll, wenn man eine Oberfläche hat, die keine Information über die darunter liegende Datenbank hat. Außerdem gibt es Schnittstellen (ADO zB) die mit einem speziellen Befehl Informationen über die darunter liegende DB liefern. Grüße K-H |
AW: Existiert ein Feldname einer TQuery ?
Also ich prüfe beim Start der Software ob die Strukturen stimmen. Ich habe die Software jetzt aber auch so geschrieben das die beim Start prüft ob die DB da ist wenn nicht die ganze Datenbank Version x erzeugt und dann laufen Prozesse die die neueren Felder prüfen. Somit ist es egal ob alle zwischenupdates vom Kunden gemacht wurden. Die Software zieht das immer hoch. Ist in dem Fall jetzt komfortabel ....
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:44 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