Tuto VB/Access

Fermé
MrSlave Messages postés 2587 Date d'inscription lundi 28 avril 2008 Statut Membre Dernière intervention 26 août 2011 - 5 juin 2008 à 11:53
 Rikkunter - 22 août 2008 à 16:18
Bonjour,

Je dois réaliser une base de temps avec le couple VB6 / Access.

Je recherche donc des tutos car je n'ai jamais utilisé ni l'un, ni l'autre.

Merci.
A voir également:

284 réponses

Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
1 juil. 2008 à 10:39
Oui apparemment c'est bien une fonction récursive qu'il faut faire. Mais tu peux très bien faire appel à une fonction en utilisant un booléan.

En gros et rapidement.

Pour le 1 et 2, ça ne doit pas te poser de problème, tu sais faire.
Pour le 3, il faut faire appel à une fonction qui vérifie
Si la séquence Std1(seq1) est un standard. 
    Si le retour est oui, 
    alors je récupère les séquences seq1
       et je vérifie que STDseq1(seq1.1) est un standard,
         si oui, je recommence avec STDseq1.1(seq1.1.1) ... etc.
         si non, je recommance avec STDseq1.1(seq1.1.2) ... etc.
   si non,
      je vérifie si Std2(seq1) est un standart ...
etc ...


Pas sûr, mais je commencerai comme ça. Ecrire tes conditions ligne par ligne (pas en code, en bon français ou pseudo code) et ensuite fait ta fonction de recherche, également en pseudo code.

;o)

PS: Tu as des nouvelles de Rikki ? l'ai pas beaucoup vu depuis que tu es parti en vacances :-S
0
MrSlave Messages postés 2587 Date d'inscription lundi 28 avril 2008 Statut Membre Dernière intervention 26 août 2011 146
1 juil. 2008 à 10:42
Je vais essayer. :)

Ps : Rikk est en vacances. Et comme elle ne vient pas ici quand elle est chez elle, on est pas près de la revoir.
M'enfin je lui parle de temps en temps quand même. (c'est pratique msn ^^)
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
1 juil. 2008 à 10:47
ok, passe lui le bonjour à l'occaz

;o)
0
MrSlave Messages postés 2587 Date d'inscription lundi 28 avril 2008 Statut Membre Dernière intervention 26 août 2011 146
1 juil. 2008 à 15:03
Pas de problèmes.

Je viens de me rendre compte que je me suis planté sur mes temps, je dois donc revoir un max de truc.
Mais ça simplifie grandement mon calcul de temps final.

En gros, je pensais que tu inscrivait le nom de tes séquences et que tu entrais tous les temps à la fin. C'était un gros bordel pour le calcul final. Mais en fait, à chaque séquence tu dois calculer un temps.
Donc mon projet va être plus lourd (ouverture d'une nouvelle fenêtre à chaque insertion de séquence ...).

Mais pour le calcul final je vais juste avoir à faire :
fonction calcul_temps
récupérer Id
récupérer séquences
vrai = lirepremier
If vrai = true
appel fonction calcul(vrai)
else "ça marche pas :P"

Et puis :
fonction calcul(vrai as boolean)
While vrai = true
if is_standard = 0
tmpséquence = calcul_temps_séquence
tmps = tmps + tmpséquence
vrai = liresuivant
if vrai = false then
end sub
else appel calcul(vrai)
end if
else
récup séquence
vrai = lirepremier
If vrai = true
appel calcul(vrai)
else "ça marche toujours pas"
endif
endif
wend


Je ne sais pas si c'est très clair, mais je pense que ça peut marcher. (ce n'est qu'un petit algo, hein ! J'ai encore des modifs à faire)
0

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

Posez votre question
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
1 juil. 2008 à 15:34
fonction calcul(vrai as boolean)

Pourquoi envoyer vrai à la fonction calcul ? cha me chiffonne cha mouai !!!
0
MrSlave Messages postés 2587 Date d'inscription lundi 28 avril 2008 Statut Membre Dernière intervention 26 août 2011 146
1 juil. 2008 à 15:40
Oupsss. J'ai écris quelques lignes sur une feuille, mais ça je l'ai écris de tête.
C'est vrai que ça ne sert à rien. ^^

Je peux par exemple définir vrai à true au début pour qu'il entre dans le while.
De toute façon, lorsque le vrai me sert pour un if, je lui dit directement ce qu'il doit faire.

'tain, je suis claqué. Heureusement que je fini dans 20 min. :P
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
1 juil. 2008 à 15:44
lol ... pas assez fort le kawa c't'aprm

;o)
0
MrSlave Messages postés 2587 Date d'inscription lundi 28 avril 2008 Statut Membre Dernière intervention 26 août 2011 146
1 juil. 2008 à 16:00
Je n'en avais même pas pris, c'est peut être pour ça. ^^

