Всем привет.
Имеется один вопросик, который я никак не могу решить.
Дело вот в чем. Есть трехзвенная архитектура, для доступа к данным используется ADO, язык программирования VC++. Объект бизнес-логики имеет COM-интерфейс, который позволяет получить данные из определенной талицы с определенными условиями. Данные клиенту передаются в виде отключенного Recordset'а. Клиент может эти данные редактировать и послать Recordset обратно бизнес-логике, которая Update'ит эти данные в БД. Нужно при Update узнать исходный Source Recordset'а (SQL текст, с помощью которого он открывался). Беда в том, что при передаче Recordset'а от бизнес-логики клиенту свойство Source Recordset'а обнуляется и я уже не могу узнать SQL текст, которым открыт Recordset. Может быть кто-нибудь подскажет, как узнать SQL текст, имея Recordset с пустым свойствои Source?
Всем заранее спасибо за ответы.
Попутно еще один вопросик:
Можно ли сделать такой SELECT по таблице (единичной), чтобы в полученном Recordset'е имена полей были в виде — ИмяТаблицы.ИмяПоля?
Заранее спасибо за ответ!
Здравствуйте, UncleNick, Вы писали:
UN>Можно ли сделать такой SELECT по таблице (единичной), чтобы в полученном Recordset'е имена полей были в виде — ИмяТаблицы.ИмяПоля?
Здравствуйте, UncleNick, Вы писали:
UN>Может быть кто-нибудь подскажет, как узнать SQL текст, имея Recordset с пустым свойствои Source?
Скорее всего — никак. Во всяком случае мы в подобной ситуации стали передавать Source вместе с рекордсетом отдельным параметром, ничего лучше не нашли.
Здравствуйте, lazymf, Вы писали:
L>Здравствуйте, UncleNick, Вы писали:
UN>>Может быть кто-нибудь подскажет, как узнать SQL текст, имея Recordset с пустым свойствои Source?
L>Скорее всего — никак. Во всяком случае мы в подобной ситуации стали передавать Source вместе с рекордсетом отдельным параметром, ничего лучше не нашли.
К сожалению, клиент не должен иметь доступа к Source (если он отдельно) после открытия Recordset'а, т.к. кроме всего прочего Source используется для контрроля доступа. А в открытом Recordset Source как раз read only.
Здравствуйте, rockandroll, Вы писали:
R>Здравствуйте, UncleNick, Вы писали:
UN>>Можно ли сделать такой SELECT по таблице (единичной), чтобы в полученном Recordset'е имена полей были в виде — ИмяТаблицы.ИмяПоля?
R>select NAME "TABLE1.NAME" from TABLE1
Честно говоря, не в курсе что за аргумент NAME в SELECT'е. В стандартном SQL я такого не нашел. Может это какое-то расширение языка? В любом случае, ни с MS SQL Server, ни с Access такой запрос не работает.
Здравствуйте, UncleNick, Вы писали:
UN>>>Можно ли сделать такой SELECT по таблице (единичной), чтобы в полученном Recordset'е имена полей были в виде — ИмяТаблицы.ИмяПоля?
R>>select NAME "TABLE1.NAME" from TABLE1
UN>Честно говоря, не в курсе что за аргумент NAME в SELECT'е. В стандартном SQL я такого не нашел. Может это какое-то расширение языка? В любом случае, ни с MS SQL Server, ни с Access такой запрос не работает.
NAME — имя поля в таблице. Показываю на живом примере (Ms SQL)
Здравствуйте, rockandroll, Вы писали:
R>Здравствуйте, UncleNick, Вы писали:
UN>>>>Можно ли сделать такой SELECT по таблице (единичной), чтобы в полученном Recordset'е имена полей были в виде — ИмяТаблицы.ИмяПоля?
R>>>select NAME "TABLE1.NAME" from TABLE1
UN>>Честно говоря, не в курсе что за аргумент NAME в SELECT'е. В стандартном SQL я такого не нашел. Может это какое-то расширение языка? В любом случае, ни с MS SQL Server, ни с Access такой запрос не работает.
R>NAME — имя поля в таблице. Показываю на живом примере (Ms SQL)
R>SELECT NAME 'PRODUCT.NAME' FROM PRODUCT
R>PRODUCT.NAME R>--------------------
R>-- results skipped --
R>(208 row(s) affected)
Спасибо, я понял о чем вы говорите. Но, во-первых, с MS Jet такой запрос не проходит. А во-вторых, нужно получать все поля из таблицы, при том, что в общем случае не известно какие поля там есть (то бишь, SELECT *).