FabriceGuezennec
Messages postés2Date d'inscriptiondimanche 23 septembre 2007StatutMembreDernière intervention25 septembre 2007
-
23 sept. 2007 à 21:25
nhervagault
Messages postés6063Date d'inscriptiondimanche 13 avril 2003StatutMembreDernière intervention15 juillet 2011
-
25 sept. 2007 à 20:47
Bonjour,
Comment allez vous ?
J'aurais besoin d'un coup de main sur un problème d'insertion de données.
Je développe une routine qui ouvre un fichier texte (séparateur: tabulation), récupère les données des différents champs dans une variable tableau et doit insérer chaque enregistrement dans une table SQL Server Express intégrée à mon projet. Je précise que tous les champs de la table sont des champs texte.
"INSERT INTO Test.Table1(Entite,Code,Compte,Piece,DateEmission,DateEcheance,Doc,FactureProjet,Montant1,Devise,Montant2,Montant3,Description,Livre) values (''"
La répupération des valeurs se passe bien et il semble que ce soit de même pour la construction de la chaîne SQL.
Par contre, à l'exécution de cette chaîne, je reçois le message d'erreur "Incorrect syntax near '001001' " où
'001001' correspond à la valeur devant être insérée dans le premier champ.
J'ai vérifié et revérifié mon code, je ne trouve pas la faille et j'y perd le (peu) de latin binaire que je connaisse.
Je serais vraiment très reconnaissant à celle ou celui qui m'aidera à lever cet obstacle.
nhervagault
Messages postés6063Date d'inscriptiondimanche 13 avril 2003StatutMembreDernière intervention15 juillet 201137 23 sept. 2007 à 22:52
Salut,
Le probleme est peu etre du au type de données.
Ta requete semble fausse, mais peut être sur le site il semble avoir un doublage de ' alors que cela n'est pas nécéssaire.
Une solution est de mettre ta requete dans l'anayseur de requete SQL SERVER,
sans management studio express (par exemple) ou un autre outil.
Il y a des chances que l'erreur sera levée.
Met un point d'arret pour choper la valeur de ta requete ca sera mieux que des messagebox.
Sinon le top, c'est de mettre en place des parametres nommés, au niveua type et sécurité du programme.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 24 sept. 2007 à 00:24
Salut
Vérifie le type de donnée de chacun de tes champs dans la base de données, ce sont ces types qui dictent le format d'insertion :
- Type chaine : La donnée doit être encadré par des apostrophes '
- Type date : La donnée doit être encadré par des dièses #
- Type Numérique : Pas d'encadrement
Il va donc surement revoir tes
StrSQL = StrSQL + "'',''"
systématiques
De plus, en remettant en forme cette ligne, je m'aperçois qu'il y a des apostrophes en trop : à corriger :
StrSQL = StrSQL + "','"
Pourquoi veux-tu les doubler ?
Le seul cas où il faut les doubler, c'est quand la chaine que tu veux insérer contient elle-même un apostrophe. Voir les milliers de réponses à cette question dans le forum
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
FabriceGuezennec
Messages postés2Date d'inscriptiondimanche 23 septembre 2007StatutMembreDernière intervention25 septembre 2007 25 sept. 2007 à 20:14
Rebonjour
Tout d'abord, je dois des excuses à tout le monde ...
J'ai lu les réponses avec intérêt, je me suis penché sur mon code et j'ai trouvé deux raisons pour lesquelles ce message d'erreur apparaît:
1. Il y a effectivement trop d'apostrophes. J'aurais pu y penser.
2. Les erreurs proviennent du fait que des apostrophes sont incluses dans les valeurs d'un des champ texte, d'où la nécessité de prévoir un traitement avant d'exécuter la chaîne SQL. Là aussi, j'aurais du y penser
Bref, ma boucle fonctionne sauf que ... je suis allé vérifier par après si les données étaient effectivement insérées, ce qui n'est pas le cas, tous les champs sont en valeur null.
Je ne dirais pas que je désespère mais je suis pour le moins frustré