Message d'erreur inédit

Le
pierre.rivet
Bonjour,

Dans une application faisant appel à une base de données en Access, un de
mes utilisateurs reçoit le message suivant:
"L'ensemble des lignes ne prend pas en charge le défilement arrière"

Apparemment, il voit un fichier de patients sous forme d'un contrôle
Datagrid, et quand il veut afficher les renseignements du patient, il
obtient une fiche vierge.

Quelqu'un a-t-il déjà eu ce message ?

Merci à l'avance de votre aide,

Pierre
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jean-marc
Le #15387131
pierre.rivet wrote:
Bonjour,

Dans une application faisant appel à une base de données en Access,
un de mes utilisateurs reçoit le message suivant:
"L'ensemble des lignes ne prend pas en charge le défilement arrière"

Apparemment, il voit un fichier de patients sous forme d'un contrôle
Datagrid, et quand il veut afficher les renseignements du patient, il
obtient une fiche vierge.

Quelqu'un a-t-il déjà eu ce message ?



Hello,

Oui, j'ai déjà eu. C'est lié au fait que certaines DB ne permettent pas
certaines actions avec certains types de curseur, notamment un
curseur coté serveur. Très facile à régler en remettant le curseur
coté client.

Comme de juste, c'est expliqué dans la KB Microsoft:
http://support.microsoft.com/kb/294139/fr

Bonne résolution :-)

Cordialement;


--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
pierre.rivet
Le #15387121
Merci jean Marc,

Le problème c'est que je ne comprends pas un mot des explications du texte
Microsoft.

Pouvez vous m'en dire un peu plus ?
C'est quoi un curseur ? et un curseur côté client?

Merci encore de votre patience,

Pierre

"Jean-marc" de news: 473de3f3$0$22304$
pierre.rivet wrote:
Bonjour,

Dans une application faisant appel à une base de données en Access,
un de mes utilisateurs reçoit le message suivant:
"L'ensemble des lignes ne prend pas en charge le défilement arrière"

Apparemment, il voit un fichier de patients sous forme d'un contrôle
Datagrid, et quand il veut afficher les renseignements du patient, il
obtient une fiche vierge.

Quelqu'un a-t-il déjà eu ce message ?



Hello,

Oui, j'ai déjà eu. C'est lié au fait que certaines DB ne permettent pas
certaines actions avec certains types de curseur, notamment un
curseur coté serveur. Très facile à régler en remettant le curseur
coté client.

Comme de juste, c'est expliqué dans la KB Microsoft:
http://support.microsoft.com/kb/294139/fr

Bonne résolution :-)

Cordialement;


--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;






Patrick Philippot
Le #15387091
pierre.rivet wrote:
C'est quoi un curseur ? et un curseur côté client?



Bonjour,

Le curseur est le mécanisme qui permet de naviguer dans un ensemble
d'enregistrements résultants d'une requête sur la BD. Il y a différents
types de curseurs: avance seule-lecture seule, accès aléatoire, etc.
Plus un curseur est fonctionnellement riche, plus il "coûte cher" en
ressources. C'est pourquoi on choisit normalement le type de curseur
minimum qui convient à ce que l'on veut faire.

De plus, le curseur peut être implémenté côté serveur (côté BD) ou côté
client. Côté serveur, on n'a pas le contrôle car les fonctionnalités
sont déterminées par la BD elle-même. Spécifier que l'on veut un curseur
côté client permet dans ce cas de reprendre la main.

Vous ne pouvez pas gérer proprement une application accédant aux données
sans être au clair sur la notion de curseur. Je vous conseille donc
fortement de relire la documentation à ce sujet.

Cordialement.

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
Jean-marc
Le #15387081
Patrick Philippot wrote:
pierre.rivet wrote:
C'est quoi un curseur ? et un curseur côté client?





Vous ne pouvez pas gérer proprement une application accédant aux
données sans être au clair sur la notion de curseur. Je vous
conseille donc fortement de relire la documentation à ce sujet.



