ACCESS - Problème (erreur 3622) après migration vers serveur SQL

Le
defer
Bonjour,

Comme l'indique le titre du message, j'ai fait une application pour gérer les congés dans une entreprise. J'ai trois tables : Salariés , Absences et planning_absences
Salariés étant relié à absences, absences étant relié à planning et Salariés comportant 2 clef internes vers la clef primaire ( le responsable du salarié et son pointeur)
Tout marchait donc j'ai décidé de faire migrer les tables d'access vers un serveur sql, en utilisant l'assistant d'access :
et en choisissant -> "créer une nouvelle base de donnée" puis j'ai choisi mon serveur
-> j'ai coché les 4 attributs de tables et "utiliser DRI"
-> enfin j'ai cocher "attacher des tables sql server à l'application
J'ai supprimé les tables avec le suffixe "_locale" puisque logiquement elles ne servent plus

Voilà pour le contexte, désolé d'être long mais je voulais bien décrire pour être bien aidé :)

Tout d'abord, après l'écran de démarrage, lorsque ma fonction VB tente d'accéder aux enregistrement d'une table, cela m'affiche "erreur 3622 Veuillez utiliser l'option dbSeechanges avec Openrecordset" qui me renvoit à chaque fois sur mes lignes

Set rs_sal_bis = CurrentDb.OpenRecordset("Salariés")

(Quelquesoit la table ou le nom de variable)

Après recherche sur internet et bidouillages :) j'ai rajouté en fin de chacune de mes fonctions "set Monrecordset = Nothing".
Cela résout le problème sauf pour 2 formulaires.

Donc voilà mes questions (enfin vous me direz ^^ ). Quel est exactement cette erreur 3622 ? Pourquoi le fait de réinitialiser la variable corrige dans certains cas et pas d'autres :s ? Et surtout comment y remédier "proprement"?

Je précise que j'ai déjà essayé :
Set rs_sal_bis = CurrentDb.OpenRecordset("Salariés",dbOpenDynamic, dbSeeChanges, dbOptimistic)
=> Erreur 3001 : argument non valide dommage
Set rs_sal_bis = CurrentDb.OpenRecordset("Salariés",, dbSeeChanges)
=> Erreur 3622 : . encore raté

Il me semble qu'il faudrait adapté ce type de code :
___________________________________________________________________________
Dim MaBase As Database
Dim MaRequêteTemp As QueryDef
Dim MonSQL as String
Dim TheValeur as integer
[initialisation de la valeur TheValeur]
MonSQL = "UPDATE MaTable set MonChamp = " & Chr(34) & "X" & Chr(34)
MonSQL = MonSQL & " where MonID = " & TheValeur & ";"
Set MaBase = CurrentDb
Set MaRequêteTemp = MaBase.CreateQueryDef("", MonSQL)
MaRequêteTemp.Execute dbSeeChanges
MaRequêteTemp.Close
Set MaBase = Nothing
__________________________________________________________________________

Au mien :
___________________________________________________________________________
Dim rs_plan As Recordset
'Pour la table planning_absences
Dim rs_abs As Recordset
'Pour la table absences
Dim rs_sal As Recordset
'Pour la table absences

Set rs_plan = CurrentDb.OpenRecordset("Planning_absences")
Set rs_abs = CurrentDb.OpenRecordset("Absences")
Set rs_sal = CurrentDb.OpenRecordset("Salariés")

rs_plan.MoveFirst
rs_abs.MoveFirst
rs_sal.MoveFirst

divers actions (parcourir la table, ajouter des données etc.)

Set rs_plan = Nothing
Set rs_abs = Nothing
Set rs_sal = Nothing
___________________________________________________________________________

Mais je n'ai guère l'envie de devoir me retaper tout mes formulaires pour pouvoir mettre mes données sur un serveur SQL

Merci d'avance pour vos réponses (Je me doute que peu de personnes auront lu jusqu'au merci ^^ ben tant pis pour eux)
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
defer
Le #22349031
defer a écrit le 12/07/2010 à 14h09 :
Bonjour,

