Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Insert in Zeos mit mehr als 24 Feldern (https://www.delphipraxis.net/160681-insert-zeos-mit-mehr-als-24-feldern.html)

galex9 27. Mai 2011 14:18

AW: Insert in Zeos mit mehr als 24 Feldern
 
So wie es aussieht Fehler kommt aus ZDbcMySqlStatement.pas
Delphi-Quellcode:
function TZMySQLEmulatedPreparedStatement.PrepareSQLParam(ParamIndex: Integer): string;
...
  if InParamCount <= ParamIndex then
    raise EZSQLException.Create(SInvalidInputParameterCount);
...
Prüfe mal ParamIndex und InParamCount

Captnemo 28. Mai 2011 12:23

AW: Insert in Zeos mit mehr als 24 Feldern
 
Liste der Anhänge anzeigen (Anzahl: 1)
Okay, hier ist ein Anhang mit der DB. Welche Zeos-Version benutzt du denn?

blackfin 30. Mai 2011 08:36

AW: Insert in Zeos mit mehr als 24 Feldern
 
Also..habs nun mal probiert, bei mir macht er das anstandslos ohne Fehler...
Allerdings habe ich D2009, das dürfte aber keinen grossen Unterschied diesbezüglich machen.
Ich habe nur bei mir die TAdvDatetimePicker rausgenommen und durch hartkodierte Datumseinträge ersetzt, da ich die Kompo nicht habe.

Zeos-Version: 7.0.0-dev (aus dem SVN, Revision 903 vom 19.05.2011)

Scheint also ein Bug in Zeos zu sein, der bereits gefixt wurde. Auch wenn man im Bugtracker und Changelog dazu nichts konkretes findet.

Captnemo 30. Mai 2011 08:44

AW: Insert in Zeos mit mehr als 24 Feldern
 
Zitat:

Zitat von galex9 (Beitrag 1103324)
So wie es aussieht Fehler kommt aus ZDbcMySqlStatement.pas
Delphi-Quellcode:
function TZMySQLEmulatedPreparedStatement.PrepareSQLParam(ParamIndex: Integer): string;
...
  if InParamCount <= ParamIndex then
    raise EZSQLException.Create(SInvalidInputParameterCount);
...
Prüfe mal ParamIndex und InParamCount

InParamCount scheint bei mir immer bei 24 festzustehen. Ich habe es mit 25 aber auch mit 23 Parametern im SQLString versucht. Immer ist InParamCount=24.

Sollte dieser Wert nicht die tatsächliche Anzahl der Parameter im SQLString wiedergeben?

blackfin 30. Mai 2011 09:01

AW: Insert in Zeos mit mehr als 24 Feldern
 
Probiers doch auch mal mit der aktuellsten Zeos-Version aus dem SVN:

svn://zeos.firmos.at/zeos/branches/testing

Captnemo 30. Mai 2011 19:53

AW: Insert in Zeos mit mehr als 24 Feldern
 
Zitat:

Zitat von blackfin (Beitrag 1103641)
Probiers doch auch mal mit der aktuellsten Zeos-Version aus dem SVN:

svn://zeos.firmos.at/zeos/branches/testing

Hab ich mir runtergeladen, alte Zeos deinstalliert, die aus dem svn installiert. Gleicher Fehler an gleicher Stelle. Kann mir das gar nicht erklären. So eine Sache wäre doch den Entwicklern von Zeos aufgefallen, denke ich.

Satty67 30. Mai 2011 20:11

AW: Insert in Zeos mit mehr als 24 Feldern
 
Zitat:

Zitat von Captnemo (Beitrag 1103807)
So eine Sache wäre doch den Entwicklern von Zeos aufgefallen, denke ich.

Denke auch... ;)

Würde den Code nochmal genau untersuchen, ob nicht doch irgenwo 24 Parameter gesetzt werden. Evtl. nochmal kurz vorm setzen alle Parameter löschen usw. Kann man sich irgendwie nicht vorstellen, das eine Begrenzung auf _nur_ 24 Parameter am Zeos Code liegt.

