1

问题:

我有一个 .sav 文件,其中包含来自调查问卷的大量数据。该数据通过使用 VBA 的 ODBC 连接传输到访问数据库。许多不那么精通技术的同事正在使用 VBA 宏,每次他们需要使用新的 .sav 文件时,他们都需要创建或更改连接。每次解释如何都可能很麻烦,所以我希望能够以编程方式创建此连接(理想情况下包含在 VBA 宏中,但如果这不可能,则类似于 python 脚本将执行此操作)。

我想到的解决方案:

我对 VBA 不是很熟悉,所以一开始我尝试用 python 来做。我找到了这个例子,这似乎(对我来说)是一个解决方案:

http://code.activestate.com/recipes/414879-create-an-odbc-data-source/

但是,我不确定要为 SQLConfigDataSource 提供哪些参数。我试过:

create_sys_dsn(
    'IBM SPSS Statistics 20 Data File Driver - Standalone',
    SDSN='SAVDB',
    HST='C:\ProgramFiles\IBM\SPSS\StatisticsDataFileDriver\20\Standalone\cfg\oadm.ini',
    PRT='StatisticsSAVDriverStandalone',
    CP_CONNECT_STRING='data/Dustin_w44-47_2011.sav',
    CP_UserMissingIsNull=1)

但无济于事。

在这个领域是绿色的,我意识到我提出的解决方案甚至可能不是正确的解决方案。stackoverflow有什么想法吗?

提前致谢

4

2 回答 2

0

一旦你有了文件名,从一个提示,比如

dim fd as Object
dim CSVFilename as String
Set fd = Application.FileDialog(3)
'Use a With...End With block to reference the FileDialog object.
With fd
    .AllowMultiSelect = False
    .Filters.Add "Data Files", "*.csv", 1
    .ButtonName = "Forecast"
    If .Show = -1 Then
        CSVFilename = .SelectedItems(1) 
        ' returns an array, even with multiselect off
    Else
        Exit Sub
    End If
End With
'Set the object variable to Nothing.
Set fd = Nothing

那么您应该能够构造连接字符串,这将允许您打开文件

Dim MyConnect as new Connection

With MyConnect
    .Provider="IBM SPSS Statistics 20 Data File Driver - Standalone"
    .ConnectionString="data/" & CSVFilename
    .Open
End With

我还要指出,如果您可以使用(或等效)导入csv文件External Data -> Text File,那么命令更像

DoCmd.TransferText(TransferType, SpecificationName, TableName, FileName, _
    HasFieldNames, HTMLTableName, CodePage)

对你来说可能会更容易

于 2012-12-06T17:16:48.983 回答
0

对于碰巧需要解决方案的任何人,我最终做的是通过手动编辑注册表来创建系统 DSN。

要查看需要修改哪些键和值,请手动创建系统 DSN 并检查 'HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI[DSN]' 和 'HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\ODBC 数据源中的值'。那么如何通过VBA创建DSN应该很清楚了。

于 2013-01-31T13:05:06.123 回答