Comme l'indique le titre du message, j'ai fait une application pour
gérer les congés dans une entreprise. J'ai trois tables :
Salariés , Absences et planning_absences
Salariés étant relié à absences, absences
étant relié à planning et Salariés comportant 2
clef internes vers la clef primaire ( le responsable du salarié et son
pointeur)
Tout marchait donc j'ai décidé de faire migrer les tables
d'access vers un serveur sql, en utilisant l'assistant d'access :
et en choisissant -> "créer une nouvelle base de
donnée" puis j'ai choisi mon serveur
-> j'ai coché les 4 attributs de tables et
"utiliser DRI"
-> enfin j'ai cocher "attacher des tables
sql server à l'application
J'ai supprimé les tables avec le suffixe "_locale" puisque
logiquement elles ne servent plus

Voilà pour le contexte, désolé d'être long mais je
voulais bien décrire pour être bien aidé :)

Tout d'abord, après l'écran de démarrage, lorsque ma
fonction VB tente d'accéder aux enregistrement d'une table, cela
m'affiche "erreur 3622 Veuillez utiliser l'option dbSeechanges avec
Openrecordset..." qui me renvoit à chaque fois sur mes lignes

Set rs_sal_bis = CurrentDb.OpenRecordset("Salariés")

(Quelquesoit la table ou le nom de variable)

Après recherche sur internet et bidouillages :) j'ai rajouté en
fin de chacune de mes fonctions "set Monrecordset = Nothing".
Cela résout le problème ... sauf pour 2 formulaires.

Donc voilà mes questions (enfin vous me direz ^^ ). Quel est exactement
cette erreur 3622 ? Pourquoi le fait de réinitialiser la variable
corrige dans certains cas et pas d'autres :s ? Et surtout comment y
remédier "proprement"?

Je précise que j'ai déjà essayé :
Set rs_sal_bis =
CurrentDb.OpenRecordset("Salariés",dbOpenDynamic,
dbSeeChanges, dbOptimistic)
=> Erreur 3001 : argument non valide ... dommage
Set rs_sal_bis = CurrentDb.OpenRecordset("Salariés",,
dbSeeChanges)
=> Erreur 3622 : .... encore raté

Il me semble qu'il faudrait adapté ce type de code :
___________________________________________________________________________
Dim MaBase As Database
Dim MaRequêteTemp As QueryDef
Dim MonSQL as String
Dim TheValeur as integer
[initialisation de la valeur TheValeur]
MonSQL = "UPDATE MaTable set MonChamp = " & Chr(34) &
"X" & Chr(34)
MonSQL = MonSQL & " where MonID = " & TheValeur &
";"
Set MaBase = CurrentDb
Set MaRequêteTemp = MaBase.CreateQueryDef("", MonSQL)
MaRequêteTemp.Execute dbSeeChanges
MaRequêteTemp.Close
Set MaBase = Nothing
__________________________________________________________________________

Au mien :
___________________________________________________________________________
Dim rs_plan As Recordset
'Pour la table planning_absences
Dim rs_abs As Recordset
'Pour la table absences
Dim rs_sal As Recordset
'Pour la table absences

Set rs_plan = CurrentDb.OpenRecordset("Planning_absences")
Set rs_abs = CurrentDb.OpenRecordset("Absences")
Set rs_sal = CurrentDb.OpenRecordset("Salariés")

rs_plan.MoveFirst
rs_abs.MoveFirst
rs_sal.MoveFirst

... divers actions (parcourir la table, ajouter des données etc.)

Set rs_plan = Nothing
Set rs_abs = Nothing
Set rs_sal = Nothing
___________________________________________________________________________

Mais je n'ai guère l'envie de devoir me retaper tout mes formulaires
pour pouvoir mettre mes données sur un serveur SQL

Merci d'avance pour vos réponses (Je me doute que peu de personnes
auront lu jusqu'au merci ^^ ben... tant pis pour eux)


J'ai encore bidouiller :)

