Requête sur base Access attaquée en ODBC

Bonjour à tous,

Je souhaite attaquer une base MSaccess présente sur un serveur Windows (serveur A) depuis une interface web hébergée sur un serveur Debian (serveur B).

Afin de faciliter la connexion entre les deux machines, j’ai effectué un point de montage CIFS sur la debian.

J’ai ensuite installé les paquets nécessaires sous Debian pour la prise en charge ODBC (php5-odbc, libmdbodc …)

Jusque là tout se passe bien, je me connecte bien à la base.

J’essaye de faire des requêtes sur cette base et c’est là que ça à partir un peu en vrac.

Voici un exemple des requêtes que je lance :

  • SELECT * FROM toto -->OK
  • SELECT * FROM toto WHERE titi = 1 --> OK
  • SELECT * FROM toto WHERE titi = 1 OR titi = 2 --> OK
  • SELECT * FROM toto WHERE titi <> 1 --> Non OK

Lorsque que j’essaye de faire des COUNT, cela ne fonctionne pas non plus.

Je reçoit un joli message m’indiquant :
Warning: odbc_fetch_object() [function.odbc-fetch-object]: No tuples available at this result index in /var/www/toto/index.php on line 45

Savez vous si une limitation existe au niveau du SQL via l’ODBC Access sous Linux ? ou si une option est à activer ?

Mon fichier odbc.ini est le suivant :

[GDA] Description = Base Access Driver = MicrosoftAccessDriverODBC Database = /mnt/base/service_clients.mdb tracefile = /tmp/unixodbc.log trace = yes

Et le odbcinst :

[MicrosoftAccessDriverODBC] Description = Microsoft Access Driver ODBC Driver = /usr/lib/libmdbodbc.so.0.0.0 Driver64 = Setup = /usr/lib/libmdbodbc.so.0.0.0 Setup64 = UsageCount = 1 CPTimeout = CPReuse = tracefile = /tmp/unixodbc.log trace = yes

D’avance merci pour votre retour.

Et avec :

SELECT * FROM toto WHERE not titi = 1 

Bonsoir,

Merci pour l’aide, ça fonctionne correctement pour cette condition.

A tout hasard… une idée pour les requêtes COUNT ?

Actuellement j’utilise la syntaxe :
SELECT COUNT(num_appels) AS nb_appels FROM GDA_appels WHERE NOT ((id_type=1) AND NOT (id_status=2)).

Je pense que c’est l’interprétation des requêtes qui diffère via le lien ODBC, ou alors ma mémoire :-p

Encore merci.

SELECT COUNT(*) AS nb_appels FROM GDA_appels WHERE NOT ((id_type=1) AND NOT (id_status=2))

Si ce n’est pas comme ça que tu veux compter, tu devrais voir du côté de GROUP BY

N’oublies pas qu’Access ressemble à une base de donnée, mais est loin d’atteindre les possibilités de MySQL

Merci pour ces infos.

Je vais regarder dans ce cas là du côté du GROUP BY.

Tout à fait d’accord avec toi en ce qui concerne Access, d’ailleurs cette base est en cours de migration …enfin plutôt de reconstruction car vu l’usine à gaz que c’est ^^

Encore merci pour l’aide.