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...

Stargates


Code : Sélectionner tout - Visualiser dans une fenêtre à part
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