Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

formulaire basé sur connexion ADO

6 réponses
Avatar
spideywebswing
Bonjour à tous,

cela fait un bout de temps que je développe en DAO sur access, et je me mets doucement à ADO (il est bien temps, tiens) pour accélérer un peu les connexions qui laissent salement à désirer dès qu'on est à 2 connectés.
bref.

j'ai réussi à me connecter à la base "e;e;distante"e;e; grâce à une chaîne de connexion, et j'arrive à modifier ces données SAUF quand je veux mettre une requête (ou une bête table d'ailleurs) en source d'un formulaire.
les champs de mon formulaire sont liés comme si les tables de la base distante étaient liées (comprenez que le champ controlsource est renseigné), et les données s'affichent bien dans ces champs à l'ouverture du formulaire.
mais dès que je veux modifier une valeur dans un de ces champs, eh ben ça veut pas.

mon code de connexion, à l'ouverture du formulaire :

Set ADOBDD = New ADODB.Connection

ADOBDD.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=128.39.5.1GROUPEOUTILSGestion des AffairesGestion des Risques Affaires - BDD.accdb;Persist Security Info=False;"

Set ADORS = New ADODB.Recordset
ADORS.Open "SELECT * FROM APP_Affaires", ADOBDD, adOpenKeyset, adLockOptimistic

Set Me.Recordset = ADORS


et là, j'ai bien les données à l'écran, dans les bons champs, mais impossible de mettre à jour, ça fait "impossible d'attribuer une valeur à cet objet" !


quelqu'un aurait-il une idée ?

merci de me lire en tous cas,

djo

6 réponses

Avatar
Gloops
Bonjour,

On va partir du principe que tu ne cherches pas à mettre à jour une
requête avec jointure, sinon tu aurais déjà rencontré le problè me en DAO.

As-tu vérifié les valeurs possibles à la place de adOpenKeySet ?
Avatar
spideywebswing
Le lundi 15 Avril 2013 à 19:55 par spideywebswing :
Bonjour à tous,

cela fait un bout de temps que je développe en DAO sur access, et je me
mets doucement à ADO (il est bien temps, tiens) pour
accélérer un peu les connexions qui laissent salement à
désirer dès qu'on est à 2 connectés.
bref.

j'ai réussi à me connecter à la base
"e;e;distante"e;e; grâce à une chaîne de
connexion, et j'arrive à modifier ces données SAUF quand je veux
mettre une requête (ou une bête table d'ailleurs) en source d'un
formulaire.
les champs de mon formulaire sont liés comme si les tables de la base
distante étaient liées (comprenez que le champ controlsource est
renseigné), et les données s'affichent bien dans ces champs
à l'ouverture du formulaire.
mais dès que je veux modifier une valeur dans un de ces champs, eh ben
ça veut pas.

mon code de connexion, à l'ouverture du formulaire :

Set ADOBDD = New ADODB.Connection

ADOBDD.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data
Source8.39.5.1GROUPEOUTILSGestion des AffairesGestion des Risques Affaires -
BDD.accdb;Persist Security Infoúlse;"

Set ADORS = New ADODB.Recordset
ADORS.Open "SELECT * FROM APP_Affaires", ADOBDD, adOpenKeyset,
adLockOptimistic

Set Me.Recordset = ADORS


et là, j'ai bien les données à l'écran, dans les
bons champs, mais impossible de mettre à jour, ça fait
"impossible d'attribuer une valeur à cet objet" !


quelqu'un aurait-il une idée ?

merci de me lire en tous cas,

djo


en fait oui c'est une requete avec jointure (j'ai simplifie ici) mais comme tu dis je n'avais pas le problème avant.
et oui j'ai essayé les autres, mais ils n'ont pas l'air de fonctionner...
Avatar
Gloops
spideywebswing a écrit, le 15/04/2013 20:34 :
en fait oui c'est une requete avec jointure (j'ai simplifie ici) mais c omme tu
dis je n'avais pas le problème avant.
et oui j'ai essayé les autres, mais ils n'ont pas l'air de fonctionne r...




Essaie en mettant à jour table par table ...
Avatar
spideywebswing
Le lundi 15 Avril 2013 à 19:55 par spideywebswing :
Bonjour à tous,

cela fait un bout de temps que je développe en DAO sur access, et je me
mets doucement à ADO (il est bien temps, tiens) pour
accélérer un peu les connexions qui laissent salement à
désirer dès qu'on est à 2 connectés.
bref.

