Программное создание источника данных ODBC с помощью автономного драйвера файла данных IBM SPSS 20

Проблема:

У меня есть файл .sav, содержащий много данных из анкеты. Эти данные передаются в базу данных доступа через соединение ODBC с использованием VBA. Макрос 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 есть идеи?

заранее спасибо


person ppries    schedule 06.12.2012    source источник
comment
можете ли вы запросить у пользователя расположение файла и построить из него строку подключения? таким образом, вам не нужно выходить за пределы vba.   -  person SeanC    schedule 06.12.2012
comment
Ну, пользователь должен иметь файл .sav в определенном каталоге. Это помогает мне? В противном случае, если это можно сделать с помощью VBA, то, по-видимому, не проблема, что пользователю предлагается указать местоположение файла.   -  person ppries    schedule 06.12.2012


Ответы (2)


когда у вас есть имя файла, из приглашения, такого как

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)

тебе наверное легче будет

person SeanC    schedule 06.12.2012
comment
Спасибо, это выглядит многообещающе. Завтра попробую, когда буду на работе! - person ppries; 07.12.2012

Для тех, кому нужно решение для этого, я в итоге создал системный DSN, вручную отредактировав реестр.

Чтобы узнать, какие ключи и значения необходимо изменить, создайте системный DSN вручную и проверьте значения в «HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI[DSN]» и «HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources». '. Тогда должно быть достаточно ясно, как создать DSN через VBA.

person ppries    schedule 31.01.2013