使用IBM SPSS 20独立数据文件驱动程序以编程方式创建ODBC数据源

时间:2012-12-06 14:39:49

标签: python vba odbc spss

问题:

我有一个.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有什么想法吗?

提前致谢

2 个答案:

答案 0 :(得分: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

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

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

对你来说可能会更轻松

答案 1 :(得分:0)

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

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