AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Insert in Zeos mit mehr als 24 Feldern
Thema durchsuchen
Ansicht
Themen-Optionen

Insert in Zeos mit mehr als 24 Feldern

Ein Thema von Captnemo · begonnen am 25. Mai 2011 · letzter Beitrag vom 31. Mai 2011
Antwort Antwort
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#1

AW: Insert in Zeos mit mehr als 24 Feldern

  Alt 30. Mai 2011, 20:41
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ß.
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.443 Beiträge
 
Delphi 12 Athens
 
#2

AW: Insert in Zeos mit mehr als 24 Feldern

  Alt 30. Mai 2011, 20:46
* nach Strohlam greif *
...und wenn du den SQL String zur Laufzeit setzt ? vieleicht spinnt ja der OI ?
  Mit Zitat antworten Zitat
blackfin
(Gast)

n/a Beiträge
 
#3

AW: Insert in Zeos mit mehr als 24 Feldern

  Alt 30. Mai 2011, 22:45
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.

Geändert von blackfin (30. Mai 2011 um 23:04 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#4

AW: Insert in Zeos mit mehr als 24 Feldern

  Alt 31. Mai 2011, 07:18
Tja, hat leider alles nicht genutzt. Weder das zur Laufzeit erzeugen des SQL-Strings mit Params.ParseSQL, als auch das austesten der verschiedenen LibmysqlXX.dll's. Immer der gleiche Fehler.

Der Fehler wird ja beim parsen des SQL-Strings erzeugt, und nicht an der Stelle im Source wo er sich auswirkt und der Debugger es meldet. Interessanterweise parst aber die OI zur Designtime richtig und ermittelt dann auch dir richtige Anzahl der Parameter. Wie Zeos das aber genau macht, weiß ich zu diesem Zeitpunkt noch nicht.

Ich werde jetzt noch einen weiteren Test machen, in dem ich eine neues Testprojekt anlege, in dem ich als einzige Fremdkomponente leditlich Zeos verwende, um evtl. inkompatibilitäten mit anderen Komponenten zu vermeiden.

Was ich mir nicht vorstellen kann ist, dass Zeos als auch D2010 diesbezüglich tatsächlich einen Fehler hat. Das ich hier einen Fehler mache, sehe ich aber leider auch nicht.
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.879 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Insert in Zeos mit mehr als 24 Feldern

  Alt 31. Mai 2011, 08:01
Du könntest deine Datenbankstruktur normalisieren
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#6

AW: Insert in Zeos mit mehr als 24 Feldern

  Alt 31. Mai 2011, 09:16
Du könntest deine Datenbankstruktur normalisieren
Was würde das an dem eigentlichen Problem ändern?
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#7

AW: Insert in Zeos mit mehr als 24 Feldern

  Alt 31. Mai 2011, 10:15
So, ich habe jetzt mit einem Testprojekt den "Fehler" gefunden. Auch wenn meiner Meinung nach trotzdem noch ein Fehler vorhanden ist.

Die Parameterübergabe als Value bei Feldern <> Varchar löst diesen Fehler aus.

Bei Feldern des Typ's varchar kann ich die Parameter als Value übergeben.
Bei Feldern des Typ's integer muß man asInteger und bei Feldern des Typ's Date muß man asDate verwenden. Dann funktioniert es auch mit mehr Felder. Ich habe in meinem Text 30 Testfelder erzeugt.
Ich gehe davon aus, dass die Zahl 24 lediglich an meiner Feldstruktur lag. Wenn ich Integer oder Date schon im 5. Feld verwendet hätte wäre es wohl schon nach 5 Feldern aufgetreten.

In früheren Zeos- und Delphi-Versionen habe ich immer alles außer Date, Time und Datetime als Value übergeben. Das ganze ohne Probleme. Warum das jetzt in dieser Version nicht funktioniert ist mir ein Rätsel.
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz