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
4 juil. 2008 à 09:07
As-tu passé le code pas à pas pour voir ce que récupère les 2 requêtes ? le problème vient peut être de la.

Arrêt le code aussi avant le ModfrmForm3.AjId et regarde dans la base si l'addnew a bien fonctionné.

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:17
Le nouvel enregistrement n'est pas créé avec le AddNew.

Donc la valeur récupérée par "SELECT max(num_ligne) from calcul_ligne" est celle du dernier enregistrement, mais pas celui que je veux. Mon sub ajout fonctionne bien, mais comme l'enregistrement n'est pas créé, l'id est ajouté à la mauvaise ligne.

En fait, c'est bizarre parce que je ne peux voir le dernier enregistrement que lorsque je ferme ma fenêtre.
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 à 09:23
as tu essayé de faire:
Form3.adoData3.Recordset.AddNew
    Form3.adoData3.Recordset![valeur] = Trim(Me.txtval.Text)
    Form3.adoData3.Recordset![ja] = Trim(Me.txtJa.Text)
    Form3.adoData3.Recordset.UpDate

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:26
Tu es un génie. :)

Merci encore une fois de ton aide.
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
4 juil. 2008 à 09:29
Eh oui ... dommage que tu sois le seul à le reconnaitre ... mdrrrrrrrr

C'est toujours avec plaisir ...

;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 à 09:33
Hu ? Oô

Je ne voudrais pas remettre en cause ta suprême intelligence, mais en fait ça ne marche pas.

J'ai pas tout compris là.
Ca a marché un coup et ça ne marche plus. S'quoi cette merde ? oô
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 à 09:45
Arrfff c'était trop beau .... m'enfin j'aurai rêvé 2 à 3 minutes ... ^^

refait la boucle pas à pas pour bien voir ce qui se passe et vérifie en base que tout se passe bien ..
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:49
Je comprend de moins en moins.

Lorsque j'ai les points d'arrêt, pas de problème ça marche niquel. Mais dès que je les enlève, l'enregistrement est ajouté mais pas l'id.

Bizarre, vous avez dit bizarre .... Oô

EDIT : j'ai l'impression qu'il attend quelque chose.
Lorsque j'ajoute un nouvel enregistrement, l'id est ajouté.
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 à 09:50
oula ... tout se passe bien quand tu le fais pas à pas ??? et ça se passe mal en mode normal ?
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:53
Cf mon EDIT du message précédent.

Il ajoute l'id quand je rajoute un enregistrement.

Ex :
num - id - val - ja
42 - 0 - 12 - 12

Je rajoute un enregistrement :
42 - 9 - 12 - 12
43 - 0 - 56 - 45

Mais l'id qu'il rajoute est bon. :S
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 à 09:56
Mais quand tu fais pas à pas, ça marche bien ?
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:56
J'ai pas testé, mais avec les points d'arrêt oui.

Atta je teste en pas à pas et je te redis ça.

EDIT : oui, ça marche en pas à pas.
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 à 10:04
c'est que le système va plus vite que la base. Mets un sleep 2000 apreès Form3.adoData3.Recordset.UpDate.

et test

;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 à 10:12
Euh .... je veux bien.

Mais ça marche comment ? :P

J'ai essayé avec un sleep 2000, un sleep (2000) mais il me met "procédure non définie".
Ce n'est pas une fonction prédéfinie ?
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 à 10:14
ben voui .... sleep permet de faire une pause en principe ... hummm je vais fouiller sur le net.

je re

;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 à 10:15
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 à 10:17
pfffff, il faut déclaré l'api ... j'chu nul aussi des fois

Declare Sub Sleep Lib "kernel32" ( _
                 ByVal dwMilliseconds As Long)

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 à 10:19
Ouaip et là ça fonctionne. :)
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 à 10:22
en fait, le code VB s'exécute plus vite que la mise à jour de la base. Il faut savoir qu'une liaison ADODB est plus rapide qu'une liaison faite avec un objet.

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

Il me semble que tu m'as déjà donné cette réponse mais je n'arrive pas à la retrouver.

J'ai une erreur : "Cette opération n'est pas autorisée si l'objet est ouvert" dans (sur le 1er update) :
Public Function InsertionTop(ByVal topDeb As String, ByVal topFin As String) As Boolean
Dim Vrai As Boolean
Dim query As String
Dim ValueId 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
    
    'Set rs = New ADODB.Recordset
    If Vrai = True Then
        rs.Open "Update ent_std Set top_debut = '" & topDeb & "' Where id_std= " & ValueId, ModuleBdD.cnx
    Else
        MsgBox "Un problème est survenu durant l'insertion du top début"
    End If
        
    If Vrai = True Then
        rs.Open "Update ent_std Set top_fin = '" & topFin & "' Where id_std= " & ValueId, ModuleBdD.cnx
    Else
        MsgBox "Un problème est survenu durant l'insertion du top fin"
    End If
    
End Function


Est ce que tu as une idée d'où peut provenir l'erreur ?

Merci
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
7 juil. 2008 à 08:32
Salut, ça va merci et toi ?

Il faut peut être fermer le recordset et en ouvrir un autre à chaque opération. Attention, "Set rs = Nothing" ne ferme pas le recordset. Il libère l'objet rs, c'est comme un destructeur en POO ou java. Le "Set rs = new ADODB.Recordset" étant l'instanciation du constructeur de la classe ADODB.
Il faut faire, je pense:
Set rs = new ADODB.Recordset
rs.open ...
...
rs.Close
Set rs = Nothing

pour chaque commande sql.

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

Je te remercie.

Ps : 'tain comment je suis mort moi. :(
Si je cumule les 3 dernières nuits j'ai pas dormi plus de 10h, pis je conduisais sur 700 bornes.

Mais bon, la Japan Expo était franchement exceptionnelle. On a déjà décidé d'y retourner mais en cosplay cette fois. :)
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
7 juil. 2008 à 08:48
Bah t'inkiète ... la semaine est faite pour qu'on se repose du week end, sinon à quoi elle servirait ? hein ?

;o)

0
MrSlave Messages postés 2587 Date d'inscription lundi 28 avril 2008 Statut Membre Dernière intervention 26 août 2011 146
7 juil. 2008 à 14:12
Ouaip, j'suis bien d'accord. :)

Euh ... j'ai encore un petit problème. :P
Je récupère certaines info dans ma table avec un recordset et j'aimerais pouvoir les traiter dans l'ordre, d'abord le premier ...
J'ai vu qu'il existait des méthodes pour ça (MoveFirst, MoveNext ...) mais j'ai une erreur sur le premier MoveFirst du type : "Erreur de compilation : méthode ou variable attendue."

Public Sub stand(ByVal valueId As Long)
Dim query, id_seq As String
Dim Vrai As Boolean
Dim tmps, tmpstot As Long
Dim is_std As Long
Dim idseq As Long
    
    ModESSeq_std.initTableSeq_STD
    query = "SELECT * from seq_std where id_std = " & valueId
    Set rs = New ADODB.Recordset
    Vrai = ModuleBdD.OpenRecordset(query, rs)
   
    Vrai = rs.MoveFirst
    While Vrai = True
        is_std = ModESSeq_std.getis_std
        If is_std = 0 Then
            Vrai = rs.MoveNext
            If Vrai = False Then
                tmps = ModESCal.calcM1
                tmpstot = tmpstot + tmps
            End If
        Else
            idseq = ModESSeq_std.getIdSeq
            valueId = ModESSeq_std.searchIdByItem(id_seq, idseq)
            stand (valueId)
        End If
        Vrai = rs.MoveNext
        If Vrai = False Then
            tmps = ModESCal.calcM1
            tmpstot = tmpstot + tmps
        End If
    Wend

    MsgBox "tmpstot : " & tmpstot

End Sub


Est ce que tu aurais une idée de la provenance de cette erreur ?

Merci
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
7 juil. 2008 à 14:23
Si tu as gardé les méthodes de lecture (LirePremier, LireSuivant etc ...) dans le moduleBdd, elles sont faites pour ça.
Il suffit de leur passer le recordset en paramètre. Dans le module de données ModESSeq_std, tu dois également avoir les méthodes LirePremier LireSuivant etc ... qui ensuite passent par le moduleBdd.
Il faut faire :
vrai = ModESSeq_std.LirePremier(rs)
While vrai = True
   is_std = ModESSeq_std.getis_std
   If is_std = 0 Then
      vrai = ModESSeq_std.LireSuivant(rs)
.... etc
vrai = ModESSeq_std.LireSuivant(rs)
wend


;o)


0
MrSlave Messages postés 2587 Date d'inscription lundi 28 avril 2008 Statut Membre Dernière intervention 26 août 2011 146
7 juil. 2008 à 14:26
Ah voui, pas bête. ^^

Merci. :)
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
7 juil. 2008 à 14:34
Merci ... ôO

0
MrSlave Messages postés 2587 Date d'inscription lundi 28 avril 2008 Statut Membre Dernière intervention 26 août 2011 146
7 juil. 2008 à 14:38
ôO

Keskispas ? Oô

Ps : erf, maintenant j'ai vrai = false. xD
/me mène l'enquête.
0