2010-08-18 4 views
0

comment enregistrer des données à partir de ms acess front end à ms sql backend?comment enregistrer des données à partir de ms acess front end à ms sql backend?

+0

Comment voulez-vous faire cela? Avec - VBA et ADO, tables Access liées dans SQL Server, tables SQL Server liées dans Access ou une combinaison? – Fionnuala

+0

Peut-être que l'utilisateur manque de compréhension fondamentale de la division frontale et back-end? – Smandoli

+0

avec vba et ADO – user335160

Répondre

1

Il est presque toujours préférable d'utiliser des tables liées. Cela rend la vie beaucoup plus facile, car vous pouvez mettre à jour les tables et les vues SQL Server plus ou moins de la même manière que vous mettez à jour une table Access. Un autre bon moyen est d'utiliser des requêtes de passe: http://support.microsoft.com/kb/303968

Cela étant dit, voici quelques notes brutes.

La meilleure façon d'obtenir une chaîne ODBC utile est de lier une table à l'aide de l'assistant, vous pouvez le regarder à l'aide CurrentDB.TableDefs("NameOfLinkedTable").Connect

Vous pouvez utiliser la chaîne comme ceci:

Dim db As Database 
Set db = CurrentDb 

strConnect = "ODBC;Description=Test;DRIVER=SQL Server;" _ 
      & "SERVER=ServerAddress;Trusted_Connection=Yes;DATABASE=DBName" 

strSQL = "INSERT INTO [" & strConnect & "].[SomeSQLServerTable] (ID, AText) " _ 
     & "SELECT a.ID, a.Descr FROM SomeAccessTable As a " _ 
     & "LEFT JOIN [" & strConnect & "].[SomeSQLServerTable] s " _ 
     & "ON s.ID=a.ID " _ 
     & "WHERE s.ID Is Null" 

db.Execute strSQL, dbFailOnError 
Debug.Print db.RecordsAffected 

Vous peut également mettre à jour avec ADO. Il y a beaucoup d'informations se trouvent ici: http://msdn.microsoft.com/en-us/library/ms130978.aspx Vous pouvez obtenir des chaînes de connexion ici: http://www.connectionstrings.com/

Et quelques-unes des choses bizarres que vous pouvez faire:

Dim cn As New ADODB.Connection 
Dim RecsAffected As Long 
Dim scn As String, sSQL As String 

''Using SQL Server connection native client 
scn = "Provider=SQLNCLI10;Server=ServerAddress;" _ 
    & "Database=DBName; Trusted_Connection=yes;" 

cn.Open scn 

sSQL = "INSERT INTO NewSQLServerTable " _ 
    & "SELECT * FROM OPENROWSET " _ 
    & "('Microsoft.ACE.OLEDB.12.0','C:\docs\ltd.mdb';'Admin';, " _ 
    & "'SELECT * FROM OldAccessTable')" 

cn.Execute sSQL, RecsAffected 

Debug.Print RecsAffected 

Ou

Dim cn As New ADODB.Connection 
Dim RecsAffected As Long 
Dim scn As String, sSQL As String 

''Using Jet connection 
Set cn = CurrentProject.Connection 

strConnect = "ODBC;Description=Test;DRIVER=SQL Server;" _ 
      & "SERVER=ServerAddress;Trusted_Connection=Yes;DATABASE=DBName" 

sSQL = "INSERT INTO [" & strConnect & "].NewSQLServerTable " _ 
    & "SELECT * FROM OldAccessTable" 

cn.Execute sSQL, RecsAffected 


''Using Jet & an external mdb 
sSQL = "INSERT INTO [" & strConnect & "].NewSQLServerTable " _ 
    & "SELECT * FROM OldAccessTable IN " _ 
    & "'C:\docs\ltd.mdb'" 

cn.Execute sSQL, RecsAffected 

Debug.Print RecsAffected 
+0

Pour échapper à la dépendance sur le DSN, le code de Doug Steele est bon: http://www.accessmvp.com/DJSteele/DSNLessLinks.html –

+0

Salut Remou, y at-il un problème lors de l'utilisation de votre approche. Je pense que la table d'accès ms augmentera sa taille de fichier lors de l'utilisation de tables liées en fonction du contenu de chaque table dans ms sql. Rappelez-vous que Ms Access est capable que jusqu'à 2 Go. C'est pourquoi j'ai utilisé VBA et ADO, en utilisant une approche à trois niveaux. Je sais que le développement sera plus lent que l'utilisation de tables liées, mais je suis sûr que l'application fonctionnera sans problème à long terme. Des idées? – user335160

+0

Les tables liées n'ont presque aucun effet sur la taille de mdb/accdb et Access a souvent été utilisé pour les frontaux SQL Server. Je viens d'essayer cela, et voici quelques chiffres: MDB 180KB: Table liée = 3,4 Go, lignes 90533, comprend une colonne «mémo»: MDB Après avoir lié cette table 252 kb. Je ne recommanderais pas d'analyser toutes ces lignes sauf si vous avez un ordinateur rapide, mais il n'y aurait pas beaucoup de circonstances où vous auriez besoin de tous les enregistrements dans un jeu d'enregistrements, une vue d'une certaine description sera plus conviviale. – Fionnuala

Questions connexes