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

Attaches des tables

4 réponses
Avatar
Manon
Bonjour,

J'utilise une appli (Access 2003) qui fonctionne bien depuis quelques
années.
Comme celle-ci devient un peu lourde et que de plus en plus de personne
souhaitent l'utiliser je voudrais migrer les tables sur un SQL Server
Express.

J'ai fait des tests et l'assistant de migration fonctionne parfaitement.

J'ai quand même un problème : toutes les requêtes qui sont enregistrées en
tant que requêtes fonctionnent bien (elle sont lancées par des
docmd.openQuery) mais celles qui sont écrites en dur dans le code ne
fonctionne pas.

En fouillant un peu, je me suis aperçue que si je réécrivais celles-ci en
T-SQL c'était bon.

Ce n'est pas clair dans ma petite tête : pourquoi les requêtes "Access" ne
nécessitent pas d'être retouchées et celles du code si ?
C'est comme si elle ne passaient pas par le même "tuyau" !

Ma questions :
Peut-il s'agir de la façon dont j'attache mes tables ?

Jai fait des essais un peu à taton entre l'attache directe et les fichiers
DSN sans top comprendre. Un "copain-qui-connait-l'informatique" me dit
"passe par ODBC" et tu n'auras pas de problème. Mais il est où le "Monsieur
ODBC" ?

Ne me dites pas que je dois ré-écrire toutes les requêtes qu'il y a dans le
code sinon je vais pleurer très fort !

Merci d'avance pour vos conseils...
Manon.

4 réponses

Avatar
Michel__D
Bonjour,

Manon a écrit :
Bonjour,

J'utilise une appli (Access 2003) qui fonctionne bien depuis quelques
années.
Comme celle-ci devient un peu lourde et que de plus en plus de personne
souhaitent l'utiliser je voudrais migrer les tables sur un SQL Server
Express.

J'ai fait des tests et l'assistant de migration fonctionne parfaitement.



Donc tu dois utiliser une application.adp au lieu d'une application .mdb ?

J'ai quand même un problème : toutes les requêtes qui sont enregistrées en
tant que requêtes fonctionnent bien (elle sont lancées par des
docmd.openQuery) mais celles qui sont écrites en dur dans le code ne
fonctionne pas.



Le code VBA est plus difficile à migrer.

En fouillant un peu, je me suis aperçue que si je réécrivais celles-ci en
T-SQL c'était bon.

Ce n'est pas clair dans ma petite tête : pourquoi les requêtes "Access" ne
nécessitent pas d'être retouchées et celles du code si ?
C'est comme si elle ne passaient pas par le même "tuyau" !


>
Ma questions :
Peut-il s'agir de la façon dont j'attache mes tables ?



Non.

Jai fait des essais un peu à taton entre l'attache directe et les fichiers
DSN sans top comprendre. Un "copain-qui-connait-l'informatique" me dit
"passe par ODBC" et tu n'auras pas de problème. Mais il est où le "Monsieur
ODBC" ?

Ne me dites pas que je dois ré-écrire toutes les requêtes qu'il y a dans le
code sinon je vais pleurer très fort !

Merci d'avance pour vos conseils...
Manon.



Ton "copain-qui-connait-l'informatique" a voulu dire qu'en utilisant le
connecteur ODBC tu pourras utiliser ton application.mdb au lieu du projet.adp.

Le "Monsieur ODBC" est dans les outils d'aministration (panneau de configuration)
ensuite une fois que tu as créé une source de données ODBC utilisateur tu pourras
attacher tes tables SQL Server en choississant la source de données ODBC que tu
auras créé (n'oublie pas de cocher la case pour mémoriser le mot de passe).
Avatar
Manon
Merci Michel,

Non je n'ai pas un projet mais bien un ".mdb".
je détaille un peu mon problème :

J'ai du code qui ressemble un peu à ceci :

---
Dim Connection As New ADODB.Connection
Dim RecordSet As New ADODB.RecordSet

stConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &
CurrentProject.Path & "" & CurrentProject.Name & ";Persist Security
Infoúlse"

Requete = "SELECT IIf(TPers.NomPers='Léa','Léa est ici','Elle est pas
là') AS Test, TPers.NomPers FROM TPers;"

Connection.Open stConnect
RecordSet.Open Requete, Connection, 3, 3

Do While Not (RecordSet.EOF)
DataTest = RecordSet!Test
DataPers = RecordSet!NomPers
MsgBox DataPers & " : " & DataTest
RecordSet.MoveNext
Loop
RecordSet.Close
Connection.Close

---

Après avoir migrées mes tables sous SQL Server, j'ai changé ma chaîne de
connexion en :

stConnect = "Provider=SQLOLEDB.1;Persist Security Infoúlse;User
ID=Test;Password=test123;Initial CatalogºseTest;Data
Source=SERVEURSQLEXPRESS"

Et là, il me refuse toutes les requêtes qui sont dans le code.
Si je modifie les requêtes (en TSQL) et que j'ajoute un curseur, c'est ok :

Requete = "SELECT Case when TPers.NomPers='Léa' then 'Léa est ici' else
'Elle est pas là' end AS Test, TPers.NomPers FROM TPers;"
RecordSet.CursorLocation = adUseClient

---
Mais c'est un énorme boulot (l'appli comporte beaucoup de requêtes dans le
code).

