Zeos und Lazarus 1.6.4

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
aebding
Beiträge: 15
Registriert: Mo 5. Okt 2009, 00:08

Zeos und Lazarus 1.6.4

Beitrag von aebding »

Hallo Forengemeinde,

seit dem Lazarus Update auf Version 1.6.4 (32Bit, Windows-Version) mit Zeos (7.2 Rev. 3986) habe ich folgendes Problem :

Tabelle Test : Var1, Var2, Var3, Var4, Var5. Variablen Typ gleichgültig ...
Wenn ich in einem TZQuery als SQL Script z.B. "select * from ..." verwende ist alles OK,
verwende ich eine Teilmenge z.B. "select Var1, Var2 from ..." wird zur Laufzeit der Fehler "Field not found : Var3" ausgegeben,
also das nächste Feld das nicht in der Aufzählung enthalten ist.

Selbe Konfiguration mit Lazarus 1.6.2 läuft problemlos ...

Hat jemand eine Idee ?
Zuletzt geändert von aebding am Mo 10. Apr 2017, 13:33, insgesamt 1-mal geändert.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6200
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Zeos und Lazarus 1.4.6

Beitrag von af0815 »

Schon geschaut ob da nicht fixe Felddefinition hinterlegt sind ?
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

aebding
Beiträge: 15
Registriert: Mo 5. Okt 2009, 00:08

Re: Zeos und Lazarus 1.4.6

Beitrag von aebding »

... fixe Felddefinition ???

und wie gesagt, die selbe Konfiguration lief bis Lazarus 1.6.2 ohne Probleme ...

Soner
Beiträge: 623
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: Zeos und Lazarus 1.4.6

Beitrag von Soner »

aebding hat geschrieben:...
Wenn ich in einem TZQuery als SQL Script z.B. "select * from ..." verwende ist alles OK,
verwende ich eine Teilmenge z.B. "select Var1, Var2 from ..." wird zur Laufzeit der Fehler "Field not found : Var3" ausgegeben,

Es sieht danach aus dass du Var3 irgendwo verwendet hast und nachdem es jetzt in der Teilmenge nicht enthalten ist wird Fehlermeldung erzeugt.
Lösung
1. Suche nach DBControl in dem Var3 als Feld eingetragen ist und entferne es.
2. Suche in persistenten Feldern von dein Query(=wo du SQL-ABfrage verwendest) nach Var3 und entferne es.
(Rechtsclick auf TZQuery > Felder bearbeiten)

Am besten öffne LFM-Datei in Texteditor und such nach Var3

aebding
Beiträge: 15
Registriert: Mo 5. Okt 2009, 00:08

Re: Zeos und Lazarus 1.6.4

Beitrag von aebding »

Danke für die schnelle Anwort aber ...

Rechner 1, Lazarus 1.6.2 -> Anwendung läuft !!
Rechner 2, Lazarus 1.6.4 -> beschriebener Fehler !!

Greife von beiden Rechnern auf die selbe Anwendung zu ...

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6200
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Zeos und Lazarus 1.6.4

Beitrag von af0815 »

Was ist, wenn in Lazarus 1.6.2 noch ein Fehler in den DB Komponenten war, der mit 1.6.4 gefixt wurde ?

Kannst ja auch 'select Va1, Var2, 'Dummy' as Var3 from ..' probieren und sehen, ob irgendwo der Dummy auftaucht.

Auch mit einem guten Suchtool kann man im Source nach Var3 suchen. Das muss ja in einer pas oder lfm ja auftauchen.

Andreas
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

aebding
Beiträge: 15
Registriert: Mo 5. Okt 2009, 00:08

Re: Zeos und Lazarus 1.6.4

Beitrag von aebding »

Dann würde der Fehler bereits seit Lazarus 0.9.? existieren, mein Projekt läuft seit 2011 ...

Als Fehler wird immer das erste, nicht in der select-Anweisung enthaltene, Tabellenfeld ausgegeben.

z.B. "select Var1, Var2, Var3 from ..." -> "Field not found : Var4"
"select Var1, Var3, Var4 from ..." -> "Field not found : Var2"

usw.

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Zeos und Lazarus 1.6.4

Beitrag von wp_xyz »