Apparement le problème me restait sur ces 2 formulaire puisque j'avais 2 Recordset différents ouvert sur la même table dans la même fonction. Ceci ne posait aucun problème avant la migration vers SQL m'enfin bon...
J'ai donc modifié mon code afin d'utiliser qu'un seul recordset sur ma table "salariés" et ça a l'air de marcher.

Cependant les réponses m'interessent toujours, car quand on peut éviter de bidouiller, c'est mieux.

De plus, j'ai une autre question : Lors de l'ouverture de l'application, au premier accès à une table, on me demande le login et le mot de passe du serveur SQL (qui sont différent de mes identifiants windows).
Comment pourrais-je faire pour éviter de devoir rentrer ces informations manuellement ? (je ne peux demander à un utilisateur quelconque de devoir rentrer ses données lui-même, il me faudrait donc une procédure)

PS: ce serait possible d'enlever la citation du message précédent ? pck quand il y a des relou comme moi qui mettent des message de 3km de long, c'est assez génant ^^
defer
Le #22351711
defer a écrit le 12/07/2010 à 15h12 :
defer a écrit le 12/07/2010 à 14h09 :
Bonjour,

Comme l'indique le titre du message, j'ai fait une application pour
gérer les congés dans une entreprise. J'ai trois tables :
Salariés , Absences et planning_absences
Salariés étant relié à absences, absences
étant relié à planning et Salariés comportant 2
clef internes vers la clef primaire ( le responsable du salarié et son
pointeur)
Tout marchait donc j'ai décidé de faire migrer les tables
d'access vers un serveur sql, en utilisant l'assistant d'access :
et en choisissant -> "créer une nouvelle base de
donnée" puis j'ai choisi mon serveur
-> j'ai coché les 4 attributs de tables et
"utiliser DRI"
-> enfin j'ai cocher "attacher des tables
sql server à l'application
J'ai supprimé les tables avec le suffixe "_locale" puisque
logiquement elles ne servent plus

Voilà pour le contexte, désolé d'être long mais je
voulais bien décrire pour être bien aidé :)

Tout d'abord, après l'écran de démarrage, lorsque ma
fonction VB tente d'accéder aux enregistrement d'une table, cela
m'affiche "erreur 3622 Veuillez utiliser l'option dbSeechanges avec
Openrecordset..." qui me renvoit à chaque fois sur mes lignes

Set rs_sal_bis = CurrentDb.OpenRecordset("Salariés")

(Quelquesoit la table ou le nom de variable)

Après recherche sur internet et bidouillages :) j'ai rajouté en
fin de chacune de mes fonctions "set Monrecordset = Nothing".
Cela résout le problème ... sauf pour 2 formulaires.

Donc voilà mes questions (enfin vous me direz ^^ ). Quel est exactement
cette erreur 3622 ? Pourquoi le fait de réinitialiser la variable
corrige dans certains cas et pas d'autres :s ? Et surtout comment y
remédier "proprement"?

Je précise que j'ai déjà essayé :
Set rs_sal_bis =
CurrentDb.OpenRecordset("Salariés",dbOpenDynamic,
dbSeeChanges, dbOptimistic)
=> Erreur 3001 : argument non valide ... dommage
Set rs_sal_bis = CurrentDb.OpenRecordset("Salariés",,
dbSeeChanges)
=> Erreur 3622 : .... encore raté

Il me semble qu'il faudrait adapté ce type de code :
___________________________________________________________________________
Dim MaBase As Database
Dim MaRequêteTemp As QueryDef
Dim MonSQL as String
Dim TheValeur as integer
[initialisation de la valeur TheValeur]
MonSQL = "UPDATE MaTable set MonChamp = " & Chr(34) &
"X" & Chr(34)
MonSQL = MonSQL & " where MonID = " & TheValeur &
";"
Set MaBase = CurrentDb
Set MaRequêteTemp = MaBase.CreateQueryDef("", MonSQL)
MaRequêteTemp.Execute dbSeeChanges
MaRequêteTemp.Close
Set MaBase = Nothing
__________________________________________________________________________

