【发布时间】:2017-01-29 21:11:47
【问题描述】:
以下代码行中存在问题(类型不匹配错误): 行动 = ....
我尝试使用 Sql INSERT INTO 从 Excel 复制数组并将其粘贴到 PostgreSQl 数据库中。
Sub UploadToDatamart2()
'Defining connection objects
Dim cnn As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim LastRow As Long
Sheets("AVON DICTIONARY").Activate
'Opening the ODBC connection
cnn.Open "Driver={PostgreSQL Unicode(x64)};DSN=postgres;Server=XXX;Port=5432;UID=YYY;PWD=ZZZ;Database=hurtownia;READONLY=0;PROTOCOL=6.4;FAKEOIDINDEX=0;SHOWOIDCOLUMN=0;ROWVERSIONING=0;SHOWSYSTEMTABLES=1"
'Find the last row
With ActiveSheet
LRow = .Cells(.Rows.Count, "A").End(xlUp).Row
'Picking up cell values
Category = .Range("A3:A" & LRow).Value
segment = .Range("B3:B" & LRow).Value
brand = .Range("C3:C" & LRow).Value
End With
'Defining and executing SQL insert
Action = "INSERT INTO temp.avon_dictionary_test" & " VALUES ('{" & Category & "}','{" & segment & "}','{" & brand & "}')"
Result = cnn.Execute(Action)
cnn.Close
End Sub
如果有人能帮忙,我会很高兴
【问题讨论】:
-
在模块顶部添加
Option Explicit。它将有助于调试此类问题。您需要添加Dim Action As String并将您的执行行更改为cnn.Execute(Action)。这不会返回记录集。 -
我添加了:Option Explicit - 在顶部,还有:Dim Category As Variant Dim Segment As Variant,Dim brand As Variant。修改此:Dim LRow As Long 并将 Result = cnn.Execute(Action) 替换为 cnn.Execute (Action)。还是一样的错误
-
Dim Action As String - 我也添加了这个,但仍然遇到问题
-
在
Action =行之前添加这个 -Debug.Print TypeName(Category), TypeName(segment), TypeName(brand)立即窗格中的输出是什么? -
这是即时窗口显示的内容:Variant() Variant() Variant()
标签: sql excel vba postgresql insert