Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   dbedit-Felder werden nach SQL-Abfrage nicht gefunden (https://www.delphipraxis.net/192960-dbedit-felder-werden-nach-sql-abfrage-nicht-gefunden.html)

EdAdvokat 6. Jun 2017 14:50

Datenbank: SQLite-3 • Version: 3 • Zugriff über: ZeosLib

dbedit-Felder werden nach SQL-Abfrage nicht gefunden
 
Ich habe 10 dbedit-Felder für die Dateneingabe und ein DB-Grid in einem Formular. Das klappt soweit ganz gut.
Wenn ich eine SQL-Abfrage durchführe erhalte ich eine Exception: DBEditID: Das Feld ID wurde nicht gefunden. Nehme ich dann das dbeditID Feld heraus, meldet er erneut dass das nächste Feld DBEditDatum nicht gefunden wurde.
Vermutlich klappt der refresh nach der Abfrage für die DBEdit-Felder nicht. Wenn ich also nur ein DBGrid ohne zusätzliche DBEdit-Felder in einer neuen Form verwende und die Abfrage durchführe, klappt dies und ich erhalte die gewünschten Abfrageergebnisse im DBGrid. Eigentlich wollte ich keine gesonderte Seite nur mit einem DBGrid aufnehmen, sondern alles in einer Form abarbeiten. Wie kann ich bei einer SQL-Abfrage auch die DBEdit-Felder überreden, sich wieder zu zeigen?

jobo 6. Jun 2017 15:27

AW: dbedit-Felder werden nach SQL-Abfrage nicht gefunden
 
Das klingt so, als ob Du die Query für Deine DBEdits irgendwie in Mehrzweckverwendung hast bzw. bestimmte Konzepte, bei Anzeige/Abfrage, Insert/Update/Delete, Refresh (der Anzeige) nicht berücksichtigst.
Am besten mal die problematische Code Teil zeigen.

Jumpy 6. Jun 2017 15:35

AW: dbedit-Felder werden nach SQL-Abfrage nicht gefunden
 
Ist die SQL-Abfrage denn immer die selbe oder wechselst du die auch mal? Benutzt du also die selbe Query für verschiedene Dinge? In dem Fall hat das Ergebnis deiner Abfrage/Query ja unterschiedliche Felder, oder die Felder haben unterschiedliche Namen.
Dem (neutralen) DBGrid sind die Feldnamen egal, es zeigt an was auch immer kommt. Bei den DBEdits gibst du ja den Namen des Feldes an, dass sie Dartsellen sollen und wenn's den Namen nicht mehr gibt knallt es halt.
Das ist übrigend beim DBGrid ähnlich, wenn du das vorkonfigurierst, sprich wenn du sagst welche Columns es haben soll und welche Column welches Feld darstellen sollen, dann würde es da auch knallen.

EdAdvokat 6. Jun 2017 15:47

AW: dbedit-Felder werden nach SQL-Abfrage nicht gefunden
 
ich habe versuchsweise verschiedene Abfragen per Button und eine Variante mit einem edit-Feld zum selbständigen Eingeben der SELECT-Anweisungen installiert. Es ist dann in der Tat so, dass bei der Abfrage SELECT MITARBEITER FROM LIEFERUNG die dbedit-Felder ID Datum usw. nicht belegt werden, weil
ich nur Mitarbeiter selektieren wollte. Also geht die Variante mit der Form DBGrid und DBEdit-Felder so nicht und ich muss tatsächlich eine gesonderte Form verwenden, die nur ein DBGrid enthält und dort die Abfragen durchführen. Na gut. Nur zur Info der Abfragecode:
Delphi-Quellcode:
procedure TForm1.btnAbfrage1Click(Sender: TObject);
begin
  qMain.Close;
  qMain.SQL.Clear;
  qMain.Params.Clear;
  qMain.SQL.Text:='Select Mitarbeiter from Lieferant1';
  qMain.Open;
  qMain.Refresh;
  dbgrd1.Refresh;
end;
Hoffentlich ist das so richtig. Es funktioniert jedenfalls. Sollte doch was falsch sein, wäre ich für einen Hinweis dankbar

haentschman 6. Jun 2017 15:57

AW: dbedit-Felder werden nach SQL-Abfrage nicht gefunden
 
Hallo...:P
Zitat:

Sollte doch was falsch sein, wäre ich für einen Hinweis dankbar
...du hast es so gewollt. 8-)
Delphi-Quellcode:
procedure TForm1.btnAbfrage1Click(Sender: TObject);
begin
  //qMain.Close; //nicht nötig: wird bei jeden Open gemacht
  //qMain.SQL.Clear; //nicht nötig: wird bei jeder Zuweisung von SQL.TEXT gemacht
  //qMain.Params.Clear; //nicht nötig: wird bei jeder Zuweisung von SQL.TEXT gemacht
  qMain.SQL.Text:='Select Mitarbeiter from Lieferant1';
  qMain.Open;
  //qMain.Refresh; //nicht nötig. Nach dem Öffnen nochmal Öffnen? Nichts anderes ist REFRESH
  //dbgrd1.Refresh; //nicht nötig. Das Grid merkt das neue Daten da sind
