Рисование динамически определенных полей в MS Access - PullRequest
1 голос
/ 04 февраля 2010

Я понятия не имею, возможно ли это - и подозреваю, что это не может быть.

У меня есть таблица в MS Access 2003, в которой перечислены некоторые поля, присутствующие в другой таблице в базе данных.Я хочу сделать данные из другой таблицы, но в операторе select определите поля для рисования, используя значения в первой таблице.

Например,

Table 1
[Sequence]  [Name]
1           CustomerId
2           CustomerName
3           CustomerBirthday

Table 2
[CustomerId]  [CustomerCode]  [CustomerName]  [CustomerType]  [CustomerBirthday]
1             A123            Andrew          A1              Aug
2             A122            Bob             A2              Nov
3             A133            Charles         A1              Jan
4             A153            Diane           A5              Mar

Required Output, using the information defined in table 1:
1  Andrew   Aug
2  Bob    Nov
3  Charles  Jan
4  Diane    Mar

.требуемый вывод может быть сгенерирован следующим образом:

SELECT CustomerId, CustomerName, CustomerBirthday FROM Table2

Однако я хочу иметь возможность изменять поля и поэтому хотел бы сделать что-то вроде:

SELECT [field name in table1 Where Sequence=1], [field name in table1 Where Sequence=2], [field name in table1 Where Sequence=3] FROM Table2

Я знаю, что мог бы сделатьэто в коде, но интересно, есть ли способ сделать это в чистом SQL, чтобы я мог вставить его в обычный запрос.

1 Ответ

1 голос
/ 05 февраля 2010

Решение состоит в том, чтобы создать ваш 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...