A voir également:
- Tuto VB/Access
- Vb - Télécharger - Langages
- Tuto tableau croisé dynamique - Guide
- Tuto torrent - Guide
- Tuto chromecast - Guide
- Tuto rufus windows 11 - Guide
284 réponses
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é.
Arrêt le code aussi avant le ModfrmForm3.AjId et regarde dans la base si l'addnew a bien fonctionné.
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.
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.
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Eh oui ... dommage que tu sois le seul à le reconnaitre ... mdrrrrrrrr
C'est toujours avec plaisir ...
;o)
C'est toujours avec plaisir ...
;o)
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ô
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ô
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 ..
refait la boucle pas à pas pour bien voir ce qui se passe et vérifie en base que tout se passe bien ..
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é.
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é.
oula ... tout se passe bien quand tu le fais pas à pas ??? et ça se passe mal en mode normal ?
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)
et test
;o)
ben voui .... sleep permet de faire une pause en principe ... hummm je vais fouiller sur le net.
je re
;o)
je re
;o)
pfffff, il faut déclaré l'api ... j'chu nul aussi des fois
Declare Sub Sleep Lib "kernel32" ( _ ByVal dwMilliseconds As Long)
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)
;o)
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) :
Est ce que tu as une idée d'où peut provenir l'erreur ?
Merci
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
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)
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)
Bah t'inkiète ... la semaine est faite pour qu'on se repose du week end, sinon à quoi elle servirait ? hein ?
;o)
;o)
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."
Est ce que tu aurais une idée de la provenance de cette erreur ?
Merci
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
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 :
;o)
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)