Hello,

je complète la réponse en proposant quelques liens:

Tout d'abord un white paper Microsoft, très bien fait,
téléchargeable ici:
http://www.laboratoire-microsoft.org/whitepapers/9989/
ou la en cas de problème:
http://www.laboratoire-microsoft.org/d/d/?id™89


Ceci est également très bien fait et très clair, par l'excellente
Susan Sales Harkins:
http://msdn2.microsoft.com/en-us/library/aa140098(office.10).aspx

Avac, ça vous aurez les réponses à toutes vos questions.

Bonne lecture :-)

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
pierre.rivet
Le #15387051
Merci à vous deux.

Je viens de lire vos messages.

Je vais "chiader" ça ce week end,

Pierre

"Jean-marc" de news: 473ed2c8$0$29261$
Patrick Philippot wrote:
pierre.rivet wrote:
C'est quoi un curseur ? et un curseur côté client?





Vous ne pouvez pas gérer proprement une application accédant aux
données sans être au clair sur la notion de curseur. Je vous
conseille donc fortement de relire la documentation à ce sujet.



Hello,

je complète la réponse en proposant quelques liens:

Tout d'abord un white paper Microsoft, très bien fait,
téléchargeable ici:
http://www.laboratoire-microsoft.org/whitepapers/9989/
ou la en cas de problème:
http://www.laboratoire-microsoft.org/d/d/?id™89


Ceci est également très bien fait et très clair, par l'excellente
Susan Sales Harkins:
http://msdn2.microsoft.com/en-us/library/aa140098(office.10).aspx

Avac, ça vous aurez les réponses à toutes vos questions.

Bonne lecture :-)

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;






pierre.rivet
Le #15385321
Bonjour,

Toujours dans le même problème d'ouverture de la base de données en
Réseau....
Ci-dessous la procédure que j'utilise pour mettre à jour le nombre de coups
d'ouverture du logiciel.

voir suite de mon appel au secours après la procédure.....

******************************************************************
Public Sub MAJ_NOMBRE_COUPS_1()
On Error GoTo ErreurCoup
Set PA = New ADODB.Recordset
Q = "adOpenDynamic, adLockOptimistic"
PA.Open "select * from OSTEOPARAM where OrdreOstéo=" & NuméroOstéo, CT,
adOpenDynamic, adLockOptimistic

MsgBox "Ouverture de la table OSTEOPARAM avec " & Q

PA!COUP = COUP
PA.Update
PA.Close
TextCoup = COUP

MsgBox "MAJ réussie avec la combinaison " & Q

Exit Sub
ErreurCoup:
MsgBox Err.Description, vbCritical, "Erreur MAJ avec " & Q
MAJ_NOMBRE_COUPS_2
End Sub
*******************************************************************
J'obtiens le message suivant: "Mise à jour impossible, la base de données ou
l'objet est en lecture seule."

Il s'agit d'une base en Access.
Le serveur est un poste "Vista déclassé en XP"

Après l'erreur, je passe à la procédure MAJ_NOMBRE_COUPS_2 où j'essaye
d'ouvrir la table avec l'instruction:
PA.Open "select * from OSTEOPARAM where OrdreOstéo=" & NuméroOstéo, CT,
adOpenStatic, adLockOptimistic
=> même message d'erreur

troisième essai d'ouverture de la la table avec l'instruction:
PA.Open "select * from OSTEOPARAM where OrdreOstéo=" & NuméroOstéo, CT,
adOpenStatic, adLockPessimistic
=> toujours le même message d'erreur

Je deviens enragé.

J'insiste sur le fait du serveur qui est Vista déclassé XP, car j'avais
essayé de mettre la base de données sur un serveur en Vista, et j'avais eu
aussi ce message.

Merci de vos précieux conseils,

Pierre



"pierre.rivet" 473f26b2$0$25939$
Merci à vous deux.

Je viens de lire vos messages.

Je vais "chiader" ça ce week end,

Pierre

