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

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

Как определить - существует ли поле в таблице? [D5, Paradox]


Страницы:   1 2

grusty ©   (2003-09-05 12:41:00) 

Уважаемые, подскажите: как определить - существует ли поле в таблице? Почему-то FindField в любом случае возвращает nil, даже если поле существует...


Гость   (2003-09-07 10:11:00) [1]

Можно я скажу глупость?
Возьми описание структуры файла таблицы (в инете наковыряй если нету) и пиши функцию, которая выдерет из структуры имена полей в список, и уж в этом списке ты сможешь проверить.
У меня описание есть, но искать неохота.


grusty   (2003-09-06 11:28:00) [2]

-->Reindeer Moss Eater
Ну ты БАРАН!Ты сам то понял, что написал?
FieldDefs.Update не получает, как ты выразился, метаданные, а обновляет описания в массиве Items, чтобы они отражали рельные свойства полей. Поэтому использование данного метода, в моем случае, к нужному результату не приведет.
Метод FindField проверяет наличие поля не в самой физ. таблице, а в списке полей свойства FieldDefs. Если же таблица создана программно, то это свойство в любом случае вернет nil. Поэтому пример [23], по моему, один из удачных выходов из положения.


Reindeer Moss Eater   (2003-09-05 19:46:00) [3]

Я не обижаюсь, только вот FindField у меня не работает 100% (пример [4]).

Работает.
Если возвращет nil, значит нет экземпляра TField с таким именем поля.
Нет его. Понял?
Не понял? Еще раз: нет его.
Table1.FieldDefs.Update - получает метаданные у физической таблицы.
FieldDefs.FindFields ищет поле в метаданных.
В метаданных оно может быть, а экземпляр TField для него не создан! О чем FindField честно и добросовестно сообщает.


grusty   (2003-09-05 19:05:00) [4]

-->VAleksey
Я не обижаюсь, только вот FindField у меня не работает 100% (пример [4]).
Я, кстати, нашел лучше способ проверки:

if Table1.FieldDefs.IndexOf("Field1")=-1
then ShowMessage(Поле не существует!);

Так работает без проблем.


VAleksey   (2003-09-05 18:58:00) [5]

Это вообще какая-то фигня если честно.
PS
Не обижайся, но FindField прекрасно работает. А так точно не совсем удачно, хотя возможно и работает.


grusty   (2003-09-05 18:36:00) [6]

А вот так работает:

try
Table1.FieldDefs.Find("Field1")
except
ShowMessage("Поле не существует!");
end;

Так можно использовать или не совсем удачно?


VAleksey   (2003-09-05 17:28:00) [7]

Все правильно. Всю жизнь пользовался FindField, правда с небольшим отличием
If Assigned(Table1.FindField("Field1")) then
begin
....
end;


Vlad   (2003-09-05 17:20:00) [8]

>grusty © (05.09.03 17:11) [17]
GetFieldNames не подойдет ?
Вроде пишут что подходит для полей, полученных в рантайме...


Reindeer Moss Eater   (2003-09-05 17:13:00) [9]

Иди в баню


grusty   (2003-09-05 17:11:00) [10]

-->Reindeer Moss Eater
Да честно говоря уже достал... Если не знаете, то лучше не надо ничего писать вообще...


Sandman25   (2003-09-05 16:27:00) [11]

:)


Reindeer Moss Eater   (2003-09-05 13:59:00) [12]

TFieldDefs.Update
Ничего, что я тут тебе рассказываю разные глупости?


grusty   (2003-09-05 13:56:00) [13]

-->Sandman25
Та мне нужно программным путем определить - существует поле или нет. Конечно, если в Table1.FieldDefs это поле также существует, то тогда проблем нет. Но ведь вначале эти поля нужно добавить туда, а мне этого делать не нужно.


Sandman25   (2003-09-05 13:45:00) [14]

Кстати, еще можно проверить как в [8] Sandman25 © (05.09.03 12:55)


Sandman25   (2003-09-05 13:36:00) [15]

>Ну хорошо, а как тогда проверить наличие поля в самой таблице?

Database Desktop"ом или SQL Explorer"ом.
И вообще-то ничего хорошего. Обычно в TTable persistent поля не создаются программистом, и если TableName указан правильно, то в таблице действительно нет такого поля.


grusty   (2003-09-05 13:30:00) [16]

Ну хорошо, а как тогда проверить наличие поля в самой таблице?


Sandman25   (2003-09-05 13:28:00) [17]

>Вы конкретное что-нибудь можете посоветовать?


with Table do
for i := 0 to FieldCount - 1 do
ShowMessage(Fields[i].FieldName);


grusty   (2003-09-05 13:24:00) [18]

-->Sandman25, Reindeer Moss Eater
Ну чего вы мне тут рассказываете? Я что не знаю есть ли это поле или нет? Вы конкретное что-нибудь можете посоветовать?


Sandman25   (2003-09-05 12:55:00) [19]

>Кто-нибудь что-нибудь конкретное может посоветовать?

Двойной щелчок на компоненте в design time, затем add all fields и увидишь, что Reindeer Moss Eater прав.


Reindeer Moss Eater   (2003-09-05 12:52:00) [20]

А я говорю, что у тебя нет и у Table1 тоже нет такого поля.


Страницы:   1 2

Наверх

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