Gambas France BETA


Pas de compte ? Incription

Syntaxe Sql

Ce sujet est résolu.

1
AuteurMessages
jibi#1 Posté le 7/9/2012 à 23:56:17
codergambas.jimdofree.comBonjour à vous tous

j'ai une base de donnée qui comporte plusieurs champs : tout fonctionne correctement si je remplis ces champs en écrivant du texte dans mon formulaire constitué de textBoxt ou si je fais un copié/collé à partir d'un fichier texte

Mais si je fais un copié/collé à partir d'un site web j'ai une erreur sql

J'en déduis qu'il doit y avoir une histoire de format de texte et de conversion à faire!
mais je ne sais vraiment que choisir comme conversion

conv($tetxte, systeme.charset, desktop.charset) ne fonctionne pas , comment indiqué que le texte copié est du hTML si je ne m'abuse pas?

OU alors bloquer le copié/collé dans mon textBox mais là non plus je vois pas

mes champs sont de ce type : hTable.Fields.Add("indications", db.String)

j'espère avoir été clair
merci d'avance de votre aide
jibi
Debian GNU/Linux 11 64-bit

jibi#2 Posté le 8/9/2012 à 00:35:45
codergambas.jimdofree.comerreur de ma part

dans mes copié/collé il y avait des apostrophes => prob dans ma base à cause d'un champ que je n'ai pas quoté!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
IF rRequete.Available = TRUE THEN
chaine = "UPDATE baseCmde SET"
chaine &= " categorie=" & Quote$(sCAT)
chaine &= ",commande=" & Quote$(sCmd)
chaine &= ",options=" & Quote$(sOpt)
''on ne quote pas Indications car sinon la fonction replace ne reconnait pas le retour de ligne : \n
chaine &= ",indications =" & "'" & sIdc & "'" 'ici il faudrait faire comme dans l'exemple ci dessous ==> une idée svp?
IF sBoolR = FALSE THEN
chaine &= " WHERE idTRIE =" & Quote$(sNumL)
ELSE
chaine &= " WHERE idTRIE =" & Quote$(sNumLigneR)
ENDIF
db.Exec(chaine)
ENDIF

et je ne sais pas comment formuler ma requete ci dessus avec le &1,variable comme ci dessous
1
rRequete = DB.Exec("SELECT commande FROM baseCmde WHERE id=&1", sNumLigne)

jibi
Debian GNU/Linux 11 64-bit

jibi#3 Posté le 8/9/2012 à 10:06:47
codergambas.jimdofree.comen faisant comme cela je n'ai plus d'erreur mais l'enregistrement ne s'effectue pas?
1
2
3
4
5
6
7
8
9
IF rRequete.Available = TRUE THEN
IF sBoolR = FALSE THEN
chaine = "Update baseCmde SET categorie = &1, commande = &2, options = &3, indications = &4 WHERE id = &5"
DB.Exec(chaine, sCAT, sCmd, sopt, sIdc, sNumL)
ELSE
chaine = "Update baseCmde SET categorie = &1, commande = &2, options = &3, indications = &4 WHERE id = &5"
DB.Exec(chaine, sCAT, sCmd, sopt, sIdc, sNumLigneR)
ENDIF
ENDIF
une idée?
Debian GNU/Linux 11 64-bit

Jack#4 Posté le 8/9/2012 à 11:29:12
Salut,

En premier je ferai une commande directe pour voir si ça passe.

Utils.db.Exec("Update baseCmde SET categorie = &1, commande = &2, options = &3, indications = &4 WHERE id = &5",sCAT, sCmd, sopt, sIdc, sNumL)

Ceci dit les lignes 3 et 6 sont identiques alors qu'elles devraient être différentes selon que sboolr soit vrai ou faux
Pour un code démocratique nationalisons Gambas.
jibi#5 Posté le 8/9/2012 à 12:48:26
codergambas.jimdofree.commerci de ta réponse
pour les lignes 3 et 6 cela fait double emploi c'est vrai que seule idTRIE change
1
2
3
4
5
6
7
8
IF rRequete.Available = TRUE THEN
chaine = "Update baseCmde SET categorie = &1, commande = &2, options = &3, indications = &4 WHERE id = &5"
IF sBoolR = FALSE THEN
DB.Exec(chaine, sCAT, sCmd, sopt, sIdc, sNumL)
ELSE
DB.Exec(chaine, sCAT, sCmd, sopt, sIdc, sNumLigneR)
ENDIF
ENDIF


sinon en direct c'est pareil

par contre tu ecris :Utils.db.Exec() => qu'est ce que Utils?
Debian GNU/Linux 11 64-bit

Jack#6 Posté le 8/9/2012 à 12:52:50
Excuse moi, c'est une mauvaise manie. C'est db.exec bien sur
Pour un code démocratique nationalisons Gambas.
jibi#7 Posté le 8/9/2012 à 14:09:32
codergambas.jimdofree.comc'est un mystère
ceci fonctionne si je ne rentre pas d'apostrophe, l'enregistrement réussi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
IF rRequete.Available = TRUE THEN
chaine = "UPDATE baseCmde SET"
chaine &= " categorie=" & Quote$(sCAT)
chaine &= ",commande=" & Quote$(sCmd)
chaine &= ",options=" & Quote$(sOpt)
''on ne quote pas Indications car sinon la fonction replace ne reconnait pas le retour de ligne : \n
chaine &= ",indications =" & "'" & sIdc & "'"
IF sBoolR = FALSE THEN
chaine &= " WHERE idTRIE =" & Quote$(sNumL)
ELSE
chaine &= " WHERE idTRIE =" & Quote$(sNumLigneR)
ENDIF
db.Exec(chaine)
ENDIF

Mais cela n'enregistre aucune données
1
2
3
4
5
6
7
8
IF rRequete.Available = TRUE THEN
chaine = "Update baseCmde SET categorie = &1, commande = &2, options = &3, indications = &4 WHERE id = &5"
IF sBoolR = FALSE THEN
DB.Exec(chaine, sCAT, sCmd, sopt, sIdc, sNumL)
ELSE
DB.Exec(chaine, sCAT, sCmd, sopt, sIdc, sNumLigneR)
ENDIF
ENDIF
???????????????????
Debian GNU/Linux 11 64-bit

jibi#8 Posté le 8/9/2012 à 18:05:59
codergambas.jimdofree.comBon , j'ai réinstallé GB3 et maintenant c'est bon ??
le principal c'est que cela fonctionne!
Debian GNU/Linux 11 64-bit

1