"Jean-marc" message de news: 473ed2c8$0$29261$
Patrick Philippot wrote:
pierre.rivet wrote:
C'est quoi un curseur ? et un curseur côté client?





Vous ne pouvez pas gérer proprement une application accédant aux
données sans être au clair sur la notion de curseur. Je vous
conseille donc fortement de relire la documentation à ce sujet.



Hello,

je complète la réponse en proposant quelques liens:

Tout d'abord un white paper Microsoft, très bien fait,
téléchargeable ici:
http://www.laboratoire-microsoft.org/whitepapers/9989/
ou la en cas de problème:
http://www.laboratoire-microsoft.org/d/d/?id™89


Ceci est également très bien fait et très clair, par l'excellente
Susan Sales Harkins:
http://msdn2.microsoft.com/en-us/library/aa140098(office.10).aspx

Avac, ça vous aurez les réponses à toutes vos questions.

Bonne lecture :-)

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;




Jean-marc
Le #15385311
pierre.rivet wrote:
Bonjour,

Toujours dans le même problème d'ouverture de la base de données en
Réseau....
Ci-dessous la procédure que j'utilise pour mettre à jour le nombre de
coups d'ouverture du logiciel.

voir suite de mon appel au secours après la procédure.....

******************************************************************
Public Sub MAJ_NOMBRE_COUPS_1()
On Error GoTo ErreurCoup
Set PA = New ADODB.Recordset
Q = "adOpenDynamic, adLockOptimistic"
PA.Open "select * from OSTEOPARAM where OrdreOstéo=" & NuméroOstéo,
CT, adOpenDynamic, adLockOptimistic

MsgBox "Ouverture de la table OSTEOPARAM avec " & Q

PA!COUP = COUP
PA.Update
PA.Close
TextCoup = COUP

MsgBox "MAJ réussie avec la combinaison " & Q

Exit Sub
ErreurCoup:
MsgBox Err.Description, vbCritical, "Erreur MAJ avec " & Q
MAJ_NOMBRE_COUPS_2
End Sub
*******************************************************************
J'obtiens le message suivant: "Mise à jour impossible, la base de données
ou
l'objet est en lecture seule."




Hello,

Cette erreur est connue pour avoir des causes multiples, elle peut
même survenir sous Excel...

Le fait est que ton code tel qu'il est ne va pas nous aider à débugguer:
Toutes tes variables sont gloables ou non déclarées, on a aucune visibilité
sur ce
qui est fait avant l'appel de cette procédure.

Comment peut on savoir, sans avoir ton code sous les yeux et en cours
d'exécution
ce que sont:
PA, Q, NuméroOstéo, CT, COUP, etc. ?

Qui nous dit que tu les a déclarées avec le bon type ?

Pour NuméroSostéo et CT, quelles sont les valeurs ?

Le On error est malvenu! Il t'empêche de savoit quelle ligne est responsable
du problème.

Les caractères accentués sont une source d'erreur bien connue,
et alors dans les champs d'une DB, c'est franchement déconseillé ...

Mon conseil si tu veux essayer d'y voir un peu clair:

Commence par créer qq variables locales histoire de voir
un peu mieux ce qui se passe:

Dim szSql as String

szSql = "SELECT * FROM OSTEOPARAM WHERE OrdreOstéo=" & NuméroOstéo

PA.Open szSQL, CT, adOpenDynamic, adLockOptimistic

Enlève le On error Goto

Exécute ce code en pas en pas en mettant un point d'arret sur la ligne:

szSql = " ...

Examines le contenu de chacune des variables

Regarde sur quelle ligne l'erreur se produit.

Refais le test en exécutant ta requête directement sous Access

Refais depuis VB mais avec la base en local

Bref, fais le boulot classique d'un programmeur : étape par étape élimine
les causes possibles d'erreur.

Si tu n'as pas trouvé (mais à mon avis si tu suis ces étapes tu
vas trouver tout seul), tu peux revenir avec :

