Здравствуйте, господа. Имеется вопрос.
Пишу программу, которая плотно взаимодействует с БД. SQL-запросы составляются автоматически и могут быть адресованы как к одной таблице, так и к нескольким. С самими-то запросами сложностей нет, благо SQL позволяет использовать адресацию вида TableName.ColumnName всегда, независимо от того, к скольки таблицам обращен запрос. Совсем иное дело - бейсиковский рекордсет. С извлечением результатов запроса из него и возникла сложность. Дело в том, что он требует обращаться к колонке как к "ColumnName" если ее название в данном запросе уникально. Т.Е, к примеру, запрос к таблицам Table1 и Table2. Если в обеих таблицах есть колонка "ID", узнать ее значение можно так:
IdVariable1 = RecordsetName1("Table1.ID")
IdVariable2 = RecordsetName1("Table2.ID")
Однако если, к примеру, колонка "FotoName" есть только в таблице Table2, то обращение вида
FnVariable1 = RecordsetName1("Table2.FotoName")
приведет к ошибке - "Не удается найти объект в семействе, соответствующий требуемому имени или порядковому номеру.". В то время как обращение вида
FnVariable1 = RecordsetName1("FotoName")
сработает без проблем.
Из-за этой глупости значительно затрудняется извлечение результата из рекордсета.
Конечно, можно запросить названия всех колонок из всех запрашиваемых таблиц и проверить, повторяются ли названия нужных колонок. Но это усложнит код и заметно снизит быстродействие.
Другой вариант - всегда использовать обращение вида RecordsetName1("Table1.ColumnName"), а в случае ошибки заменять на RecordsetName1("ColumnName"). Но это, ИМХО, неправильно - я предпочитаю использовать On Error для обработки ошибок, а не для чего-то другого.
И потому вопрос - нет ли какого-нибудь третьего способа, свободного от недостатков первых двух?
Ответить
|