Was machst du mit der Query? Hängt da vielleicht ein DBGrid dran, in dem alle Felder fest "verkabelt" sind? Wenn nicht, schreibe eine kleine Demo, in der alles weggelassen wird, außer der Abfrage, poste sie her, falls der Fehler hier auch auftritt.

aebding
Beiträge: 15
Registriert: Mo 5. Okt 2009, 00:08

Re: Zeos und Lazarus 1.6.4

Beitrag von aebding »

Ich habe jetzt mal ein Beispiel angehängt.

Normalerweise arbeite ich nicht mit einem DBGrid aber für das Beispiel ist das OK. Im ZQuery1 sind alle Felder der Tabelle angelegt (select *).
Ich benutze das um bei bestimmten Abfragen nur Teilmengen in den Speicher zu laden, normalerweise werden alle Felder geladen ...

Programm arbeitet bis Lazurus 1.6.2 und Zeos 7.2 Rev. 3986 mit Firebird 2.5 problemlos, ab Lazarus 1.6.4 -> Fehler !!
Dateianhänge
DB-Test.rar
Beispiel ...
(127.26 KiB) 76-mal heruntergeladen

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Zeos und Lazarus 1.6.4

Beitrag von wp_xyz »

Wenn jetzt noch die fbd-Datei mit dabei wäre, könnte man etwas machen, aber so: weiterhin nur mit den Schultern zucken...

aebding
Beiträge: 15
Registriert: Mo 5. Okt 2009, 00:08

Re: Zeos und Lazarus 1.6.4

Beitrag von aebding »

Sorry, diemal mit Datenbank ...
Dateianhänge
DB-Test.rar
(6.85 MiB) 87-mal heruntergeladen

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Zeos und Lazarus 1.6.4

Beitrag von wp_xyz »

Wie oben schon von anderen vermutet wurde, hast du persistente Felder definiert, die aber beim Öffnen der Abfrage nicht mehr vorhanden sind, weil sie im SQL-Text fehlen. Ich kann bestätigen, dass Laz 1.6.2 das schluckt, wobei allerdings das DBGrid alle Felder anzeigt und die fehlenden leer lässt; Laz trunk meldet einen Fehler. Ersetze ich ZEOS durch SQLDB meldet auch Laz 1.6.2 einen Fehler. Delphi konnte ich nicht testen, weil ich die Rückumwandlung des Projekts nicht hingekriegt habe - ich erinnere mich aber an einige hässliche Erfahrungen mit Delphi, das permanent Probleme machte, wenn persistente Felder nicht korrekt definiert waren oder fehlten. Daher habe ich persistente Felder eigentlich immer vermieden, weil sie spätere Änderungen am Feldtyp o.ä. praktisch unmöglich machen.

Ich kann mir nicht vorstellen, dass es richtig ist, wenn persistente felder vorhanden sind, die aber in der Abfrage fehlen. Meiner Meinung nach lag bis einschließlich 1.6.2 ein Fehler vor, der dann offenbar irgendwann inzwischen behoben worden ist.

P.S.
Statt mit persistenten Feldern würde ich mit normalen Feldern arbeiten, auf die ich über FieldByName zugreife. Nur wenn die Felder in einer Schleife über viele Datensätze abgefragt werden, würde ich vor der Schleife lokale Variablen für die Felder definieren:

Code: Alles auswählen

var
  FirmenNrField: TField;
  ArtikelNrField: TField;
begin
  FirmenNrFeld := ZQuery1.FieldByName('FirmenNr');
  ArtikelNrFeld := ZQuery1.FieldByName('ArtikelNr');
  ZQuery1.First;
  while not ZQuery1.EoF do begin
    // mache etwas mit FirmenNrFeld und ArtikelNrFeld
    ZQuery1.Next;
  end;

aebding
Beiträge: 15
Registriert: Mo 5. Okt 2009, 00:08

Re: Zeos und Lazarus 1.6.4

Beitrag von aebding »

Hallo Leute,

dieser "Trick" war für mich immer eine schnelle Möglichkeit eine Teilmenge einer Datenbank-Tabelle abzufragen ...
Das hat mich jetzt eingeholt und ich darf nun ca. 150 Units ändern, aber damit bin ich für die Zukunft sicher !!??

Vielen Dank für Eure Hilfe ...

PS
Wie kann ich diesen Zweig auf erledigt setzen ...

Antworten