Captnemo 30. Mai 2011 20:41

AW: Insert in Zeos mit mehr als 24 Feldern
 
Zitat:

Zitat von Satty67 (Beitrag 1103809)
Würde den Code nochmal genau untersuchen, ob nicht doch irgenwo 24 Parameter gesetzt werden. Evtl. nochmal kurz vorm setzen alle Parameter löschen usw. Kann man sich irgendwie nicht vorstellen, das eine Begrenzung auf _nur_ 24 Parameter am Zeos Code liegt.

Tja, da gibt's leider nicht viel zu untersuchen. Im Code setzt ich lediglich per ParamByName, alle vorher über den OI im SQL-String des Query zur Designtime gesetzten Parameter. Und wenn ich eben auch nur auf 24 Parameter verkürze, dann klappt's ohne Probs. Und viel mehr Source gibt's in dem Projekt noch gar nicht.

Die Sache wäre nur blöd, weil ich jetzt für das Projekt jetzt wieder auf D7 zurück muß, und später dann dummerweise wieder portieren muß.

haentschman 30. Mai 2011 20:46

AW: Insert in Zeos mit mehr als 24 Feldern
 
* nach Strohlam greif *
...und wenn du den SQL String zur Laufzeit setzt ? vieleicht spinnt ja der OI ?

blackfin 30. Mai 2011 22:45

AW: Insert in Zeos mit mehr als 24 Feldern
 
Jetzt bin ich doch etwas verwundert, wieso geht dein Testprojekt dann bei mir mit der gleichen SVN-Zeos-Version und D2009?

Ich habe wie gesagt bei mir aufgrund der fehlenden Komponente nur die TAdvDatetimePicker durch hardgecodete daten ersetzt:
Delphi-Quellcode:
// statt
dm1.q_kunden_insert.ParamByName('Geburtstag').AsDate := dtp_geburtstag.Date;
//halt einfach
dm1.q_kunden_insert.ParamByName('Geburtstag').AsDate := StrToDate('31.12.1899');
Sonst keine Veränderungen am Code.
Auskommentiert habe ich auch nichts, es werden ja schon 25 Params in deinem Testcode übergeben.

Zum Testen habe ich in deinem Programm den Button "N" gedrückt (wohl "neuer Datensatz") und dann auf "S" (wohl "speichern" :-)).
Da gab es keinerlei Exceptions und die Daten waren auch danach in der DB (nachgeschaut mit phpMyAdmin).
Im zweiten Test habe ich vor dem Drücken von "S" noch in jedes Feld etwas reingeschreiben (auch ein evtl. "böses" single quote)
Auch dieser Datensatz war ohne Exception danach korrekt in der DB.

Als Test-Datenbank hatte ich eine mySQL 5.5 von ner Xampp-Version für Windows (XP).

Wo liegt jetzt noch der Unterschied?....ausser D2010...das habe ich zum Testen leider nicht.
Letzte Idee: deine libmysql50.dll ist möglicherweise eine zu alte / zu neue / falsche?
Wenn ich es richtig im Hinterkopf habe, gab es bei Zeos schon öfters mal merkwürdige Exceptions, wenn man die falsche dll verwendet hat.

Test 1:
Nimm erstmal die DLL aus deiner mySQL-Installation (liegt im /bin/-Ordner, musst du evtl. noch von libmysql.dll in libmysql50.dll oder libmysql55.dll umbenennen) und kopier diese in den Ordner deiner EXE. Dann starte das Projekt nativ ohne Debugger aus dem Ordner (damit er auch diese dll nimmt und nicht die, die die bds.exe / Delphi IDE zuerst gefunden hat).

Test 2:
Das gleiche wie oben, aber nimm testweise nacheinander die DLLs, die Zeos mitliefert (im lib/mysql/-Ordner), ausser die 4er DLLs.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:43 Uhr.
Seite 2 von 3     12 3      

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