locked
Insert ou Update d'un champ text sql >256 chars dans un champ mémo foxpro via ODBC. RRS feed

  • Question

  • L'objet de la question pose la question.

    Lorsque j'execute une requète avec un champ text inférieur à 256 charactères tout ce passe bien.

     

    mardi 17 avril 2007 15:07

Toutes les réponses

  •  DSchoorens A écrit:

    L'objet de la question pose la question.

    Lorsque j'execute une requète avec un champ text inférieur à 256 charactères tout ce passe bien.

     

     

    Bonjour Daniel,

    Pourrais tu préciser :

    - tes tables sont-elle en Visual FoxPro9 ?

    - utilises tu le dernier drivers odbc pour VFPSP1 ?

    - depuis quel environnement tu requete (ASP?)

    Cordialement

    Francis

    vendredi 20 avril 2007 08:45
  • Bonjour,

     

    Si tu actives la trace ODBC, quelle erreur as-tu en retour?

    Peux-tu publier ici la partie de la trace correspondant à ce problème?

    vendredi 20 avril 2007 09:54
  • Bonjour et merci pour votre réponse.

     

    Mes tables sont en VFP 8 et antèrieur

     

    J'utilise le pilote ODBC 3.525.11...

    et le pilote ODBC VisualFoxPro 6.01.8629.01

     

    et mes requètes viennent d'un environnement PHP

     

    j'ai essayé plein de trucs car au début j'avais plus d'erreurs que de champs updatés

     

    je me suis apperçu qu'il fallait enlever les \t des champs text sql et aussi changer les ' en '' et là cela commence a aller beaucoup mieux mais avec les champs de plus de 254 caractères pas moyen !!!

     

    le code :

     

    $Code_art='xxxxxxxx';

    $Libx_art='0123456789ABCDEF';

    $Libx_art.='0123456789ABCDEF';

    $Libx_art.='0123456789ABCDEF';

    $Libx_art.='0123456789ABCDEF';

    $Libx_art.='0123456789ABCDEF';

    $Libx_art.='0123456789ABCDEF';

    $Libx_art.='0123456789ABCDEF';

    $Libx_art.='0123456789ABCDEF';

    $Libx_art.='0123456789ABCDEF';

    $Libx_art.='0123456789ABCDEF';

    $Libx_art.='0123456789ABCDEF';

    $Libx_art.='0123456789ABCDEF';

    $Libx_art.='0123456789ABCDEF';

    $Libx_art.='0123456789ABCDEF';

    $Libx_art.='0123456789ABCDEF';

    $Libx_art.='0123456789ABCDE';  

     

    $ODBCquery="UPDATE `Article` SET `Libx_art`= '$Libx_art' WHERE `Code_art` = '$Code_art'";

     

    $ODBCresult = odbc_exec($ODBCconnect, $ODBCquery);

     

    cela fonctionne très bien par contre si j'ajoute un char à Libx_art, j'obtiens cette erreur :

     

    Warning: odbc_exec(): SQL error: [Microsoft][ODBC Visual FoxPro Driver]Command contains unrecognized phrase/keyword., SQL state 37000 in SQLExecDirect in c:\program

     

    Voilà j'espère avoir donné suffisamment de détails et d'avance merci pour votre réponse.

    Cordialement, Daniel.

    vendredi 20 avril 2007 13:58
  • Bonjour et merci pour votre réponse.

     

    Mes tables sont en VFP 8 et antèrieur

     

    J'utilise le pilote ODBC 3.525.11...

    et le pilote ODBC VisualFoxPro 6.01.8629.01

     

    et mes requètes viennent d'un environnement PHP

     

    j'ai essayé plein de trucs car au début j'avais plus d'erreurs que de champs updatés

     

    je me suis apperçu qu'il fallait enlever les \t des champs text sql et aussi changer les ' en '' et là cela commence a aller beaucoup mieux mais avec les champs de plus de 254 caractères pas moyen !!!

     

    le code :

     

    $Code_art='xxxxxxxx';

    $Libx_art='0123456789ABCDEF';

    $Libx_art.='0123456789ABCDEF';

    $Libx_art.='0123456789ABCDEF';

    $Libx_art.='0123456789ABCDEF';

    $Libx_art.='0123456789ABCDEF';

    $Libx_art.='0123456789ABCDEF';

    $Libx_art.='0123456789ABCDEF';

    $Libx_art.='0123456789ABCDEF';

    $Libx_art.='0123456789ABCDEF';

    $Libx_art.='0123456789ABCDEF';

    $Libx_art.='0123456789ABCDEF';

    $Libx_art.='0123456789ABCDEF';

    $Libx_art.='0123456789ABCDEF';

    $Libx_art.='0123456789ABCDEF';

    $Libx_art.='0123456789ABCDEF';

    $Libx_art.='0123456789ABCDE';  

     

    $ODBCquery="UPDATE `Article` SET `Libx_art`= '$Libx_art' WHERE `Code_art` = '$Code_art'";

     

    $ODBCresult = odbc_exec($ODBCconnect, $ODBCquery);

     

    cela fonctionne très bien par contre si j'ajoute un char à Libx_art, j'obtiens cette erreur :

     

    Warning: odbc_exec(): SQL error: [Microsoft][ODBC Visual FoxPro Driver]Command contains unrecognized phrase/keyword., SQL state 37000 in SQLExecDirect in c:\program

     

    Voilà j'espère avoir donné suffisamment de détails et d'avance merci pour votre réponse.

    Cordialement, Daniel.

    vendredi 20 avril 2007 14:00
  • Il manque la trace ODBC pour pouvoir te répondre (ce fichier de trace est généré si tu le demandes dans l'administration des sources odbc, onglet traçage)

    lundi 23 avril 2007 12:02
  • Bonjour et désolé de ne pas avoir répondu plus vite.

    Voici la trace demandée.

    D'avance merci pour votre aide, Daniel.

     


    httpd           e88-d24 ENTER SQLAllocEnv
      HENV *              04677B98

    httpd           e88-d24 EXIT  SQLAllocEnv  with return code 0 (SQL_SUCCESS)
      HENV *              0x04677B98 ( 0x00a91788)

    httpd           e88-d24 ENTER SQLAllocConnect
      HENV                00A91788
      HDBC *              04677B9C

    httpd           e88-d24 EXIT  SQLAllocConnect  with return code 0 (SQL_SUCCESS)
      HENV                00A91788
      HDBC *              0x04677B9C ( 0x00a91830)

    httpd           e88-d24 ENTER SQLConnectW
      HDBC                00A91830
      WCHAR *             0x00A91938 [      -3] "tetra.dsn\ 0"
      SWORD                       -3
      WCHAR *             0x74739A38 [      -3] "******\ 0"
      SWORD                       -3
      WCHAR *             0x74739A38 [      -3] "******\ 0"
      SWORD                       -3

    httpd           e88-d24 EXIT  SQLConnectW  with return code 0 (SQL_SUCCESS)
      HDBC                00A91830
      WCHAR *             0x00A91938 [      -3] "tetra.dsn\ 0"
      SWORD                       -3
      WCHAR *             0x74739A38 [      -3] "******\ 0"
      SWORD                       -3
      WCHAR *             0x74739A38 [      -3] "******\ 0"
      SWORD                       -3

    httpd           e88-d24 ENTER SQLAllocStmt
      HDBC                00A91830
      HSTMT *             04677FB0

    httpd           e88-d24 EXIT  SQLAllocStmt  with return code 0 (SQL_SUCCESS)
      HDBC                00A91830
      HSTMT *             0x04677FB0 ( 0x00a92040)

    httpd           e88-d24 ENTER SQLGetInfoW
      HDBC                00A91830
      UWORD                        8 <SQL_FETCH_DIRECTION>
      PTR                 0129F25C
      SWORD                        4
      SWORD *             0x0129F242

    httpd           e88-d24 EXIT  SQLGetInfoW  with return code 0 (SQL_SUCCESS)
      HDBC                00A91830
      UWORD                        8 <SQL_FETCH_DIRECTION>
      PTR                 0129F25C
      SWORD                        4
      SWORD *             0x0129F242 (4)

    httpd           e88-d24 ENTER SQLSetStmtOption
      HSTMT               00A92040
      UWORD                        6 <SQL_CURSOR_TYPE>
      SQLPOINTER          0x00000002

    httpd           e88-d24 EXIT  SQLSetStmtOption  with return code 1 (SQL_SUCCESS_WITH_INFO)
      HSTMT               00A92040
      UWORD                        6 <SQL_CURSOR_TYPE>
      SQLPOINTER          0x00000002 (BADMEM)

      DIAG [01S02] [Microsoft][ODBC Visual FoxPro Driver]Option value changed (0)

    httpd           e88-d24 ENTER SQLExecDirect
      HSTMT               00A92040
      UCHAR *             0x04677E08 [      -3] "UPDATE `Article` SET `Libx_art`= '0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF' WHERE  `Code_art` = 'SOBEH-UCG102'\ 0"
      SDWORD                    -3

    httpd           e88-d24 EXIT  SQLExecDirect  with return code -1 (SQL_ERROR)
      HSTMT               00A92040
      UCHAR *             0x04677E08 [      -3] "UPDATE `Article` SET `Libx_art`= '0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF' WHERE  `Code_art` = 'SOBEH-UCG102'\ 0"
      SDWORD                    -3

      DIAG [37000] [Microsoft][ODBC Visual FoxPro Driver]Command contains unrecognized phrase/keyword. (219)

    httpd           e88-d24 ENTER SQLErrorW
      HENV                00A91788
      HDBC                00A91830
      HSTMT               00A92040
      WCHAR *             0x0129EFE4 (NYI)
       SDWORD *            0x0129F030
      WCHAR *             0x0129EBE4
      SWORD                      511
      SWORD *             0x0129F02E

    httpd           e88-d24 EXIT  SQLErrorW  with return code 0 (SQL_SUCCESS)
      HENV                00A91788
      HDBC                00A91830
      HSTMT               00A92040
      WCHAR *             0x0129EFE4 (NYI)
       SDWORD *            0x0129F030 (219)
      WCHAR *             0x0129EBE4 [      83] "[Microsoft][ODBC Visual FoxPro Driver]Command contains unrecognized phrase/keyword."
      SWORD                      511
      SWORD *             0x0129F02E (83)

    httpd           e88-d24 ENTER SQLFreeStmt
      HSTMT               00A92040
      UWORD                        1 <SQL_DROP>

    httpd           e88-d24 EXIT  SQLFreeStmt  with return code 0 (SQL_SUCCESS)
      HSTMT               00A92040
      UWORD                        1 <SQL_DROP>

    httpd           e88-d24 ENTER SQLDisconnect
      HDBC                00A91830

    httpd           e88-d24 EXIT  SQLDisconnect  with return code 0 (SQL_SUCCESS)
      HDBC                00A91830

    httpd           e88-d24 ENTER SQLFreeConnect
      HDBC                00A91830

    httpd           e88-d24 EXIT  SQLFreeConnect  with return code 0 (SQL_SUCCESS)
      HDBC                00A91830

    httpd           e88-d24 ENTER SQLFreeEnv
      HENV                00A91788

    httpd           e88-d24 EXIT  SQLFreeEnv  with return code 0 (SQL_SUCCESS)
      HENV                00A91788

    lundi 30 avril 2007 08:07
  • Bonjour,

     

    je viens de faire le test,

    effectivement avec une chaine de + de 255 caractères : cela ne fonctionne pas

    je n'ai pas encore trouvé pourquoi...

     

    par contre je suis arrivé à contourner avec une série de

     

    $ODBCquery="UPDATE Article SET Libx_art= '$Libx_art' WHERE Code_art = '$Code_art'";

    $ODBCresult = odbc_exec($ODBCconnect, $ODBCquery);

      $Libx_art_suite = 'la suite';

    $ODBCquery="UPDATE Article SET Libx_art= Libx_art + '$Libx_art_suite' WHERE Code_art = '$Code_art'";

    $ODBCresult = odbc_exec($ODBCconnect, $ODBCquery);

     

    $Libx_art_suite = 'une autre suite ';

    $ODBCquery="UPDATE Article SET Libx_art= Libx_art + '$Libx_art_suite' WHERE Code_art = '$Code_art'";

    $ODBCresult = odbc_exec($ODBCconnect, $ODBCquery);

     

    si cela peut d'aider en attendant ?

     

    Cordialement

    Francis

    lundi 30 avril 2007 13:30
  • Salut,

     

    Que se passe t'il quand on ajoute un guillemet en début et en fin de chaine à updater?

     

     

    lundi 30 avril 2007 14:52
  • Bonsoir et merci pour la réponse.

    Je vais essayer cela avant fin de semaine.

    Cela me plais bien comme solution.

    Bonne fête du 1er mai.

    Cordialement Daniel.

    lundi 30 avril 2007 15:07
  • Bonjour,

    la solution que vous proposez fonctionne et me conviens parfaitement.

    Mais avant de découper le texte je supprime les \n dans la séquence \n\r (retour chariot)

    Puis je remplace les ' par des accents aigu ’ (voir ci-dessous) 

    A l'affichage on ne vois pas beaucoup de différence et cela permet de

    ne pas avoir de requêtes qui commencent par ''

     

    $Libx_art = str_replace("\n","" ,$Libx_art);

    $Libx_art = str_replace("'","’",$Libx_art);

     

    Voila un petit complément pour ceux que cela intéresserait

    Merci pour votre aide

    Slts Daniel.

     

    jeudi 10 mai 2007 05:12