Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   DataField: Das Feld wurde nicht gefunden - Umgang mit DataSources (https://www.delphipraxis.net/189030-datafield-das-feld-wurde-nicht-gefunden-umgang-mit-datasources.html)

Ykcim 27. Apr 2016 14:52

Datenbank: MySQL • Version: 5 • Zugriff über: UniDac

DataField: Das Feld wurde nicht gefunden - Umgang mit DataSources
 
Hallo Zusammen,

ich versuche gerade meinen Datenbank-Zugriff zu verändern und mit DB-Edits etc und DataSources zu arbeiten.

Leider bekomme ich das nicht hin, wenn ich die Zuweisung zur Laufzeit erstelle:

Delphi-Quellcode:
Data_RFQ.DataSet:=Anfrage.Query_RFQ;
Combo_AnfrageID.DataField:='anfrage_id';
Ich weise dem DataSource ein DataSet (TUniQuery) zu, in dem es auch einen Record gibt. Die Abfrage wird in einer anderen Unit gemacht.
Der Fehler tritt durch die Zeile 2 auf. Wenn ich der ComboBox das DataField zuweise bekomme ich die Fehlermeldung:
Delphi-Quellcode:
Das Feld 'anfrage_id' wurde nicht gefunden.

Ich habe irgendwie keine Idee, wie ich dem Problem beikomme.

Kann mir jemand helfen?

Vielen Dank Patrick

mkinzler 27. Apr 2016 15:16

AW: DataField: Das Feld wurde nicht gefunden
 
.DataSource/.ListSource gesetzt?

nahpets 27. Apr 2016 19:26

AW: DataField: Das Feld wurde nicht gefunden
 
Ist die Abfrage zum Zeitpunkt der Zuweisung schön geöffnet?

Wenn nein, dann gibt es das Feld zu dem Zeitpunkt (noch) nicht, da eine geschlossene Abfrage keine Felder enthält.

Geht's eventuell so:
Delphi-Quellcode:
Data_RFQ.DataSet:=Anfrage.Query_RFQ;
Data_RFQ.DataSet.Open;
Combo_AnfrageID.DataField:='anfrage_id';
oder so:
Delphi-Quellcode:
Data_RFQ.DataSet:=Anfrage.Query_RFQ;
Anfrage.Query_RFQ.Open;
Combo_AnfrageID.DataField:='anfrage_id';

Ykcim 28. Apr 2016 08:54

AW: DataField: Das Feld wurde nicht gefunden
 
Hallo Zusammen,

vielen Dank für die Antworten!

@mkinzler
Zitat:

.DataSource/.ListSource gesetzt?
Hatte ich im OI gemacht, weil ich zum Testen ein DataSource auf das Frame gezogen habe. Nachstehend hat es aber auch keine Veränderung gebracht.

Delphi-Quellcode:
   Data_RFQ.DataSet:=Anfrage.Query_RFQ;
   Data_RFQ.DataSet.Open;
   Combo_AnfrageID.DataSource:=Data_RFQ;
   Combo_AnfrageID.DataField:='anfrage_id';
@nahpets
Zitat:

Ist die Abfrage zum Zeitpunkt der Zuweisung schön geöffnet?
Ja, die Abfrage wurde vorher schon geöffnet und ich habe auch einen Record in der Query (
Delphi-Quellcode:
Anfrage.Query_RFQ.RecordCount=1
)
Habe aber den oben stehenden Code getestet - leider ohne Erfolg.

Habt Ihr noch eine Idee?

Vielen Dank
Patrick

Sherlock 28. Apr 2016 09:00

AW: DataField: Das Feld wurde nicht gefunden
 
Das Feld gibt es wirklich in der Query? Eventuell Groß-/Kleinschreibung prüfen?

Sherlock

Ykcim 28. Apr 2016 09:07

AW: DataField: Das Feld wurde nicht gefunden - Umgang mit DataSources
 
Ich habe die Vermutung, dass es mit meinem Konstrukt aus Frames Objekten und Units zu tun hat.
Daher möchte ich meine Frage umformulieren.

Wie arbeite ich am besten, wenn ich den Datenbankzugriff kapseln möchte? Heute habe ich ein Objekt (Datenbank: TSQL) in einer eigenen Unit erstellt. Dort habe ich meine Connection, zwei Querys und die Create- und Verbindungsproceduren.
Überall, wo ich einen Datenbankzugriff benötige binde ich dieses Objekt über uses ein. Dann erstelle ich dort eine Variable (Query) vom Typ TUniQuery (UniDac Komponenten) und weise diese der Query in meinem Objekt zu. (Query:= TDatenbank.MySelectQuery)

Das klappte bei meiner bisherigen Arbeitsweise auch immer sehr gut, weil ich den Daten aus einer Abfrage dann den Variablen anderer erstellter Objekte zugeordnet habe. Aber um das Thema Insert Update mit vorhandenen Boardmitteln zu vereinfachen, muss ich jetzt noch DataSources mit ins Spiel bringen, um die DB-EditKomponenten zu bedienen.

Meine Fragen:
Benutzt Ihr für jede Abfrage eine neue Query?
Wenn ich die Verbindung zwischen einer Query und einem DataSource trenne, sind dann die Daten im DataSource noch verfügbar?

Wie arbeitet Ihr?

Ich hoffe, dass der Sermon verständlich ist für Euch.

Vielen Dank
Patrick

P.S.: Habe das Thema ein wenig angepasst.

jobo 28. Apr 2016 09:07

AW: DataField: Das Feld wurde nicht gefunden
 
Naheliegend wäre einfach ein Tippfehler im Feldnamen. Oder, dass die Query einfach nicht das liefert, was Du glaubst. Einfach mal im SQL Tool ausprobieren.
Ich kenne UNIDAC nicht, aber kann man nicht hier im Dataset auch einfach die Felder persistieren indem man "alle hinzufügen" wählt. Dann sähe man, was dort wirklich ankommt. Alternativ ein Grid dranhängen und die Query öffnen (natürlich ohne den fehlerhaften Code)

Dazu noch:
Ich kenne besonders von mysql Usern, dass hier immer gern mit möglichst viel Hochkomma in den Queries rumgezaubert wird. Ist das notwendig oder präventiv oder nur Geschmackssache? In Oracle database ist es jedenfalls so, dass die Verwendung von Hochkomma im SQL den exakten Feldnamen erzwingt. Ohne Angabe von Hochkomma ist dann die Feldnamenangabe Case Insensitive. Hochkomma werden da nur benötigt, wenn man Sonderzeichen im Feldnamen hat.

mkinzler 28. Apr 2016 09:13

AW: DataField: Das Feld wurde nicht gefunden - Umgang mit DataSources
 
Bei FireBird ist das genauso:

SQL-Code:
select id ...
liefert sowohl Felder id, Id, iD, ID

Zitat:

Zitat von sql
select 'id' ...

liefert nur das Feld id

Ykcim 28. Apr 2016 09:15

AW: DataField: Das Feld wurde nicht gefunden - Umgang mit DataSources
 
@ jobo
Oh Mann... Du hattest recht! Es wurde eine ganz anderer Query-Inhalt übergeben. Wenn ich aus diesem ein Feld übergebe, dann funktioniert es. Bin nicht darauf gekommen, den Inhalt des DataSources in einem Grid zu überprüfen:oops:.

Vielen Dank!

Aber vielleicht habt Ihr trotzdem noch einen Tip für mich, wie Ihr Eure Datenbankzugriffe organisiert?

Gruß
Patrick


P.S.: Die Schreibweise hatte ich schon geprüft und Schreibfehler konnte ich auch ausschließen...

jobo 28. Apr 2016 09:41

AW: DataField: Das Feld wurde nicht gefunden - Umgang mit DataSources
 
Ok, damit hast Du schon mal ein Argument, Queries nicht mehrfach zu verwenden.
;)

Ich arbeite grundsätzlich mit dynamischen Datasets, die immer anders befüllt werden, wenn mehrere Datasets gleichzeitig geöffnet sind, brauch ich natürlich mehrere davon.
Ansonsten noch ein ein paar Funktionen, die mir bestimmte Settings aus der DB holen. Da sind die Queries aber gekapselt. Geht alles nur via Funktionsparameter und Rückgabewert der Funktion. Im Bauch der Funktionen wird die Query erstellt und freigegeben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:45 Uhr.
Seite 1 von 2  1 2      

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