我想知道,如何在Excel中创build数据库表,以便它可以与ODBC一起使用
我想使用ODBC,我有两个select,无论是MS Access或Excel,
正如您可能知道的,为了将某些MS Access文件或Excel文件指定为ODBC源,您需要遵循以下步骤:
pipe理工具 – >数据源(ODBC) – >select用户DSN – >从列表中select'Excel文件'或'MS Access数据库' – >按'configuration' – >最后select文件(MS Access或Excel) ODBC源
那么,它与MS Access工作正常,我可以连接到该文件,并查看我已经创build的所有表内
但是,当涉及到Excel,虽然我可以连接到文件,我看不到我创build的表内
我只是使用'插入'选项卡中的'表',添加了一些标题作为列名,并给了一个有意义的名字。 那是这样做的吗?
有几种方法可以在Excel工作簿中引用“表格”数据:
他们在Microsoft知识库文章257819 “选择Excel数据与代码”一节中详细解释。
最简单的方法是将数据保存在一个单独的工作表中,将列名放在第一行(从单元格A1开始),然后让实际数据在第二行开始,就像这样
为了测试,我创建了一个名为“odbcFromExcel”的用户DSN,指向该工作簿…
…然后运行下面的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
结果是
C:\Users\Gord\Documents\__tmp>cscript /nologo excelTest.vbs Data row 1, rst("LastName").Value="Thompson" 10 data rows found.
我希望这可以帮助您的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."
…确实会在提供的数据中附加Excel工作表的新行。
但是,在Excel ODBC DSN中指定“sniffer”应用程序时,仍然无法解决没有“表”可供选择的问题。
你可以尝试的一件事就是创建一个Excel表格,第1行的列标题,然后选择这些列,并创建一个Excel“定义名称”。 然后,看看你的“嗅探器”的应用程序认识到,你可以选择一个“表”的名称。
FWIW,我在我的Excel工作簿中将名称myTable
定义为=Sheet1!$A:$C
,然后使用SELECT * FROM [myTable]
时我的原始代码进行排序 :
C:\Users\Gord\Documents\__tmp>cscript /nologo excelTest.vbs Data row 1, rst("LastName").Value="Thompson" 1048576 data rows found.
正如你所看到的,它正确地检索了第一个“记录”,但是它没有识别到有效数据的结束,并继续读取表中的〜100万行。
我非常怀疑,我将会付出更多的努力,因为我同意其他意见,认为使用Excel作为“ODBC数据库”真的不是一个好主意。
我强烈建议你试着找出为什么你之前使用Access的尝试是如此不理想。 正如我之前所说的,对我来说,听起来像是在与Access进行交互时做了一件非常糟糕的事情。
我最近也有类似的问题。 我设法避开它的方式是选择数据作为范围A1:XY12345,然后使用定义名称工具来命名范围。 当您通过ODBC连接到Excel工作簿时,此命名范围将显示为“表格”,而您实际定义(每个Excel)范围的范围不是。
您只需要从excel文件的第一行中选择所需的列数,然后在编辑框左侧的编辑栏中为其指定一个名称。 当然,你也给文件的每一个列的名字!