Au mien :
___________________________________________________________________________
Dim rs_plan As Recordset
'Pour la table planning_absences
Dim rs_abs As Recordset
'Pour la table absences
Dim rs_sal As Recordset
'Pour la table absences

Set rs_plan = CurrentDb.OpenRecordset("Planning_absences")
Set rs_abs = CurrentDb.OpenRecordset("Absences")
Set rs_sal = CurrentDb.OpenRecordset("Salariés")

rs_plan.MoveFirst
rs_abs.MoveFirst
rs_sal.MoveFirst

... divers actions (parcourir la table, ajouter des données etc.)

Set rs_plan = Nothing
Set rs_abs = Nothing
Set rs_sal = Nothing
___________________________________________________________________________

Mais je n'ai guère l'envie de devoir me retaper tout mes formulaires
pour pouvoir mettre mes données sur un serveur SQL

Merci d'avance pour vos réponses (Je me doute que peu de personnes
auront lu jusqu'au merci ^^ ben... tant pis pour eux)



J'ai encore bidouiller :)

Apparement le problème me restait sur ces 2 formulaire puisque j'avais 2
Recordset différents ouvert sur la même table dans la même
fonction. Ceci ne posait aucun problème avant la migration vers SQL
m'enfin bon...
J'ai donc modifié mon code afin d'utiliser qu'un seul recordset sur ma
table "salariés" et ça a l'air de marcher.

Cependant les réponses m'interessent toujours, car quand on peut
éviter de bidouiller, c'est mieux.

De plus, j'ai une autre question : Lors de l'ouverture de l'application, au
premier accès à une table, on me demande le login et le mot de
passe du serveur SQL (qui sont différent de mes identifiants windows).
Comment pourrais-je faire pour éviter de devoir rentrer ces informations
manuellement ? (je ne peux demander à un utilisateur quelconque de
devoir rentrer ses données lui-même, il me faudrait donc une
procédure)

PS: ce serait possible d'enlever la citation du message précédent
? pck quand il y a des relou comme moi qui mettent des message de 3km de long,
c'est assez génant ^^


Edit :
Je viens de faire des tests "réels" de l'application avec 10 personnes. Le problème avec l'erreur 3622 revient... Il semblerait que ce soit lorsque plusieurs recordset parcourent la même table simultanément.
Est ce que quelqu'un pourrait m'aider svp?
RideHickul
Le #22354471
'lut,

Je suis pas spécialiste, mais j'ai fait un petit test et je tombe sur le
même problème ("Erreur 3001 : argument non valide") avec :
CurrentDb.OpenRecordset("Salariés",dbOpenDynamic, dbSeeChanges,
dbOptimistic)

En revanche, avec un "dbOpenDynaset" plutôt qu'un "dbOpenDynamic" cela
semble ok. Soit :
CurrentDb.OpenRecordset("Salariés",dbOpenDynaset , dbSeeChanges,
dbOptimistic)

En espérant que cela t'aidera ...

RideHickul.


Je précise que j'ai déjà essayé :
Set rs_sal_bis >>> CurrentDb.OpenRecordset("Salariés",dbOpenDynamic,
dbSeeChanges, dbOptimistic)
=> Erreur 3001 : argument non valide ... dommage
Set rs_sal_bis = CurrentDb.OpenRecordset("Salariés",,
dbSeeChanges)
=> Erreur 3622 : .... encore raté
defer
Le #22358281
defer a écrit le 12/07/2010 à 15h12 :
defer a écrit le 12/07/2010 à 14h09 :
Bonjour,

Comme l'indique le titre du message, j'ai fait une application pour
gérer les congés dans une entreprise. J'ai trois tables :
Salariés , Absences et planning_absences
Salariés étant relié à absences, absences
étant relié à planning et Salariés comportant 2
clef internes vers la clef primaire ( le responsable du salarié et son
pointeur)
Tout marchait donc j'ai décidé de faire migrer les tables
d'access vers un serveur sql, en utilisant l'assistant d'access :
et en choisissant -> "créer une nouvelle base de
donnée" puis j'ai choisi mon serveur
-> j'ai coché les 4 attributs de tables et
"utiliser DRI"
-> enfin j'ai cocher "attacher des tables
sql server à l'application
J'ai supprimé les tables avec le suffixe "_locale" puisque
logiquement elles ne servent plus

