2016-05-04 5 views
1

Situation: Arbeitet mit veraltetem klassischem ASP-Code und versucht, die Codebasis von einem alten auf einen neuen Server zu verschieben.MySQL ODBC 5.1-Treiber gibt falschen Datentyp an ADODB zurück

Der Code versucht, mithilfe des MySQL ODBC 5.1-Treibers und des ADODB.Connection-Objekts eine Verbindung zu einer MySQL-Datenbank auf einem Windows-Server herzustellen.

Connection String = "Driver={MySQL ODBC 5.1 Driver};Server=dbserver;Database=dbname;Uid=username;Password=password;Option=3" 

Abfrageergebnisse werden in ADODB.Recordset Objekte zurückgegeben. Wenn ich versuche, ein Feld für den Zugriff auf eine Standard-MySQL Integer enthält, ich diesen Fehler:

Microsoft VBScript runtime error '800a01ca'
Variable uses an Automation type not supported in VBScript

Wenn ich das Feld manuell konvertieren mit CLng(), dann der Fehler beseitigt ist und der richtige Wert zurückgegeben wird. Es gibt jedoch zu viel Code, um manuell nach jedem Verweis auf eine ganze Zahl zu suchen und sie manuell zu konvertieren.

VarType() gibt 19 für diese Werte zurück. Es scheint sich dabei um einen Typ von Long-Datentyp zu handeln, den VB nicht versteht. (See here) Soll der ODBC-Treiber VarType 3 nicht für lange ganze Zahlen zurückgeben? (see here)

Ich versuchte, die Option 16384 (NO_BIGINT) im Parameter "option =" der Verbindungszeichenfolge zu übergeben, aber es machte keinen Unterschied.

Irgendeine Idee, wie man das korrigiert? Es scheint, dass es eine Option geben sollte, die an den MySQL-ODBC-Treiber übergeben wird, um Longs als Long Integer-Datentyp zurückzugeben, aber ich kann es nicht finden.

Bevor jemand es erwähnt: ja wir wissen, dass klassische ASP schlecht ist. Nein, wir haben momentan keine Ressourcen, um diesen Code in etwas anderes zu portieren. Wir brauchen es nur, um für die aktuelle Zeit weiter an klassischem ASP zu arbeiten.

+2

Lassen Sie sich von niemandem sagen, dass der klassische ASP irgendwie intrinsisch schlecht ist. (Ich habe noch nie mit MySQL gearbeitet, kann also nicht mit Ihrer eigentlichen Frage helfen, aber ich wollte das hier heraus bringen.) – Martha

+0

@Martha müssen sie nicht schreiben, Classic ASP ist nicht schlecht, es ist nur alt. Es gibt immer noch viele Projekte, die unterstützt werden müssen, die nicht auf .Net übertragen werden. Oft ist der Kunde glücklich, wie es funktioniert, damit es bleibt. – Lankymart

+1

OK also warum der Downvote? Was habe ich falsch gemacht? –

Antwort

1

OK durch den Prozess der Beseitigung habe ich endlich das Problem entdeckt. Nicht sicher , warum dies auftritt, aber es muss ein Fehler im MySQL-ODBC-Treiber sein.

Integer-Felder mit dem UNSIGNED-Attribut verursachen den Fehler. Durch das Entfernen dieses Attributs wird der Feldwert als Standard-Integertyp zurückgegeben. Anscheinend verarbeitet der ODBC-Treiber die Konvertierung von unsigned int zu VBScript Integer type nicht ordnungsgemäß und gibt stattdessen einen Zeiger auf Long zurück.

Ich bemerkte dieses Problem auch auf Tinyint (1) -Feldern, die ich als boolesche Werte verwendete. Das Ändern des Datentyps von Tinyint (1) zu Int (11) [der Standard] hat diesen Fehler ebenfalls behoben.

Hoffentlich wird dies jemand anderem helfen. FYI Ich habe dieses Problem auch im MySQL-ODBC-Treiber-Forum veröffentlicht, aber niemand hat darauf geantwortet.

Verwandte Themen