Bon je ne vais pas tarder à y aller moi.

Bonne soirée, pis travailles pas trop. ;)
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
1 juil. 2008 à 16:02
merci, bonne soirée aussi

;o)
0
MrSlave Messages postés 2587 Date d'inscription lundi 28 avril 2008 Statut Membre Dernière intervention 26 août 2011 146
2 juil. 2008 à 08:26
Salut Polux, la forme ?

C'est kewl les retours de vacances.
J'étais largué avant de partir, pis en fait mon projet est de plus en plus simple.

En fait pour le calcul du temps, ça n'est pas du tout ce que je pensais hier.
En fait chaque standard a un temps. Donc si une séquence est un standard, alors il suffit d'ajouter son temps au premier standard.

Mon boss était pas là hier. Aujourd'hui il arrive, prend 5min pour me réexpliquer et c'est reparti.

Vé me prendre un kawa et je serais d'attaque. \o/
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
2 juil. 2008 à 08:36
Salut,

Ava bien merci ...

Ton projet te semblait compliqué avant les vacances parce que tu avais la tête dans le guidon comme on dit. Il faut prendre parfois du recul pour y voir plus clair ensuite.

Vais aussi me mettre un kawa au fond du gosier.

;o)
0
MrSlave Messages postés 2587 Date d'inscription lundi 28 avril 2008 Statut Membre Dernière intervention 26 août 2011 146
3 juil. 2008 à 14:08
Salut Polux.

J'ai de nouveau une question. :P

Quand tu charges ton datagrid, tu utilise une requete "select champ1, champ2 from table".
Mais est ce qu'il serait possible de ne faire apparaître que le champ1 par exemple ?

Parce que j'aurais un champ qui sera une clé étrangère en gros. Il pointera sur l'id d'une autre table.
Je n'ai pas envie de l'afficher, mais je veux pouvoir l'insérer à chaque fois que j'entrerais un nouvel enregistrement dans ma table.
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
3 juil. 2008 à 14:10
Oui tu peux. C'est le résultat de la requête que tu affiches, donc si tu fais "Select champ1 form table" tu n'auras que le champ1.

;o)
0
MrSlave Messages postés 2587 Date d'inscription lundi 28 avril 2008 Statut Membre Dernière intervention 26 août 2011 146
3 juil. 2008 à 14:12
Oui mais dans ce cas je ne peux pas modifier le champ qui m'intéresse.

Pour le moment je fais par exemple :
Form3.adoData3.Recordset![ja] = Trim(Me.txtJa.Text)

J'aimerais juste le rendre invisible.
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
3 juil. 2008 à 14:16
Ah ça je ne sais pas .... je ne sais pas si on peut faire : datagrid1.col(1).visible = false ... par exemple.
0
MrSlave Messages postés 2587 Date d'inscription lundi 28 avril 2008 Statut Membre Dernière intervention 26 août 2011 146
3 juil. 2008 à 14:21
Ca n'existe même pas. ^^

Par contre, Me.DataGrid1.Columns(1).Visible = False existe mais ne fonctionne pas.
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
3 juil. 2008 à 14:30
Que mon truc n'existe pas, ça m'étonne pas .. mdrrr j'ai mis ça de tête sans vérifier ... j'avais 1 chance sur un gros paquet d'être à coté de la plaque ... ^^

Plus étrange que Me.DataGrid1.Columns(1).Visible = False ne fonctionne pas. Je ne peux pas le vérifier là ... dsl. Il faut peut être une condition. As-tu regardé dans l'aide en ligne (F1) ?

;o)
0
MrSlave Messages postés 2587 Date d'inscription lundi 28 avril 2008 Statut Membre Dernière intervention 26 août 2011 146
3 juil. 2008 à 14:32
Je n'ai pas accès à l'aide en ligne.
"La condition msdn n'existe pas." ^^

Et vu que je n'ai pas envie d'aller chercher le cd qui est je ne sais où ...
Je vais bien trouver quelque chose sur le net. ;)
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
3 juil. 2008 à 14:41
regarde sur vbfrance dans les exemples et astuces proposés.

;o)
0
MrSlave Messages postés 2587 Date d'inscription lundi 28 avril 2008 Statut Membre Dernière intervention 26 août 2011 146
4 juil. 2008 à 08:18
Dernière journée avant le we. \o/
Le Mans ce soir et Paris demain.

