[gelöst] Zeos Query (7.1.2) unter FPC 2.7.1

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

[gelöst] Zeos Query (7.1.2) unter FPC 2.7.1

Beitrag von Michl »

Hallo allerseits,

bevor ich den Bugtracker bemühe, wollte ich erstmal hier nachfragen, ob jemand FPC-Trunc und Lazarus-Trunc benutzt und das Verhalten bestätigen kann?!

Habe seit ca. 2 oder 3 Wochen mehrere FPC-Trunc und Lazarus gebaut und dabei festgestellt, dass die Abfrage mit TZQuery nicht mehr funktioniert (und da sich das seit dem nicht mehr ändert, wollt ich das mal melden):

Code: Alles auswählen

var
  Form1: TForm1;
  Connection: TZConnection;
  Query: TZQuery;
 
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  Connection:=TZConnection.Create(Self);
  Query:=TZQuery.Create(Self);
 
  Connection.Database:='vigema';
  Connection.HostName:='localhost';
  Connection.LibraryLocation:='C:\Program Files (x86)\PostgreSQL\9.3\bin\libpq.dll';
  Connection.Password:='*****';
  Connection.Port:=5432;
  Connection.Protocol:='postgresql-9';
  Connection.User:='vigema';
  Connection.Connected:=true;
 
  Query.Connection:=Connection;
 
  Query.SQL.Text:='CREATE TABLE IF NOT EXISTS test (id SERIAL PRIMARY KEY, name VARCHAR(50));';
  Query.ExecSQL;          // this works
 
  Query.SQL.Text:='SELECT * FROM test;';
  Query.Open;             // this not (Access violation)!
end; 
Tabelle erstellen funktioniert, nur das "Select" nicht. (Verhalten, ob Verbindung in IDE oder per Hand erstellt, ist gleich!). Der gleiche Code mit TPQConnection und SQLQuery funktioniert problemlos.

Meine letzte funktionierende Version ist FPC 2.7.1 (Revision: 25806), Lazarus 1.3 32bit (r43268), ZEOS 7.1.2 unter Win7 64bit.

Fehler tritt z.B. unter aktuell getesteter Kombination FPC 2.7.1 (Revision: 25893), Lazarus 1.3 (r43346) auf.
Dateianhänge
Meldung.jpg
Zuletzt geändert von Michl am Mo 2. Dez 2013, 23:25, insgesamt 1-mal geändert.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: Zeos Query (7.1.2) unter FPC 2.7.1

Beitrag von hde »

Mit Laz 1.1/2.7.1 (32 und 64 bit) unter Win7-64 hab ich bisher keine Probleme mit ZQuery
hde

marcov
Beiträge: 1102
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: Zeos Query (7.1.2) unter FPC 2.7.1

Beitrag von marcov »

