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, 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
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