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

Langage SQL Discussion :

Problème de syntaxe INSERT/UPDATE


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 6
    Par défaut Problème de syntaxe INSERT/UPDATE
    Bonjour,

    Je suis sur un programme en C qui utilise ODBC pour se connecter à une base postgres, sous Visual Studio 2003.

    Je dois mettre à jour un champ contenant une image bitmap potentiellement supérieure au Mo.

    Les exemples de syntaxe que je trouve sur le net ainsi que dans l'aide de Visual présentent ce genre d'écriture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO PICTURES (PARTID, PICTURE) VALUES (?, ?)
    Lors de l'exécution du
    SQL Etat : HY000
    SQL Code d'erreur : 7
    SQL Message : ERROR: syntax error at or near "," at character 49
    Il semblerait que les ? soient mal digérés. Si quelqu'un a une idée...

    Merci d'avance !

    Un petit bout de code peut-être :
    Code : 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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    sprintf(statement, "INSERT INTO picture (id, type, name, background) VALUES (%ld, '%s', '%s', ?)", id, sql_type, sql_name);	
     
    SQLPrepare (current_stmt, statement, SQL_NTS);
     
    retcode = SQLBindParameter( current_stmt,
    							4,
    							SQL_PARAM_INPUT,
    							SQL_C_BINARY,
    							SQL_LONGVARBINARY,
    							0,
    							0,
    							id, // Identifiant du paramètre
    							0,
    							&dataLen);		
     
    dataLen = SQL_LEN_DATA_AT_EXEC(BUFFERSIZE);
     
    retcode = SQLExecute(current_stmt);
     
    while(retcode == SQL_NEED_DATA)
    {
    	retcode = SQLParamData(current_stmt, &pAppData);
     
    	if ( retcode == SQL_NEED_DATA)
    	{
    		if(&id == pAppData)
    		{
    			putData(current_stmt, buffer, data); // Fonction qui boucle sur un SQLPutData
    		}
    	}
    }

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Par défaut
    Dans la table PICTURES, de quels types sont les colonnes : PARTID et PICTURE ?
    Si elles sont toutes les 2 de types chaîne alors il vous faut encadrer les ? par des quotes.
    Votre deviendra donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO PICTURES (PARTID, PICTURE) VALUES ('?', '?')
    Attention : cela devrait rendre votre requête syntaxiquement correcte concernant ce qu'elle est supposée faire, c'est une autre histoire...

  3. #3
    Nouveau membre du Club
    Inscrit en
    Février 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 6
    Par défaut
    Partid est un integer
    Picture est un bytea

    Quand je met des quotes autour du ? je n'ai pas d'erreur, par contre au lieu d'interpréter le ? comme un paramètre dont on ne connait pas encore la valeur, il met simplement ? en BD. Il pense que je veut mettre la chaîne de caractères ? en BD.

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Par défaut
    Citation Envoyé par Alexwei
    au lieu d'interpréter le ? comme un paramètre dont on ne connait pas encore la valeur, il met simplement ? en BD. Il pense que je veut mettre la chaîne de caractères ? en BD.
    C'est EXACTEMENT ce que tente de faire votre requête INSERT donc le résultat observé n'est pas surprenant.
    A mon avis il faut que vous relisiez l'article où vous avez pris cet exemple.
    Les "?" doivent signifier : "remplacer par l'objet que vous manipulez" ou quelque chose dans ce genre.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Février 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 6
    Par défaut
    Non, pas du tout.
    Dans le champ picture je dois mettre une grande donnée, par exemple 500Ko.
    Or il n'est pas possible d'écrire cette donnée directement dans la requète de part sa taille d'une part, de part son contenu qui est potentiellement impossible à écrire(caractères cabalistiques et Cie).
    Je dois donc écrire ma requète en spécifiant que j'ai une donnée de ce type donc je fournirai la valeur par la suite via la fonction adéquate.
    Celà se fait par le biais du ?
    Il y a un exemple du genre sur ce site :
    http://www.ianywhere.com/developer/p...9/00000026.htm

  6. #6
    Nouveau membre du Club
    Inscrit en
    Février 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 6
    Par défaut
    Le problème se situe au niveau du SQLBindParameter

    retcode = SQLBindParameter( current_stmt,
    4,
    SQL_PARAM_INPUT,
    SQL_C_BINARY,
    SQL_LONGVARBINARY,
    0,
    0,
    id, // Identifiant du paramètre
    0,
    &dataLen);

    Ca n'est pas le numéro du paramètre dans la requète qu'il faut mettre(i.e. 4) mais le numéro du paramètre de grande taille que l'on passe dans la requète c'est à dire 1 puisqu'il n'y en a qu'un ici.

    Je passe donc à une autre erreur mais celle-ci est résolue.

    Merci pour le temps passé Magnus.

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

Discussions similaires

  1. Problème de syntaxe dans Update command
    Par alicia26 dans le forum ASP.NET
    Réponses: 9
    Dernier message: 06/07/2009, 16h30
  2. problème de syntaxe insert into
    Par novice06 dans le forum VBA Access
    Réponses: 7
    Dernier message: 05/03/2009, 10h58
  3. Problème de syntaxe sur UPDATE
    Par pgu64 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 06/04/2008, 19h26
  4. [VB.Net] Pourquoi ai-je une erreur de syntaxe INSERT UPDATE ?
    Par zzzmoi dans le forum Accès aux données
    Réponses: 14
    Dernier message: 17/08/2006, 14h21
  5. Problème de Syntaxe SQL (Update Table)
    Par Thibaut_Dupont dans le forum Access
    Réponses: 15
    Dernier message: 17/07/2006, 16h32

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