Форум: "Базы";
Текущий архив: 2003.09.25;
Скачать: [xml.tar.bz2];
ВнизКак определить - существует ли поле в таблице? Найти похожие ветки
← →
grusty (2003-09-05 12:41) [0]Уважаемые, подскажите: как определить - существует ли поле в таблице? Почему-то FindField в любом случае возвращает nil, даже если поле существует...
← →
Mike Kouzmine (2003-09-05 12:42) [1]А ты бы буковки показал, как ты это делаешь.
← →
Reindeer Moss Eater (2003-09-05 12:43) [2]Верь ему! (FindField"у)
← →
Reindeer Moss Eater (2003-09-05 12:45) [3]Кстати FindField никогда не проверял наличие поля в таблице. Наличие поля в датасете - вот что он проверяет.
← →
grusty (2003-09-05 12:47) [4]
if Table1.FindField("Field1")<>nil then ShowMessage("Поле существует!");
← →
Reindeer Moss Eater (2003-09-05 12:48) [5]Ну нет поля "Field1" в Table1
← →
grusty (2003-09-05 12:51) [6]Это у тебя нет, а у меня есть... :)
Кто-нибудь что-нибудь конкретное может посоветовать?
← →
Reindeer Moss Eater (2003-09-05 12:52) [7]А я говорю, что у тебя нет и у Table1 тоже нет такого поля.
← →
Sandman25 (2003-09-05 12:55) [8]>Кто-нибудь что-нибудь конкретное может посоветовать?
Двойной щелчок на компоненте в design time, затем add all fields и увидишь, что Reindeer Moss Eater прав.
← →
grusty (2003-09-05 13:24) [9]-->Sandman25, Reindeer Moss Eater
Ну чего вы мне тут рассказываете? Я что не знаю есть ли это поле или нет? Вы конкретное что-нибудь можете посоветовать?
← →
Sandman25 (2003-09-05 13:28) [10]>Вы конкретное что-нибудь можете посоветовать?
with Table do
for i := 0 to FieldCount - 1 do
ShowMessage(Fields[i].FieldName);
← →
grusty (2003-09-05 13:30) [11]Ну хорошо, а как тогда проверить наличие поля в самой таблице?
← →
Sandman25 (2003-09-05 13:36) [12]>Ну хорошо, а как тогда проверить наличие поля в самой таблице?
Database Desktop"ом или SQL Explorer"ом.
И вообще-то ничего хорошего. Обычно в TTable persistent поля не создаются программистом, и если TableName указан правильно, то в таблице действительно нет такого поля.
← →
Sandman25 (2003-09-05 13:45) [13]Кстати, еще можно проверить как в [8] Sandman25 © (05.09.03 12:55)
← →
grusty (2003-09-05 13:56) [14]-->Sandman25
Та мне нужно программным путем определить - существует поле или нет. Конечно, если в Table1.FieldDefs это поле также существует, то тогда проблем нет. Но ведь вначале эти поля нужно добавить туда, а мне этого делать не нужно.
← →
Reindeer Moss Eater (2003-09-05 13:59) [15]TFieldDefs.Update
Ничего, что я тут тебе рассказываю разные глупости?
← →
Sandman25 (2003-09-05 16:27) [16]:)
← →
grusty (2003-09-05 17:11) [17]-->Reindeer Moss Eater
Да честно говоря уже достал... Если не знаете, то лучше не надо ничего писать вообще...
← →
Reindeer Moss Eater (2003-09-05 17:13) [18]Иди в баню
← →
Vlad (2003-09-05 17:20) [19]>grusty © (05.09.03 17:11) [17]
GetFieldNames не подойдет ?
Вроде пишут что подходит для полей, полученных в рантайме...
← →
VAleksey (2003-09-05 17:28) [20]Все правильно. Всю жизнь пользовался FindField, правда с небольшим отличием
If Assigned(Table1.FindField("Field1")) then
begin
....
end;
← →
grusty (2003-09-05 18:36) [21]А вот так работает:
try
Table1.FieldDefs.Find("Field1")
except
ShowMessage("Поле не существует!");
end;
Так можно использовать или не совсем удачно?
← →
VAleksey (2003-09-05 18:58) [22]Это вообще какая-то фигня если честно.
PS
Не обижайся, но FindField прекрасно работает. А так точно не совсем удачно, хотя возможно и работает.
← →
grusty (2003-09-05 19:05) [23]-->VAleksey
Я не обижаюсь, только вот FindField у меня не работает 100% (пример [4]).
Я, кстати, нашел лучше способ проверки:
if Table1.FieldDefs.IndexOf("Field1")=-1
then ShowMessage(Поле не существует!);
Так работает без проблем.
← →
Reindeer Moss Eater (2003-09-05 19:46) [24]Я не обижаюсь, только вот FindField у меня не работает 100% (пример [4]).
Работает.
Если возвращет nil, значит нет экземпляра TField с таким именем поля.
Нет его. Понял?
Не понял? Еще раз: нет его.
Table1.FieldDefs.Update - получает метаданные у физической таблицы.
FieldDefs.FindFields ищет поле в метаданных.
В метаданных оно может быть, а экземпляр TField для него не создан! О чем FindField честно и добросовестно сообщает.
← →
grusty (2003-09-06 11:28) [25]-->Reindeer Moss Eater
Ну ты БАРАН! Ты сам то понял, что написал?
FieldDefs.Update не получает, как ты выразился, метаданные, а обновляет описания в массиве Items, чтобы они отражали рельные свойства полей. Поэтому использование данного метода, в моем случае, к нужному результату не приведет.
Метод FindField проверяет наличие поля не в самой физ. таблице, а в списке полей свойства FieldDefs. Если же таблица создана программно, то это свойство в любом случае вернет nil. Поэтому пример [23], по моему, один из удачных выходов из положения.
← →
Гость (2003-09-07 10:11) [26]Можно я скажу глупость?
Возьми описание структуры файла таблицы (в инете наковыряй если нету) и пиши функцию, которая выдерет из структуры имена полей в список, и уж в этом списке ты сможешь проверить.
У меня описание есть, но искать неохота.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.09.25;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.017 c