使用Excel作为ODBC数据库

man*_*sta 7 database windows excel ms-access odbc

我想知道,如何在Excel中创建数据库表,以便它可以与ODBC一起使用

我想使用ODBC,我有两个选项,MS Access或Excel,

您可能知道,为了将某些MS Access文件或Excel文件指示为ODBC源,您需要遵循:

管理工具 - >数据源(ODBC) - >选择用户DSN - >从列表中选择"Excel文件"或"MS Access数据库" - >按"配置" - >最后选择文件(MS Access或Excel) ODBC源代码

好吧,它可以正常使用MS Access,我可以连接到该文件,并查看我在其中创建的所有表

但是当涉及到Excel时,虽然我可以连接到该文件,但我看不到我在其中创建的表

我刚刚在"插入"选项卡中使用了"表",添加了一些标题作为列名,并为表提供了一个有意义的名称.那是这样做的吗?

Gor*_*son 13

有几种方法可以在Excel工作簿中引用"表格"数据:

  • 整个工作表.
  • 工作表上命名的单元格范围.
  • 工作表上未命名的单元格范围.

它们在Microsoft知识库文章257819的 "使用代码选择Excel数据"部分中进行了详细说明.

最直接的方法是保持数据在一个单独的片材,把列名的第一行中(在单元格A1开始),然后在第2行的实际数据开始,这样

高强

为了测试,我创建了一个名为"odbcFromExcel"的用户DSN,指向该工作簿......

ODBC

...然后运行以下VBScript来测试连接:

Option Explicit
Dim con, rst, rowCount
Set con = CreateObject("ADODB.Connection")
con.Open "DSN=odbcFromExcel;"
Set rst = CreateObject("ADODB.Recordset")
rst.Open "SELECT * FROM [Sheet1$]", con
rowCount = 0
Do While Not rst.EOF
    rowCount = rowCount + 1
    If rowCount = 1 Then
        Wscript.Echo "Data row 1, rst(""LastName"").Value=""" &  rst("LastName").Value & """"
    End If
    rst.MoveNext
Loop
Wscript.Echo rowCount & " data rows found."
rst.Close
Set rst = Nothing
con.Close
Set con = Nothing
Run Code Online (Sandbox Code Playgroud)

结果是

C:\Users\Gord\Documents\__tmp>cscript /nologo excelTest.vbs
Data row 1, rst("LastName").Value="Thompson"
10 data rows found.
Run Code Online (Sandbox Code Playgroud)

我希望这有助于您的Excel连接问题.

作为最后的评论,我不得不说,如果你正在做一些需要"几秒钟"在Excel中做的事情,但在"Access中需要大约20-25分钟",那么我强烈怀疑你使用Access的效率非常低方式,但这是另一个问题的主题(如果你想追求它).

编辑

如果要将数据插入Excel工作簿,那么这是可能的,但请注意,Excel ODBC连接的默认设置是"只读",因此您必须单击"选项>>"按钮并清除该复选框:

只读

完成后,以下代码......

Option Explicit
Dim con
Set con = CreateObject("ADODB.Connection")
con.Open "DSN=odbcFromExcel;"
con.Execute "INSERT INTO [Sheet1$] (ID, LastName, FirstName) VALUES (11, 'Dumpty', 'Humpty')"
con.Close
Set con = Nothing
Wscript.Echo "Done."
Run Code Online (Sandbox Code Playgroud)

...确实会在Excel工作表中添加一个新行,并提供所提供的数据.

但是,当您将"嗅探器"应用程序指向Excel ODBC DSN时,仍然无法解决没有"表"可供选择的问题.

您可以尝试的一件事是在第1行创建一个带有列标题的Excel工作表,然后选择这些整列并创建一个Excel"已定义的名称".然后,查看您的"嗅探器"应用程序是否将其识别为您可以选择的"表格"名称.

FWIW,我定义的名字myTable=Sheet1!$A:$C我的Excel工作簿,然后我的原代码排序,当我用工作SELECT * FROM [myTable]:

C:\Users\Gord\Documents\__tmp>cscript /nologo excelTest.vbs
Data row 1, rst("LastName").Value="Thompson"
1048576 data rows found.
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,它正确地检索了第一个"记录",但是它无法识别有效数据的结尾并继续读取表单中的~100万行.

我非常怀疑我会为此付出更多的努力,因为我同意其他评论使用Excel作为"ODBC数据库"并不是一个好主意.

我强烈建议您尝试找出您之前尝试使用Access的原因是如此令人不满意.正如我之前所说,听起来像是在与Access进行交互时做得非常糟糕.