mer. 09 mars 2016, 17h21
eddymaue
atoutfox.public.association
Re: Problème insertion dans une BD PostgreSQLl
si je comprends bien en lisant le fichier de sortie c'est que tout est
mis sous chaine string et c'est ODBC qui s'occupe de faire la
transformation !!!
Après mûre réflexion, GLS a écrit :
> 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(TRANSFORM( ASC(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
--
a+ Eddy
Merci de partager avec moi votre immense savoir que je me ferai plaisir
d'absorber... il va de soi que je vais vous en laisser un peu
Politesse et savoir vivre oblige ;0)
Permalink : http://www.atoutfox.org/nntp.asp?ID=0000017459