Voilà pour le contexte, désolé d'être long mais je
voulais bien décrire pour être bien aidé :)

Tout d'abord, après l'écran de démarrage, lorsque ma
fonction VB tente d'accéder aux enregistrement d'une table, cela
m'affiche "erreur 3622 Veuillez utiliser l'option dbSeechanges avec
Openrecordset..." qui me renvoit à chaque fois sur mes lignes

Set rs_sal_bis = CurrentDb.OpenRecordset("Salariés")

(Quelquesoit la table ou le nom de variable)

Après recherche sur internet et bidouillages :) j'ai rajouté en
fin de chacune de mes fonctions "set Monrecordset = Nothing".
Cela résout le problème ... sauf pour 2 formulaires.

Donc voilà mes questions (enfin vous me direz ^^ ). Quel est exactement
cette erreur 3622 ? Pourquoi le fait de réinitialiser la variable
corrige dans certains cas et pas d'autres :s ? Et surtout comment y
remédier "proprement"?

Je précise que j'ai déjà essayé :
Set rs_sal_bis =
CurrentDb.OpenRecordset("Salariés",dbOpenDynamic,
dbSeeChanges, dbOptimistic)
=> Erreur 3001 : argument non valide ... dommage
Set rs_sal_bis = CurrentDb.OpenRecordset("Salariés",,
dbSeeChanges)
=> Erreur 3622 : .... encore raté

Il me semble qu'il faudrait adapté ce type de code :
___________________________________________________________________________
Dim MaBase As Database
Dim MaRequêteTemp As QueryDef
Dim MonSQL as String
Dim TheValeur as integer
[initialisation de la valeur TheValeur]
MonSQL = "UPDATE MaTable set MonChamp = " & Chr(34) &
"X" & Chr(34)
MonSQL = MonSQL & " where MonID = " & TheValeur &
";"
Set MaBase = CurrentDb
Set MaRequêteTemp = MaBase.CreateQueryDef("", MonSQL)
MaRequêteTemp.Execute dbSeeChanges
MaRequêteTemp.Close
Set MaBase = Nothing
__________________________________________________________________________

Au mien :
___________________________________________________________________________
Dim rs_plan As Recordset
'Pour la table planning_absences
Dim rs_abs As Recordset
'Pour la table absences
Dim rs_sal As Recordset
'Pour la table absences

Set rs_plan = CurrentDb.OpenRecordset("Planning_absences")
Set rs_abs = CurrentDb.OpenRecordset("Absences")
Set rs_sal = CurrentDb.OpenRecordset("Salariés")

rs_plan.MoveFirst
rs_abs.MoveFirst
rs_sal.MoveFirst

... divers actions (parcourir la table, ajouter des données etc.)

Set rs_plan = Nothing
Set rs_abs = Nothing
Set rs_sal = Nothing
___________________________________________________________________________

Mais je n'ai guère l'envie de devoir me retaper tout mes formulaires
pour pouvoir mettre mes données sur un serveur SQL

Merci d'avance pour vos réponses (Je me doute que peu de personnes
auront lu jusqu'au merci ^^ ben... tant pis pour eux)



J'ai encore bidouiller :)

Apparement le problème me restait sur ces 2 formulaire puisque j'avais 2
Recordset différents ouvert sur la même table dans la même
fonction. Ceci ne posait aucun problème avant la migration vers SQL
m'enfin bon...
J'ai donc modifié mon code afin d'utiliser qu'un seul recordset sur ma
table "salariés" et ça a l'air de marcher.

Cependant les réponses m'interessent toujours, car quand on peut
éviter de bidouiller, c'est mieux.

