IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

Accents dans le nom de la base


Sujet :

MS SQL Server

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2012
    Messages : 35
    Points : 25
    Points
    25
    Par défaut Accents dans le nom de la base
    (re) bonjour,

    apres plusieurs recherches unfructueurse , je n'arrive toujours pas a regler mon probleme .

    j'ai une base de donné qui s’appelle dbo.la_ baseDes_Informations générales

    pour l'interroger , j’exécute

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM [dbo].[la_  baseDes_Informations générales]
    sql server me renvoie l'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: odbc_exec() [function.odbc-exec]: SQL error: [Microsoft][ODBC SQL Server Driver][SQL Server]Nom d'objet 'dbo.la_  baseDes_Informations  générales' non valide., SQL state S0002 in SQLExecDirect
    je suis en iso-8859-1 , c'est pour cela que é : é , mais changer en utf-8 ne résous pas le problème :/

    merci de votre aide

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Vous dites une table ou une base de données ?
    Une base de données est composée de schémas, et ces schémas sont des conteneurs logiques d'objets (tables, vues, procédures stockées, ...).

    je suis en iso-8859-1
    C'est-à dire ?

    Quelle est la base de données en cours quand vous obtenez cette erreur ?
    Pour le savoir exécuter SELECT DB_NAME().
    Pour en changer, exécuter USE maBaseDeDonnees

    Normalement une liste déroulante dans la barre d'outils de SQL Server Management Studio vous indique dans quel contexte de base de données vous êtes. Pareillement en bas et à droite, dans la barre d'état

    @++

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2012
    Messages : 35
    Points : 25
    Points
    25
    Par défaut
    je parle bien de base de donné , mon but est de "concaténer" plusieurs colonnes ayant un id commun .

    un peu comme si vous avez la base des noms , la base des prénoms , la base du métiers , et vous voulez avoir une table avec nom, prénom, métier , grâce aux id communs entre eux

    en faite ma requête c'est ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $requete="SELECT * FROM [dbo].[Base1]
                                INNER JOIN [dbo].[Base 2] 
                                        ON [objet1] = [dbo].[base2].[objet2]
                                INNER JOIN [dbo].[la_  baseDes_Informations générales]
                                        ON [objet1] = [dbo].[la_  baseDes_Informations générales].[objet2]
     
                               ...
                               ...
                               ...
     
                            where [objet3] = 'critere'";

    pour l'iso , c'est juste pour expliquer l'affichage du é en é

  4. #4
    Membre éprouvé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 623
    Points : 1 049
    Points
    1 049
    Par défaut
    alors la syntaxe est [base_de_données].dbo.[table] et non pas dbo.[base_de_données].[table]

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2012
    Messages : 35
    Points : 25
    Points
    25
    Par défaut
    peu être que je m'exprime mal

    dans SQL SERVER , j'ai

    dbo.La_base_avec_ID_type_et_marque
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Identification  | Marque | type
    1                 Peugeot   véhicule
    2                 Citroen    véhicule
    ....
    dbo.La_base_avec_ID_voiture_et_série
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ID | série
    1    206
    2    C4
    ...
    Objectif souhaité : génération d'un tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ID | Marque | Serie
    1     Peugeot   206
    2     Citroen   C4
    Pour cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT * FROM [dbo].[La_base_avec_ID_voiture_et_marque]
                                INNER JOIN [dbo].[La_base_avec_ID_voiture_et_série]
                                ON [Identification ] = [dbo].[La_base_avec_ID_voiture_et_série].[ID]
                            where [type] = 'véhicule'"

    Mais cela me génère l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: odbc_exec() [function.odbc-exec]: SQL error: [Microsoft][ODBC SQL Server Driver][SQL Server]Nom d'objet 'dbo.La_base_avec_ID_voiture_et_série' non valide., SQL state S0002 in SQLExecDirect in

  6. #6
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Est-ce que tu peux tenter ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM [maBase].[dbo].[la_  baseDes_Informations générales]
    Histoire d'éliminer un problème de contexte de bases de données comme le suggère Elsuket.

    ++

  7. #7
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    dbo.La_base_avec_ID_type_et_marque et dbo.La_base_avec_ID_voiture_et_série ne sont pas des bases de données mais des tables
    Leur nommage est peut-être incorrect, mais c'est comme cela que ça s'appelle

    Objectif souhaité : génération d'un tableau
    En SQL, il n'y a pas de tableau : il y soit des tables, soit des ensembles.

    Suivez le conseil de Mikedavem

    @++

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2012
    Messages : 35
    Points : 25
    Points
    25
    Par défaut
    Merci pour les réponses

    Citation Envoyé par mikedavem Voir le message
    Est-ce que tu peux tenter ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM [maBase].[dbo].[la_  baseDes_Informations générales]
    Histoire d'éliminer un problème de contexte de bases de données comme le suggère Elsuket.

    ++
    Non , ça ne marche pas . mais je suis 99% que c'est le problème d'accents.

    vu que j'ai d'autres tables dans maBasedeDonness .Et avec les autres requêtes marchent sans aucun probleme , alors que les tables avec des accents , ben sa affiche cette erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Warning: odbc_exec() [function.odbc-exec]: SQL error: [Microsoft][ODBC SQL Server Driver][SQL Server]Nom d'objet 'maBase.dbo.la_  baseDes_Informations générales' non valide., SQL state S0002 in SQLExecDirect in  ...

    Citation Envoyé par elsuket
    dbo.La_base_avec_ID_type_et_marque et dbo.La_base_avec_ID_voiture_et_série ne sont pas des bases de données mais des tables
    Leur nommage est peut-être incorrect, mais c'est comme cela que ça s'appelle

    Citation:
    Objectif souhaité : génération d'un tableau
    En SQL, il n'y a pas de tableau : il y soit des tables, soit des ensembles.

    Suivez le conseil de Mikedavem

    @++
    merci pour l'info , j'avoue que je ne suis pas habitué a des noms de tables comme ça ( mysql ...)

    Hypotese . la base de donné contient un table nommé "générale", moi je l'interroge avec Select * from général , mais peu être que le driver , avec un mauvais transcodage , l'interroge avec générale ?!

  9. #9
    Membre éprouvé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 623
    Points : 1 049
    Points
    1 049
    Par défaut
    Ca te fait l'erreur uniquement depuis des requêtes qui utilisent un ODBC ou ca te fait également l'erreur dans Management Studio ? Si ca ne le fait que depuis l'ODBC, il y a peut être moyen de le paramétrer.

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2012
    Messages : 35
    Points : 25
    Points
    25
    Par défaut
    je n'ai pas accès au manageur , du moins , pas avant jeudi.

    Paramétrer l'odbc , pourquoi pas ?

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2012
    Messages : 35
    Points : 25
    Points
    25
    Par défaut
    un zoli
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE'
    montre bien le nom de ma table avec les accents bien rendu ...

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2012
    Messages : 35
    Points : 25
    Points
    25
    Par défaut
    petit up . en faite , c'est touts les accents qui foirent .

    dans un simple Select * from database where col1="agé" , ca ne renvoie rien , alors que les champs "agé" , ben il y en a 1200

  13. #13
    Membre habitué
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2012
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 81
    Points : 145
    Points
    145
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select * from database where col1="agé"
    Question toute bête, en remplaçant le double Quote par un simple quote:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select * from database where col1='agé'
    Ca donne quoi?

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2012
    Messages : 35
    Points : 25
    Points
    25
    Par défaut
    Erreur de ma part dans l’exemple : moi j'utilise normalement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT * FROM DATABASE WHERE col1='agé'"
    envoie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: odbc_exec() [function.odbc-exec]: SQL error: [Microsoft][ODBC SQL Server Driver][SQL Server]Nom de colonne non valide : 'agé'., SQL state S0022 in SQLExecDirect in
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT * FROM DATABASE WHERE col1=[agé]"
    renvoie la meme erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'SELECT * FROM DATABASE WHERE col1="agé"'
    renvoie un no rows found . donc ce n'est pas la bonne syntaxe .

    Vu l'ampleur du bug , pensez vous que cela peux venir du odbc driver ?

    sinon , j'ai utilisé query tools , pas d'erreur avec

    je go sui**de

  15. #15
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Essayez d'en faire une procédure stockée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE PROCEDURE usp_test
    	@_col1 varchar(16)
    AS
    BEGIN
    	SET NOCOUNT ON
     
    	SELECT	*
    	FROM	dbo.maTable
    	WHERE	col1 = @_col1
    END
    Et appelez celle-ci dans votre code.

    Je vous rappelle qu'une base de données n'est pas une table.

    @++

  16. #16
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2012
    Messages : 35
    Points : 25
    Points
    25
    Par défaut
    Citation Envoyé par elsuket Voir le message
    Bonjour,

    Essayez d'en faire une procédure stockée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE PROCEDURE usp_test
    	@_col1 varchar(16)
    AS
    BEGIN
    	SET NOCOUNT ON
     
    	SELECT	*
    	FROM	dbo.maTable
    	WHERE	col1 = @_col1
    END
    Et appelez celle-ci dans votre code.

    Je vous rappelle qu'une base de données n'est pas une table.

    @++
    Merci pour votre aide , mais cela donne exactement la même erreur que précédemment . a savoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: odbc_exec() [FUNCTION.odbc-exec]: SQL error: [Microsoft][ODBC SQL Server Driver][SQL Server]Nom de colonne non valide : 'agé'., SQL state S0022 IN SQLExecDirect IN
    Pour info : la colation de ma base est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SQLCollation
    French_CI_AS
    et moi je suis en UTF-8 maintenant (charset) .

    Je me suis dit au début que le problème venais peu être de l'odbc. Mais l'outil Querry tools ( Using odbc ) "http://www.gpoulose.com/" , ce dernier m'affiche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SET ROWCOUNT 0
    GO
    SELECT * FROM [dbo].[DATABASE] where [col1] = "agé"
    GO
    et me montre bien les champs !

    donc je ne pense plus que c'est une erreur de l'odbc , ce qui fait que je suis prêt a donner ma langue au chat.

    Par contre , moi je me connecte de cette maniere

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $server="Le_Serveur";
            $database="La_Base";
            $dsn = "Driver={SQL Server};Server=$server;Database=$database;";
            $user = "Lutilisateur";
            $password = "LePass";
            $conn=odbc_connect($dsn,$user,$password);
            if (!$conn) {exit("Erreur dans la connexion  avec la base de donn&eacute;es<BR>");}
    alors que le logiciel se connecte comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Connection String
    ODBC;DSN=La_Base;Description=La description;UID=Lutilisateur;PWD=;APP=Query Tool (using ODBC) 6.1;WSID=le_num_du_poste;DATABASE=La_Base;LANGUAGE=Français;Network=(un truc sous forme XXXXXX);Address=Le_Serveur,port;AutoTranslate=No;Regional=Yes;QuotedId=No
    peut etre que je doit ajouter ces info , mais comment ?.

    Edit : Je suis en train de creser la piste du driver . changer ODBC par MSSQL . Sauf que bien evidament , tout doit se compliquer pour moi . Mon serveur de developpement est en PHP5.3 et celui de production est en 5.2 ... et bien evidament MMSQL n'est plus compatible avec 5.3 et il faut le changer par SQLSRV ..... j'aime bien mon JOB

  17. #17
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2012
    Messages : 35
    Points : 25
    Points
    25
    Par défaut
    Bon , après l'intervention de certains genie de l'IT , j'ai découvert le problème . sans pour autant comprendre pourquoi

    Déjà : Mon code n'est pas le problème . Merci au membres qui se sont penché dessus , consacré du temps , et m'ont aidé a l’améliorer ( nah , vous m'avez pas corrigé )

    Et : cela ne venais pas non plus de l'odbc , car j'ai attaqué en native avec mssql , toujours le même problème.

    Le problème venais de l'encodage même du fichier !
    Je travail mon projet avec NetBeans ( http://fr.netbeans.org/ ) , comme je fesais pendant 3 ans sans aucun problème sur des bases MySQL. Et apparament , selon notpad++ , les fichier encodé par ce dernier était en UNIX-UTF-8 nativement , alors que quand on crée un fichier avec bloc-notes de Windows , ce dernier est codé en DOS-ANSI . On a par curiosité utilisé la fonction de conversion d'encodage de mes fichiers en DOS-ANSI , et TADAAA ! tout marche parfaitement bien .

    Alors oui , c'est bien joli tout ca , mais pourquoi donc ?

    Grace à ultraedit ( une sorte de notepad++ payant ) , on a transformé le code en hexa , et la on remarque que sur DOS , é , à ... sont codé différemment , alors que avec UNIX-UTF-8 , les caractères spéciaux sont tous codé de la même façon , {FF} si je me souviens bien .... alors le pourquoi ... ben on sait pas

    j'ai donc procédé a changer l'encodage de netbeans en DOS-ANSI , mais pour lui dos-ansi s’appelle windows-1252 ( merci l'afnor et l'iso , joli travail )...

    bon , tout ceci sur le dos d'un ptit stagiaire qui veut juste faire un p'tit select

  18. #18
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Merci à toi d'avoir donné les détails de la résolution, c'est toujours intéressant d'avoir les détails.

    @++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 31/01/2008, 15h02
  2. Samba et les accents dans les noms de fichiers
    Par totofweb dans le forum Réseau
    Réponses: 1
    Dernier message: 19/08/2007, 18h22
  3. les accents dans les noms d'un champ
    Par s.rais dans le forum Access
    Réponses: 4
    Dernier message: 19/07/2007, 10h06
  4. Injection des accents dans les nom de tables ?
    Par lathenor dans le forum SQLite
    Réponses: 3
    Dernier message: 21/05/2007, 11h36
  5. [XML] Accent dans les noms de balises
    Par virgul dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 09/03/2005, 13h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo