Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.25;
Скачать: CL | DM;

Вниз

Как определить - существует ли поле в таблице?   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.016 c
6-82358
Davinchi
2003-07-27 22:07
2003.09.25
Одновременная работа TWebBrowser and Word2000


3-82091
Max_
2003-09-04 17:03
2003.09.25
TSQLClientDataSet и метод Execute???


14-82447
Soft
2003-09-07 13:58
2003.09.25
Что такое ЗЛО?


14-82480
kopcap
2003-09-05 21:57
2003.09.25
КАК УСТРОЕНА ICQ ???


7-82525
Hack_Man
2003-07-11 18:27
2003.09.25
Смена имя компа и имя юзера