Odbc

fred -  
Mr.White Messages postés 252 Statut Membre -
salut,

voilà je dois interagir avec une base odbc qui tourne sur MS SQL Server et je dois tester l'existence d'une table.

En mssql, la requête pour effectuer une telle chose est la suivante : select count(name) NB from dbo.sysobjects where name = 'nom_table';

Si j'utilise la même requête en odbc, est-ce qu'elle marchera quelque soit le server sur lequel tourne odbc ??

Merci pour vos éclaircissement. Je n'ai pas très bien compris le principe de odbc en fait...

4 réponses

Mr.White Messages postés 252 Statut Membre 53
 
ODBC est une sorte de driver, de langage intermédiaire. Tu n'a normalement pas besoin de programmer en ODBC.

Si tu veut, ton langage sera tout d'abord traduit en ODBC qui sera retraduir en langage pour ta base de donnée. ODBC fait le pont entre les deux et à moin de devoir écrire un nouveau 'driver' ODBC (c'est à dire la transformation d'un langage en ODBC) tu n'a pas à programmer en ODBC.

Tu a ton server, ton langage de programmation et peut-être un driver ODBC à installer. (Je dit peut-être car avec PHP et sql je n'ai pas eu à l'installer, alors soit il est installer par défaut soit la communication entre ces deux entité n'a pas besoin d'intermédiaire).

Je ne saisi donc pas bien ton problème et je ne saisi pas bien non plus ce qu'est MS sql Server, c'est un SGBD(Une base de donné en somme), non? Enfin c'est un serveur qui contient une base de donnée MS SQL, est-ce ça?)

Ta requête est correcte quelque soit le SGBD, le langage utilisé (comme ta requête) est du SQL donc quelque soit ta base de donnée ta requête doit être bonne. A moi qu'il y ai une variable dedans auquel cas il faut voir le langage de programmation, mais je croit que ce n'est pas ton cas donc tu ne devrai pas avoir de problème à ce niveau.

Bon je n'ai pas bien saisi ce que tu veut faire. Et tu n'a peut-être pas bien saisi tout ce que je vient de te dire donc histoir de nous mettre au point dit moi s'il y a un truc que tu n'as pas compris (même si tu n'a rien compris) et essaie de me préciser ton problème.
0
fred
 
merci pour ta réponse : )

en fait je développe une application qui doit tourner sous un max de sgbd : Oracle, MySQL etc... ainsi que MS SQL Server et Access (entre autres) via les fonctions odbc.

dans mon script php, je dois tester l'existence d'une table dans la base (MS SQL ou Access) via un appel à la fonction odbc_exec ($lkd,$sql).

la requête en question est : select count(name) NB from sysobjects where name = 'nom_table';

Et en fait le "sysobjects" et le "name" me perturbent. Je sais que MS SQL Server les comprend mais je ne sais pas si cette même requête fonctionnera sous Access (et autres). tu vois ce que je veux dire ?
0
sebsauvage Messages postés 33415 Statut Modérateur 15 667
 
sysobjects est spécifiques à SQL Server.

Attention: ta requête te donnera un résultat faux si il existe des procédures stockée, indexes ou autres qui portent le même nom que ta table.

Il faut la modifier:
select count(name) NB from dbo.sysobjects where name = 'nom_table' and xtype='U';


('U' pour ne rechercher que les tables.)
0
fred
 
ok merci pour l'astuce.

et sinon, il n'existe pas une requête qui pourrait marcher sur Access ET MS SQL Server (et d'autres éventuellement) ?? Sinon ça sert à rien que je passe par odbc...
0
Mr.White Messages postés 252 Statut Membre 53
 
En fait je ne comprend pas pourquoi il ne les comprendrai pas. Du moment que la table et le champ en question existe je ne voit pas pourquoi il y aurai un problème.
0