ATOUTFOX
COMMUNAUTÉ FRANCOPHONE DES PROFESSIONNELS FOXPRO
Visual FoxPro : le développement durable

Forum AtoutFox : Re: Problème insertion dans une BD PostgreSQLl   

Sujet

rss Flux RSS des derniers messages

Vous devez vous identifier pour pouvoir poser une question ou répondre.

mer. 09 mars 2016, 19h09

GLS
France France

atoutfox.public.association

Re: Problème insertion dans une BD PostgreSQLl

Bonjour,

La structure de la table commande me parait être incorrecte au vue des données de cette commande INSERT.
*!* table commande contient des champs suivants
*!* ods character(1) NOT NULL,
*!* energie character(1) NOT NULL,
*!* num numeric(4,0) NOT NULL, && smallint doit suffir
*!* date_ods date NOT NULL,
*!* mont_ht integer, &&real serait mieux pour stocker des nombres avec décimals
*!* tva integer, &&idem
*!* mont_ttc integer, &&idem
*!* entreprise character varying(50),
*!* objet character varying(50),
*!* ca character(3),
*!* ap character(6),
*!* imputation character(10),
*!* sce character(5),
*!* delais numeric(4,0) && smallint doit suffir

Voici le code utilisant transformer().
Il devrait être opérationnel sous réserve que la propriété VALUE de chaque objet soit correctement utilisée avec un type en cohérence avec les colonnes de la table commande (ComboBox etc..)
LOCAL cSql as String

cSql = [INSERT INTO commande (];
[ods,];
[energie,];
[num,];
[date_ods,];
[mont_ht,];
[tva,];
[mont_ttc,];
[entreprise,];
[objet,];
[ca,];
[ap,];
[imputation,];
[sce,];
[delais];
[) VALUES(];
+ transformer(m.vcbcmd);
[,] + transformer(m.thisform.cbenergie.value);
[,] + transformer(m.thisform.strnum.value);
[,] + transformer(m.thisform.dateods.value);
[,] + transformer(m.thisform.strmtht.value);
[,] + transformer(m.thisform.strmttva.value);
[,] + transformer(m.thisform.strmtttc.value);
[,] + transformer(m.thisform.cbentreprise.value);
[,] + transformer(m.thisform.txtobjet.value);
[,] + transformer(m.thisform.cbca.value);
[,] + transformer(m.thisform.txtap.value);
[,] + transformer(m.thisform.txtimputation.value);
[,] + transformer(m.thisform.txtsce.value);
[,] + transformer(thisform.strdelais.value);
[)]

=SQLEXEC(m.iHandle, m.cSql)
* Fonction de formatage des champs en un champ de type texte pour l'utilisation dans les requêtes SQL
* Retourne le contenu de la chaine ls_return
FUNCTION transformer(t_champ AS STRING, tl_en_binaire AS Boolean) AS STRING
  IF PCOUNT() > 0
    LOCAL ls_return AS STRING, cOldPoint AS STRING, li_i  AS INTEGER

    IF ISNULL(m.t_champ)
      ls_return = "NULL"
    ELSE
      DO CASE
        CASE VARTYPE(m.tl_en_binaire) == 'L' AND m.tl_en_binaire
          * cas du binaire a transformer en hexadecimal
          IF LEN(m.t_champ) > 1
            ls_return = "0x"
            FOR li_i=1 TO LEN(m.t_champ)
              ls_return = m.ls_return + RIGHT(TRANSFORMASC(SUBSTR(m.t_champ, m.li_i, 1)), "@0"), 2)
            NEXT
          ELSE
            ls_return = "''"
          ENDIF

        CASE VARTYPE(m.t_champ) $ "C" &&MV"
          ls_return = ALLTRIM(m.t_champ)
          ls_return = STRTRAN(m.ls_return, CHR(92), CHR(92)+CHR(92)) && \ en \\
          ls_return = STRTRAN(m.ls_return, CHR(39), CHR(39)+CHR(39)) && ' en \'
          *        ls_return = STRTRAN(ls_return, CHR(39), CHR(92)+CHR(39)) && ' en \'
          ls_return = "'" + m.ls_return + "'"

        CASE VARTYPE(m.t_champ) == "Y" &&YBFI"
          ls_return = ALLTRIM(STR(m.t_champ))

        CASE VARTYPE(m.t_champ) == "N" &&YBFI"
          cOldPoint = SET("Point")
          SET POINT TO '.'
          ls_return = ALLTRIM(TRANSFORM(m.t_champ))
          SET POINT TO m.cOldPoint

        CASE VARTYPE(m.t_champ) == "D"
          ls_return = "'" + LEFT(TTOC(m.t_champ, 3), 10) + "'"

        CASE VARTYPE(m.t_champ) == "T"
          ls_return = "'" + TTOC(m.t_champ, 3) + "'"

        CASE VARTYPE(m.t_champ) == "L"
          * boolean .T. = 1
          ls_return = ICASE(m.t_champ, "'TRUE'""'FALSE'")

        CASE VARTYPE(m.t_champ) == "Q"
          * cas particulier en binaire directement du varchar binary
          ls_return = ICASE(LEN(m.t_champ) > 1, "0x" + TRANSFORM(m.t_champ), "''")

        OTHERWISE
          ls_return = "NULL"
          =MessageBox("a traiter Transformer type=" + VARTYPE(m.t_champ), 30000)
      ENDCASE
    ENDIF
    RETURN m.ls_return
  ELSE
    RETURN "NULL"
  ENDIF
ENDFUNC


Cordialement
GLS

Journal

noureddine-Mila pense que ce message est la bonne réponse ou qu'il est utile
Permalink : http://www.atoutfox.org/nntp.asp?ID=0000017456
20 088 messages dans le forum • Liste complète des messages

Publicité

Les pubs en cours :

www.atoutfox.org - Site de la Communauté Francophone des Professionnels FoxPro - v3.4.0 - © 2004-2024.
Cette page est générée par un composant COM+ développé en Visual FoxPro 9.0-SP2-HF3