Maintenant je viens de m'apercevoir que si je connecte manuellement mes
tables en "ODBC" (merci encore Michel), il semble que je n'ai rien à changer
!!!
Je laisse la même chaine de connexion qu'initialement :
stConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &
CurrentProject.Path & "" & CurrentProject.Name & ";Persist Security
Infoúlse"

et les routines semblent fonctionner ...
Sans trop connaître j'ai l'impression de demander à la base de se connecter
à elle-même (Jet) et non pas au serveur (SQL) ...
Est-ce "le Monsieur ODBC" qui se charge de traduire mes requêtes ? (si oui
il est vraiment gentil).

Pouvez-vous me dire si cette méthode est bonne ou dois-je m'attendre à des
problèmes ?

Merci encore pour vos conseils éclairés ...
Manon.



"Michel__D" a écrit dans le message de
news: OFgSB$
Bonjour,

Manon a écrit :
Bonjour,

J'utilise une appli (Access 2003) qui fonctionne bien depuis quelques
années.
Comme celle-ci devient un peu lourde et que de plus en plus de personne
souhaitent l'utiliser je voudrais migrer les tables sur un SQL Server
Express.

J'ai fait des tests et l'assistant de migration fonctionne parfaitement.



Donc tu dois utiliser une application.adp au lieu d'une application .mdb ?

J'ai quand même un problème : toutes les requêtes qui sont enregistrées
en tant que requêtes fonctionnent bien (elle sont lancées par des
docmd.openQuery) mais celles qui sont écrites en dur dans le code ne
fonctionne pas.



Le code VBA est plus difficile à migrer.

En fouillant un peu, je me suis aperçue que si je réécrivais celles-ci en
T-SQL c'était bon.

Ce n'est pas clair dans ma petite tête : pourquoi les requêtes "Access"
ne nécessitent pas d'être retouchées et celles du code si ?
C'est comme si elle ne passaient pas par le même "tuyau" !


>
Ma questions :
Peut-il s'agir de la façon dont j'attache mes tables ?



Non.

Jai fait des essais un peu à taton entre l'attache directe et les
fichiers DSN sans top comprendre. Un "copain-qui-connait-l'informatique"
me dit "passe par ODBC" et tu n'auras pas de problème. Mais il est où le
"Monsieur ODBC" ?

Ne me dites pas que je dois ré-écrire toutes les requêtes qu'il y a dans
le code sinon je vais pleurer très fort !

Merci d'avance pour vos conseils...
Manon.



Ton "copain-qui-connait-l'informatique" a voulu dire qu'en utilisant le
connecteur ODBC tu pourras utiliser ton application.mdb au lieu du
projet.adp.

Le "Monsieur ODBC" est dans les outils d'aministration (panneau de
configuration)
ensuite une fois que tu as créé une source de données ODBC utilisateur tu
pourras
attacher tes tables SQL Server en choississant la source de données ODBC
que tu
auras créé (n'oublie pas de cocher la case pour mémoriser le mot de
passe).


Avatar
Michel__D
Bonjour,

Manon a écrit :
Merci Michel,

Non je n'ai pas un projet mais bien un ".mdb".
je détaille un peu mon problème :

J'ai du code qui ressemble un peu à ceci :

---
Dim Connection As New ADODB.Connection
Dim RecordSet As New ADODB.RecordSet

stConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &
CurrentProject.Path & "" & CurrentProject.Name & ";Persist Security
Infoúlse"

Requete = "SELECT IIf(TPers.NomPers='Léa','Léa est ici','Elle est pas
là') AS Test, TPers.NomPers FROM TPers;"

Connection.Open stConnect
RecordSet.Open Requete, Connection, 3, 3

Do While Not (RecordSet.EOF)
DataTest = RecordSet!Test
DataPers = RecordSet!NomPers
MsgBox DataPers & " : " & DataTest
RecordSet.MoveNext
Loop
RecordSet.Close
Connection.Close

---

Après avoir migrées mes tables sous SQL Server, j'ai changé ma chaîne de
connexion en :

stConnect = "Provider=SQLOLEDB.1;Persist Security Infoúlse;User
ID=Test;Password=test123;Initial CatalogºseTest;Data
Source=SERVEURSQLEXPRESS"

Et là, il me refuse toutes les requêtes qui sont dans le code.
Si je modifie les requêtes (en TSQL) et que j'ajoute un curseur, c'est ok :

Requete = "SELECT Case when TPers.NomPers='Léa' then 'Léa est ici' else
'Elle est pas là' end AS Test, TPers.NomPers FROM TPers;"
RecordSet.CursorLocation = adUseClient

---
Mais c'est un énorme boulot (l'appli comporte beaucoup de requêtes dans le
code).




En gros tu n'avais pas de tables attachées, tu te connectais directement en
VBA à ton SQL server et forcément cela change tout.


Maintenant je viens de m'apercevoir que si je connecte manuellement mes
tables en "ODBC" (merci encore Michel), il semble que je n'ai rien à changer
!!!
Je laisse la même chaine de connexion qu'initialement :
stConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &
CurrentProject.Path & "" & CurrentProject.Name & ";Persist Security
Infoúlse"

et les routines semblent fonctionner ...
Sans trop connaître j'ai l'impression de demander à la base de se connecter
à elle-même (Jet) et non pas au serveur (SQL) ...




Si tu avais un frontal et un dorsal, cela équivaut en quelque sorte à
actualiser la liaison des tables.


Est-ce "le Monsieur ODBC" qui se charge de traduire mes requêtes ? (si oui
il est vraiment gentil).

Pouvez-vous me dire si cette méthode est bonne ou dois-je m'attendre à des
problèmes ?




C'est la 1ère phase de migration vers SQL Server et cela permet de continuer
d'utiliser ton ancienne application, maintenant si ton application doit
prendre de l'ampleur il faudra surement envisager d'aller au-dela de ce
simple changement d'attaches.


Merci encore pour vos conseils éclairés ...
Manon.



"Michel__D" a écrit dans le message de
news: OFgSB$
Bonjour,

Manon a écrit :
Bonjour,

J'utilise une appli (Access 2003) qui fonctionne bien depuis quelques
années.
Comme celle-ci devient un peu lourde et que de plus en plus de personne
souhaitent l'utiliser je voudrais migrer les tables sur un SQL Server
Express.

J'ai fait des tests et l'assistant de migration fonctionne parfaitement.


Donc tu dois utiliser une application.adp au lieu d'une application .mdb ?

J'ai quand même un problème : toutes les requêtes qui sont enregistrées
en tant que requêtes fonctionnent bien (elle sont lancées par des
docmd.openQuery) mais celles qui sont écrites en dur dans le code ne
fonctionne pas.


Le code VBA est plus difficile à migrer.

En fouillant un peu, je me suis aperçue que si je réécrivais celles-ci en
T-SQL c'était bon.

Ce n'est pas clair dans ma petite tête : pourquoi les requêtes "Access"
ne nécessitent pas d'être retouchées et celles du code si ?
C'est comme si elle ne passaient pas par le même "tuyau" !

Ma questions :
Peut-il s'agir de la façon dont j'attache mes tables ?


Non.

Jai fait des essais un peu à taton entre l'attache directe et les
fichiers DSN sans top comprendre. Un "copain-qui-connait-l'informatique"
me dit "passe par ODBC" et tu n'auras pas de problème. Mais il est où le
"Monsieur ODBC" ?

Ne me dites pas que je dois ré-écrire toutes les requêtes qu'il y a dans
le code sinon je vais pleurer très fort !

Merci d'avance pour vos conseils...
Manon.


Ton "copain-qui-connait-l'informatique" a voulu dire qu'en utilisant le
connecteur ODBC tu pourras utiliser ton application.mdb au lieu du
projet.adp.

Le "Monsieur ODBC" est dans les outils d'aministration (panneau de
configuration)
ensuite une fois que tu as créé une source de données ODBC utilisateur tu
pourras
attacher tes tables SQL Server en choississant la source de données ODBC
que tu
auras créé (n'oublie pas de cocher la case pour mémoriser le mot de
passe).






Avatar
Manon
> En gros tu n'avais pas de tables attachées, tu te connectais directement
en
VBA à ton SQL server et forcément cela change tout.



Oui : c'est exactement ça !


Si tu avais un frontal et un dorsal, cela équivaut en quelque sorte à
actualiser la liaison des tables.



C'est la 1ère phase de migration vers SQL Server et cela permet de
continuer
d'utiliser ton ancienne application, maintenant si ton application doit
prendre de l'ampleur il faudra surement envisager d'aller au-dela de ce
simple changement d'attaches.



Ok. Je comprends mieux ...
Puisqu'il faut bien commencer, je vais attaquer avec un simple changement
d'attaches.
Je pourrais ensuite tranquillement modifier "table par table" celles-ci et
refaire les requêtes liées en TSQL ...

En tout cas, merci pour ton expertise !
Manon.