Synchro Access SQl Server

Le
Bret
Bonjour à toutes et à tous,

J'ai un .mde qui contient des données statiques et semi-statiques. Mes
tables vivantes et semi-statiques sont sur une base SQL Server.

Pour gérer mes tables vivantes aucun problème.
Mes tables statiques non plus (on change le .mde).

Pour mes tables semi-statiques, je souhaite que l'utilisateur, lors de la
première connexion charge uniquement les enregistrements qui le concerne dans
la table locale à partir de la table sql server.

Comment faire un truc du genre :
INSERT INTO Table_Locale
SELECT * FROM Table_distante
WHERE maCondition = vrai;

je ne vois pas comment l'écrire Si ce n'est pas possible quelles
solutions envisagez vous ?

Merci à tous
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
FFO
Le #6198841
Je pense avoir eu le même souci
Je m'explique :
une base oracle avec une table dont je souhaitais extraire des occurences
selon un certain critére pour alimenter une table d'une base Access

Aprés avoir cherché posé des questions sur différents forums j'ai réussi à
obtenir satisfaction de la manière suivante :
Aprés avoir établi une connection à ma base ORACLE par la commande
wrkJet.OpenDatabase(paramètre de connexion)
Alimentation d'une table équivalente de celle d'access (même structure) dans
la base Oracle par des commandes ODBC.execute ("Requète SQL avec mes
conditions")
rapatriement de cette table en l'état dans ma base acces par la commande :
DoCmd.TransferDatabase
Insertion dans la table finale des occurences de la table rapatriée et
suppression de la table rapatriée par des commandes CurrentDb.Execute
("Requète SQL")

Celà fonctionne à merveille mais je ne sais pas si celà répond à ton attente
Dans l'afirmative je peux te communiquer un extrait de mon code que tu
pourras adapter

Peut être t'aurais je aidé !!!



Bonjour à toutes et à tous,

J'ai un .mde qui contient des données statiques et semi-statiques. Mes
tables vivantes et semi-statiques sont sur une base SQL Server.

Pour gérer mes tables vivantes aucun problème.
Mes tables statiques non plus (on change le .mde).

Pour mes tables semi-statiques, je souhaite que l'utilisateur, lors de la
première connexion charge uniquement les enregistrements qui le concerne dans
la table locale à partir de la table sql server.

Comment faire un truc du genre :
INSERT INTO Table_Locale
SELECT * FROM Table_distante
WHERE maCondition = vrai;

je ne vois pas comment l'écrire... Si ce n'est pas possible quelles
solutions envisagez vous ?

Merci à tous


Bret
Le #6198821
Bonjour FFO et merci

Ta solution m'interese !

Actuellement, j'ai contourné le problème avec :
un delete de la table access selon critère
une recherche des enregistrements sur SQL server dans un recorset
une boucle sur le recordset
à chaque item un insert dans la table access

Mais je trouve ça un peu lourd

Je reprends demain matin


Je pense avoir eu le même souci
Je m'explique :
une base oracle avec une table dont je souhaitais extraire des occurences
selon un certain critére pour alimenter une table d'une base Access

Aprés avoir cherché posé des questions sur différents forums j'ai réussi à
obtenir satisfaction de la manière suivante :
Aprés avoir établi une connection à ma base ORACLE par la commande
wrkJet.OpenDatabase(paramètre de connexion)
Alimentation d'une table équivalente de celle d'access (même structure) dans
la base Oracle par des commandes ODBC.execute ("Requète SQL avec mes
conditions")
rapatriement de cette table en l'état dans ma base acces par la commande :
DoCmd.TransferDatabase
Insertion dans la table finale des occurences de la table rapatriée et
suppression de la table rapatriée par des commandes CurrentDb.Execute
("Requète SQL")

Celà fonctionne à merveille mais je ne sais pas si celà répond à ton attente
Dans l'afirmative je peux te communiquer un extrait de mon code que tu
pourras adapter

Peut être t'aurais je aidé !!!



Bonjour à toutes et à tous,

J'ai un .mde qui contient des données statiques et semi-statiques. Mes
tables vivantes et semi-statiques sont sur une base SQL Server.

Pour gérer mes tables vivantes aucun problème.
Mes tables statiques non plus (on change le .mde).

Pour mes tables semi-statiques, je souhaite que l'utilisateur, lors de la
première connexion charge uniquement les enregistrements qui le concerne dans
la table locale à partir de la table sql server.

Comment faire un truc du genre :
INSERT INTO Table_Locale
SELECT * FROM Table_distante
WHERE maCondition = vrai;

je ne vois pas comment l'écrire... Si ce n'est pas possible quelles
solutions envisagez vous ?

Merci à tous




FFO
Le #6198431
Bonjours Bret,
Ci-aprés ma solution

Toute les mentions balisées par [] doivent être actualisées de tes propres
paramètres sans maintenir les []
Important : la rubrique "Microsoft DAO (version la plus récente) Object
Library" doit être sélectionnée dans la liste des Références
(Outils/Références)
Définitions
Table : Table SQL server de même structure que la table Access à alimenter
Table source : table SQL server d'où l'on prend les données selon condition
Table importée : table Access temporaire rapatriant les donnée souhaitées
d'SQL server
Table finale : table Access à alimenter

Le code :

Public Function Table() As Boolean
'Création d'un espace de travail SQL server
Set wrkJet = CreateWorkspace("", "[User du SQL server]", "", dbUseODBC)
Set ODBC = wrkJet.OpenDatabase("[Nom du SQL server]", False, False,
"ODBC;DSN=[Service Name du SQL server];PWD=[Password du SQL server]")
'supression des occurences éventuellement présentes dans la table SQL server
ODBC.Execute "Delete from [Table] ;"
'insertion des nouvelles occurences selon conditions
ODBC.Execute "Insert into [Table] Select * from [Table source] Where
[conditions] ;"
'vérification de la présence de la table à importer dans Access avec
commande de suppression (non obligatoire mais conseillé)
For Each tdf In CurrentDb.TableDefs
If tdf.Name = "[Table importée]" Then
CurrentDb.Execute "Drop [Table importée]"
End If
Next
'Importation dans Access de la table SQL server
DoCmd.TransferDatabase acImport, "Base de données ODBC", "ODBC;DSN=[Service
Name du SQL server];PWD=[Password du SQL server]", acTable, "[Table importée
Access]", "[Table SQL server]"
'Insertion dans la table Access finale des occurences de la table rapatriée
de SQL server
CurrentDb.Execute "Insert into [Table finale] select * from [Table importée]
;"
'Suppression de la table importée d'SQL server
CurrentDb.Execute "Drop table [Table importée] ;"
wrkJet.Close
End Function

Tiens moi informé du résultat


Bonjour FFO et merci

Ta solution m'interese !

Actuellement, j'ai contourné le problème avec :
un delete de la table access selon critère
une recherche des enregistrements sur SQL server dans un recorset
une boucle sur le recordset
à chaque item un insert dans la table access

Mais je trouve ça un peu lourd

Je reprends demain matin


Je pense avoir eu le même souci
Je m'explique :
une base oracle avec une table dont je souhaitais extraire des occurences
selon un certain critére pour alimenter une table d'une base Access

Aprés avoir cherché posé des questions sur différents forums j'ai réussi à
obtenir satisfaction de la manière suivante :
Aprés avoir établi une connection à ma base ORACLE par la commande
wrkJet.OpenDatabase(paramètre de connexion)
Alimentation d'une table équivalente de celle d'access (même structure) dans
la base Oracle par des commandes ODBC.execute ("Requète SQL avec mes
conditions")
rapatriement de cette table en l'état dans ma base acces par la commande :
DoCmd.TransferDatabase
Insertion dans la table finale des occurences de la table rapatriée et
suppression de la table rapatriée par des commandes CurrentDb.Execute
("Requète SQL")

Celà fonctionne à merveille mais je ne sais pas si celà répond à ton attente
Dans l'afirmative je peux te communiquer un extrait de mon code que tu
pourras adapter

Peut être t'aurais je aidé !!!



Bonjour à toutes et à tous,

J'ai un .mde qui contient des données statiques et semi-statiques. Mes
tables vivantes et semi-statiques sont sur une base SQL Server.

Pour gérer mes tables vivantes aucun problème.
Mes tables statiques non plus (on change le .mde).

Pour mes tables semi-statiques, je souhaite que l'utilisateur, lors de la
première connexion charge uniquement les enregistrements qui le concerne dans
la table locale à partir de la table sql server.

Comment faire un truc du genre :
INSERT INTO Table_Locale
SELECT * FROM Table_distante
WHERE maCondition = vrai;

je ne vois pas comment l'écrire... Si ce n'est pas possible quelles
solutions envisagez vous ?

Merci à tous






Bret
Le #6198351
Bonjour FFO,

Merci pour le code, c'est exactement ce qu'il me faut !

Utilisateur aidé


Bonjours Bret,
Ci-aprés ma solution

Toute les mentions balisées par [] doivent être actualisées de tes propres
paramètres sans maintenir les []
Important : la rubrique "Microsoft DAO (version la plus récente) Object
Library" doit être sélectionnée dans la liste des Références
(Outils/Références)
Définitions
Table : Table SQL server de même structure que la table Access à alimenter
Table source : table SQL server d'où l'on prend les données selon condition
Table importée : table Access temporaire rapatriant les donnée souhaitées
d'SQL server
Table finale : table Access à alimenter

Le code :

Public Function Table() As Boolean
'Création d'un espace de travail SQL server
Set wrkJet = CreateWorkspace("", "[User du SQL server]", "", dbUseODBC)
Set ODBC = wrkJet.OpenDatabase("[Nom du SQL server]", False, False,
"ODBC;DSN=[Service Name du SQL server];PWD=[Password du SQL server]")
'supression des occurences éventuellement présentes dans la table SQL server
ODBC.Execute "Delete from [Table] ;"
'insertion des nouvelles occurences selon conditions
ODBC.Execute "Insert into [Table] Select * from [Table source] Where
[conditions] ;"
'vérification de la présence de la table à importer dans Access avec
commande de suppression (non obligatoire mais conseillé)
For Each tdf In CurrentDb.TableDefs
If tdf.Name = "[Table importée]" Then
CurrentDb.Execute "Drop [Table importée]"
End If
Next
'Importation dans Access de la table SQL server
DoCmd.TransferDatabase acImport, "Base de données ODBC", "ODBC;DSN=[Service
Name du SQL server];PWD=[Password du SQL server]", acTable, "[Table importée
Access]", "[Table SQL server]"
'Insertion dans la table Access finale des occurences de la table rapatriée
de SQL server
CurrentDb.Execute "Insert into [Table finale] select * from [Table importée]
;"
'Suppression de la table importée d'SQL server
CurrentDb.Execute "Drop table [Table importée] ;"
wrkJet.Close
End Function

Tiens moi informé du résultat


Bonjour FFO et merci

Ta solution m'interese !

Actuellement, j'ai contourné le problème avec :
un delete de la table access selon critère
une recherche des enregistrements sur SQL server dans un recorset
une boucle sur le recordset
à chaque item un insert dans la table access

Mais je trouve ça un peu lourd

Je reprends demain matin


Je pense avoir eu le même souci
Je m'explique :
une base oracle avec une table dont je souhaitais extraire des occurences
selon un certain critére pour alimenter une table d'une base Access

Aprés avoir cherché posé des questions sur différents forums j'ai réussi à
obtenir satisfaction de la manière suivante :
Aprés avoir établi une connection à ma base ORACLE par la commande
wrkJet.OpenDatabase(paramètre de connexion)
Alimentation d'une table équivalente de celle d'access (même structure) dans
la base Oracle par des commandes ODBC.execute ("Requète SQL avec mes
conditions")
rapatriement de cette table en l'état dans ma base acces par la commande :
DoCmd.TransferDatabase
Insertion dans la table finale des occurences de la table rapatriée et
suppression de la table rapatriée par des commandes CurrentDb.Execute
("Requète SQL")

Celà fonctionne à merveille mais je ne sais pas si celà répond à ton attente
Dans l'afirmative je peux te communiquer un extrait de mon code que tu
pourras adapter

Peut être t'aurais je aidé !!!



Bonjour à toutes et à tous,

J'ai un .mde qui contient des données statiques et semi-statiques. Mes
tables vivantes et semi-statiques sont sur une base SQL Server.

Pour gérer mes tables vivantes aucun problème.
Mes tables statiques non plus (on change le .mde).

Pour mes tables semi-statiques, je souhaite que l'utilisateur, lors de la
première connexion charge uniquement les enregistrements qui le concerne dans
la table locale à partir de la table sql server.

Comment faire un truc du genre :
INSERT INTO Table_Locale
SELECT * FROM Table_distante
WHERE maCondition = vrai;

je ne vois pas comment l'écrire... Si ce n'est pas possible quelles
solutions envisagez vous ?

Merci à tous








FFO
Le #6198201
Trés heureux de t'avoir aidé !!!
La cerise sur le gateau :
En inversant cette philosophie on peut alimenter une table SQL server avec
les données d'une table Access de la même manière :
Requètes SQL de SQL server à utiliser pour Access et vice versa
Export de la table temporaire d'access vers SQL Server par la commande :
DoCmd.TransferDatabase acExport
Et le tour est joué

A bientôt peut être

Bonjour FFO,

Merci pour le code, c'est exactement ce qu'il me faut !

Utilisateur aidé


Bonjours Bret,
Ci-aprés ma solution

Toute les mentions balisées par [] doivent être actualisées de tes propres
paramètres sans maintenir les []
Important : la rubrique "Microsoft DAO (version la plus récente) Object
Library" doit être sélectionnée dans la liste des Références
(Outils/Références)
Définitions
Table : Table SQL server de même structure que la table Access à alimenter
Table source : table SQL server d'où l'on prend les données selon condition
Table importée : table Access temporaire rapatriant les donnée souhaitées
d'SQL server
Table finale : table Access à alimenter

Le code :

Public Function Table() As Boolean
'Création d'un espace de travail SQL server
Set wrkJet = CreateWorkspace("", "[User du SQL server]", "", dbUseODBC)
Set ODBC = wrkJet.OpenDatabase("[Nom du SQL server]", False, False,
"ODBC;DSN=[Service Name du SQL server];PWD=[Password du SQL server]")
'supression des occurences éventuellement présentes dans la table SQL server
ODBC.Execute "Delete from [Table] ;"
'insertion des nouvelles occurences selon conditions
ODBC.Execute "Insert into [Table] Select * from [Table source] Where
[conditions] ;"
'vérification de la présence de la table à importer dans Access avec
commande de suppression (non obligatoire mais conseillé)
For Each tdf In CurrentDb.TableDefs
If tdf.Name = "[Table importée]" Then
CurrentDb.Execute "Drop [Table importée]"
End If
Next
'Importation dans Access de la table SQL server
DoCmd.TransferDatabase acImport, "Base de données ODBC", "ODBC;DSN=[Service
Name du SQL server];PWD=[Password du SQL server]", acTable, "[Table importée
Access]", "[Table SQL server]"
'Insertion dans la table Access finale des occurences de la table rapatriée
de SQL server
CurrentDb.Execute "Insert into [Table finale] select * from [Table importée]
;"
'Suppression de la table importée d'SQL server
CurrentDb.Execute "Drop table [Table importée] ;"
wrkJet.Close
End Function

Tiens moi informé du résultat


Bonjour FFO et merci

Ta solution m'interese !

Actuellement, j'ai contourné le problème avec :
un delete de la table access selon critère
une recherche des enregistrements sur SQL server dans un recorset
une boucle sur le recordset
à chaque item un insert dans la table access

Mais je trouve ça un peu lourd

Je reprends demain matin


Je pense avoir eu le même souci
Je m'explique :
une base oracle avec une table dont je souhaitais extraire des occurences
selon un certain critére pour alimenter une table d'une base Access

Aprés avoir cherché posé des questions sur différents forums j'ai réussi à
obtenir satisfaction de la manière suivante :
Aprés avoir établi une connection à ma base ORACLE par la commande
wrkJet.OpenDatabase(paramètre de connexion)
Alimentation d'une table équivalente de celle d'access (même structure) dans
la base Oracle par des commandes ODBC.execute ("Requète SQL avec mes
conditions")
rapatriement de cette table en l'état dans ma base acces par la commande :
DoCmd.TransferDatabase
Insertion dans la table finale des occurences de la table rapatriée et
suppression de la table rapatriée par des commandes CurrentDb.Execute
("Requète SQL")

Celà fonctionne à merveille mais je ne sais pas si celà répond à ton attente
Dans l'afirmative je peux te communiquer un extrait de mon code que tu
pourras adapter

Peut être t'aurais je aidé !!!



Bonjour à toutes et à tous,

J'ai un .mde qui contient des données statiques et semi-statiques. Mes
tables vivantes et semi-statiques sont sur une base SQL Server.

Pour gérer mes tables vivantes aucun problème.
Mes tables statiques non plus (on change le .mde).

Pour mes tables semi-statiques, je souhaite que l'utilisateur, lors de la
première connexion charge uniquement les enregistrements qui le concerne dans
la table locale à partir de la table sql server.

Comment faire un truc du genre :
INSERT INTO Table_Locale
SELECT * FROM Table_distante
WHERE maCondition = vrai;

je ne vois pas comment l'écrire... Si ce n'est pas possible quelles
solutions envisagez vous ?

Merci à tous










Publicité
Poster une réponse
Anonyme