Salut Polux. Comment vas tu ? (je ne demande pas de nouvelles des autres parce que de toute façon il n'y a plus que nous 2 sur ce topic ^^)

Je me posais une petite question. (Encore ... :P )

A quel moment est créé l'enregistrement lorsqu'on fait :
Form3.adoData3.Recordset.AddNew
    Form3.adoData3.Recordset![valeur] = Trim(Me.txtval.Text)
    Form3.adoData3.Recordset![ja] = Trim(Me.txtJa.Text)

Parce que j'ai mis ça dans un sub. J'ai également un appel à une fonction qui récupère le dernier id entré et va l'insérer dans le dernier enregistrement d'une autre table. (celui que j'ai créé juste au dessus).

Mais ça ne fonctionne pas. :S
Alors je me suis dit que peut être l'enregistrement n'était pas créé directement.
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
4 juil. 2008 à 08:34
Bonjour,

Effectivement, on doit seul sur ce topic :D

En principe l'enregistrement se fait avec le AddNew ... quand tu appelles la procèdure qui contient ce code. Je vais peut être dire une connerie (à cette heure, c'est fort probable) ... ne faut-il pas terminer par un Update ?

;o)
0
MrSlave Messages postés 2587 Date d'inscription lundi 28 avril 2008 Statut Membre Dernière intervention 26 août 2011 146
4 juil. 2008 à 08:43
Comme je l'ai dit, j'ai également dans le permier sub un appel à un autre. (bon c'est vrai j'ai dis une fonction ^^)
ModESEnt_STD.initTableEnt_STD
    query = "SELECT max(id_std) from ent_std"
    Set rs = New ADODB.Recordset
    Vrai = ModuleBdD.OpenRecordset(query, rs)
    ValueId = rs.Fields(0)
    Set rs = Nothing
    
    ModESCal.initTableCal
    query = "SELECT max(num_ligne) from calcul_ligne"
    Set rs = New ADODB.Recordset
    Vrai = ModuleBdD.OpenRecordset(query, rs)
    ValueNum = rs.Fields(0)
    Set rs = Nothing
    
    Set rs = New ADODB.Recordset
    If Vrai = True Then
        rs.Open "Update calcul_ligne Set id_std = " & ValueId & " Where num_ligne= " & ValueNum, ModuleBdD.cnx
    Else
        MsgBox "Un problème est survenu durant le calcul du temps"
    End If
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
4 juil. 2008 à 08:53
Je comprends pas tout là. Dsl, mais j'ai le neurone pas encore réveillé.

Ici :
Form3.adoData3.Recordset.AddNew
    Form3.adoData3.Recordset![valeur] = Trim(Me.txtval.Text)
    Form3.adoData3.Recordset![ja] = Trim(Me.txtJa.Text)

Tu fais un addnew à travers un objet adodc qui a un lien direct avec une table de la base ?

Et dans le post 558 (eh oui déjà ...lol) tu fais un Update avec un recordset via ADODB.

A quel niveau l'enregistrement ne se fait pas ?
0
MrSlave Messages postés 2587 Date d'inscription lundi 28 avril 2008 Statut Membre Dernière intervention 26 août 2011 146
4 juil. 2008 à 09:00
Bon je vais reprendre :
Private Sub btAjout_Click()
    
    Form3.adoData3.Recordset.AddNew
    Form3.adoData3.Recordset![valeur] = Trim(Me.txtval.Text)
    Form3.adoData3.Recordset![ja] = Trim(Me.txtJa.Text)
       
    ModfrmForm3.AjId
    
End Sub

Public Sub AjId()
Dim Vrai As Boolean
Dim ValueId, ValueNum As Long

    ModESEnt_STD.initTableEnt_STD
    query = "SELECT max(id_std) from ent_std"
    Set rs = New ADODB.Recordset
    Vrai = ModuleBdD.OpenRecordset(query, rs)
    ValueId = rs.Fields(0)
    Set rs = Nothing
    
    ModESCal.initTableCal
    query = "SELECT max(num_ligne) from calcul_ligne"
    Set rs = New ADODB.Recordset
    Vrai = ModuleBdD.OpenRecordset(query, rs)
    ValueNum = rs.Fields(0)
    Set rs = Nothing
    
    Set rs = New ADODB.Recordset
    If Vrai = True Then
        rs.Open "Update calcul_ligne Set id_std = " & ValueId & " Where num_ligne= " & ValueNum, ModuleBdD.cnx
    Else
        MsgBox "Un problème est survenu durant le calcul du temps"
    End If

End Sub

C'est plus clair ? ^^

En fait quant j'ajoute un nouvel enregistrement, il ne le prend pas en compte pour l'ajout de l'id avec l'update. Parce qu'il me met l'id sur l'enregistrement précédent.
Ca donne :
Num - Id - Ja - Valeur
42 - 12 - 32 - 54
43 - 0 - 56 - 89

Au lieu de m'ajouter l'id (par exemple 12) au dernier enregistrement, il me l'ajoute à la ligne précédente.
C'est pour ça que j'ai l'impression qu'il y a un décalage avec le AddNew.
0