Решение состоит в том, чтобы создать ваш SQL-запрос "на лету" с помощью функции VBA.По моему мнению, таблица 1 должна иметь дополнительный столбец с именем таблицы, содержащей поля:
Table 1
[tableName] [Sequence] [Name]
table2 1 CustomerId
table2 2 CustomerName
table2 3 CustomerBirthday
...
tablen 1 field 1
tablen 2 field 2
...
tablen i field i
Код, который будет генерировать запрос SQL, будет выглядеть так:
Public function fieldQueryFromTable1(x_tableName as String) as string
Dim rsTable1 as DAO.recordset, _
m_fieldQuery as String, _
m_tableQuery as string, _
a_fieldNames() as string
m_tableQuery = "SELECT name FROM table1 WHERE tableName = """ & x_tablename & """ ORDER BY sequence"
set rsTable1 = currentDb.openRecordset m_tableQuery, dbOpenDynaset, dbReadOnly
a_fieldNames = rsTable1.getrows()
'generate a 2 dim array a_fieldName(fieldName, fieldValue)'
set rsTable1 = Nothing
m_fieldQuery = join(a_fieldNames(0),",")
'a_fieldNames(0) is a 1 dim array that contains the field names'
'm_fieldQuery is a string that looks like "field1,field2, ..., fieldi, ..."'
if m_fieldQuery <> "" then
m_fieldQuery = "SELECT " & m_fieldQuery & " FROM " & x_tableName
'SELECT field1,field2, ..., fieldi, ... FROM Tablen'
Endif
fieldQueryFromTable1 = m_fieldQuery
end function
Это было написано на лету, только для того, чтобы вы поняли принцип.Нет обработчика ошибок, нет проверки синтаксиса, ничего!Мы обычно делаем аналогичные вещи с наборами записей ADO, поэтому я не совсем уверен, что метод набора записей DAO 'getRows' bt, согласно справке, работает как ADO.