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
Partager