Активировать функцию MS Access с помощью SAS - PullRequest
0 голосов
/ 23 мая 2018

Я новичок здесь, поэтому, пожалуйста, будьте осторожны:)

Мой вопрос: могу ли я получить SAS (9.4 с PC Files Server), чтобы вызвать функцию в MS ACCESS, которая импортирует .txt файлы, которыеSAS выплюнул раньше?

Справочная информация: Я унаследовал базу данных Access (.accdb, используя версию 2010), исходные данные которой получены из SAS.Текущий метод заключается в том, что SAS выкладывает TXT-файлы, которые я (полу-вручную) импортирую в базу данных.Полу-вручную в том, что есть кнопка / макрос, который импортирует файлы, но я должен открыть базу данных и нажать кнопку.Я бы предпочел вообще не вмешиваться.

Я попытался пропустить импорт таблиц, используя PROC EXPORT (и PC FILES SERVER) и более позднюю версию PROC SQL (с базой данных Access, назначенной через libname), чтобы нажатьданные из SAS напрямую.Однако, по сравнению со старым подходом, после компактирования и восстановления база данных по-прежнему примерно в два раза больше.Я искал в сети, как избежать увеличения размера, но не нашел ответов.

Поэтому я бы хотел, чтобы метод SAS выплевывал файлы .txt, но также имел SAS, запускающий функцию доступа в базе данных, котораяимпортирует файлы.

Кнопка в Access активирует этот код:

Private Sub ImportSASDataButton_Click()
Dim Update As Byte
    Update = MsgBox("Have you ran the SAS program that creates the text files?" _
                    , vbYesNo, "Check files have been created")

If Update = vbYes Then ImportTables
Me.CloseFormButton.SetFocus
Me.ImportSASDataButton.Enabled = False
End Sub

Что, если «ДА» активирует этот код (это функция, которую я хочу вызвать напрямую):

Function ImportTables()
Dim db As Database
Dim ITables As Recordset

Set db = CurrentDb
Set ITables = db.OpenRecordset("Tables", dbOpenDynaset)

Do Until ITables.EOF
    Call ImportData(ITables![TableName], _
                    ITables![SpecificationName], _
                    ITables![FileName], _
                ITables![DeleteExisting], _
                ITables![Use])
    ITables.MoveNext
Loop
ITables.Close
End Function

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

@ Ричард показывает, как позвонить в Access из SAS.Если у вас нет возможности запускать командные строки из сеанса SAS (некоторые системные администраторы отключают это), вы можете написать сценарий оболочки.

Сначала вызовите SAS для создания файлов .txt.

Затем вызовите Access с методом, описанным Ричардом, для запуска макроса.

0 голосов
/ 23 мая 2018

Существует несколько операторов SAS, которые могут запускать внешние программы, в том числе

  • % sysexec
  • система вызовов
  • конвейер имени файла

Access имеет переключатель командной строки /x mymacro, который будет запускать определенный макрос при запуске, или вы можете создавать или обновлять макрос AutoExec, который также запускается автоматически при каждом запуске Access.

Итак, ваш SASкод может выглядеть как

%Spit;
%sysexec msaccess /x ImportTablesMacro;
...