AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Delphi, ADO, MySQL und ein ganz böser Parameterfehler...
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi, ADO, MySQL und ein ganz böser Parameterfehler...

Ein Thema von Guido R. · begonnen am 5. Jul 2007 · letzter Beitrag vom 5. Jul 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Guido R.
Guido R.

Registriert seit: 5. Jul 2007
141 Beiträge
 
Delphi 12 Athens
 
#1

Delphi, ADO, MySQL und ein ganz böser Parameterfehler...

  Alt 5. Jul 2007, 14:47
Datenbank: MySQL • Version: 5 • Zugriff über: myODBC
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.



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 ???
(Ich kann einem Kunden ja wohl schlecht erzählen, er solle sich nur alte Treiber installieren...)

Gruß
Guido
"Es ist praktisch unmöglich, einem Studenten gutes Programmieren beizubringen, wenn er vorher in BASIC programmiert hat. Als potenzielle Programmierer sind sie geistig verstümmelt ohne Hoffnung auf Erholung" (Edsger W. Dijkstra)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Delphi, ADO, MySQL und ein ganz böser Parameterfehler...

  Alt 5. Jul 2007, 14:52
Wie sieht die Abfrage aus?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Guido R.
Guido R.

Registriert seit: 5. Jul 2007
141 Beiträge
 
Delphi 12 Athens
 
#3

Re: Delphi, ADO, MySQL und ein ganz böser Parameterfehler...

  Alt 5. Jul 2007, 14:59
Z.B. so :

SQL-Code:
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
Parameterübergabe mit :
Delphi-Quellcode:
{...}
ADOCmd.Parameters.ParamByName('products_id').Value := ID;
{...}
"Es ist praktisch unmöglich, einem Studenten gutes Programmieren beizubringen, wenn er vorher in BASIC programmiert hat. Als potenzielle Programmierer sind sie geistig verstümmelt ohne Hoffnung auf Erholung" (Edsger W. Dijkstra)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Delphi, ADO, MySQL und ein ganz böser Parameterfehler...

  Alt 5. Jul 2007, 15:01
Zitat von Guido R.:
Tritt dieses Problem auch mit Delphi 7 oder neuer auf ?
Wenn der Fehler bei anderen Treiberversionen nicht auftritt ist das kein Delphi-Fehler sondern (höchstwahrscheinlich) ein Problem der (DLL-Hölle-) Kette ADO - ODBC - MyODBC

Zitat von Guido R.:
Irgendwelche Ideen, wie ich das ganze korrigieren kann, ohne alle Parameter herauszunehmen oder alte Treiber vorauszusetzen ???
(Ich kann einem Kunden ja wohl schlecht erzählen, er solle sich nur alte Treiber installieren...)
Und wieso zwingst du deinem Kunden überhaupt irgendwas zu installieren? Für Delphi gibt es z.B. die sehr guten MyDAC-Komponenten. Damit ist mir vollkommen egal ob der Kunde irgendwelche MyODBC, ODBC oder ADO-Updates sich (zwangsweise) installiert. Deine Treiber (und damit potentielle Fehlerquelle) ist:

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).
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#5

Re: Delphi, ADO, MySQL und ein ganz böser Parameterfehler...

  Alt 5. Jul 2007, 15:15
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.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Guido R.
Guido R.

Registriert seit: 5. Jul 2007
141 Beiträge
 
Delphi 12 Athens
 
#6

Re: Delphi, ADO, MySQL und ein ganz böser Parameterfehler...

  Alt 5. Jul 2007, 15:22
@ B.Geyer

Zitat:
Und wieso zwingst du deinem Kunden überhaupt irgendwas zu installieren? Für Delphi gibt es z.B. die sehr guten MyDAC-Komponenten. Damit ist mir vollkommen egal ob der Kunde irgendwelche MyODBC, ODBC oder ADO-Updates sich (zwangsweise) installiert.
Die Komponenten sind mir bekannt und ich würde sie auch gerne verwenden. Leider sieht das Projekt vor, später auf andere Datenbanken angewendet zu werden. Daher sind alle SQL-Befehle in JvMultiStringHoldern (Jedi sei Dank) gespeichert, so dass für die Varianzen in den SQL-Dialekten lediglich der richtige StringHolder gewählt werden muss.

Zitat:
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).
Nein - Für Update/Insert-Operationen verwende ich die ADOCommand, ansonsten das BetterADODataset.
"Es ist praktisch unmöglich, einem Studenten gutes Programmieren beizubringen, wenn er vorher in BASIC programmiert hat. Als potenzielle Programmierer sind sie geistig verstümmelt ohne Hoffnung auf Erholung" (Edsger W. Dijkstra)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Delphi, ADO, MySQL und ein ganz böser Parameterfehler...

  Alt 5. Jul 2007, 15:23
Ado als Bridge-Pattern-Ersatz kannst du vergessen. ODBC erst recht.
Welceh DBMS sollen zusätzlich unterstützt werden?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Delphi, ADO, MySQL und ein ganz böser Parameterfehler...

  Alt 5. Jul 2007, 15:29
Zitat von mkinzler:
Ado als Bridge-Pattern-Ersatz kannst du vergessen. ODBC erst recht.
Welceh DBMS sollen zusätzlich unterstützt werden?
Da nimmt mir einer die Worte aus dem Mund bzw. den Fingern
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Guido R.
Guido R.

Registriert seit: 5. Jul 2007
141 Beiträge
 
Delphi 12 Athens
 
#9

Re: Delphi, ADO, MySQL und ein ganz böser Parameterfehler...

  Alt 5. Jul 2007, 15:40
@shmia

Ich habe mal probiert allen Parametern den Typ zuzuweisen

Delphi-Quellcode:
{...}
ADOCmd.Parameters.ParamByName('products_id').DataType := ftInteger;
{...}
Das hat nicht ausgereicht - Die zus. Zuweisung der Stringgrößen probiere ich gleich mal aus.

Seltsam ist das das bislang alles wunderbar funktioniert hat und nur die Kombination aus aktuellen ADOs und aktueller MyODBC zu problemen führt...
"Es ist praktisch unmöglich, einem Studenten gutes Programmieren beizubringen, wenn er vorher in BASIC programmiert hat. Als potenzielle Programmierer sind sie geistig verstümmelt ohne Hoffnung auf Erholung" (Edsger W. Dijkstra)
  Mit Zitat antworten Zitat
Benutzerbild von Guido R.
Guido R.

Registriert seit: 5. Jul 2007
141 Beiträge
 
Delphi 12 Athens
 
#10

Re: Delphi, ADO, MySQL und ein ganz böser Parameterfehler...

  Alt 5. Jul 2007, 15:47
Zitat:
Ado als Bridge-Pattern-Ersatz kannst du vergessen. ODBC erst recht.
Welche DBMS sollen zusätzlich unterstützt werden?
Der Grundgedanke war bei Kunden evtl. vorhandene DBMS weiter zu nutzen. Konkret ins Auge gefasst war da u.a. MSSQL - Weitere DBs natürlich nicht ausgeschlossen...

Wie bereits gesagt - bislang hatten wir keine Probleme damit - erst die Kombi aus neuen Treibern führte zu der Meldung.
"Es ist praktisch unmöglich, einem Studenten gutes Programmieren beizubringen, wenn er vorher in BASIC programmiert hat. Als potenzielle Programmierer sind sie geistig verstümmelt ohne Hoffnung auf Erholung" (Edsger W. Dijkstra)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 10:39 Uhr.
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