Field not Found, aber es ist da!

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
hbanko
Beiträge: 13
Registriert: Do 2. Mai 2013, 09:06

Field not Found, aber es ist da!

Beitrag von hbanko »

Hallo zusammen,

ich habe mir ein SQL statement zusammen gebastelt und das funktioniert auch wunderbar. Zumindest wenn ich es von NetBeans oder PhpMyAdmin auf die Datenbank loslasse. Lazarus behauptet hartnaeckig, das das Feld "timestamp" nicht da ist. Ist es aber! Die Tabelle besteht nur auf 4 Feldern...

Code: Alles auswählen

 sql := 'SELECT DATE_FORMAT(timestamp, ''%Hh''),format(avg(temperature ),2) as Temperature ';
 sql := sql + 'FROM log WHERE DATE_FORMAT(timestamp, ''%d.%m.%Y'')=''22.09.2013'' ';
 sql := sql + 'GROUP BY DATE_FORMAT(timestamp, ''%D.%M.%Y %Hh'')';
 
    if MySQL55Connection1.Connected then
     Begin
       Label1.Caption:='Connected';
       SQLQuery1.Close;
       SQLQuery1.SQL.text := sql;
       SQLQuery1.Open;
     end;
 
 
Ich benutze MySQL 5.5 und auch die entsprechende Lazarus Mysql55Connection componente, sowie den Rest von Sqldb. Wenn ich das Statement in was simples wie "SELECT * FROM log;" aendere, klappt es.

Was mache ich falsch?

Gruss
Holger

grl
Beiträge: 36
Registriert: Fr 17. Okt 2008, 19:24
OS, Lazarus, FPC: Debian X64, Lazarus 1.1, FPC 2.7.1
CPU-Target: x86, ARM

Re: Field not Found, aber es ist da!

Beitrag von grl »

Ich nutze mySQL nicht - aber wenn ich mich richtig erinnere, ist "timestamp" ein Schlüsselwort, weil es einen Datentypen bezeichnet. Benenn das Feld mal um in tstamp und versuch's nochmal.


Gruß
GRL

Thomas B.
Beiträge: 90
Registriert: Fr 2. Nov 2007, 13:32
OS, Lazarus, FPC: Win (L 1.0 FPC 2.6.0)
CPU-Target: 32Bit
Wohnort: Ulm

Re: Field not Found, aber es ist da!

Beitrag von Thomas B. »

Das SQL Statement (adaptiert auf meine DB-Tabelle mit den entsprechend bei mir anderen Bezeichnungen) geht prinzipiell.
Kannst mal probieren die Hochkommas durch QuotedStr(...) zu ersetzen und sehen, ob es dann klappt.
uses sysutils evtl. nicht vergessen

Benutzeravatar
willi4willi
Lazarusforum e. V.
Beiträge: 170
Registriert: Sa 1. Nov 2008, 18:06
OS, Lazarus, FPC: Lazarus 3.8 FPC 3.2.2 x86_64-win64-win32/win64 x86_64-linux-gtk2
CPU-Target: i386, win64, arm

Re: Field not Found, aber es ist da!

Beitrag von willi4willi »

Hallo Holger,

ich habe Dein SQL-Statement einmal ausprobiert und es funktionierte ohne Änderungen am Quelltext.

Früher hatte ich auch einmal solche Merkwürdigkeiten beim Zugriff auf MySQL. Das hing damit zusammen, dass Komponenten, Treiber und Datenbankversion nicht so richtig zusammenspielten.

Wenn es Dir möglich ist, dann versuche doch folgende Zusammenstellung:
  • Lazarus Version 1.0.12
  • FPC-Version: 2.6.2
    SVN-Revision:42478
    i386-win32-win32/win64
  • ZEOSDB- Version 7.0.4-stable
  • MySQL-Server Version: 5.5.24-0ubuntu0.12.04.1
Das habe ich verwendet.

Wenn Dein Code nur mit MySQL funktionieren muss, dann hilft es auch manchmal die Feldbezeichner in ` zu klammern, also

Code: Alles auswählen

 ... DATE_FORMAT(`timestamp`, ''%Hh''),format(avg(`temperature` ),2) ... 
anstatt

Code: Alles auswählen

 ...  DATE_FORMAT(timestamp, ''%Hh''),format(avg(temperature ),2) ... 
Viele Grüße

Willi4Willi
 

Viele Grüße

Willi4Willi

------------

hbanko
Beiträge: 13
Registriert: Do 2. Mai 2013, 09:06

Re: Field not Found, aber es ist da!

Beitrag von hbanko »

Vielen Dank an alle fuer die Antworten. Ich habe alles der Reihe nach durchprobiert, aber nicht von alle dem half.

Ursache der Fehlermeldung war die tdbChartSource Komponente. Ich hatte fuer die X-Achse das feld "timestamp" aus der Datenban angegeben. Durch das benutzen von Date_Format() im query, wurde die Spalte in der Ergebnisliste aber "Date_Format(timestamp '%Hh')" genannt. Also habe ich einen 'as Timestamp' drangehaengt und der Fehler verschwandt. Leider stuerzte die IDE auch immer wieder ab, nachdem ich hier und dort einfach ein paar Werte von verschiedenen Komponenten geaendert hatte. Oft bekam ich als Fehlermeldung einen leeren grauen Dialog. Wenn ich den schloss, war die IDE wieder weg.

Es kristallisierte sich ein zweites Problem heraus. Durch das %Hh habe ich immer ein 'h' an den Wert der X-Achse gehaengt. Dachte das ist nett, da es sich um die Stunde handelt. Leider mag die Chart Komponente das aber garnicht, da sie ja integer or float Werte fuer die Darstellung erwartet. Nachdem dann das 'h' entfernt war, klappte es endlich.

Nun werde ich mich mit der TAChart Komponente etwas intesiver auseinander setzen muessen, damit auch immer 24 Werte dargestellt. Im moment ist das Verhalten eher dynamisch, aber immerhin sieht man die Werte schonmal grafisch dargestellt.

Gruesse
Holger

Antworten