![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проверка наличия поля в таблице. [D7, XP]
vegarulez © (2011-11-09 23:34:00)Буэнос диас, комрады!
Подскажите такой вопрос - как проверить наличие поля в таблице и если его нет то создать, если есть то просто продолжить работу.
использую *.mdb + zquery
проверяю наличия поля в таблице через
Zquery1.SQL.Text:='Select xml_2 from cfg where 1';
Zquery1.Open;
if not (Zquery1.FieldCount>0) then
Begin
...
End;
но вот беда если поля в таблице нет то запрос вываливается в эксцепшн (
как более правильно проверять такие вещи и создавать поля если их нет.
Медвежонок Пятачок (2011-11-10 00:37:00) [21]очередная ветка из ничего постов на сто
vegarulez (2011-11-10 00:36:00) [22]sniknik © (10.11.11 00:33) [8]
>>ищи, может и в твоих "+ zquery"
забыл уточнить использую ZEOSDBO
Медвежонок Пятачок (2011-11-10 00:35:00) [23]а типа получив исключение ты лично встанешь в тупик и не поймешь от чего он произошел
sniknik (2011-11-10 00:33:00) [24]> а типа получив эксепшен ты все еще не понял, что поля нет
а типа эксепт гарантирует что он от отсутствия поля... а не от коннекта например.
> как это сделать правильно.
в ADO есть получение списка/полей, или более подробной инфы через OpenSchema.
ищи, может и в твоих "+ zquery" подобное тоже есть... ну или претензию разработчику.
Медвежонок Пятачок (2011-11-10 00:29:00) [25]или если боишся исключений
TDataSet.FieldDefs.Update;
TDataSet.FieldDefs.Find();
Медвежонок Пятачок (2011-11-10 00:25:00) [26]а типа получив эксепшен ты все еще не понял, что поля нет
vegarulez (2011-11-10 00:13:00) [27]Inovet © (10.11.11 00:11) [4]
собственно чтобы alter сделать - надо узнать сперва есть ли фиелд в табличке. собственно поэтому и сабж. как это сделать правильно.
Inovet (2011-11-10 00:11:00) [28]> [2] vegarulez (10.11.11 00:01)
> Поверь мне нужно динамически приводить базы в одно состояние
> на разных тачках в зависимости от обновлений.
Хранить версию схемиы, и накатывать апдейты по очереди. Апдейты на DDL
alter table add field;
alter index;
и т.п.
Медвежонок Пятачок (2011-11-10 00:04:00) [29]но вот беда если поля в таблице нет то запрос вываливается в эксцепшн (
это не беда, а сигнал.
поля нет.
vegarulez (2011-11-10 00:01:00) [30]Поверь мне нужно динамически приводить базы в одно состояние на разных тачках в зависимости от обновлений. Поэтому нужен такой подход - проверять эти поля в форм криэйте и создавать их перед запуском программы если их нет.
И. Павел (2011-11-09 23:48:00) [31]
> vegarulez (09.11.11 23:34)
Можно делать SELECT * WHERE 1 = 0 и смотреть список полей, их типы и т.д.
Хотя наверняка можно через системные таблицы вытащить, но способ выше универсальнее :)
PS: Ситуации, когда действительно оправдано динамически создавать и удалять поля в таблицах очень редкие. В большинстве случаев можно обойтись без такого усложнения.