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

Erreur lors de l'activation d'un sous-formulaire

4 réponses
Avatar
Vincent Brandt
Microsoft SQL Server 2000 SP2
Microsoft Access 2000 SP4

Bonjopur à tous,

Je suis en train de migrer un fichier Access vers un projet Access (adp).
Dans ce projet, j'ai différents formulaires (qui eux contiennent des
sous-formulaires). Sur certains d'entre eux, lorsque j'active le
sous-formulaire (je clique simplement sur le sous-formulaire), j'ai le
message d'erreur suivant :
"Les données ont été ajoutées à la base de données mais elle ne seront pas
affichées dans le formulaire car elle ne répondent pas aux critères de la
source d'enregistrement sous-jacente".
Or, je n'ai rien ajouté à la base de données, je ne fais pas d'accès à la
base lorsque j'active le sous-formulaire.
Je ne sais pas d'où vient ce message (il ne se produit pas avec tous les
formulaires).
Les sous-formulaires ont tous comme propriétés "RecordSource" une procédure
stockée et je leur passe un paramètre via la propriété "InputParameters"

Pouvez-vous me dire d'où vient ce problème et surtout comment le résoudre ?

Merci d'avance pour votre aide

Vincent Brandt

4 réponses

Avatar
Yannick Croteau
Bonojur Vincent!

Effectivement, les priorités d'accès aux données ne sont pas les mêmes sous
access que SQLServer et ce type d'erreur, je l'ai connu lors de ma
transition de mbd à adp...

Voici les sources principales et comment les règlés....

Le premier et le plus courant ( je pense dans ton cas ) c'est l'access à des
données par recordset de type, ADO.recordset. L'accès aux données de manière
parrallèle est une des principales cause d'erreur en Fonctal Access sur
SQLServer. C'est pour cette raison qu'il est préférable d'utilisé la
formulation de type recordsetclone dont voici un exemple que j'ai tiré de
mon code...

Exemple.....
Dim PF As Currency

PF = 0

Dim LocalRS As ADODB.Recordset

Set LocalRS = [Form_Commandes - Détails].RecordsetClone
If LocalRS.RecordCount > 0 Then
LocalRS.MoveFirst
Do
If IsNumeric(LocalRS.Fields("Quantité")) And
IsNumeric(LocalRS.Fields("Coûtant")) Then
PF = PF + (LocalRS.Fields("Quantité") *
LocalRS.Fields("Coûtant"))
End If
LocalRS.MoveNext
Loop Until LocalRS.EOF = True
End If

Set LocalRS = Nothing

Me.Coutant = PF

_____________________________________
Il est préférable aussi d'utiliser cette technique pour les sommes de
totaux, puisque l'access au données peux encore causé des problèmes lors de
l'addition dans le sous formulaire... voici la formule que je te conseil
d'utiliser.


Private Sub Commandes___Détails_Exit(Cancel As Integer)


Dim PF As Currency

PF = 0

Dim LocalRS As ADODB.Recordset

Set LocalRS = [Form_Commandes - Détails].RecordsetClone
If LocalRS.RecordCount > 0 Then
LocalRS.MoveFirst
Do
If IsNumeric(LocalRS.Fields("Quantité")) And
IsNumeric(LocalRS.Fields("Prix")) Then
PF = PF + (LocalRS.Fields("Quantité") * LocalRS.Fields("Prix"))
End If
LocalRS.MoveNext
Loop Until LocalRS.EOF = True
End If

Set LocalRS = Nothing

Me!SousTotal = PF

.....

Exit Sub
_____________________________________

Comme tu vois, c'est presque identique au premier code....

Les 2 autres conseils que je peux te donner c'est d'utiliser un formulaire
sous forme continu dans le main (au lieu d'utliser un sous formulaire) quand
cela est possible.... ça évite les erreurs de double accès. J'ai dû utiliser
c'est mofidifications à qiuelques reprise malheureusement, mais c'est
beaucoup plus efficace pour ce que est d'un access SQLServer...

et si le problème perciste tu peux toujours regarder au niveau des
"Recordset Type" dans les configs "Data" du formulaire (désolé ma version
est anglaise) mettre "snapshot" au lieu de "updatable snapshot"...

si le problème perciste, ça risque d'être ta procédure stocker le problème,
mais cependant je n'ai jamais eu de problèmes de ce type...

En passant, pour t'encourager, j'ai eu la chance d'essayer Access 2003 et
l'accès au donnée d'SQLServer est 2 à 3 fois plus rapide que la version 2000
ou 2002....

En espérant que ça t'aide!!

Yannick Croteau
Access, SQLServer et ASP
www.frogtuning.com

"Vincent Brandt" a écrit dans le message de
news:%
Microsoft SQL Server 2000 SP2
Microsoft Access 2000 SP4

Bonjopur à tous,

Je suis en train de migrer un fichier Access vers un projet Access (adp).
Dans ce projet, j'ai différents formulaires (qui eux contiennent des
sous-formulaires). Sur certains d'entre eux, lorsque j'active le
sous-formulaire (je clique simplement sur le sous-formulaire), j'ai le
message d'erreur suivant :
"Les données ont été ajoutées à la base de données mais elle ne seront pas
affichées dans le formulaire car elle ne répondent pas aux critères de la
source d'enregistrement sous-jacente".
Or, je n'ai rien ajouté à la base de données, je ne fais pas d'accès à la
base lorsque j'active le sous-formulaire.
Je ne sais pas d'où vient ce message (il ne se produit pas avec tous les
formulaires).
Les sous-formulaires ont tous comme propriétés "RecordSource" une
procédure

stockée et je leur passe un paramètre via la propriété "InputParameters"

Pouvez-vous me dire d'où vient ce problème et surtout comment le résoudre
?


Merci d'avance pour votre aide

Vincent Brandt




Avatar
Yannick Croteau
Ha oui... j'oublieais, pourquoi une procédure stocké, pourquoi pas seulement
une vues. Parce qu'il procédure stocké implique une requête ac`tion et je ne
vois pas l'utilité dans un formulaire, tu peux ajouter ou modifier des
enregistrement même avec une vue en passant.

Yannick!


"Vincent Brandt" a écrit dans le message de
news:%
Microsoft SQL Server 2000 SP2
Microsoft Access 2000 SP4

Bonjopur à tous,

Je suis en train de migrer un fichier Access vers un projet Access (adp).
Dans ce projet, j'ai différents formulaires (qui eux contiennent des
sous-formulaires). Sur certains d'entre eux, lorsque j'active le
sous-formulaire (je clique simplement sur le sous-formulaire), j'ai le
message d'erreur suivant :
"Les données ont été ajoutées à la base de données mais elle ne seront pas
affichées dans le formulaire car elle ne répondent pas aux critères de la
source d'enregistrement sous-jacente".
Or, je n'ai rien ajouté à la base de données, je ne fais pas d'accès à la
base lorsque j'active le sous-formulaire.
Je ne sais pas d'où vient ce message (il ne se produit pas avec tous les
formulaires).
Les sous-formulaires ont tous comme propriétés "RecordSource" une
procédure

stockée et je leur passe un paramètre via la propriété "InputParameters"

Pouvez-vous me dire d'où vient ce problème et surtout comment le résoudre
?


Merci d'avance pour votre aide

Vincent Brandt




Avatar
Vincent Brandt
OK,
mais seulement dans mon formulaire (qui comporte 2 sous-formulaires), mais
je ne vois pas en quoi cela va m'aider; je n'ai qu'une requête SQL.
Pour le reste, voici ce qu'il y a (dans le load du formulaire) :

me.recordsource = "exec MaPS1 " & param1
'procédure stockée avec passage de paramètre

me.sform1.form.inputParameters = "@SParam1 int = " & sparam1
me.sform1.form.recordsource="sform1"
'procédure stockée avec passage de paramètre
me.sform2.form.inputParameters = "@SParam2 int = " & sparam2
me.sform1.form.recordsource="sform2"
'procédure stockée avec passage de paramètre

Y a t-il une autre façon de faire ?
Pour le reste, je n'ai aucun accès aux données.
Serait-ce mes procédures stockées qui serait mauvaise ?

Merci d'avance pour votre aide

Vincent Brandt


"Yannick Croteau" a écrit dans le message de
news:%
Ha oui... j'oublieais, pourquoi une procédure stocké, pourquoi pas
seulement

une vues. Parce qu'il procédure stocké implique une requête ac`tion et je
ne

vois pas l'utilité dans un formulaire, tu peux ajouter ou modifier des
enregistrement même avec une vue en passant.

Yannick!


"Vincent Brandt" a écrit dans le message de
news:%
Microsoft SQL Server 2000 SP2
Microsoft Access 2000 SP4

Bonjopur à tous,

Je suis en train de migrer un fichier Access vers un projet Access
(adp).


Dans ce projet, j'ai différents formulaires (qui eux contiennent des
sous-formulaires). Sur certains d'entre eux, lorsque j'active le
sous-formulaire (je clique simplement sur le sous-formulaire), j'ai le
message d'erreur suivant :
"Les données ont été ajoutées à la base de données mais elle ne seront
pas


affichées dans le formulaire car elle ne répondent pas aux critères de
la


source d'enregistrement sous-jacente".
Or, je n'ai rien ajouté à la base de données, je ne fais pas d'accès à
la


base lorsque j'active le sous-formulaire.
Je ne sais pas d'où vient ce message (il ne se produit pas avec tous les
formulaires).
Les sous-formulaires ont tous comme propriétés "RecordSource" une
procédure

stockée et je leur passe un paramètre via la propriété "InputParameters"

Pouvez-vous me dire d'où vient ce problème et surtout comment le
résoudre


?

Merci d'avance pour votre aide

Vincent Brandt








Avatar
Yannick Croteau
Bonjour Vincent!

Excuse-moi pour le délai de réponse, je n'ai pas eu accès à internet durant
les 2 derniers jours.

Je pense voir le problème. Bon pour commencer, je répète ma question à quoi
sert ta procédure stocké? À faire un ajout, un update ou une requête
complexe? Si c'est seulement en guise de requête sélection, transfère moi ta
procédure stocké en vue ( view ) le plus vite possible. Les formulaires
gèrent très mal les procédures stockés, puisque que la procédure stocké
implique un changement immédiat, une MAJ dans ta table. Ce qui crée une
double accès de donner en écriture. Quand t'accèdes à ton sous formulaire
( avec filtre ) SQLServer avoit un message à Access qui lui dit :

ATTENTION: Il vient d'avoir une modification à la table que gère ce
sous-formulaire,

Alors que ce n'est pas le cas. Tu vas changer le code de procédure stocké,
par le code équivalent en vue ( si nécessaire ), qui va aller chercher
l'information dans une table ou une autre vue à ton choix. Sinon on va ce
contenter de fonctionner avec une bonne vieille table.

La filtration par "InputParameters" est seulement bonne dans un formulaire
principal en accès non répété, en résumé, oublie l'idée. À moins que tu
filtres à partir une requête complexe ( requête à plusieurs niveaux ) là
t'aurais pas le choix et c'est principalement ( pour ne pas dire seulement )
pour cela que la filtration par "InputParameters" existe. Mais je ne passe
pas que tu sois en précédure complexe présentement, non? Si c'est le cas,
oui ça peut-être ta procédure stocké ton prob, mais il faudrait que je la
vois...

P.S. il est possible de faire une sélection en VBA dans une vue, même si
cette vue pré-filtre certaines données...

Donc voici quelques exemples :

1er -> RecordSource
'S'applique à une vue ou table au choix
me.[Sous-formulaire].RecordSource = [NomdelaVue] Where [Champ1] = '" &
Variable & "' And [Champ2] = " & Nombre
me.[Sous-Formulaire].requery
' En résumé ça ce gère exactement comme un base access réguliaire, mais avec
quelques variantes à la syntaxe SQL

2e -> ServerFilter
me.[Sous-Formulaire].ServerFilter = [Nomduchamp]='" & Variable & "'"
me.[Sous-Formulaire].requery
' Surtout pratique pour un résultat d'un seul enregistrement
' Il s'agit du paramètre que access va utiliser lorsque tu lui dis d'ouvrir
à un enregsitrement précis

3e - > par l'attachement formulaire - Sous-formulaire
' là il s'agit que le sous formulare va effectué une sélection en ce basant
sur un résultat d'un champ bien précis dans le formulaire
' Excellent pour des commandes et les détails de commandes
' Ce code pratiquement identique au principe Access régulier
' Pour cette exemple, Il s'agit de synchroniser le champ fils(Champs du
sous-formulaire sur lequel va s'effectuer la sélection), avec le champs père
( champs
du formulaire principale que le Champs fils va utiliser comme paramètre )
'Il s'agit tout simplement de 2 paramêtres dans les propriétés du [cadre
sous-formulaire] dans le [formulaire] principal ( dans l'onglet Données )
' pour cette astuse le filtre s'exécute automatiquement lorsque les données
du champs père change, et ce sans aucun code VBA.

il y en aurait probablement d'autres techniques un peu plus complexe en VBA,
mais normalement, avec celles-ci devaient être suffisantes.

Ha oui.... fait la même chose pour ton formulaire prinical en VBA dans le
OnOpen ( ou OnLoad, si jamais le premier te cause problème )....

Me.recordsource = [NomdelaVue] Where [Champ1] = '" & Variable & "'"
Me.requery

En espérant que cela t'aide!
Yannick
Access, SQLServer, ASP
www.frogtuning.com



"Vincent Brandt" a écrit dans le message de
news:%
OK,
mais seulement dans mon formulaire (qui comporte 2 sous-formulaires), mais
je ne vois pas en quoi cela va m'aider; je n'ai qu'une requête SQL.
Pour le reste, voici ce qu'il y a (dans le load du formulaire) :

me.recordsource = "exec MaPS1 " & param1
'procédure stockée avec passage de paramètre

me.sform1.form.inputParameters = "@SParam1 int = " & sparam1
me.sform1.form.recordsource="sform1"
'procédure stockée avec passage de paramètre
me.sform2.form.inputParameters = "@SParam2 int = " & sparam2
me.sform1.form.recordsource="sform2"
'procédure stockée avec passage de paramètre

Y a t-il une autre façon de faire ?
Pour le reste, je n'ai aucun accès aux données.
Serait-ce mes procédures stockées qui serait mauvaise ?

Merci d'avance pour votre aide

Vincent Brandt


"Yannick Croteau" a écrit dans le message de
news:%
Ha oui... j'oublieais, pourquoi une procédure stocké, pourquoi pas
seulement

une vues. Parce qu'il procédure stocké implique une requête ac`tion et
je


ne
vois pas l'utilité dans un formulaire, tu peux ajouter ou modifier des
enregistrement même avec une vue en passant.

Yannick!


"Vincent Brandt" a écrit dans le message de
news:%
Microsoft SQL Server 2000 SP2
Microsoft Access 2000 SP4

Bonjopur à tous,

Je suis en train de migrer un fichier Access vers un projet Access
(adp).


Dans ce projet, j'ai différents formulaires (qui eux contiennent des
sous-formulaires). Sur certains d'entre eux, lorsque j'active le
sous-formulaire (je clique simplement sur le sous-formulaire), j'ai le
message d'erreur suivant :
"Les données ont été ajoutées à la base de données mais elle ne seront
pas


affichées dans le formulaire car elle ne répondent pas aux critères de
la


source d'enregistrement sous-jacente".
Or, je n'ai rien ajouté à la base de données, je ne fais pas d'accès à
la


base lorsque j'active le sous-formulaire.
Je ne sais pas d'où vient ce message (il ne se produit pas avec tous
les



formulaires).
Les sous-formulaires ont tous comme propriétés "RecordSource" une
procédure

stockée et je leur passe un paramètre via la propriété
"InputParameters"




Pouvez-vous me dire d'où vient ce problème et surtout comment le
résoudre


?

Merci d'avance pour votre aide

Vincent Brandt