-
Собственно сабж. Ведь TField должен быть связан с породившим его объектом (таблица, вьюшка, процедура). Неужели без "Парсить SQL" не обойтись?
ps: пользуюсь FIBPlus, но там тоже не нашёл такой возможности...
-
Системные таблицы смотреть. Или где, в результате запроса? Так там пожет и не быть соответсвия физическому полю.
-
TField может быть, и может не быть ни одной таблицы и ни одной вьюхи и ни одной процедуры, из которых это поле получило данные.
-
-
select 1 as number from rdb$database Какому объекту принадлежит поле Number?
-
нет, в контексте моей задачи предполагается, что есть выборка, пока выглядящая весьма просто: select * from some_db_object_for_ex_table_or_view_or_procedure и, для неё из базы выбираются описания полей:
quSomeSQL.SQL.Text := 'SELECT RDB$DESCRIPTION from RDB$RELATION_FIELDS '
+ 'where (RDB$RELATION_NAME = ''' + dsname + ''') and '
+ ' (RDB$FIELD_NAME = ''' + fname + ''')';
Пока использую простейший парсинг, выбирая в dsname слово, после 'FROM '. Однако возникла мысль, что компонент "должен" знать из какого набора данных он черпает поле... В этом контексте на вопрос Ega23 ответить просто: rdb$database
-
> TheEd (30.10.2012 09:56:05) [5]
Какой компонент и почему он не знает?
-
> Пока использую простейший парсинг, выбирая в dsname слово, > после 'FROM '. Однако возникла мысль, что компонент "должен" > знать из какого набора данных он черпает поле... > В этом контексте на вопрос Ega23 ответить просто: rdb$database
select A.* from
(
select 0 as id, 'Нету такого' as caption from rdb$database
union all
select id, caption from ttt
) as A
order by id А здесь - что? Между прочим, весьма частая операция ИМХО, не делом ты занялся.
-
Если поля создать в дизайне, то TField.Origin (не всегда и не везде) покажет имя таблицы
-
to anatoly pogoretsky: Компонент - TpFIBQuery.
to Ega23: предполагается, что это не запрос к серверу, а сущность, хранящаяся в БД и имеющая описания полей.
to Медвежонок Пятачок: предполагается дизайном не пользоваться в пользу универсальности - ввёл запрос, кликнул баттон, получил таблицу. При этом, как уже говорил, выборки предполагаются по существующим в БД объектам. Для всех прочих оставляем FieldName как есть без изменений...
-
> предполагается, что это не запрос к серверу, а сущность, > хранящаяся в БД и имеющая описания полей.
create table People (
id integer,
name1 varchar(32),
name2 varchar(32),
name3 varchar(32),
)
Select id, name1 + ' ' + name2 + ' ' + name3 as FIO from People Не тем занимаешься, ну послушай уже совета... :)
-
ввел, кликнул, получил. зачем тебе таблица-то? тем более что секунду назад этот кто-то, кто ввел запрос, самолично написал в нем список таблиц во from
-
или: две таблицы в которых одноименные поля. запрос :
select * from table1, table2
удачи с парсингом имен полей, которых вообще физически в этих таблицах нет, так как к именам приклеились суффиксы
-
> так как к именам приклеились суффиксы
Причём не факт, что они приклеились, это IBExplorer так показывает. А что реально на клиенте - не знаю, проверять лень.
-
А чего здесь проверять-то? Достаточно уверовать в два поля с одним именем в одном датасете.
-
> > предполагается, что это не запрос к серверу, а сущность, > > хранящаяся в БД и имеющая описания полей.create table > People ( id integer, name1 varchar(32), name2 varchar(32), > name3 varchar(32),)Select id, name1 + ' ' + name2 + ' > ' + name3 as FIO from PeopleНе тем занимаешься, ну послушай > уже совета... :)
Да я согласен что такие ситуации возможны, но, повторяю если поле не опирается на реальную сучность в БД, то по запросу описания получим ноль записей, и в шапке таблицы в данном примере будет просто FIO. В принципе ответ я получил - у поля связи с реальной сущностью в БД нет, вариант либо корректно парсить SQL, либо ограничиться теми рамками которые я описал... Всем спасибо за помощь!
-
> В принципе ответ я получил - у поля связи с реальной сущностью в БД нет
Так точно. Более того, не факт, что значение этого поля вообще будет из этой базы взято, гетерогенные запросы ещё никто не отменял. > вариант либо корректно парсить SQL
Опять же, нереально. Вот пример для MSSQL, для FB наверняка есть нечто подобное: USE Northwind ;
GO
SELECT c.*, o.*
FROM Northwind.dbo.Customers AS c
INNER JOIN OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'C:\Program Files\Microsoft Office\OFFICE11\SAMPLES\Northwind.mdb';'admin';'', Orders)
AS o
ON c.CustomerID = o.CustomerID ;
GO http://msdn.microsoft.com/en-us/library/ms190312.aspxТ.е. соединяешься с конкретным сервером и с конкретной БД, а данные тащишь из Access.
|