- Du code plus clair et plus petit, ciblant exactement l'endroit du
problème
- Une descrition détaillée:
. J'ai l'erreur "X" à la ligne "NNN". A ce moment, mes variables
ont es valeurs "a", "b", "c", etc.


--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
pierre.rivet
Le #15385301
Bonjour Jean Marc, et merci de ton aide....

Mes réponses vont donc être les lignes sans >> en tête de ligne.

Remarques préliminaires:

a) cette procédure fonctionne parfaitement bien depuis 5 ans que ce soit en
réseau ou en poste local

b) ces problèmes ne se produisent pas chez moi, mais chez un utilisateur
situé à 600 km de chez moi.
Les différents Msgbox ont été rajoutés pour essayer de trouver l'erreur.
Je lui renvoie à chaque modif un fichier en *.exe pour qu'il essaye à
nouveau

Ceci dit, je vais m'efforcer de répondre à tes questions. De la discussion
jaillit la lumière.


******************************************************************
Public Sub MAJ_NOMBRE_COUPS_1()
On Error GoTo ErreurCoup
Set PA = New ADODB.Recordset
Q = "adOpenDynamic, adLockOptimistic"
PA.Open "select * from OSTEOPARAM where OrdreOstéo=" & NuméroOstéo,
CT, adOpenDynamic, adLockOptimistic

MsgBox "Ouverture de la table OSTEOPARAM avec " & Q

PA!COUP = COUP
PA.Update
PA.Close
TextCoup = COUP

MsgBox "MAJ réussie avec la combinaison " & Q

Exit Sub
ErreurCoup:
MsgBox Err.Description, vbCritical, "Erreur MAJ avec " & Q
MAJ_NOMBRE_COUPS_2
End Sub
*******************************************************************






Le fait est que ton code tel qu'il est ne va pas nous aider à débugguer:
Toutes tes variables sont gloables ou non déclarées, on a aucune
visibilité sur ce qui est fait avant l'appel de >cette procédure.Comment
peut on savoir, sans avoir ton code sous les yeux et en cours d'exécution
ce que sont:
PA, Q, NuméroOstéo, CT, COUP, etc. ?

Qui nous dit que tu les a déclarées avec le bon type ?



Voici donc les déclarations correspondant à ta demande:

Dim PA As ADODB.Recordset 'dans les déclarations de la page en question
Dim Q As String ' dans les déclarations de la page
en question
Public NuméroOstéo As Integer ' dans un Module
Dim CD, CT As ADODB.Connection ' dans les déclarations de la page en
question.
Peut-être un problème à cet endroit avec deux connexions dans la même ligne
?

Ouverture de la connexion:
Set CT = New ADODB.Connection
CT.ConnectionString = CONNEXION
CT.Open

avec Public CONNEXION As String 'défini dans un module

CONNEXION = "Provider=microsoft.jet.oledb.4.0;Data Source=" & CHEMINBASE &
";Persist Security Infoúlse"

Public CHEMINBASE As String 'défini dans un module

et CHEMINBASE="//sony/applications/OstéoRéseau/Ostéoréseau.mdb" (ou
quelque chose de similaire). Cette valeur de CHEMINBASE est stockée dans une
table d'une base de données aauxiliaire. A la première ouverture du
logiciel, le praticien ouvre un contrôle dans lequel il sélectionne un
fichier donné.


Pour NuméroSostéo et CT, quelles sont les valeurs ?


NuméroOstéo=1
Il est défini par le choix que le praticien fait à l'ouverture du logiciel,
encliquant sur une grille des différents praticiens du Cabinet.

CT (cf ci-dessus)

Le On error est malvenu! Il t'empêche de savoir quelle ligne est
responsable du problème.


C'est pour cela que j'ai multiplié les messages d'avertissement dans la
procédure

Les caractères accentués sont une source d'erreur bien connue, et alors
dans les champs d'une DB, c'est franchement déconseillé ...


