fehmichebaane
Messages postés43Date d'inscriptionlundi 27 février 2006StatutMembreDernière intervention27 juin 2006
-
18 avril 2006 à 16:31
fehmichebaane
Messages postés43Date d'inscriptionlundi 27 février 2006StatutMembreDernière intervention27 juin 2006
-
20 avril 2006 à 10:30
bonjour à tous
j'ai 2 table access de la forme suivante
table 1: table 2:
id valeur val code
1 23.3 21 2-0
2 22.6 22 3-0
3 25.7 23 4-0
4 28.6 24 5-0
5 30.5 25 6-0
je veux chercher pour chaque valeur de la table 1 le bon code dans la table 2 cad:
par exemple pour id =1 on a valeur =23.3 qui est 23<23.3<24 donc on retourne le code 5-0
et je veux récupurer une table de la forme suivante:
table 3
id code
1 5-0
2 4-0
3 6-0
4 6-0
je veux faire ca avec un code source vb 6.0
merci de votre aide
fehmichebaane
Messages postés43Date d'inscriptionlundi 27 février 2006StatutMembreDernière intervention27 juin 2006 18 avril 2006 à 17:58
merci pour votre réponse mais je veut formuler ma question car le résultat souhaitée est encore introuvable :
j'ai 2 table access de la forme suivante et de taille différentes
table 1: table 2:
id valeur val code
1 23.3 21.2 2-0
2 22.6 22.8 3-0
3 25.7 23.3 4-0
4 28.6 24 .4 5-0
5 30.5 25.1 6-0
6 19.3
7 24.1
8 23.5
9 15.3
10 19.2
.........
je veux chercher pour chaque valeur de la table 1 le bon code dans la table 2 cad:
par exemple pour id =1 on a valeur =23.3 qui est 23.3<23.3<24 .4donc on retourne le code 5-0
et je veux récupurer une table de la forme suivante:
table 3
id code
1 5-0
2 4-0
3 6-0
4 6-0
..........
je veux faire ca avec un code source vb 6.0
merci de votre aide
cs_jperre
Messages postés268Date d'inscriptionlundi 9 janvier 2006StatutMembreDernière intervention19 janvier 20172 18 avril 2006 à 18:30
Dim oCnn As ADODB.Connection, oCmd As ADODB.Command
Set oCnn=New ADODB.Connection
oCnn.ConnectionString="Provider=Microsoft.Jet.OLEDB.3.51;FileName=CheminEtNomDeLaBaseAccess;"
oCnn.Open
Set oCmd=New ADODB.Command
oCmd.ActiveConnection=oCnn
oCmd.CommandText="ALTER TABLE table1 ADD COLUMN Code TEXT(5);"
oCmd.Execute
oCmd.CommandText="ALTER TABLE table1 ADD COLUMN [val] BYTE;"
oCmd.Execute
oCmd.CommandText="UPDATE table1 SET [val]=IIf(valeur>Int(valeur),Int(valeur)+1,valeur);"
oCmd.Execute
oCmd.CommandText="UPDATE table1 INNER JOIN table2 ON table1.[val]=table2.[val] SET table1.Code=table2.code;"
oCmd.Execute
oCmd.CommandText="ALTER TABLE table1 DROP COLUMN [val];"
oCmd.Execute
oCnn.Close
Set oCnn=Nothing
J'ajoute que, à la fin de l'opération, dans la table 1 on bien pour chaque id la valeur du champ code correspondante, pas besoin d'une table supplémentaire. Pour utiliser l'objet ADO, il faut charger sa référence dans le projet VB6. Tout ceci ne se devine pas, il faut un peu étudier l'aide MSDN vant de l'utiliser.
Vous n’avez pas trouvé la réponse que vous recherchez ?
fehmichebaane
Messages postés43Date d'inscriptionlundi 27 février 2006StatutMembreDernière intervention27 juin 2006 19 avril 2006 à 09:54
salut,
j'ai pas encore trouver la solution désirée mais je vous informe que le champ val de la table 2 contient de valeur réels et aussi les tailles de 2 tables sont différents
cs_jperre
Messages postés268Date d'inscriptionlundi 9 janvier 2006StatutMembreDernière intervention19 janvier 20172 19 avril 2006 à 13:40
Effectivement, je n'avais pas regardé de plus prêt le second message, toutefois, je ne comprend pas votre exemple (valeur =23.3 qui est 23.3<23.3<24.4), pour moi ce n'est pas logique : 23.3=23.3 donc j'affecterais le code 4-0 à l'enregistrement .
Dans votre cas, il n'y a pas de solution en SQL, il faut passer en traitement séquenciel, ajouter un champ code à la table1, et ensuite ouvrir un recordset (rsTable1) avec cette table, puis lire les enregistrements un par un avec MoveFirst, puis MoveNext. Pour chaque enregistrement lu, il faut ouvrir un recordset (rsTable2) avec une requête de sélection dans la table 2 "SELECT Min([val]) As ValMini, Code FROM table2 WHERE [val]>=" & CStr(rsTable1("valeur")) & " GROUP BY Code;", faire MoveFirst sur le recordset rsTable2, puis affecter la valeur du champ "code" de rsTable2 au champ correspondant de rsTable1 (rsTable1.Edit puis rsTable1("Code")=rsTable2("Code") et enfin rsTable1.Update). Après lecture, rsTable2 est fermé avec Close et on passe à l'enregistrement suivant de la table1.
fehmichebaane
Messages postés43Date d'inscriptionlundi 27 février 2006StatutMembreDernière intervention27 juin 2006 20 avril 2006 à 10:30
bonjour
merci pour l'idée ,j'ai programmé ca et j' ai testé avesc de val entier mais avec les nombre réel
et lorsque que j'exécute l'application il renvoie l'erreur suivante :
erreur de syntaxe :virgule dans l'expréssion
[val]>=" 23,3"
et lorsque j'ajoute les cotes ' :
WHERE [val]>='" & CStr(rsTable1("valeur")) & "' GROUP BY Code;
l'erreur devient la suivante :
type de donneé imcompatible
j'ai sais que c'est une erreur facile à résoudre mais j'ai pas le trouver
merci de m'aider de nouveau car je débutant dans la programmation