j'ai réussi à me connecter à la base
"e;e;distante"e;e; grâce à une chaîne de
connexion, et j'arrive à modifier ces données SAUF quand je veux
mettre une requête (ou une bête table d'ailleurs) en source d'un
formulaire.
les champs de mon formulaire sont liés comme si les tables de la base
distante étaient liées (comprenez que le champ controlsource est
renseigné), et les données s'affichent bien dans ces champs
à l'ouverture du formulaire.
mais dès que je veux modifier une valeur dans un de ces champs, eh ben
ça veut pas.

mon code de connexion, à l'ouverture du formulaire :

Set ADOBDD = New ADODB.Connection

ADOBDD.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data
Source8.39.5.1GROUPEOUTILSGestion des AffairesGestion des Risques Affaires -
BDD.accdb;Persist Security Infoúlse;"

Set ADORS = New ADODB.Recordset
ADORS.Open "SELECT * FROM APP_Affaires", ADOBDD, adOpenKeyset,
adLockOptimistic

Set Me.Recordset = ADORS


et là, j'ai bien les données à l'écran, dans les
bons champs, mais impossible de mettre à jour, ça fait
"impossible d'attribuer une valeur à cet objet" !


quelqu'un aurait-il une idée ?

merci de me lire en tous cas,

djo


bon on m'a donné un début de réponse sur un autre forum, en fait il faut mettre le curseur côté client et ouvrir en dbopenstatic.

merci pour votre temps,

djo
Avatar
Gloops
spideywebswing a écrit, le 19/04/2013 08:24 :
bon on m'a donné un début de réponse sur un autre forum, en fait il faut mettre
le curseur côté client et ouvrir en dbopenstatic.

merci pour votre temps,



Ah, oui ...
Dans ce genre de cas, j'épluche la doc le moment venu.

A priori, je dois avouer que je n'ai pas en tête l'existence d'une
notion de curseur côté client, et j'irai même plus loin : ça vaut le
coup de l'avoir dit, car sinon, que le curseur soit du côté client
m'aurait paru, a priori, plutôt un obstacle à mettre à jour le cô té
serveur, mais ça, c'est une perception intuitive liée au vocabulaire, et
semble-t-il elle est erronée.

ça se fait comment, alors, le curseur côté client ?
Avatar
spideywebswing
Le lundi 15 Avril 2013 à 19:55 par spideywebswing :
Bonjour à tous,

cela fait un bout de temps que je développe en DAO sur access, et je me
mets doucement à ADO (il est bien temps, tiens) pour
accélérer un peu les connexions qui laissent salement à
désirer dès qu'on est à 2 connectés.
bref.

j'ai réussi à me connecter à la base
"e;e;distante"e;e; grâce à une chaîne de
connexion, et j'arrive à modifier ces données SAUF quand je veux
mettre une requête (ou une bête table d'ailleurs) en source d'un
formulaire.
les champs de mon formulaire sont liés comme si les tables de la base
distante étaient liées (comprenez que le champ controlsource est
renseigné), et les données s'affichent bien dans ces champs
à l'ouverture du formulaire.
mais dès que je veux modifier une valeur dans un de ces champs, eh ben
ça veut pas.

mon code de connexion, à l'ouverture du formulaire :

Set ADOBDD = New ADODB.Connection

ADOBDD.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data
Source8.39.5.1GROUPEOUTILSGestion des AffairesGestion des Risques Affaires -
BDD.accdb;Persist Security Infoúlse;"

Set ADORS = New ADODB.Recordset
ADORS.Open "SELECT * FROM APP_Affaires", ADOBDD, adOpenKeyset,
adLockOptimistic

Set Me.Recordset = ADORS


et là, j'ai bien les données à l'écran, dans les
bons champs, mais impossible de mettre à jour, ça fait
"impossible d'attribuer une valeur à cet objet" !


quelqu'un aurait-il une idée ?

merci de me lire en tous cas,

djo


excuse-moi, je n'ai pas pensé à revenir !

Set ADORS = New Adodb.Recordset
ADORS.CursorLocation = adUseClient
ADORS.Open "SELECT MACHIN", ADOBDD, dbOpenStatic, adLockPessimistic

set me.recordset­ORS

si dans ta chaîne SQL tu as une ou plusieurs liaisons, il va te falloir indiquer quelle est la table à mettre à jour lors de l'édition du formulaire :

me.UniqueTable="TABLE1"

dans l'hypothèse où TABLE1 fait partie de ton SQL donc ;)