Qu'entends-tu par caractères accentués ? C'est à dire avec un accent ?
ou avec des majuscules ?


TextCoup = COUP
Peut-être une erreur dans cette ligne ?
A rempacer par TextCoup.Text=Csng(COUP) ?????


Mon conseil si tu veux essayer d'y voir un peu clair:

Commence par créer qq variables locales histoire de voir un peu mieux ce
qui se passe:

Dim szSql as String

szSql = "SELECT * FROM OSTEOPARAM WHERE OrdreOstéo=" & NuméroOstéo

PA.Open szSQL, CT, adOpenDynamic, adLockOptimistic

Enlève le On error Goto

Exécute ce code en pas en pas en mettant un point d'arret sur la ligne:

szSql = " ...

Examines le contenu de chacune des variables

Regarde sur quelle ligne l'erreur se produit.

Refais le test en exécutant ta requête directement sous Access

Refais depuis VB mais avec la base en local

Bref, fais le boulot classique d'un programmeur : étape par étape élimine
les causes possibles d'erreur.

Si tu n'as pas trouvé (mais à mon avis si tu suis ces étapes tu
vas trouver tout seul), tu peux revenir avec :

- Du code plus clair et plus petit, ciblant exactement l'endroit du
problème
- Une descrition détaillée:
. J'ai l'erreur "X" à la ligne "NNN". A ce moment, mes variables
ont es valeurs "a", "b", "c", etc.


--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;




Jean-marc
Le #15385281
>pierre.rivet wrote:



Je réponds moi aussi entre les lignes en espaçant bien

Bonjour Jean Marc, et merci de ton aide....




J'essaie en tout cas :-)


a) cette procédure fonctionne parfaitement bien depuis 5 ans que ce
soit en réseau ou en poste local



OK.


b) ces problèmes ne se produisent pas chez moi, mais chez un
utilisateur situé à 600 km de chez moi.



Ca n'aide pas.


Voici donc les déclarations correspondant à ta demande:

Dim PA As ADODB.Recordset 'dans les déclarations de la page en
question Dim Q As String ' dans les
déclarations de la page en question
Public NuméroOstéo As Integer ' dans un Module




Dim CD, CT As ADODB.Connection ' dans les déclarations de la page
en question.
Peut-être un problème à cet endroit avec deux connexions dans la même
ligne ?




ERREUR ici.

En VB, si tu fais :

Dim Toto, Titi as Integer

Et bien seul Titi est un Entier.

Toto est un variant.

La syntaxe correcte pour ton cas est au choix:

Dim CD As ADODB.Connection, CT As ADODB.Connection

Ou le classique :

Dim CD As ADODB.Connection
Dim CT As ADODB.Connection

Public CHEMINBASE As String 'défini dans un module



et CHEMINBASE="//sony/applications/OstéoRéseau/Ostéoréseau.mdb" (ou
quelque chose de similaire). Cette valeur de CHEMINBASE est stockée
dans une table d'une base de données aauxiliaire. A la première
ouverture du logiciel, le praticien ouvre un contrôle dans lequel il
sélectionne un fichier donné.




Perso, je m'assurerais que la base (le .mdb) n'est
pas en lecture seule, par accident :

Tu peux utiliser une fonction comme celle-ci :

Private Function IsReadOnly(FileName As String) As Boolean
Dim attr As VbFileAttribute

attr = GetAttr(FileName)

If (attr And vbReadOnly) = vbReadOnly Then
IsReadOnly = True
End If

End Function

Pour info, plein de trucs utiles dans cet article de notre FAQ:
http://faq.vb.free.fr/index.php?question2


Les caractères accentués sont une source d'erreur bien connue, et
alors dans les champs d'une DB, c'est franchement déconseillé ...


Qu'entends-tu par caractères accentués ? C'est à dire avec un accent ?
ou avec des majuscules ?



Oui, avec des accents; C'est une très très mauvaise pratique que
d'utiliser des accents dans les noms de variable, mais alors
c'est carrément interdit dans un nom de champ d'une BDD (pas portable,
pas nécessairement supporté partout, etc.)