Ich habe heute auch probleme in Lazarus mit postgres und zeos. Ich bekomme eine Exception in procedure TZAbstractCachedResultSet.UpdateString(ColumnIndex: Integer

wo der String als Parameter für Setstring präpariert wird. Entweder ein Kompiler Fehler, oder eine Änderung im Speicherlayout kompilierter Programme bringt eine verborgener Zeos Bug ans Licht.

und das funktionierte einige Wochen her noch.

MmVisual
Beiträge: 1581
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
CPU-Target: 32/64Bit

Re: Zeos Query (7.1.2) unter FPC 2.7.1

Beitrag von MmVisual »

Setze den Pfad "C:\Program Files (x86)\PostgreSQL\9.3\bin\" mal in die PATH Variable von Windows, damit findet Zeos (PostgreSQL) alle DLL's die es benötigt, auch ohne LibraryLocation.

Ansonsten das ";" im SQL Befehl kannst du weg lassen.
EleLa - Elektronik Lagerverwaltung - www.elela.de

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Zeos Query (7.1.2) unter FPC 2.7.1

Beitrag von Michl »

Ok, habe mir eben FPC-Trunc 2.7.1 (Revision: 25992 von heute früh) gebaut. Darauf Lazarus Trunc (Rev. 43393 von heute früh). Das Verhalten ist unverändert. SQLdb von Lazarus funktioniert, Zeos nicht.

@MmVisual Danke für die Anregungen!
MmVisual hat geschrieben:Setze den Pfad "C:\Program Files (x86)\PostgreSQL\9.3\bin\" mal in die PATH Variable von Windows, damit findet Zeos (PostgreSQL) alle DLL's die es benötigt, auch ohne LibraryLocation.
Habe ich probiert, LibraryLocation weg gelassen, Programm wird gestartet, erstellen der Tabelle funktioniert, der Zugriff darauf nicht.
MmVisual hat geschrieben:Ansonsten das ";" im SQL Befehl kannst du weg lassen.
Kann man, ist aber nicht der Documentation entsprechend (ich hatte am Anfang deshalb auch mal Probleme, dass es einen SQL-Befehl ohne Semikolon nicht genommen hatte). Zitat: A command is composed of a sequence of tokens, terminated by a semicolon (";")
hde hat geschrieben:Mit Laz 1.1/2.7.1 (32 und 64 bit) unter Win7-64 hab ich bisher keine Probleme mit ZQuery
hde
Das Verhalten tritt wie gesagt nur unter dem aktuellen Trunc seit nun ca. 3 Wochen auf.

So, jetzt habe ich mir noch das aktuelle Lazarus auf dem letzten bei mir funktionierenden FPC-Trunc gebaut, hier funktioniert die Abfrage ohne Probleme. Ist also eindeutig ein Problem mit FPC und nicht Lazarus.
Folgende Kombination läuft: Win7 64bit, PostgreSQL 9.3, FPC 2.7.1 (Rev. 25806), Lazarus 1.3 32bit (Rev. 43393), Zeos 7.1.2
Folgende Kombination nicht: Win7 64bit, PostgreSQL 9.3, FPC 2.7.1 (Rev. 25992), Lazarus 1.3 32bit (Rev. 43393), Zeos 7.1.2

Wollte eben den Bug-Eintrag machen, weiss nicht, obs der gleiche Bug ist, http://d5152c7da.static.telenet.be/view.php?id=25269, bei mir funktioniert ja die Connection, nur der Zugriff nicht.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Zeos Query (7.1.2) unter FPC 2.7.1

Beitrag von Michl »

Ich habe versucht mal ein bischen hineinzudebuggen. Der Fehler kommt in der Unit ZDbcPostgreSqlMetadata und wird bei TZPostgreSQLDatabaseMetadata.UncachedGetColumns in folgendem Code ausgelöst:

Code: Alles auswählen

...
      Result.MoveToInsertRow;
      Result.UpdateNull(1);
      Result.UpdateString(2, GetString(1 {nspname}));  //TZAbstractCachedResultSet.UpdateString wird aufgerufen, dabei gibt den SIGSEGV
...
da bei

Code: Alles auswählen

procedure TZAbstractCachedResultSet.UpdateString(ColumnIndex: Integer;
  const Value: String);
begin
{$IFNDEF DISABLE_CHECKING}
  CheckUpdatable;
{$ENDIF}
  PrepareRowForUpdates;
  FRowAccessor.SetString(ColumnIndex, Value);  //hier gibts einen SIGSEGV
end; 
Value einen ungültigen Inhalt hat.

Ich habe mal getestet und folgendes festgestellt:

Code: Alles auswählen

...
      Result.MoveToInsertRow;
      Result.UpdateNull(1);
 
      TestStr:=GetString(1 {nspname});  //hier hat TestStr den Inhalt "public"
      Result.UpdateString(2, TestStr);  //"public" wird als String übergeben
...
 
TZAbstractCachedResultSet.UpdateString(ColumnIndex: Integer;  const Value: String);  //und kommt hier als "#164#184" an
... 
Weiss nicht, was da schief läuft?!

[Edit] habe mal noch diverse andere Result.UpdateXXX gemacht. Das Value ist in keinem getesteten Fall ordentlich übergeben wurden. Schätze, da läuft was mit der Initalisierung der TZAbstractCachedResultSet - Klasse schief.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

EgonHugeist
Beiträge: 93
Registriert: Di 17. Apr 2012, 22:41

Re: Zeos Query (7.1.2) unter FPC 2.7.1

Beitrag von EgonHugeist »

Meldung vom FPC-Core..

http://zeoslib.sourceforge.net/viewtopi ... =39&t=8440

Zeos kann grad nix dafür. Es scheint sich etwas mit dem TStringField geändert zu haben. Habe mir den Trunk noch nicht gezogen. Marco's Angaben sind nur waage und erklären mir NOCH nicht, was denn da geändert wurde.
ZeosDevTeam

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Zeos Query (7.1.2) unter FPC 2.7.1

Beitrag von Michl »

Ich weiss zwar nicht warum, konnte auch im Bugtracker auf die Schnelle nicht den Eintrag finden, doch Zeos funktioniert wieder unter Lazarus-Trunc auf FPC-Trunc:

Habe mir eben Lazarus 1.3 (R43509) 32bit auf FPC 2.7.1 (R26165) win7 64bit gebaut und siehe da, alles prima :D :D :D

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Antworten