使用SQL插入空Excel表,而不会丢失数据类型属性

时间:2016-01-08 01:01:51

标签: sql excel excel-vba adodb vba

我正在运行带有SQL的som VBA代码,以便从一个工作表插入另一个工作表。我的问题是,当我使用INSERT INTO语句时,我丢失了空表中的数据类型属性。

这是我正在运行的代码:

Sub InsertTest()
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
Dim fromFile As String
fromFile = "C:\some\file.xlsx"
Dim cnStr As String
cnStr = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
           "Data Source=" & fromFile & ";" & _
           "Extended Properties=Excel 12.0"

Dim query As String

query = "INSERT INTO [TableTwo$](lastname, age) SELECT lastname, age FROM [TableOne$]"

rs.Open query, cnStr, adOpenUnspecified, adLockUnspecified 
End Sub

表1是我从中获取数据的地方:

enter image description here

表2是我插入数据的地方,以下是代码执行后的样子:

enter image description here

我注意到如果TableTwo填充了正确数据类型的数据,INSERT INTO语句也会插入正确数据类型的数据。我不知道是谁擅长这样做或者它的ADODB。你知道吗?

我试图改变TableTwo的架构。我也尝试了CAST()CONVERT()函数,但我无法使其工作:(

我知道我可以通过一些简单的VBA代码轻松修复数据类型,但在我看来,这会破坏使用SQL的一些目的。我真的很讨厌用VBA迭代我的表和表,因为根据我的经验,它比SQL慢得多。

我注意到的另一件事是,当我使用SQL时,公式行中的数据在单词的开头有一个引号(如此')。但它不在细胞中。为什么这样做?

提前致谢!

0 个答案:

没有答案