Ceci dit je ne pense pas que ce soit le problème dans le cas
qui nous occupe.


TextCoup = COUP
Peut-être une erreur dans cette ligne ?
A rempacer par TextCoup.Text=Csng(COUP) ?????



Pas une "erreur", mais en tout cas une faute de goût.

1. Toujours spécifier la propriété (ici .Text) et ne jamais
utiliser la propriété par défaut.

2. Un champt text devrait être rempli avec une chaine de caractères.
Je suppose que COUP est un type numérique.

3. Les MAJUSCULES sont à réserver aux Constantes.

Donc il faudrait écrire en toute orthodoxie:

TextCoup.text = Str$(Coup)

// Pour résumer

- rectifier la déclaration de CT
- Vérifier (au moment le plus opportun) que le .mdb n'est pas en lecture
seule

- Comme tu opères le débuggage à distance, il va falloir écrire du code de
débuggage qui tienne la route.
Je peux te proposer ceci:

' La procédure de log :

Public Sub LogMessage(ByVal msg As String)
Dim f As Integer

f = FreeFile
Open App.Path & "log.txt" For Append As #f
Print #f, Date & "-" & Time & " " & msg
Close #f

End Sub


' Puis tu l'utilises dans ton code :

Public Sub MAJ_NOMBRE_COUPS_1()

On Error GoTo ErreurCoup

LogMessage ("Before SET PA")

Set PA = New ADODB.Recordset

LogMessage ("After SET PA")

Q = "adOpenDynamic, adLockOptimistic"
PA.open "select * from OSTEOPARAM where OrdreOstéo=" & NuméroOstéo, CT,
adOpenDynamic, adLockOptimistic

LogMessage ("After Open")

A!COUP = COUP

LogMessage ("After A!COUP")

PA.Update

LogMessage ("After Update")

PA.Close

LogMessage ("After Close)

TextCoup.Text = Str$(COUP)

Exit Sub

ErreurCoup:

MsgBox "Error in MAJ_NOMBRE_COUPS_1. Number=" & Err.Number & "
Description=" & Err.Description

Call MAJ_NOMBRE_COUPS_2
End Sub

Puis tu demandes à ton utilisateur de t'envoyer le log file.

Tu devrais finir par en voir le bout !

Bon courage!

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
pierre.rivet
Le #15385261
Merci Jean Marc,

C'est très riche tout ça!

Je viens de passer mon après midi à réecrire mon application en essayant de
supprimer un maximum de tables avec des champs sans accent. Ce n'est pas
fini, mais compte tenu de ce que tu m'écris, je crois que c'est la première
chose à faire....

Il ya des centaines d'ouvertures de tables !!!! si tu vois ce que je veux
dire...

Je dois m'absenter pour la soirée,

Je ne manquerai pas de te recontacter....

Merci encore et bon week end.

Pierre

"Jean-marc" de news: 47482c28$0$29257$
>pierre.rivet wrote:

Je réponds moi aussi entre les lignes en espaçant bien

Bonjour Jean Marc, et merci de ton aide....




J'essaie en tout cas :-)


a) cette procédure fonctionne parfaitement bien depuis 5 ans que ce
soit en réseau ou en poste local



OK.


b) ces problèmes ne se produisent pas chez moi, mais chez un
utilisateur situé à 600 km de chez moi.



Ca n'aide pas.


Voici donc les déclarations correspondant à ta demande:

Dim PA As ADODB.Recordset 'dans les déclarations de la page en
question Dim Q As String ' dans les
déclarations de la page en question
Public NuméroOstéo As Integer ' dans un Module




Dim CD, CT As ADODB.Connection ' dans les déclarations de la page
en question.
Peut-être un problème à cet endroit avec deux connexions dans la même
ligne ?




ERREUR ici.

En VB, si tu fais :

Dim Toto, Titi as Integer

Et bien seul Titi est un Entier.