De plus, j'ai une autre question : Lors de l'ouverture de l'application, au
premier accès à une table, on me demande le login et le mot de
passe du serveur SQL (qui sont différent de mes identifiants windows).
Comment pourrais-je faire pour éviter de devoir rentrer ces informations
manuellement ? (je ne peux demander à un utilisateur quelconque de
devoir rentrer ses données lui-même, il me faudrait donc une
procédure)

PS: ce serait possible d'enlever la citation du message précédent
? pck quand il y a des relou comme moi qui mettent des message de 3km de long,
c'est assez génant ^^


Salut,

Merci de la réponse, ça marche en mettant 3 arguments :) :

Set rs_abs = CurrentDb.OpenRecordset("Absences", dbOpenDynaset, dbSeeChanges)

Par contre, tu aurais une idée pour faire un code VB permettant de se connecter automatiquement au serveur SQL où sont stockées mes tables, sans avoir à rentrer le login et le mot de passe manuellement?
RideHickul
Le #22360901
'lut,
Salut,

Merci de la réponse, ça marche en mettant 3 arguments :) :

Set rs_abs = CurrentDb.OpenRecordset("Absences", dbOpenDynaset,
dbSeeChanges)

Par contre, tu aurais une idée pour faire un code VB permettant de se
connecter
automatiquement au serveur SQL où sont stockées mes tables, sans avoir à
rentrer
le login et le mot de passe manuellement?




1) Pitié : fait du menage dans tes posts ! je ne distingue plus où est la
question !!!

2) Voici la méthode que j'utilise.
- Je crée un fichier DSN (démarrer paramètres -Sources de données ODBC) dans
lequel je configure l'accès à la base SQL
- Dans un module, fais un copier / coller des 2 fonctions ci-dessous
- Dans la fonction "AttacheTable", mettre les paramètres correspondant à la
source (ServeurDSN= ..., FichierDSN =..., UserDSN = ..., MDPDSN = ...)
- Toujours dans la fonction "AttacheTable", mettre ensuite la liste de
toutes les tables à attacher (AttachDSNData "Table_Access_1",
"dbo.Table_SQLServer_1", ServeurDSN, FichierDSN, UserDSN, MDPDSN)

Remarque : fonctions dont je ne suis pas l'auteur, mais adaptées de
différentes sources (dont http://support.microsoft.com/kb/892490/fr) avec
l'aide de Maitre 3Stone ...

RideHickul

-------

Function AttacheTable()
'Attache les tables sur le serveur SQL

Dim ServeurDSN As String
Dim FichierDSN As String
Dim UserDSN As String
Dim MDPDSN As String


'Nom de la source (fichier .dsn)
ServeurDSN = "NOMORDISQLEXPRESS"
FichierDSN = "DataDSN"
UserDSN = "User"
MDPDSN = "mdp"


'Attaches des tables
AttachDSNData "TTable1", "dbo.TTable1", ServeurDSN, FichierDSN, UserDSN,
MDPDSN
AttachDSNData "TTable2", "dbo.TTable2", ServeurDSN, FichierDSN, UserDSN,
MDPDSN
AttachDSNData "TTable3", "dbo.TTable3", ServeurDSN, FichierDSN, UserDSN,
MDPDSN
'....

End Function

Function AttachDSNData(stLocalTableName As String, stRemoteTableName As
String, stServer As String, stDatabase As String, Optional stUsername As
String, Optional stPassword As String)

On Error GoTo AttachPB
Dim td As TableDef
Dim stConnect As String

For Each td In CurrentDb.TableDefs
If td.Name = stLocalTableName Then
CurrentDb.TableDefs.Delete stLocalTableName
End If
Next

stConnect = "ODBC;DRIVER=SQL Server;SERVER=" & stServer & ";DATABASE=" &
stDatabase & ";UID=" & stUsername & ";PWD=" & stPassword

'Création de la table attachée
Set td = CurrentDb.CreateTableDef(stLocalTableName, dbAttachSavePWD,
stRemoteTableName, stConnect)

'Ajout de l'objet
CurrentDb.TableDefs.Append td

'Retour de la fonction : ok !
AttachDSNData = True
Exit Function

AttachPB:

'Retour de la fonction : problème !
AttachDSNData = False
MsgBox "Impossible de lier la table - erreur n° " & Err.Description

End Function
defer
Le #22362301
RideHickul a écrit le 15/07/2010 à 23h49 :
'lut,
Salut,

Merci de la réponse, ça marche en mettant 3 arguments :) :

