Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.49 MB
Время: 0.01 c
3-82056
Рома
2003-09-02 20:09
2003.09.25
Подскажите чем можно интербес базу просмотреть?


7-82516
Alibaba
2003-07-01 12:00
2003.09.25
Word


1-82283
Sima
2003-09-13 18:07
2003.09.25
Передача данных между формами


3-82123
AndDem
2003-08-27 14:06
2003.09.25
LoginPrompt в ADO


1-82252
xmapa
2003-09-15 11:44
2003.09.25
Как наклонить картинку?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский