Как получить имя таблицы из поля в запросе на соединение с MSSQL? (эквивалент mysql_field_table)

Я использую диспетчер запросов в Delphi, используя ADO, мне нужно знать все поля, которые будут возвращены запросом, независимо от того, насколько они сложны и сколько соединений они будут иметь. Я хочу вызвать функцию, которая возвращает мне все поля, которые будут возвращены в конкретном запросе, и информацию о полях, например таблицу, из которой это поле.

В mysql с php у меня есть команда mysql_field_table, в этой команде я передаю объект результата и индекс поля, и эта команда возвращает мне имя таблицы.

Ну, это моя мечта, получить имя таблицы из индекса поля в запросе, например:

SELECT * FROM TableOne Left Join Table2 ON Table2.MasterField = Table1.KeyField

person user2092868    schedule 15.03.2013    source источник


Ответы (1)


Вы можете использовать TADODataSet для получения Recordset, повторения коллекции Fields и получения имен таблиц/полей следующим образом:

for I := 0 to ADODataSet1.Recordset.Fields.Count - 1 do
begin
  TableName := ADODataSet1.Recordset.Fields[i].Properties['BASETABLENAME'].Value;
  FieldName := ADODataSet1.Recordset.Fields[i].Properties['BASECOLUMNNAME'].Value;
end;
person kobik    schedule 15.03.2013
comment
Ты не представляешь, как сильно ты мне помогаешь. очень-очень-очень спасибо... я очень благодарна... ты лучший!!! извините, но у меня нет репутации, чтобы голосовать, но чувствую, что вы проголосовали! - person user2092868; 15.03.2013
comment
+1 не знал, что это возможно. Является ли это свойство общим для всех типов баз данных? - person whosrdaddy; 15.03.2013
comment
@whosrdaddy, я использовал его с MSSQL и MS-ACCESS. это зависит от провайдера (среди прочего). Посмотрите соответствующую информацию: Когда имя таблицы доступно с использованием ADO, RDO, DAO - person kobik; 15.03.2013