[MYSQL] Select * Werkt alleen als ik nummers vraag

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • The_Butler
  • Registratie: April 2001
  • Laatst online: 19:28
Ik heb een MySQL 8.0 Database op een server, vanaf een andere machine maak ik een connectie via ODBC. Op de client draait een activeX database exchange object welke ik al meerdere malen probleemloos heb gebruikt om een connectie te maken met een database.

Nu heb ik alleen de bizarre situatie dat als mijn database alleen maar numerieke waarden bevat deze probleemloos gezen worden met een Select * statement. Zodra ik ook maar 1 alfanumeriek karakter in mijn database zet dan gaat het fout en krijg ik de melding "Adodc1 Data Provider or other service retruned an E_FAIL status."

Als ik google op E_FAIL dan gaat het voornamelijk over Date en Time kolommen die problemen geven; maar die heb ik niet in mijn database.

Connectie string:
Provider=MSDASQL.1;Password=******;Persist Security Info=True;User ID=**********;Data Source=*********;Initial Catalog=**********


MySQL 8.0 (Windows 2019 Server)
MySQL ODBC 5.1 Driver - 32 bit System DSN (windows 10 Enterprise)

Dit is een redelijk bizarre situatie - het is vrij duidelijk dat er ergens een probleem is met het lezen van string waarden. Ik zit eraan te denken om een andere provider te gebruiken maar wilde ook even op het forum polsen of er hier suggesties zijn? Ik gebruik trouwens de 32 bit ODBC driver omdat min database exchange object niet overweg kan met 64 bit....

SQL Trace Log: (laat niet zien dat er iets fout loopt)

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
C:0,1,2,3,4,5   d20-2be4    ENTER SQLExecDirectW 
        HSTMT               0x07CC0FE8
        WCHAR *             0x0759FAB0 [      61] "SELECT * FROM mytable ORDER BY Arrival_Time_Unx DESC"
        SDWORD                    61

C:0,1,2,3,4,5   d20-2be4    EXIT  SQLExecDirectW  with return code 0 (SQL_SUCCESS)
        HSTMT               0x07CC0FE8
        WCHAR *             0x0759FAB0 [      61] "SELECT * FROM mytable ORDER BY Arrival_Time_Unx DESC"
        SDWORD                    61


<irrelevante data eruit geknipt>

DIAG [01004] [MySQL][ODBC 5.1 Driver][mysqld-8.0.22]String data, right truncated (501) 

C:0,1,2,3,4,5   d20-2be4    ENTER SQLColAttributesW 
        HSTMT               0x07CC0FE8
        UWORD                        1 
        UWORD                       18 <SQL_DESC_LABEL>
        PTR                0x00FFE04C
        SWORD                     1024 
        SWORD *             0x00FFE024
        SQLLEN *            0x00000000

at your service

Alle reacties


Acties:
  • 0 Henk 'm!

  • DataGhost
  • Registratie: Augustus 2003
  • Nu online

DataGhost

iPL dev

Je haalt database en tabel hier en daar door elkaar.

Hoe ziet je tabel eruit (velden, types)?
Gebeurt het ook als je alle kolommen expliciet selecteert ipv *?
Gebeurt het ook bij elke kolom afzonderlijk?
Als je iets niet-numerieks insert, hoe doe je dat dan en op welke kolom gebeurt dat?
Werkt de select ook niet als je die specifieke kolom niet mee-select?

Verder geen ervaring met ODBC enzo, als ik google naar "odbc provider e_fail select" krijg ik wel iets te zien waar het klinkt alsof wat je gebruikt behoorlijk oud is en ondertussen vervangen door iets anders (maar dat kan ik mis hebben), in ieder geval geen oplossing daar.

Acties:
  • 0 Henk 'm!

  • The_Butler
  • Registratie: April 2001
  • Laatst online: 19:28
De DataBase heeft iets van40 velden, die of INT(xx) of VarChar(xx) zijn
De foutmelding volgt de kolom waarin text staat, ook als ik alleen deze opvraag
Als ik iets niet numerieks insert dan doe ik dat via remote desktop direct in mijn mysql database via de workbench, het maakt niet uit welke varchar kolom ik pak - kolommen die varchar zijn maar een NULL waarde hebben kan ik gewoon uitlezen.
De Select werkt prima zolang ik maar geen text (char) opvraag.

Ik zal eens kijken of ik het veld type van varchar naar char kan vervangen, wie weet maakt dat het verschil...

UPDATE:
En dat maakte dus het verschil - ik veranderde van varChar(10) naar NChar(10) en alles werkt! vraag me niet waarom, maar ik kan dus verder.

[ Voor 11% gewijzigd door The_Butler op 26-10-2020 17:37 ]

at your service


Acties:
  • 0 Henk 'm!

  • EvH
  • Registratie: Juli 2014
  • Nu online

EvH

“Kan ik gewoon uitlezen”.

Out of the box gedachte:
Hoe lees je het in dan?

Kan het zo zijn dat daar alleen integers door gelaten worden ipv strings vanwege een controle?

Acties:
  • 0 Henk 'm!

  • The_Butler
  • Registratie: April 2001
  • Laatst online: 19:28
Ik lees de data in via een database exchange ActiveX object die is meegeleverd met een software pakket welke ik gebruik. De opzet hiervan is vrij simpel, je geeft het een SQL query mee en het object haalt de data op, inclusief kolom namen etc. Ik gebruik het al vele jaren probleemloos maar nu voor het eerst met MySQL en haar ODBC plugin

Ik heb trouwens te vroeg gejuigd; text werkt nu wel maar karakters als : en / geven nu nog fouten.

UPDATE

Gefixed,

Sommige kolomen in mijn tabel hadden een charset die verkeerd stond (waarsch doordat ik velden van Date / Time naar Varachar en toen Char had veranderd. Nu ik alles naar utf8 heb gezet werkt alles naar behoren. Maar wat een zoekwerk zeg...

[ Voor 65% gewijzigd door The_Butler op 27-10-2020 10:20 ]

at your service


Acties:
  • +1 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
The_Butler schreef op maandag 26 oktober 2020 @ 17:48:
Nu ik alles naar utf8 heb gezet werkt alles naar behoren. Maar wat een zoekwerk zeg...
Nog een gratis tip: gebruik utf8mb4, utf8 is deprecated totdat de default veranderd.

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten

Pagina: 1