Hilfe: Abfrage funzt mit MySQL 5.0.30 nicht mehr - Typen unverträglich
Hilfe: Abfrage funzt mit MySQL 5.0.30 nicht mehr - Typen unverträglich
am 30.01.2007 20:18:57 von hans.schneider8
Hallo NG,
ich bin echt verzweifelt:
Eine Access-Anwendung, die über DAO auf MySQL zugreift, will nicht=20
mehr, dabei bin ich mir sicher, dass sie mit MySQL 4.1 funktionierte.
Ich frage Spalten vomTyp Integer aus 2 verschiedenen Datenbanken eines=20
MySQL-Servers ab:
Sub abfrage(par As Long)
Dim rec As DAO.Recordset
Dim qdf As DAO.QueryDef
Dim strSQL As String
Set db =3D CurrentDb
strSQL =3D "SELECT (bde.gut+1) as gute, "
strSQL =3D strSQL + "(SUM(b.F001)+SUM(b.F002)+SUM(b.F003)+SUM(b.F004)+1)=20
as Summe_Auschuss"
strSQL =3D strSQL + " FROM test.bde_ivl as bde, "
strSQL =3D strSQL + "scandb.z_magazin as m, "
strSQL =3D strSQL + "scandb.z_box as b "
strSQL =3D strSQL + "WHERE bde.zeiterfnr =3D m.zeiterfnr "
strSQL =3D strSQL + "AND m.pk =3D b.pk_magazin "
strSQL =3D strSQL + "AND bde.zeiterfnr=3D'" & zeiterfnr
strSQL =3D strSQL + "' GROUP BY gute;"
'Abfrage ausführen
Set qdf =3D cn.CreateQueryDef("abfrage", strSQL)
Set rec =3D qdf.OpenRecordset
Debug.Print rec!gute
Debug.Print rec!Summe_Auschuss
MySQL bringt neuerdings das Ergebnisfeld "gute" als Integer, und=20
Summe_Auschuss als Text. Ich habe ewig probiert, auf beide Felder 0=20
addiert usw., aber im phpmyadmin war bei der Ergebnisanzeige immer der=20
erste Wert rechtsbündig, der zweite linksbündig zu sehen.
Dadurch bin ich drauf gekommen, dass MySQL zwei unterschiedliche=20
Datentypen zurückliefert, aber warum? Die Quellfelder sind alle Typ=20
integer(11) ???
Ich habe jetzt mit CAST den Datentyp umgewandelt, und es klappt:
CAST((SUM(b.F001)+SUM(b.F002)+SUM(b.F003)+SUM(b.F004)) AS SIGNED) as=20
Summe_Auschuss
Ich weiss nur nicht, bei wie vielen Abfragen ich den Typ noch ändern=20
muss?
Weiss jemand, was das Problem ist?
Danke, Hans
Re: Hilfe: Abfrage funzt mit MySQL 5.0.30 nicht mehr - Typen unverträglich
am 30.01.2007 22:49:13 von Christian Kirsch
hans.schneider8@freenet.de schrieb:
> Hallo NG,
>
> ich bin echt verzweifelt:
> Eine Access-Anwendung, die über DAO auf MySQL zugreift, will nicht
> mehr, dabei bin ich mir sicher, dass sie mit MySQL 4.1 funktionierte.
>
> Ich frage Spalten vomTyp Integer aus 2 verschiedenen Datenbanken eines
> MySQL-Servers ab:
>
> Sub abfrage(par As Long)
>
> Dim rec As DAO.Recordset
> Dim qdf As DAO.QueryDef
> Dim strSQL As String
>
> Set db = CurrentDb
>
> strSQL = "SELECT (bde.gut+1) as gute, "
> strSQL = strSQL + "(SUM(b.F001)+SUM(b.F002)+SUM(b.F003)+SUM(b.F004)+1)
> as Summe_Auschuss"
> strSQL = strSQL + " FROM test.bde_ivl as bde, "
usw usw
Das macht keinen Spaß. Wenn Du ein MySQL-Problem hast, dann poste bitte
SQL-Code und beschreibe, was da nicht klappt oder nicht so, wie Du es
erwartest. Gib ggfs. eine Fehlermeldung an. Basic ist hier off-topic,
und ich zumindest habe keine Lust, aus diesem Code rauszupfriemeln, was
möglicherweise gemeint sein könnte.
Re: Hilfe: Abfrage funzt mit MySQL 5.0.30 nicht mehr - Typ
am 31.01.2007 01:25:40 von Carsten Wiedmann
hans.schneider8@freenet.de schrieb:
> MySQL bringt neuerdings das Ergebnisfeld "gute" als Integer, und
> Summe_Auschuss als Text.
> ..., aber im phpmyadmin war bei der Ergebnisanzeige immer der
> erste Wert rechtsbündig, der zweite linksbündig zu sehen.
Irgendwie hab ich keine Ahnung, wie man den Datentype an der Ausrichtung in
phpMyAdmin festmacht?
> strSQL = "SELECT (bde.gut+1) as gute, "
> strSQL = strSQL + "(SUM(b.F001)+SUM(b.F002)+SUM(b.F003)+SUM(b.F004)+1)
> as Summe_Auschuss"
> ...
>
> dass MySQL zwei unterschiedliche
> Datentypen zurückliefert, aber warum? Die Quellfelder sind alle Typ
> integer(11) ???
Zumindest das MySQL-Manual dürfte dir da etwas Erleuchtung bringen, was sich
in der Rückgabe (Datentype) von SUM() zwischen MySQL 4 und 5 geändert hat:
http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.ht ml
Wie du diesen Datentype jetzt in Access/DAO korrekt auswertest/zuordnest,
kann ich dir allerdings auch nicht sagen.
Gruß
Carsten
Re: Hilfe: Abfrage funzt mit MySQL 5.0.30 nicht mehr - Typen unverträglich
am 31.01.2007 08:27:35 von Claus Reibenstein
Carsten Wiedmann schrieb:
> hans.schneider8@freenet.de schrieb:
^^^^^^^^^^^^^^^^^^^^^^^^^^
Realname wäre nett
>> MySQL bringt neuerdings das Ergebnisfeld "gute" als Integer, und
>> Summe_Auschuss als Text.
>> ..., aber im phpmyadmin war bei der Ergebnisanzeige immer der
>> erste Wert rechtsbündig, der zweite linksbündig zu sehen.
>
> Irgendwie hab ich keine Ahnung, wie man den Datentype an der Ausrichtung in
> phpMyAdmin festmacht?
Numerische Typen werden rechts-, alle anderen linksbündig ausgegeben.
>> strSQL = "SELECT (bde.gut+1) as gute, "
>> strSQL = strSQL + "(SUM(b.F001)+SUM(b.F002)+SUM(b.F003)+SUM(b.F004)+1)
>> as Summe_Auschuss"
Hier ist de.comp.datenbanken.mysql, nicht de.comp.basic.irgendwas.
Gruß. Claus
--
,~°O O
O ,´ / |/|\
/ |¯`. Das neue Hochzeits-Branchenbuch im Internet ,´ / | |\
/__| `~...............................................~´ /___|/ /
Re: Hilfe: Abfrage funzt mit MySQL 5.0.30 nicht mehr - Typen unverträglich
am 01.02.2007 14:20:56 von hans.schneider8
On 31 Jan., 08:27, Claus Reibenstein <4spammerso...@web.de> wrote:
> Carsten Wiedmann schrieb:
>
> Numerische Typen werden rechts-, alle anderen linksbündig ausgegeben.
>
> Hier ist de.comp.datenbanken.mysql, nicht de.comp.basic.irgendwas.
>
> Gruß. Claus
Erst mal ein ganz grosses SORRY - ich hatte 2 Stunden fassungslos an
dem Problem gesessen und bin nicht drauf gekommen, erst irgendwann
stutzig geworden über die Ausrichtung im phpmyadmin. War deswegen
nervlich nicht mehr in der Lage angemessen zu schreiben....
Also hier noch mal das MySQL-Problem:
Eine Abfrage fragt aus zwei Tabellen numerische Werte zu einer
Buchungsnummer ab:
- aus Tabelle 1 genau einen Wert, aus Tabelle 2 die Summe aus den
Summen von 3 Spalten
Alle Felder sind als int(11) definiert.
Konkret:
"SELECT b.gute, (SUM(a.ausschuss1) + SUM(a.ausschuss2)+
SUM(a.ausschuss3)) AS Summe_Ausschuss FROM bde as b, ausschuss as a
WHERE b.buchungsnr =3D a.buchungsnr AND b.buchungsnr =3D 295780 GROUP BY
bgute"
Ergebnisspalte gute --> Zahl
Ergebnisspalte Summe_Ausschuss --> Text
Auch der Versuch einer Konvertierung durch eine Addition von 0 auf die
Ergebnisspalte Summe_Ausschuss ergibt einen Text.
Erst das Einfügen der CAST-Funktion ergibt die Ergebnisspalte als
Zahl:
"SELECT b.gute, CAST((SUM(a.ausschuss1) + SUM(a.ausschuss2) +
SUM(a.ausschuss3)) AS SIGNED) AS Summe_Ausschuss FROM bde as b,
ausschuss as a WHERE b.buchungsnr =3D a.buchungsnr AND b.buchungsnr =3D
295780 GROUP BY b.gute"
Ich bin mir sicher dass das erst mit der 5-er MySQL-Version
aufgetaucht ist, vorher kam an der Stelle nie ein Fehler.=B4Und jetzt
frage ich mich, wie viele Abfragen ich deswegen umbauen muss mit CAST?
Was ist die genaue Ursache der Ausgabe als Text?
Danke schonmal,
Hans
Re: Hilfe: Abfrage funzt mit MySQL 5.0.30 nicht mehr - Typ
am 01.02.2007 18:05:21 von Carsten Wiedmann
hans.schneider8@freenet.de schrieb:
> Ich bin mir sicher dass das erst mit der 5-er MySQL-Version
> aufgetaucht ist,
>
> Was ist die genaue Ursache der Ausgabe als Text?
Nur so aus Neugierde:
Du hast auf den Link oben von mir geklickt und gelesen? (zumindest den
Anfang)
BTW:
Bei dem was du da vor dir hast, ist der native Datentype ja nicht TEXT.
Allerdings ist dieser numerische Type intern, wie TEXT, als SQL_C_CHAR
definiert. Weshalb dieser wohl dann in phpMyAdmin so ausgerichtet wird, wie
du es es bemerkt hast.
Gruß
Carsten
Re: Hilfe: Abfrage funzt mit MySQL 5.0.30 nicht mehr - Typen unverträglich
am 01.02.2007 19:35:20 von hans.schneider8
On 1 Feb., 18:05, "Carsten Wiedmann" wrote:
> hans.schneid...@freenet.de schrieb:
>
> > Ich bin mir sicher dass das erst mit der 5-er MySQL-Version
> > aufgetaucht ist,
>
> > Was ist die genaue Ursache der Ausgabe als Text?
>
> Nur so aus Neugierde:
> Du hast auf den Link oben von mir geklickt und gelesen? (zumindest den
> Anfang)
>
> BTW:
> Bei dem was du da vor dir hast, ist der native Datentype ja nicht TEXT.
> Allerdings ist dieser numerische Type intern, wie TEXT, als SQL_C_CHAR
> definiert. Weshalb dieser wohl dann in phpMyAdmin so ausgerichtet wird, w=
ie
> du es es bemerkt hast.
>
> Gruß
> Carsten
Hallo Carsten,
ja, ich habs gelesen, aber noch nicht ganz verstanden, der
entscheidende Satz ist sicherlich:
"The SUM() and AVG() functions return a DECIMAL value for exact-value
arguments (integer or DECIMAL), ...."
(Kofler: DECIMAL =3D Festkommazahl, wird als Zeichenkette gespeichert)
Bedeutet dass für alle Abfragen die SUM() auf integer-Spalten
anwenden, muss ich noch CAST() einbauen, damit nachgelagerte
Anwendungen (wie VBA) einen numerischen Wert erhalten? Oder alle
int(11)-Spalten als DOUBLE umdefinieren?
Ich kann daraus zwar eine Erklärung, aber keine Lösung für meine
Anwendungen ableiten....
Danke, Hans
Re: Hilfe: Abfrage funzt mit MySQL 5.0.30 nicht mehr - Typen unverträglich
am 02.02.2007 15:39:52 von hans.schneider8
Die Lösung meines Problems ist folgende, zwar hier etwas offtopic,
aber der Vollständigkeit halber:
Auch von anderen VB-Anwendungen wurden mit der neuen MySQL-Version
Probleme berichtet, die mit einem Update auf die neue Treiberversion
mysql-connector-odbc-3.51.12 behoben sind.
Mfg, Hans