![]() |
Datenbank: MySQL • Version: 5 • Zugriff über: myODBC
Delphi, ADO, MySQL und ein ganz böser Parameterfehler...
Hallo Allerseits !
Ich habe (mit Delphi 5 SP1) ein Programm geschrieben, dass mittels ADO/ODBC auf eine MySQL-Datenbank zugreift. Im Programm selbst benutze ich dazu u.a. ADOCommands, deren SQL-Anweisungen mittels Parameter Daten zugewiesen werden. Dies funktioniert auch wunderbar, so lange entweder eine (alte) MDAC 2.80 oder eine (alte) MyODBC 3.51.14 oder noch älter installiert sind. :coder2: Wenn sowohl MDAC in der Version 2.81.1117.0 (Teil des XP SP2) als auch MyODBC in der Version 3.51.15 / 3.51.16 vorhanden sind, erhalte ich folgende Fehlermeldung : "Ein Parameterobjekt ist nicht ordnungsgemäß definiert. Inkonsistente oder unvollständige Informationen wurden übergeben." Wenn ich die SQL-Anweisung manuell zusammenbastel und keine Parameter verwende, funktioniert es; jedoch kann das keine Lösung sein, da ich sehr häufig Parameter in diesem Programm verwende. Es kann im übrigen auch nicht daran liegen, dass NULL-Werte unbekannten Typs sind, da auch Aufrufe abstürzen, die definitiv keinen NULL-Wert enthalten. Tritt dieses Problem auch mit Delphi 7 oder neuer auf ? Irgendwelche Ideen, wie ich das ganze korrigieren kann, ohne alle Parameter herauszunehmen oder alte Treiber vorauszusetzen ??? :gruebel: (Ich kann einem Kunden ja wohl schlecht erzählen, er solle sich nur alte Treiber installieren...) Gruß Guido |
Re: Delphi, ADO, MySQL und ein ganz böser Parameterfehler...
Wie sieht die Abfrage aus?
|
Re: Delphi, ADO, MySQL und ein ganz böser Parameterfehler...
Z.B. so :
SQL-Code:
Parameterübergabe mit :
insert into products_description(
products_id, language_id, products_name, products_description, products_viewed ) values ( :products_id, :language_id, :products_name, :products_description, :products_viewed) ON DUPLICATE KEY UPDATE products_name=:name1, products_description=:description1
Delphi-Quellcode:
{...}
ADOCmd.Parameters.ParamByName('products_id').Value := ID; {...} |
Re: Delphi, ADO, MySQL und ein ganz böser Parameterfehler...
Zitat:
Zitat:
![]() Anwendung -> ADO-Express/dbGO -> ADO -> OLE DB für ODBC -> ODBC -> MyODBC -> MySQL-Server mit MyDAC verkürzst du diese potentielle Fehlerquelle auf Anwendung -> MyDAC -> MySQL-Server Aber zu deinem Problem: Nutzt du evtl. TADOTable/TADOQuery? Bei Verwendung von TADODataSet sind weniger Fehler zu erwarten (falls der Fehler doch in der ADOExpress/dbGo-Implementierung liegen sollte). |
Re: Delphi, ADO, MySQL und ein ganz böser Parameterfehler...
Man muss darauf achten, dass [TParameter].DataType auf den korrekten Datentyp eingestellt ist.
Bei einer Änderung an der SQL Anweisung versucht die VCL, über den Treiber den korrekten Datentyp zu ermitteln. Dies kann in vielen Fällen schiefgehen (z.B. bei komplexen Abfragen oder nicht-standard SQL wie in deinem Fall) und dann muss man von Hand eingreifen. Wenn es ein String-Datentyp ist, muss auch [TParameter].Size korrekt eingestellt werden. |
Re: Delphi, ADO, MySQL und ein ganz böser Parameterfehler...
@ B.Geyer
Zitat:
Zitat:
|
Re: Delphi, ADO, MySQL und ein ganz böser Parameterfehler...
Ado als Bridge-Pattern-Ersatz kannst du vergessen. ODBC erst recht.
Welceh DBMS sollen zusätzlich unterstützt werden? |
Re: Delphi, ADO, MySQL und ein ganz böser Parameterfehler...
Zitat:
|
Re: Delphi, ADO, MySQL und ein ganz böser Parameterfehler...
@shmia
Ich habe mal probiert allen Parametern den Typ zuzuweisen
Delphi-Quellcode:
Das hat nicht ausgereicht - Die zus. Zuweisung der Stringgrößen probiere ich gleich mal aus.
{...}
ADOCmd.Parameters.ParamByName('products_id').DataType := ftInteger; {...} Seltsam ist das das bislang alles wunderbar funktioniert hat und nur die Kombination aus aktuellen ADOs und aktueller MyODBC zu problemen führt... |
Re: Delphi, ADO, MySQL und ein ganz böser Parameterfehler...
Zitat:
Wie bereits gesagt - bislang hatten wir keine Probleme damit - erst die Kombi aus neuen Treibern führte zu der Meldung. |
Re: Delphi, ADO, MySQL und ein ganz böser Parameterfehler...
Zitat:
Anwendung -> ADO-Express/dbGO -> ADO -> OLE DB für ODBC -> ODBC -> MyODBC -> MySQL-Server zum Einsturz bringt. Da MS eh schon alle Kapazitäten in den Bereich .NET verlagert hat und MySQL eh sowas egal ist solange Du nicht genügend Geld in die Hand für gekauften Support in die Hand nimmst wirst du keinen bei diesen Firmen finden den das überhaupt interessiert. |
Re: Delphi, ADO, MySQL und ein ganz böser Parameterfehler...
Problem lokalisiert !!!
Shmia hat Recht !!! :thumb: Seitdem ich den Strings einen Wert für ihre Größe vorgegeben habe, funktioniert es... :wall: (... na das wird jetzt lustig - das Projekt ist nicht gerade klein) @Bernhard Geyer & mkinzler : Zitat:
Vorgaben : 1. Es darf nicht zu teuer an Fremdkomponenten werden 2. Das Projekt sollte "offen" sein für weitere DB-Systeme 3. Die Implementierung neuer DB-Verbindungen sollte nicht zu aufwendig werden |
Re: Delphi, ADO, MySQL und ein ganz böser Parameterfehler...
Du mußt den datenbankspezifischen Code in eigene Units aulagern. (pro DBMS eine Unit)
|
Re: Delphi, ADO, MySQL und ein ganz böser Parameterfehler...
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:05 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 by Thomas Breitkreuz