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)
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)
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)
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 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 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 ^^
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é
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é
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 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 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 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?
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?
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?
'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
'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
'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