Insersion entier dans une base de données Access depuis VB6

Résolu
casilog Messages postés 11 Date d'inscription dimanche 4 février 2007 Statut Membre Dernière intervention 21 mars 2007 - 8 févr. 2007 à 16:48
casilog Messages postés 11 Date d'inscription dimanche 4 février 2007 Statut Membre Dernière intervention 21 mars 2007 - 11 févr. 2007 à 16:47
Bonjour,

On a une table Access avec un champ StockMag de type numeric.
Nous cherchons à insérer des lignes dans la table depuis VB6.
Notre requete est la suivante:
sql1 = "INSERT INTO stockmagCS120 VALUES ('CS120',#" & Format(date_calcul, "mm/dd/yyyy") & "#,stock)"
Set rsClient = cn.Execute(sql1)

où Stock est de type Integer (Dim Stock As integer)

VB nous affiche un message d'erreur disant que tous les champs ne sont pas renseignés, alors si on remplace Stock par 8 par exemple, ça fonctionne...

Merci d'avance

9 réponses

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
8 févr. 2007 à 16:53
Si stock est une variable de ton programme :

sql1 = "INSERT INTO stockmagCS120 VALUES ('CS120',#" & Format(date_calcul, "mm/dd/yyyy") & "#," & stock & ")"

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
3
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
8 févr. 2007 à 18:55
Alors même principe avec une petite subtilité de plus. Il faut encadrer la chaine de " ou de '
Et ma petite phrase fétiche :

Sa ta chaine doit contenir des " elle doit etre encadrée de ', au contraire si elle doit contenir des ' elle doit etre encadrée de "

Ici on va prendre la cas le plus simple et encadrer la chaine de '

sql = "SELECT date_stock_mag FROM stockmag WHERE Mag= ' " & nom_mag & "'"

---- Sevyc64  (alias Casy) ----<hr size ="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
3
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
8 févr. 2007 à 16:53
Salut,

Est-ce que tu passe bien une valeur à stock ?
Insère une MsgBox avant ta requête pour vérifier que Stock contient une valeur...

A+
Exploreur
0
casilog Messages postés 11 Date d'inscription dimanche 4 février 2007 Statut Membre Dernière intervention 21 mars 2007
8 févr. 2007 à 18:49
Merci

Super ça marche!!
Mais nous avons le même problème pour les string:

Dim nom_mag as string
nom_mag="CS120"
sql = "SELECT date_stock_mag FROM stockmag WHERE Mag=nom_mag"
Set rsClient = cn.Execute(sql)

Le champ de la table stockmag est un texte dans Access
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
casilog Messages postés 11 Date d'inscription dimanche 4 février 2007 Statut Membre Dernière intervention 21 mars 2007
10 févr. 2007 à 11:54
Bonjour,

Est-ce normal que la syntaxe pour l'insertion d'un réel soit différente de celle pour l'insertion d'un entier??

sql1 = "INSERT INTO stockmagCS120 VALUES ('CS120',#" & Format(date_calcul, "mm/dd/yyyy") & "#," & stock & ")"

Si stock est un réel ça ne marche plus...
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
10 févr. 2007 à 13:00
non normalement si les types de variables correspondent ça doit marcher.

Il faut que ton champ dans Access soit déclaré en Réel sinple ou double suivant ce que tu veux. il faut que ta variable Stock corresponde au champ. Single pour un champ réel simple, Double pour un champ réel double.

Il ne doit pas y avoir de soucis.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
0
casilog Messages postés 11 Date d'inscription dimanche 4 février 2007 Statut Membre Dernière intervention 21 mars 2007
11 févr. 2007 à 14:18
Nous n'arrivons toujours pas à inserer les valeurs dans la table.

Nous avons créé la table suivante :
sql_create = "Create Table calcul_previsions (date_sortie DATE PRIMARY KEY, Coeff_jour REAL)"
Set rsClient = cn.Execute(sql_create)

La requete d'insertion :
Dim CLun AS Single
sql2 = "INSERT INTO calcul_previsions VALUES (#" & Format(date_boucle1, "mm/dd/yyyy") & "#," & CLun & ");"

Nous avons egalement essayé avec CLun AS Double et Coeff_jour DOUBLE PRECISION

Chaque fois VB nous dit "Le nombre de valeurs dans la requete doit coincider avec le nombre de champs destination"

Nous pensons que cela peut etre dû à une incompatibilité entre les caracteres de separation Access et VB ( un point sous access et une virgule sous vb6) mais on n'arrive pas à le changer

merci d'avance
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
11 févr. 2007 à 14:47
Pourtant tes requettes sont correctes. Je les ai essayer sous Access et elles marchent correctement.

Je ne pense pas que ça vienne du point ou de la virgule. Car ils n'intervienne que lorque on utilise la représentation sous forme de chaine du nombre (affichage ou saisie). Ici tout se traite avec nombres eux-mêmes et un nombre sous forme de nombre ne comporte pas de symbole décimal.

A pire va dans les paramètres régionnaux de Windows et modifie le séparateur décimal en "." puis refait un essai pour voir (après avoir relancer VB pour etre sur qu'il a pris en compte le changement).

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
0
casilog Messages postés 11 Date d'inscription dimanche 4 février 2007 Statut Membre Dernière intervention 21 mars 2007
11 févr. 2007 à 16:47
Nous avons réussi à faire marcher notre requete avec l'instruction:
Dim CLun as Double
CLun = Replace(CStr(CLun), ",", ".")

sql2 = "INSERT INTO calcul_previsions VALUES (#" & Format(date_boucle1, "mm/dd/yyyy") & "#," & CLun & ");"

Si le coefficient CLun est inférieur à 0,1 (avec un 0 après la virgule par ex 0,085), ça ne marche plus....

Merci d'avance
0
Rejoignez-nous