INSERT d'une table dans MS SQL depuis une table dans ACCESS
Bonjour à tous,
Je cale sur un problème que je pensais assez simple, mais pour lequel je n'ai pas trouvé de solution simple finalement...
Je cherche à faire un INSERT INTO sur une table située dans une base MS SQL, d'enregistrements situés dans une table de ma base ACCESS.
Existe-t-il une instruction simple en utilisant ADODB ? je n'ai pas trouvé... j'ai lu que je pouvais importer avec liaison la table SQL dans ma base ACCESS et faire l'INSERT INTO dans ACCESS mais dans mon cas ça ne va pas car la table SQL est énorme et je crains d'avoir de mauvaises performances. J'ai également lu que je pouvais utiliser l'instruction OPENROWSET dans une chaîne qui serait exécutée coté SQL mais je n'arrive pas à la paramétrer : peut-on profiter de la connection ouverte entre ACCESS et SQL pour cette instruction, ou faut-il déclarer la base access avec son adresse complète ?
Bref je n'ai trouvé comme solution que de passer pas un recordset dans lequel je charge ma table Access et j'insère un à un les enregistrement de mon recorset dans ma table SQL par une commande ADO (voir code plus bas).
Mille mercis à tous ceux qui pourront me mettre sur la voie d'une solution plus simple et performante...:D
Stargates
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
Private Sub UpdateTableSQL()
Dim rs As Recordset
Dim cmd As New ADODB.Command
Dim strSQL As String
strSQL = "INSERT INTO dbo.Assistant (TA_Initials, TA_Name) VALUES(?,?)"
Set rs = CurrentDb.OpenRecordset("TableAccess", dbOpenTable)
If rs.EOF Then Exit Sub
Connect
While Not rs.EOF
Set cmd = ExecSQL(cn, strSQL, rs(1), rs(2))
cmd.Execute
rs.MoveNext
Wend
Disconnect
End Sub
Public Function ExecSQL(cn As ADODB.Connection, strSQL As String, ParamArray Params() As Variant) As ADODB.Command
Dim cmd As New ADODB.Command
cmd.ActiveConnection = cn
cmd.CommandType = adCmdText
cmd.CommandText = strSQL
Dim pr As Variant
For Each pr In Params
Set pr = cmd.CreateParameter(, GetTypeParm(VarType(pr)), adParamInput, Len(pr), pr)
cmd.Parameters.Append pr
Next pr
Set ExecSQL = cmd
End Function
Public Function GetTypeParm(typeVar As Integer) As Long
Select Case typeVar
Case 2: GetTypeParm = adInteger
Case 3: GetTypeParm = adInteger
Case 4: GetTypeParm = adSingle
Case 5: GetTypeParm = adDouble
Case 6: GetTypeParm = adDecimal
Case 7: GetTypeParm = adDate
Case 8: GetTypeParm = adVarWChar
Case 11: GetTypeParm = adBoolean
Case 14: GetTypeParm = adDecimal
Case 17: GetTypeParm = adChar
Case Else: GetTypeParm = -1
End Select
End Function |