Après avoir retourner mon problème dans tous les sens sans succès je me suis
décider à vous soumettre mon problème.
Tout d'abord mon environnement : Access 2002 (10.6501.6735) SP3 - Windows XP.
J'ai créé une application access dont les tables sont toutes liées à des
tables d'une autre base Access (ou SQL serveur selon l'environnement ou je
travaille).
Dans mon application j'ai déclaré un recordset en variables publique.
A l'ouverture de l'un de mes formulaire j'initilise mon recordset
Dim MyRecordset as DAO.Recordset
Set MyRecordset = currentdb.openrecordset (MonSQL, dbOpesnSnapShot,
DbReadOnly).
Mon formulaire "MyForm" est un formulaire indépendant (Aucun recordsource de
défini). Il contient un sous formulaire "SFrm", qui lui contient exactement
les données de MonSQL (celui qui a servi a initialiser mon recordset).
Une autre section de MyForm me permet de saisir des données. Après un clic
sur un bouton Valider je lance une commande SQL
Le nouvel enregistrement s'est bien affiché dans mon sous formulaire
(l'enregistrement à donc bien été inséré dans ma table.)
Par contre mon recorset, malgré le requery (j'ai également essayer de le
regénéré avec Set MyRecordset ...), ne contient pas mon nouvel
enregistrement. (La propriété NoMatch renvois true après mon FindFirst.
Si je ferme mon formulaire et que je le réouvre... miracle, mon recordset
contient bien mon enregistrement...
C'est un peu génant, dans le sens ou mon recordset me sert à construire un
treeview. J'aimerais donc ne pas avoir a refermer mon formulaire pour
reconstituer mon treeview.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
david
salut,
si j'ai bien compris (par ce que c'est pas tout a fait clair) : - tu as une table (myTable) , que tu vas remplir avec des données saisies. - tu as une instruction SQL (monSQL) qui remplie un sous-formulaire en prenant les données depuis une table (SQL ou Access) et depuis myTable. - tu as un DAO.recordSet de type snapshot, utilisant le code monSQL.
Maintenant, si tu ajoutes des données dans myTable : le formulaire basé sur monSQL est bien mis à jour mais pas le recordset (pourtant normalement équivalent) ? As-tu essayé de recréer totalement le recordset : myRecordset.Close: set myRecordset = Nothing set myRecordset = currentdb.openrecordset (MonSQL, dbOpenSnapShot) rq: le readonly n'est pas nécessaire, un snapshot est forcément readonly Sinon, essaye de cloner le recordset servant de source à ton sous-formulaire. Cela devrait mieux fonctionner.
En fait, le problème vient de l'utilisation du snapshot (instantané en lecture seule) et donc de la mauvaise réactualisation des données. Par contre, je m'étonne que tu utilises DAO et non pas ADO pour accéder à tes données. Attention : DAO exécute les instructions forcément en local, alors que ADO peu les faire exécuter sur un autre serveur (surtout SQL).
A+
salut,
si j'ai bien compris (par ce que c'est pas tout a fait clair) :
- tu as une table (myTable) , que tu vas remplir avec des données
saisies.
- tu as une instruction SQL (monSQL) qui remplie un sous-formulaire en
prenant les données depuis une table (SQL ou Access) et depuis
myTable.
- tu as un DAO.recordSet de type snapshot, utilisant le code monSQL.
Maintenant, si tu ajoutes des données dans myTable : le formulaire
basé sur monSQL est bien mis à jour mais pas le recordset (pourtant
normalement équivalent) ?
As-tu essayé de recréer totalement le recordset :
myRecordset.Close: set myRecordset = Nothing
set myRecordset = currentdb.openrecordset (MonSQL, dbOpenSnapShot)
rq: le readonly n'est pas nécessaire, un snapshot est forcément
readonly
Sinon, essaye de cloner le recordset servant de source à ton
sous-formulaire.
Cela devrait mieux fonctionner.
En fait, le problème vient de l'utilisation du snapshot (instantané
en lecture seule) et donc de la mauvaise réactualisation des données.
Par contre, je m'étonne que tu utilises DAO et non pas ADO pour
accéder à tes données. Attention : DAO exécute les instructions
forcément en local, alors que ADO peu les faire exécuter sur un autre
serveur (surtout SQL).
si j'ai bien compris (par ce que c'est pas tout a fait clair) : - tu as une table (myTable) , que tu vas remplir avec des données saisies. - tu as une instruction SQL (monSQL) qui remplie un sous-formulaire en prenant les données depuis une table (SQL ou Access) et depuis myTable. - tu as un DAO.recordSet de type snapshot, utilisant le code monSQL.
Maintenant, si tu ajoutes des données dans myTable : le formulaire basé sur monSQL est bien mis à jour mais pas le recordset (pourtant normalement équivalent) ? As-tu essayé de recréer totalement le recordset : myRecordset.Close: set myRecordset = Nothing set myRecordset = currentdb.openrecordset (MonSQL, dbOpenSnapShot) rq: le readonly n'est pas nécessaire, un snapshot est forcément readonly Sinon, essaye de cloner le recordset servant de source à ton sous-formulaire. Cela devrait mieux fonctionner.
En fait, le problème vient de l'utilisation du snapshot (instantané en lecture seule) et donc de la mauvaise réactualisation des données. Par contre, je m'étonne que tu utilises DAO et non pas ADO pour accéder à tes données. Attention : DAO exécute les instructions forcément en local, alors que ADO peu les faire exécuter sur un autre serveur (surtout SQL).
A+
DCR
Tu as effectivement bien compris mon problème. merci d'avoir pris le temps d'essayer de comprendre ce qu'il y avait dans ma tete !
merci de ton aide, je vais faire des tests.
J'utilise DAO car je n'ai jamais utilisé ADO. Je viens de regarder il semble que j'ai pas mal de code a changé si je voulais changé mon type de recordset.
J'utilise notemment les méthode Edit et FindFIrst des recordset DAO que je ne retrouve pas dans les ADO. Peut être peux tu m'aider ?
Initiliase t'on un recordset de la meme manire avec ADO et DAO ? SET MyRC = CurrentDB.OPenRecordset (...) ?
salut,
si j'ai bien compris (par ce que c'est pas tout a fait clair) : - tu as une table (myTable) , que tu vas remplir avec des données saisies. - tu as une instruction SQL (monSQL) qui remplie un sous-formulaire en prenant les données depuis une table (SQL ou Access) et depuis myTable. - tu as un DAO.recordSet de type snapshot, utilisant le code monSQL.
Maintenant, si tu ajoutes des données dans myTable : le formulaire basé sur monSQL est bien mis à jour mais pas le recordset (pourtant normalement équivalent) ? As-tu essayé de recréer totalement le recordset : myRecordset.Close: set myRecordset = Nothing set myRecordset = currentdb.openrecordset (MonSQL, dbOpenSnapShot) rq: le readonly n'est pas nécessaire, un snapshot est forcément readonly Sinon, essaye de cloner le recordset servant de source à ton sous-formulaire. Cela devrait mieux fonctionner.
En fait, le problème vient de l'utilisation du snapshot (instantané en lecture seule) et donc de la mauvaise réactualisation des données. Par contre, je m'étonne que tu utilises DAO et non pas ADO pour accéder à tes données. Attention : DAO exécute les instructions forcément en local, alors que ADO peu les faire exécuter sur un autre serveur (surtout SQL).
A+
Tu as effectivement bien compris mon problème. merci d'avoir pris le temps
d'essayer de comprendre ce qu'il y avait dans ma tete !
merci de ton aide, je vais faire des tests.
J'utilise DAO car je n'ai jamais utilisé ADO. Je viens de regarder il semble
que j'ai pas mal de code a changé si je voulais changé mon type de recordset.
J'utilise notemment les méthode Edit et FindFIrst des recordset DAO que je
ne retrouve pas dans les ADO. Peut être peux tu m'aider ?
Initiliase t'on un recordset de la meme manire avec ADO et DAO ?
SET MyRC = CurrentDB.OPenRecordset (...) ?
salut,
si j'ai bien compris (par ce que c'est pas tout a fait clair) :
- tu as une table (myTable) , que tu vas remplir avec des données
saisies.
- tu as une instruction SQL (monSQL) qui remplie un sous-formulaire en
prenant les données depuis une table (SQL ou Access) et depuis
myTable.
- tu as un DAO.recordSet de type snapshot, utilisant le code monSQL.
Maintenant, si tu ajoutes des données dans myTable : le formulaire
basé sur monSQL est bien mis à jour mais pas le recordset (pourtant
normalement équivalent) ?
As-tu essayé de recréer totalement le recordset :
myRecordset.Close: set myRecordset = Nothing
set myRecordset = currentdb.openrecordset (MonSQL, dbOpenSnapShot)
rq: le readonly n'est pas nécessaire, un snapshot est forcément
readonly
Sinon, essaye de cloner le recordset servant de source à ton
sous-formulaire.
Cela devrait mieux fonctionner.
En fait, le problème vient de l'utilisation du snapshot (instantané
en lecture seule) et donc de la mauvaise réactualisation des données.
Par contre, je m'étonne que tu utilises DAO et non pas ADO pour
accéder à tes données. Attention : DAO exécute les instructions
forcément en local, alors que ADO peu les faire exécuter sur un autre
serveur (surtout SQL).
Tu as effectivement bien compris mon problème. merci d'avoir pris le temps d'essayer de comprendre ce qu'il y avait dans ma tete !
merci de ton aide, je vais faire des tests.
J'utilise DAO car je n'ai jamais utilisé ADO. Je viens de regarder il semble que j'ai pas mal de code a changé si je voulais changé mon type de recordset.
J'utilise notemment les méthode Edit et FindFIrst des recordset DAO que je ne retrouve pas dans les ADO. Peut être peux tu m'aider ?
Initiliase t'on un recordset de la meme manire avec ADO et DAO ? SET MyRC = CurrentDB.OPenRecordset (...) ?
salut,
si j'ai bien compris (par ce que c'est pas tout a fait clair) : - tu as une table (myTable) , que tu vas remplir avec des données saisies. - tu as une instruction SQL (monSQL) qui remplie un sous-formulaire en prenant les données depuis une table (SQL ou Access) et depuis myTable. - tu as un DAO.recordSet de type snapshot, utilisant le code monSQL.
Maintenant, si tu ajoutes des données dans myTable : le formulaire basé sur monSQL est bien mis à jour mais pas le recordset (pourtant normalement équivalent) ? As-tu essayé de recréer totalement le recordset : myRecordset.Close: set myRecordset = Nothing set myRecordset = currentdb.openrecordset (MonSQL, dbOpenSnapShot) rq: le readonly n'est pas nécessaire, un snapshot est forcément readonly Sinon, essaye de cloner le recordset servant de source à ton sous-formulaire. Cela devrait mieux fonctionner.
En fait, le problème vient de l'utilisation du snapshot (instantané en lecture seule) et donc de la mauvaise réactualisation des données. Par contre, je m'étonne que tu utilises DAO et non pas ADO pour accéder à tes données. Attention : DAO exécute les instructions forcément en local, alors que ADO peu les faire exécuter sur un autre serveur (surtout SQL).