Toto est un variant.

La syntaxe correcte pour ton cas est au choix:

Dim CD As ADODB.Connection, CT As ADODB.Connection

Ou le classique :

Dim CD As ADODB.Connection
Dim CT As ADODB.Connection

Public CHEMINBASE As String 'défini dans un module



et CHEMINBASE="//sony/applications/OstéoRéseau/Ostéoréseau.mdb" (ou
quelque chose de similaire). Cette valeur de CHEMINBASE est stockée
dans une table d'une base de données aauxiliaire. A la première
ouverture du logiciel, le praticien ouvre un contrôle dans lequel il
sélectionne un fichier donné.




Perso, je m'assurerais que la base (le .mdb) n'est
pas en lecture seule, par accident :

Tu peux utiliser une fonction comme celle-ci :

Private Function IsReadOnly(FileName As String) As Boolean
Dim attr As VbFileAttribute

attr = GetAttr(FileName)

If (attr And vbReadOnly) = vbReadOnly Then
IsReadOnly = True
End If

End Function

Pour info, plein de trucs utiles dans cet article de notre FAQ:
http://faq.vb.free.fr/index.php?question2


Les caractères accentués sont une source d'erreur bien connue, et
alors dans les champs d'une DB, c'est franchement déconseillé ...


Qu'entends-tu par caractères accentués ? C'est à dire avec un accent ?
ou avec des majuscules ?



Oui, avec des accents; C'est une très très mauvaise pratique que
d'utiliser des accents dans les noms de variable, mais alors
c'est carrément interdit dans un nom de champ d'une BDD (pas portable,
pas nécessairement supporté partout, etc.)

Ceci dit je ne pense pas que ce soit le problème dans le cas
qui nous occupe.


TextCoup = COUP
Peut-être une erreur dans cette ligne ?
A rempacer par TextCoup.Text=Csng(COUP) ?????



Pas une "erreur", mais en tout cas une faute de goût.

1. Toujours spécifier la propriété (ici .Text) et ne jamais
utiliser la propriété par défaut.

2. Un champt text devrait être rempli avec une chaine de caractères.
Je suppose que COUP est un type numérique.

3. Les MAJUSCULES sont à réserver aux Constantes.

Donc il faudrait écrire en toute orthodoxie:

TextCoup.text = Str$(Coup)

// Pour résumer

- rectifier la déclaration de CT
- Vérifier (au moment le plus opportun) que le .mdb n'est pas en lecture
seule

- Comme tu opères le débuggage à distance, il va falloir écrire du code de
débuggage qui tienne la route.
Je peux te proposer ceci:

' La procédure de log :

Public Sub LogMessage(ByVal msg As String)
Dim f As Integer

f = FreeFile
Open App.Path & "log.txt" For Append As #f
Print #f, Date & "-" & Time & " " & msg
Close #f

End Sub


' Puis tu l'utilises dans ton code :

Public Sub MAJ_NOMBRE_COUPS_1()

On Error GoTo ErreurCoup

LogMessage ("Before SET PA")

Set PA = New ADODB.Recordset

LogMessage ("After SET PA")

Q = "adOpenDynamic, adLockOptimistic"
PA.open "select * from OSTEOPARAM where OrdreOstéo=" & NuméroOstéo, CT,
adOpenDynamic, adLockOptimistic

LogMessage ("After Open")

A!COUP = COUP

LogMessage ("After A!COUP")

PA.Update

LogMessage ("After Update")

PA.Close

LogMessage ("After Close)

TextCoup.Text = Str$(COUP)

Exit Sub

ErreurCoup:

MsgBox "Error in MAJ_NOMBRE_COUPS_1. Number=" & Err.Number & "
Description=" & Err.Description

Call MAJ_NOMBRE_COUPS_2
End Sub

Puis tu demandes à ton utilisateur de t'envoyer le log file.

Tu devrais finir par en voir le bout !

Bon courage!

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;






Publicité
Poster une réponse
Anonyme