2016-02-02 4 views
0
ODBC;DSN=Test;UID=;PWD=;SourceDB=\\server\folder\Test\prime.dbc;SourceType=DBC;Exclusive=No;BackgroundFetch=Yes;Collate=Machine;Null=Yes;Deleted=Yes; 

Тогда функциональный статический запрос, который использует это соединение. В файле prime.dbc есть 5 таблиц.ODBC Connection Dynamic Из пункта

Select field1, field2 field3 
From Table1 

Теперь на основе функции ниже я хочу кормить funTestShipUic в ЕКОМ вместо статического Table1.

Public Function funTestShipUic() As String 

    funTestShipUic = lngTestShipUic 

End Function 

Я попытался ...

Select field1, field2 field3 
From funTestShipUic() 

Но я получаю ODBC - сбой вызова. Драйвер ODBC Visual FoxPro Инвалидный индекс.

ответ

1

Трудно понять, чего вы на самом деле пытаетесь достичь.

Вы можете создать динамический SQL в VBA с помощью конкатенации строк, например:

strSql = "SELECT field1, field2 FROM " & myFunctionThatReturnsATableName() 
Set myRecordset = CurrentDb.OpenRecordset(strSql) 

Вы также можете назначить этот SQL для существующего запроса, в том числе PASSTHROUGH запросов.

DB.QueryDefs("myQuery").SQL = strSql 
+0

Я понимаю все, что вы говорите. Я использовал тот же метод успешно в другом месте в базе данных, но только с таблицами MS. Уловка, похоже, является сквозным запросом через FoxPro ODBC. Весь этот процесс импортирует данные из базы данных FoxPro в базу данных доступа. Папка «Тест» в базе данных FoxPro может иметь любую из 5 коллекций и, следовательно, терпит неудачу с именами статических таблиц. Сейчас я смотрю, как сделать passthru в VBA. – Kaw4Life

+0

@ Kaw4Life: Это тот же метод. Настройте свой запрос PassThrough с подключением ODBC, затем вы можете выполнить «DB.QueryDefs (« myPassThroughQuery »). SQL = strSql' в VBA. Но вы не можете использовать функции в запросах PassThrough, SQL отправляется на сервер DB как есть. – Andre

+0

У меня что-то работает. После уточнения/завершения я опубликую для других, чтобы использовать, не дай бог, что им нужно. – Kaw4Life

0

Во-первых, вы не должны использовать ODBC с VFP, если вы не используете VFP6 и раньше или сервер ADS. Вместо этого просто используйте OLEDB (VFPOLEDB). Затем вы можете передать результат своей функции в качестве параметра. т.е.:

Select field1, field2 field3 From (?) 

и добавить funTestShipUic() в набор параметров. Если используется ODBC, то в проходном запросе было бы как:

Select field1, field2 field3 From (?funTestShipUic()) 

Параметров обрабатываются драйверами и SQL не отправляются на сервер, как есть.

+0

Благодарим вас за ввод. У меня есть решение на месте с учетом всех аспектов данной среды. – Kaw4Life

 Смежные вопросы

  • Нет связанных вопросов^_^