OVH Cloud OVH Cloud

Pas bon Type d'objet

1 réponse
Avatar
Michel Lauzon \(lauziciel\)
Bonjour à tous,

Voici un bout de code qui fonctionnait bien avec un autre table... En
modifiant la structure de ma base de donnée, J'ai scindé la première table
pour concerver et surtout respecter l'intégrité référentiel des données...

Soit je lis un fichier texte pour en ressortitr les données et les placées
dans ma base de donnée... Je fais une première vérification dans la table
"TestVsF" si la Session n'a pas été lue encore (findfirst et nomatch). Bien
sur le champs "Session" est indexé avec doublons.

Donc je lis les lignes les lignes jusqu'à la ligne qui contient "SessionID".
J'en extrais le numéro de la session et le passe à la fonction
fCurrent.FindFirst (LaDate) (EX.: LaDate= "Session='673'").

J'obtiens un message d'erreur #3251: Opération non autorisée pour ce type
d'objet.

Quelques suggestions!!!???

Merci à l'avance

Set dbsCurrent = CurrentDb
Set tbCurrent = dbsCurrent.TableDefs![TubVsF]
Set rsdCurrent = tbCurrent.OpenRecordset
Set tfCurrent = dbsCurrent.TableDefs![TestVsF]
Set fCurrent = tfCurrent.OpenRecordset
Open SSNfile For Input As #1
i = 1
x = 1
Debug.Print SSNfile, i
Do While Not EOF(1)
PasOK = True
Line Input #1, Ligne
Debug.Print Ligne, i
If InStr(Ligne, "SessionID") <> 0 Then
TxtL = InStr(Ligne, "=")
SessionID = Mid(Ligne, TxtL + 1)
Debug.Print Ligne, SessionID, "TxtL= "; TxtL
LaDate = "Session='" & SessionID & "'"
Debug.Print LaDate
fCurrent.FindFirst (LaDate)
If Not fCurrent.NoMatch Then ...
....

Michel

1 réponse

Avatar
Eric
Bonjour Michel,

Sauf erreur de ma part,
tu appliques la méthode FindFirst sur un recordset de type Table et ca
ne marche pas. Il faut que tu ouvres ton recordset sur la table en mode
dbOpenDynaset(feuille de réponse dynamique) et non dbOpenTable, ce qui
est le cas par défaut si la source est une table et que le type de jeu
d'enregistrements n'est pas précisé.

A adapter :
Dim tfcurrent As String
tfcurrent = dbscurrent.TableDefs![TestVsF].Name
set fcurrent= dbscurrent.OpenRecordset(tfCurrent,dbOpenDynaset)

Une autre solution puisque la table est indéxée serait d'utiliser la
méthode Seek.

Bonjour à tous,

Voici un bout de code qui fonctionnait bien avec un autre table... En
modifiant la structure de ma base de donnée, J'ai scindé la première table
pour concerver et surtout respecter l'intégrité référentiel des données...

Soit je lis un fichier texte pour en ressortitr les données et les placées
dans ma base de donnée... Je fais une première vérification dans la table
"TestVsF" si la Session n'a pas été lue encore (findfirst et nomatch). Bien
sur le champs "Session" est indexé avec doublons.

Donc je lis les lignes les lignes jusqu'à la ligne qui contient "SessionID".
J'en extrais le numéro de la session et le passe à la fonction
fCurrent.FindFirst (LaDate) (EX.: LaDate= "Session='673'").

J'obtiens un message d'erreur #3251: Opération non autorisée pour ce type
d'objet.

Quelques suggestions!!!???

Merci à l'avance

Set dbsCurrent = CurrentDb
Set tbCurrent = dbsCurrent.TableDefs![TubVsF]
Set rsdCurrent = tbCurrent.OpenRecordset
Set tfCurrent = dbsCurrent.TableDefs![TestVsF]
Set fCurrent = tfCurrent.OpenRecordset
Open SSNfile For Input As #1
i = 1
x = 1
Debug.Print SSNfile, i
Do While Not EOF(1)
PasOK = True
Line Input #1, Ligne
Debug.Print Ligne, i
If InStr(Ligne, "SessionID") <> 0 Then
TxtL = InStr(Ligne, "=")
SessionID = Mid(Ligne, TxtL + 1)
Debug.Print Ligne, SessionID, "TxtL= "; TxtL
LaDate = "Session='" & SessionID & "'"
Debug.Print LaDate
fCurrent.FindFirst (LaDate)
If Not fCurrent.NoMatch Then ...
....

Michel




--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr