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