2 questions, au secouuur!

florian37 Messages postés 56 Date d'inscription dimanche 13 janvier 2002 Statut Membre Dernière intervention 8 décembre 2008 - 21 août 2002 à 19:49
florian37 Messages postés 56 Date d'inscription dimanche 13 janvier 2002 Statut Membre Dernière intervention 8 décembre 2008 - 27 août 2002 à 19:18
Salut à tous, voila j'ai 2questions:

-Comment faire pour savoir quelle DLL ou OCX est utilisé par mon prog sans regarder les references ou composant un par un?

et ma deuxieme:
-Comment fair pour aditionner plusieur lignes bien precisent dans un champ access?
ex:
aditionner les valeur du champ "numéros" de la ligne 20 à la ligne 35 (les chiffres sont les numéros d'un clef primaire par exemple)

Merci si vous pouvez m'aider :)

13 réponses

cs_Frans Messages postés 38 Date d'inscription vendredi 22 février 2002 Statut Membre Dernière intervention 19 novembre 2003
21 août 2002 à 20:12
Salut,

Pour les dll et ocx, tu peux ouvrir ton fichier vbp dans un éditeur de texte. Tu y trouveras normallement tout ce dont tu as besoin...

Pour ton probleme de somme, il existe (à tester sur Access, je n'en suis plus certain) une fonction sql SUM
Tu fais donc :
SELECT SUM(champ) FROM table WHERE ...

Voilà, j'espere avoir pu t'aider.

A+
0
florian37 Messages postés 56 Date d'inscription dimanche 13 janvier 2002 Statut Membre Dernière intervention 8 décembre 2008
21 août 2002 à 20:35
Merci bien Frans, pour les DLL et OCX c'est impecable,

Pour l'addition des lignes de Champs je voudrais le faire sous VB,
Tu sais comment faire?

Merci A+.
0
cs_Frans Messages postés 38 Date d'inscription vendredi 22 février 2002 Statut Membre Dernière intervention 19 novembre 2003
22 août 2002 à 08:50
Tu dois ouvrir une connexion vers la db, ensuite, tu as 2 possibilités :
- tu écris la SQL directement dans le code
ou
- tu crée une query dans access que tu appelle via ton code VB

Si tu veux, j'ai écrit un petit programme qui fait ca.
Tu n'as qu'à recopier le code ci-dessous dans ton application, après avoir ajouté la référence 'Microsoft ActiveX Data Object 2.5 Library' à ton projet (car j'ai utilisé une connexion ADO) et modifié les parametres liés à la db (emplacement de la db, nom de la table, du champ et de la query):

Private Sub cmd_Query_Click()

' Déclaration des variables locales
Dim cnc_Access As ADODB.Connection
Dim rst_Access As ADODB.Recordset
Dim str_DataSource As String
Dim str_Password As String
Dim str_Provider As String
Dim str_User As String
Dim str_SQL As String

' Traitement

' Définition des informations utiles à la Connexion
str_DataSource = "D:\Tests\VB\Use Query\Test.mdb"
str_Password = ""
str_Provider = "Microsoft.Jet.OLEDB.4.0"
str_User = "Admin"

' Ouverture de la connexion à la db
Set cnc_Access = New ADODB.Connection
cnc_Access.CursorLocation = adUseClient
cnc_Access.Mode = adModeReadWrite + adModeShareDenyNone
cnc_Access.Provider = str_Provider
cnc_Access.ConnectionString = "Data Source=" & str_DataSource
cnc_Access.Open , str_User, str_Password

' ===========================
' Méthode 1: SQL dans le code
' ===========================

' Initialisation du jeu d'enregistrement
Set rst_Access = New ADODB.Recordset

' Construction de la SQL
str_SQL = "SELECT SUM(Test) FROM tbl_Test"
' Ouverture du jeu d'enregistrement
rst_Access.Open str_SQL, cnc_Access, adOpenDynamic, adLockOptimistic
' Traitement de la somme
MsgBox rst_Access.Fields(0).Value
' Fermeture du jeu d'enregistrement
rst_Access.Close: Set rst_Access = Nothing

' ==================================
' Méthode 2: Utilisation d'une query
' ==================================

' Initialisation du jeu d'enregistrement
Set rst_Access = New ADODB.Recordset
' Construction de la SQL
str_SQL = "SELECT * FROM qrq_Test"
' Ouverture du jeu d'enregistrement
rst_Access.Open str_SQL, cnc_Access, adOpenDynamic, adLockOptimistic
' Traitement de la somme
MsgBox rst_Access.Fields(0).Value
' Fermeture du jeu d'enregistrement
rst_Access.Close: Set rst_Access = Nothing

' Fermeture de la connexion
cnc_Access.Close: Set cnc_Access = Nothing

End Sub
0
florian37 Messages postés 56 Date d'inscription dimanche 13 janvier 2002 Statut Membre Dernière intervention 8 décembre 2008
22 août 2002 à 22:38
Merci bien encore une fois Frans,
Mais je suis pas sur que ton code me corresponde exactement,

je cherche à aditionner à partir de la ligne 20 par exemple (20 et le numeros de clef primaire) ou d'un autre chiffre, jusqu'a la derniere ligne, d'un champ,
j'ai ma connection, tout est OK, sauf pour ca, me placer sur la bonne ligne et aditionner le reste.

Un petit truc aussi, dans certaines ligne je n'ai rien, donc il faut que le prog puisse faire la difference des qu'il n'y à rien et aditionner 0 à ce moment la.

Merci encore pour tout, je suis débutant de quelques semaines donc j'ai du mal

:)
:)
0

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

Posez votre question
cs_Frans Messages postés 38 Date d'inscription vendredi 22 février 2002 Statut Membre Dernière intervention 19 novembre 2003
23 août 2002 à 07:54
Aucun probleme, dans ce cas, plutôt que d'utiliser la fonction SUM, tu peux ouvrir un jeu d'enregistrements :
SELECT champ FROM table WHERE champ >= 20
Ensuite, tu n'as qu'à parcourir ton jeu d'enregistrement et fare les addition :

Dim lng_Somme As Long

Do Until rst_Access.EOF
if rst_Access.Fields(0).Value <> vbNullString Then
lng_Somme = lng_Somme + rst_Access.Fields(0).Value
End If
rst_Access.MoveNext
Loop

Tu peux encore employer la fonction SUM suivante SELECT SUM(champ) FROM table WHERE champ >= 20
mais je ne sais pas comment Access va réagir si le champ est null ou non numérique...
0
cs_Frans Messages postés 38 Date d'inscription vendredi 22 février 2002 Statut Membre Dernière intervention 19 novembre 2003
23 août 2002 à 07:54
Aucun probleme, dans ce cas, plutôt que d'utiliser la fonction SUM, tu peux ouvrir un jeu d'enregistrements :
SELECT champ FROM table WHERE champ >= 20
Ensuite, tu n'as qu'à parcourir ton jeu d'enregistrement et fare les addition :

Dim lng_Somme As Long

Do Until rst_Access.EOF
if rst_Access.Fields(0).Value <> vbNullString Then
lng_Somme = lng_Somme + rst_Access.Fields(0).Value
End If
rst_Access.MoveNext
Loop

Tu peux encore employer la fonction SUM suivante SELECT SUM(champ) FROM table WHERE champ >= 20
mais je ne sais pas comment Access va réagir si le champ est null ou non numérique...
0
cs_Frans Messages postés 38 Date d'inscription vendredi 22 février 2002 Statut Membre Dernière intervention 19 novembre 2003
23 août 2002 à 07:54
Aucun probleme, dans ce cas, plutôt que d'utiliser la fonction SUM, tu peux ouvrir un jeu d'enregistrements :
SELECT champ FROM table WHERE champ >= 20
Ensuite, tu n'as qu'à parcourir ton jeu d'enregistrement et fare les addition :

Dim lng_Somme As Long

Do Until rst_Access.EOF
if rst_Access.Fields(0).Value <> vbNullString Then
lng_Somme = lng_Somme + rst_Access.Fields(0).Value
End If
rst_Access.MoveNext
Loop

Tu peux encore employer la fonction SUM suivante SELECT SUM(champ) FROM table WHERE champ >= 20
mais je ne sais pas comment Access va réagir si le champ est null ou non numérique...
0
florian37 Messages postés 56 Date d'inscription dimanche 13 janvier 2002 Statut Membre Dernière intervention 8 décembre 2008
23 août 2002 à 18:51
Merci Frans,
je n'y arrive pas :sad)

Si tu connais une source en français qui fait deja ca ca serrait cool, j'ai bien cherché mais je ne trouve pas...

Ralala, dire que c'est juste la fin de mon projet et que je reste coincé juste pour ca :sad)

Merci encore.
0
cs_Frans Messages postés 38 Date d'inscription vendredi 22 février 2002 Statut Membre Dernière intervention 19 novembre 2003
26 août 2002 à 12:49
Qu'est ce que tu n'arrives pas à faire exactement? Tu arrives à ouvrir ton jeu d'enregistrements? Si pas, essaye de faire une simple instruction u style SELECT * FROM table. Ensuite, une fois que tu arriveras à ouvrir le jeu, il faudra affiner la sql pour obtenir ce que tu désires.
Je veux bien t'aider un maximum mais je ne connais pas la structure de ta db ni l'état d'avancement de ton projet et ce n'est donc pas facile à dire comme ca...
0
florian37 Messages postés 56 Date d'inscription dimanche 13 janvier 2002 Statut Membre Dernière intervention 8 décembre 2008
26 août 2002 à 17:49
J'arrive bien à ouvrir mon jeu,
je recupere mes ligne de champs style move.last mais je sais pas comment me positionner sur une ligne bien precise de mon champ et aditionner les autres jusqu'a la derniere, c'est tout.

J'ai une Db,
je me connecte,
j'ouvre mon jeu,
mais je n'arrive pas à aditionner à partir de la ligne x jusqu'a la derniere.
0
florian37 Messages postés 56 Date d'inscription dimanche 13 janvier 2002 Statut Membre Dernière intervention 8 décembre 2008
26 août 2002 à 20:22
Voila,
j'ai compris comment me rendre à la ligne voulu, en fait CT tout con mais bon, je suis débutant :)

Voila ce que j'ai:

Dim Valeur As Integer
' Positionnement sur le premier enrregistrement valide

resultatADO4.MoveFirst

' Récupération de l'index

Valeur = Text12.Text

' Positionnement sur l'enregistrement correspondant au choix de l'utilisateur

resultatADO4.Move (Valeur - 1)
If Not IsNull(resultatADO4!blanc) Then Text2.Text = (resultatADO4!blanc)

Le text12 est le numero de la ligne à se rendre,
la ce que j'ai besoins c'est d'additionner la suite jusqu'a la derniere ligne, le text2 et la valeur du champ nommé Blanc,
Donc si Text12 est egale à 20 je me met sur la ligne 20, et si le champ Blanc fait 32 par exemple, ba j'affiche 32 dans le text2,
Suffit plus qu'a additionner tout les autres jusqu'a la derniere et de donner le résultat de l'addition dans text2.

Tu comprend Frans?
car j'ai toujours du mal à expliquer :)
0
cs_Frans Messages postés 38 Date d'inscription vendredi 22 février 2002 Statut Membre Dernière intervention 19 novembre 2003
27 août 2002 à 19:08
Oui, je crois que j'ai compris ce qui te reste à faire.
Le plus dur est fait.

Déclare une variable de type long, qui contiendra ton total :

Dim lng_Total As Long

Maintenant, il suffit de boucler sur ton jeu jusqu'à la fin, donc, après l'instruction

resultatADO4.Move (Valeur - 1), tu supprimes la dernière instruction et tu la remplace par le bloc suivant :

Do Until resultatADO4.EOF
If Not IsNull(resultatADO4!blanc) Then lng_Total = lng_Total + resultatADO4!blanc
resultatADO4.MoveNext
Loop
Text2.Text = lng_Total

Normallement, si j'ai pas fait de fautes de frappes, ca devrait fonctionner.
0
florian37 Messages postés 56 Date d'inscription dimanche 13 janvier 2002 Statut Membre Dernière intervention 8 décembre 2008
27 août 2002 à 19:18
ca donne ca:

Private Sub Text2_Change()
Dim LongIndex As Integer
Dim lng_Total As Long
' Positionnement sur le premier enrregistrement valide

resultatADO4.MoveFirst

' Récupération de l'index

LongIndex = Text12.Text

' Positionnement sur l'enregistrement correspondant au choix de l'utilisateur

resultatADO4.Move (LongIndex - 1)
Do Until resultatADO4.EOF
If Not IsNull(resultatADO4!Blanc) Then lng_Total = lng_Total + resultatADO4!Blanc
resultatADO4.MoveNext
Loop
Text2.Text = lng_Total
End Sub

LongIndex est à la palec de valeur, mais ca ne marche pas, j'ai 0 dans mon text2... :sad)
0
Rejoignez-nous