![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как определить - существует ли поле в таблице? [D5, Paradox]
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 тоже нет такого поля.