end;
... So geht es auch.

EdAdvokat 6. Jun 2017 16:18

AW: dbedit-Felder werden nach SQL-Abfrage nicht gefunden
 
Danke, da bleibt ja in der Tat nicht viel übrig und trotzdem geht es. Wieder was dazugelernt. Also jetzt werde ich eine neue Form mit dem DBGrid in das Programm aufnehmen und dort nach Belieben SQL-Abfragen(festgeschriebene und auch mit der Möglichkeit über ein Edit-Feld SQL-Befehle einzugeben) durchführen, die dann an einen Report weitergebeben werden sollen.
Der Report bereitet mir noch Sorgen, denn dort habe ich all die möglichen Felder per query und Datasource aufgeführt und natürlich bleibt alles so wie es war, trotz einer Abfrage nur nach Mitarbeiter beispielsweise. Leider finde ich zu den Reportkomp. keine Beschreibung.

rokli 6. Jun 2017 16:23

AW: dbedit-Felder werden nach SQL-Abfrage nicht gefunden
 
Zitat:

Zitat von haentschman (Beitrag 1373579)
Hallo...:P
//qMain.Close; //nicht nötig: wird bei jeden Open gemacht

Hallo haentschman,

sorry - aber da muss ich energisch widersprechen: Der nicht gemachte Query.CLOSE hat mir schon soviel Probleme gemacht, den würde ich IMMER vor dem nächsten Query.OPEN machen (gilt für MS-SQL Servers mit FireDAC).

Gruß

Jumpy 7. Jun 2017 08:42

AW: dbedit-Felder werden nach SQL-Abfrage nicht gefunden
 
Zitat:

Zitat von EdAdvokat (Beitrag 1373584)
Der Report bereitet mir noch Sorgen, denn dort habe ich all die möglichen Felder per query und Datasource aufgeführt und natürlich bleibt alles so wie es war, trotz einer Abfrage nur nach Mitarbeiter beispielsweise. Leider finde ich zu den Reportkomp. keine Beschreibung.

Welche Reportkomponenten benutzt du denn? Vielleicht kann man dich zu einem Tutorial lotsen, wenn man wüßte wofür.

Als Alternative könntest du auch erst mal klein anfangen und mit deinen Daten einen CSV-Export realisieren, oder du steuerst Excel (über OLE) fern und schreibst die Daten in eine Excel-Datei. Die kannst du dann ggf. da auch schön formatieren, so dass es wie aus einem Report aussieht.

Oder du erzeugst mit den Daten ein PDF-Dokument, könnte man z.B. mit SynPDF aus dem Mormot-Framwork machen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:51 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