Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Получить имя таблицы для поля в DBGrid [D4, D5, D6, D7, IB4.x, IB5.x, IB6.x, MSSQL, MySQL, dBase, FoxPro, Paradox]


sergvc ©   (2004-01-28 14:02:00) 

Подскажите пожалуйста, как можно определить название таблицы для поля TField в Grid или DataSet?


sergvc   (2004-01-29 12:15:00) [1]

Наверное TADODataSet должен знать имя таблицы, потому, что он может обновлять данные, переданные через хранимую процедуру, в разных таблицах, использую предположения. Т.е. если в хранимой процедуре используется запрос вида

SELECT T1.Field1,T2.Field2 FROM Table1 T1,Table2 T2 WHERE Table1.ID = Table2.ID

а потом в DBGrid обновить поле Field2, то изменится именно поле Field2 в таблице Table2.


Sandman25   (2004-01-29 12:06:00) [2]

[11] Reindeer Moss Eater © (28.01.04 17:18)

Понятно.

[12] sergvc (29.01.04 12:02)

Сделайте
SELECT T1.Field1 T1_Field1, T2.Field2 T2_Field2 FROM Table1 T1,Table2 T2 WHERE Table1.ID = Table2.ID
Тогда из названия поля (в Query) можно будет вытащить имя таблицы.


sergvc   (2004-01-29 12:02:00) [3]

Объсню: DbGrid заполняется даннымииз DataSet, который получает данные из хранимой процедуры.
Хранимая процедура имеет запрос вида:

SELECT T1.Field1,T2.Field2 FROM Table1 T1,Table2 T2 WHERE Table1.ID = Table2.ID

Теперь, когда я вызываю событие OnCellClick в DBGrid я хочу вызвать форму и в этой форме показать все записи из Table2.
Для этого мне надо знать имя таблицы, соответствующее полю, на котором я кликнул мышкой.


Reindeer Moss Eater   (2004-01-28 17:18:00) [4]

Я про префиксирование имен физических полей у физических таблиц в физической БД.
Впрочем не только полей, а любых объектов.


Sandman25   (2004-01-28 17:09:00) [5]

[8] Nikolay M. © (28.01.04 17:07)

Я понимаю :)


Sandman25   (2004-01-28 17:08:00) [6]

[7] Reindeer Moss Eater © (28.01.04 17:04)

Вы про create table ta_mytable ( ta_id INT, ta_descr CHAR(60)) или про select a.field101, b.field507 from a,b
или про select a.field101 a_field101, b.field507 b_field507 from a,b?


Nikolay M.   (2004-01-28 17:07:00) [7]


> Sandman25 © (28.01.04 17:01) [6]
> Если бы можно было автоматически определять, вряд ли было
> бы создано событие OnGetTableName у TDataSetProvider.

Оно не для селектов, а для апдейтов и инсертов.


Reindeer Moss Eater   (2004-01-28 17:04:00) [8]

Интересно.

Для чего нужно вычислять имя таблицы из которой получено поле?
Что бы сформировать лету UpdateSQL для сформированного на лету SQL?

Вот когда понимаешь, зачем советуют имена полей в таблицах префиксировать именем таблицы.


Sandman25   (2004-01-28 17:01:00) [9]

Если бы можно было автоматически определять, вряд ли было бы создано событие OnGetTableName у TDataSetProvider.


Sandman25   (2004-01-28 16:59:00) [10]

Возможно. Я никогда не использовал.


Reindeer Moss Eater   (2004-01-28 16:51:00) [11]

Он кажется только у экземпляров созданных в design time присутствует.


Sandman25   (2004-01-28 16:44:00) [12]

Origin


sergvc   (2004-01-28 16:07:00) [13]

А если этот DataSet построен с помощью составного запроса Select * from Table1,Table2?


Reindeer Moss Eater   (2004-01-28 14:03:00) [14]

TTable(MyField.DataSet).TableName


Наверх

Титульная страница Поиск, карта сайта Написать письмо