Set rs_abs = CurrentDb.OpenRecordset("Absences", dbOpenDynaset,
dbSeeChanges)

Par contre, tu aurais une idée pour faire un code VB permettant de se
connecter
automatiquement au serveur SQL où sont stockées mes tables, sans
avoir à
rentrer
le login et le mot de passe manuellement?





1) Pitié : fait du menage dans tes posts ! je ne distingue plus
où est la
question !!!

2) Voici la méthode que j'utilise.
- Je crée un fichier DSN (démarrer paramètres -Sources de
données ODBC) dans
lequel je configure l'accès à la base SQL
- Dans un module, fais un copier / coller des 2 fonctions ci-dessous
- Dans la fonction "AttacheTable", mettre les paramètres
correspondant à la
source (ServeurDSN= ..., FichierDSN =..., UserDSN = ..., MDPDSN = ...)
- Toujours dans la fonction "AttacheTable", mettre ensuite la liste
de
toutes les tables à attacher (AttachDSNData "Table_Access_1",
"dbo.Table_SQLServer_1", ServeurDSN, FichierDSN, UserDSN, MDPDSN)

Remarque : fonctions dont je ne suis pas l'auteur, mais adaptées de
différentes sources (dont http://support.microsoft.com/kb/892490/fr)
avec
l'aide de Maitre 3Stone ...

RideHickul

-------

Function AttacheTable()
'Attache les tables sur le serveur SQL

Dim ServeurDSN As String
Dim FichierDSN As String
Dim UserDSN As String
Dim MDPDSN As String


'Nom de la source (fichier .dsn)
ServeurDSN = "NOMORDISQLEXPRESS"
FichierDSN = "DataDSN"
UserDSN = "User"
MDPDSN = "mdp"


'Attaches des tables
AttachDSNData "TTable1", "dbo.TTable1", ServeurDSN,
FichierDSN, UserDSN,
MDPDSN
AttachDSNData "TTable2", "dbo.TTable2", ServeurDSN,
FichierDSN, UserDSN,
MDPDSN
AttachDSNData "TTable3", "dbo.TTable3", ServeurDSN,
FichierDSN, UserDSN,
MDPDSN
'....

End Function

Function AttachDSNData(stLocalTableName As String, stRemoteTableName As
String, stServer As String, stDatabase As String, Optional stUsername As
String, Optional stPassword As String)

On Error GoTo AttachPB
Dim td As TableDef
Dim stConnect As String

For Each td In CurrentDb.TableDefs
If td.Name = stLocalTableName Then
CurrentDb.TableDefs.Delete stLocalTableName
End If
Next

stConnect = "ODBC;DRIVER=SQL Server;SERVER=" & stServer &
";DATABASE=" &
stDatabase & ";UID=" & stUsername & ";PWD="
& stPassword

'Création de la table attachée
Set td = CurrentDb.CreateTableDef(stLocalTableName, dbAttachSavePWD,
stRemoteTableName, stConnect)

'Ajout de l'objet
CurrentDb.TableDefs.Append td

'Retour de la fonction : ok !
AttachDSNData = True
Exit Function

AttachPB:

'Retour de la fonction : problème !
AttachDSNData = False
MsgBox "Impossible de lier la table - erreur n° " &
Err.Description

End Function


Merci bien pour ton aide :)

désolé si mes posts ne sont pas clairs mais je trouve que c'est pas du tout pratique pour mettre en forme un texte sur ce site d'entraide. Si je savais comment faire un truc clair, je l'aurais fait.

A la prochaine ;)

(S'il faut mettre "ticket résolu" ou quelquechose comme ça, dit moi où c'est parce que je ne connais pas le fonctionnement du site merci)
Publicité
Poster une réponse
Anonyme