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

PostgreSQL Discussion :

PostgreSQL ADO, champ avec espace


Sujet :

PostgreSQL

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 20
    Points : 16
    Points
    16
    Par défaut PostgreSQL ADO, champ avec espace
    Bonjour,

    Je suis nouvelle dans Postgresql, j'examine une éventuelle migration d'une BDD Access vers Postgresql.

    Depuis un programme vb6 j'essaie d'ajouter une ligne dans la base Postgresl (9.3) via un driver odbc (7.4) et connection ADO.

    Problème: lorsque le champ contient un espace dans le nom, l'update plante (si j'enlève l'espace dans le nom du champ de postgresql , l'ajout fonctionne).

    script de création de table dans postgresql:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TABLE matable
    (
      "nom avec espace" integer NOT NULL,
      champ character varying(40)
    ....)
    Code vb6 pour inserer une ligne:

    Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Dim Db1 As New ADODB.Connection
    Dim Rst1 As New ADODB.Recordset
     
    Db1.ConnectionString = "Driver={PostgreSQL ODBC Driver(UNICODE)};server=localhost;Port=5432;" _
            & "Database=ddbname;Uid=postgres;Pwd=monmdp;"
    Db1.Open  => la connection fonctionne
     
    Db1.Execute "delete from matable" 
    Rst1.Open "matable", Db1, adOpenKeyset, adLockPessimistic, adCmdTable
     
    Rst1.AddNew
     
    Rst1("nom avec espace") = 1234 '=> l'affectation fonctionne, le champs est reconnu
    Rst1("champ") = "test"
     
    Rst1.Update ' ===> ça plante ici
    Rst1.Close
    Db1.Close


    J'obtiens l'erreur suivante :
    erreur: -2147467259: erreur de syntaxe sur ou près de "avec"; Error while executing the query
    Quelle syntaxe utiliser pour affecter un nom de champ avec espace dans postgresql?

    L'implication est grande car dans le cas d'une migration cela signifierait qu'il faille changer tous les noms de champs dans le programme existant.

    En vous remerciant par avance
    Noemieze

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    bonjour,

    On ne met pas d'espace, ni autres caractères spéciaux dans le nom des tables / colonnes.

    Avec postgresql vous n'aurez qu'une seule solution pour contourner ceci : faire appel à vos colonnes en les entourant de guillemets.

    Par contre, le nom de la colonne / table sera alors case sensitive.

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 20
    Points : 16
    Points
    16
    Par défaut
    Bonjour,

    Tout d'abord, merci pour votre aide!

    J'ai justement testé beaucoup de syntaxes pour accéder au champ avec guillemets depuis le recordset, mais je n'ai pas encore trouvé la bonne syntaxe.

    J'ai par exemple testé l'appel du champ avec guillemet + case sensitive de la façon suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SrtNomChamp = """nom avec espace"""
    Rst1(SrtNomChamp) = 1234
    => dans ce cas ça plante ici (et pas à l'update), et le champ n'est pas du tout reconnu!

    Quelle serait la bonne syntaxe?

    Merci beaucoup!
    Noemieze

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 768
    Points : 52 719
    Points
    52 719
    Billets dans le blog
    5
    Par défaut
    Le plus simple est de respecter la norme SQL pour les noms de colonnes, tables... etc. Sinon vous aurez toujours des problèmes !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. Ne pas récupérer des champs avec espace
    Par Unreal Time dans le forum Autres SGBD
    Réponses: 6
    Dernier message: 17/12/2012, 17h12
  2. [AC-2010] Macro Syntaxe Nom Champ avec espace
    Par Keuf95 dans le forum Access
    Réponses: 1
    Dernier message: 18/07/2011, 17h12
  3. Nom de Tables et Champs avec Espaces SQL et JAVA
    Par bbs07 dans le forum NetBeans
    Réponses: 0
    Dernier message: 25/07/2010, 23h10
  4. Probleme champ avec espace
    Par jmjmjm dans le forum Débuter
    Réponses: 3
    Dernier message: 10/10/2006, 11h34
  5. nom de table et de champs avec des espaces
    Par grinder59 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 16/05/2006, 17h30

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