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

Вниз

Триггер счетчика   Найти похожие ветки 

 
Донской   (2004-09-02 17:16) [0]

День добрый. чисто ламерский вопрос.
В Interbase expert создал первичный ключ в виде счетчика. И сама интербейз експерт предложила создать для него триггер и генератор. Я их создал, базу закрыл.
Когда коннектюсь к ней из дельфи с помощью TIBTable и пытаюсь добавить запись, то после команды post выдается ошибка, что ключевое поле не заполнено.
Разве триггер на стороне сервера не должен это делать сам?


 
-SeM-   (2004-09-02 17:24) [1]

Попробуй убрать это ключевое поле с текста запроса. Делфи знает, что это поле обязательное, потому и ругается. ИМХО.


 
Sergey13 ©   (2004-09-02 17:33) [2]

2Донской   (02.09.04 17:16)
1.Убедись что тригер есть и работает
2.Поставь для поля Required:=False


 
Донской   (2004-09-02 17:34) [3]

Да нет у меня запроса...
у меня такой код:

with IBTable1 do
  begin
     for k:=1 to 1000 do
     begin
        append;
        findfield("id_parent").asinteger:=1;
        findfield("datecreation").value:=now;
        findfield("selected").asinteger:=1;
        findfield("numpi").asstring:=" ";
        findfield("temperature").value:=0;
        findfield("velosity").value:=0;
        findfield("pressure").value:=0;
        post;
     end;
  end;


так вот ключевым является поле ID, которое в этом коде не правится. Я думал, что это должен делать сервер inttrbase.


 
Донской   (2004-09-02 17:36) [4]

Для поля Required:=False.... ща, пять сек, проверю...


 
Донской   (2004-09-02 17:38) [5]

Точно. Именно false!
Спасибо, Sergey13


 
Zacho ©   (2004-09-02 20:00) [6]

2 Донской :
Немедленно и вдумчиво читать http://www.ibase.ru/devinfo/generator.htm и все отальные статьи на http://www.ibase.ru/develop.htm


 
VID ©   (2004-09-03 00:21) [7]

1. создать генератор для твоего поля ID.
2. создать триггер Before Insert для твоей таблицы где это поле.
3. в коде триггера сделать NEW."ID" = GEN_ID(<generator_name>, 1);


 
Донской   (2004-09-03 12:24) [8]

Понятно, доки читаем обязательно.
А вот такой вопрос.
я создал sql запрос с созданием таблицы и внешнего ключа. В документации написано, что если при этом будет возникать ошибка Is in use, то базу надо открывать в монопольном режиме, а уже потом создавать связи между таблицами.
Так вот как программно открыть базу в монопольном режиме?


 
Sergey13 ©   (2004-09-03 12:32) [9]

2[8] Донской   (03.09.04 12:24)
А почему бы не продолжить успешное использование ИБЭксперта в деле администрирования/проектирования БД? Зачем в программу то это тащить?


 
Донской   (2004-09-03 12:38) [10]

Дело в том, что программа длительное время осциллографирует данные. Данные должны храниться в отдельной таблице, чтобы можно было использовать tdbchart для их отрисовки. Иначе будут глобальные тормоза не только при отрисовке, но и при добавлении данных (63 поля = 63 канала данных), тормоза проверены, этот вариант отпал.
Остается создание новой таблицы с осциллографируемыми данными для каждого сеанса измерений в режиме выполнения программы.
И связь этой таблицы с некоторыми другими таблицами из базы.


 
Sergey13 ©   (2004-09-03 12:41) [11]

2[10] Донской   (03.09.04 12:38)
>Остается создание новой таблицы
Не думаю, что это поможет.


 
Донской   (2004-09-03 12:42) [12]

а, кажется нашел.
надо заполнить поле parameters у компонента tibdatabase


 
Донской   (2004-09-03 12:42) [13]

а, кажется нашел.
надо заполнить поле params у компонента tibdatabase


 
Zacho ©   (2004-09-03 12:45) [14]

Донской   (03.09.04 12:24) [8]
Сделать ей shutdown ? В IBX можно с помощью TIBConfigService


 
Донской   (2004-09-03 12:46) [15]

хотя нет, не помогло. Они уже были заполнены,
и даже если логинпромт поставить в труе, и при запросе пароля ввести sysdba то все равно выскакивает ошибка is in use.
Хотя база открыта локально на моей машине только мной.


 
Zacho ©   (2004-09-03 12:48) [16]


>Донской   (03.09.04 12:38) [10][Ответить]
> Дело в том, что программа длительное время
> осциллографирует данные. Данные должны храниться в
> отдельной таблице, чтобы можно было использовать
> tdbchart для их отрисовки. Иначе будут глобальные
> тормоза не только при отрисовке, но и при добавлении
> данных (63 поля = 63 канала данных), тормоза
> проверены, этот вариант отпал.

Не понимаю, с чего бы взялись тормоза. Что-то ты неправильно делал.


>Донской   (03.09.04 12:42) [13][Ответить]
>а, кажется нашел.
> надо заполнить поле params у компонента tibdatabase

??? И какие параметры помогут подключиться к БД "монопольно" ?


 
Донской   (2004-09-03 12:48) [17]

Zacho,
нет такого компонета, у меня в палитре, по крайней мере.
А что он позволяет делать?


 
Zacho ©   (2004-09-03 12:50) [18]

Донской   (03.09.04 12:48) [17]
Поставь апдейт IBX. Или используй gfix.exe


 
Sergey13 ©   (2004-09-03 12:52) [19]

2[17] Донской   (03.09.04 12:48)
>нет такого компонета, у меня в палитре, по крайней мере.
Пропатчи ИБХ. На ibase.ru можно скачать.


 
Донской   (2004-09-03 12:53) [20]

Zacho,
да все вроде верно. Никаких наворотов. Просто таблица из 63 полей и к ней обращается tdbchart. Но после нескольких часов работы начинается подтормаживание при добавлении данных.
А представь такая лапша из данных в одной таблице для нескольких испытаний по несколько часов каждое, даже если она будет отфильтрована по текущему испытанию? Тормоза.
Вот поэтому я и хочу для каждого испытания создавать отдельную таблицу.


 
Роман Снегирев   (2004-09-03 12:54) [21]

короче нужно поставить Required=false у ключевого поля, а вообще пора переходить на FibPlus


 
Sergey13 ©   (2004-09-03 12:55) [22]

2[20] Донской   (03.09.04 12:53)
Это все лирика. Ты структуру приведи и методы работы опиши.


 
Sergey13 ©   (2004-09-03 13:01) [23]

2[20] Донской   (03.09.04 12:53)
1.А зачем ты выполняешь код из [3]?
2.Зачем используешь TTable?


 
Донской   (2004-09-03 13:01) [24]

Не, хорошо.
Я все понимаю. Но вот если абстрагироваться от конкретно моей задачи, и подумать в общем. Если есть sql запрос, который позволяет создавать внешний ключ, но при этом таблица должна быть открыта в монопольном доступе, то как это сделать???
Должен быть метод. Кто-нибудь знает?


 
Донской   (2004-09-03 13:03) [25]

Sergey13,
1) я ttable не использую. у меня сейчас tibtable.
2) код для тестирования.


 
Zacho ©   (2004-09-03 13:04) [26]

Донской   (03.09.04 13:01) [24]
Я же уже сказал. Зашатдаунить БД.
А вообще, не понимаю, как постоянное создание новой таблицы может помочь.
Все-таки что-то неправильно ты делал, если тормоза были.


 
Sergey13 ©   (2004-09-03 13:04) [27]

2[24] Донской   (03.09.04 13:01)
>Но вот если абстрагироваться от конкретно моей задачи, и подумать в общем.
Тебе надо задачу решать или ты о вечном поболтать хочешь? 8-)
Если пасатижами неудобно гвозди забивать, то необязательно утяжелять пасатижи. Можно просто молоток взять.


 
Донской   (2004-09-03 13:35) [28]

окей.
я про абстрагирование написал для того, чтобы ты не пытался выяснить зачем именно мне создавать ключ и не выносил суждения о приемлемости в данном конкретном случае, а предоставил этот вопрос решать мне. Я не спорю, что ты опытней меня, иначе я бы сюда не зашел. Меня только интересует вопрос - как открыть монопольный доступ к базе с тем чтобы получить доступ на добавление внешних ключей. Это сложно?


 
Sergey13 ©   (2004-09-03 13:42) [29]

2[28] Донской   (03.09.04 13:35)
Да делай как хочешь. Я тебе вполне конкретно намекал, что твои методы работы не соответствуют задаче. Не хочешь - не надо.
Я советов типа "как мне легче повеситься" не даю.


 
Донской   (2004-09-03 13:44) [30]

и на том спасибо.


 
Донской   (2004-09-03 13:46) [31]

и на том спасибо.
Может я не понял намека из=за того, что не знаю определения слова зашатдаунить.
не просвятишь? мы наверное друг друга не поняли.


 
Zacho ©   (2004-09-03 13:47) [32]


> Донской   (03.09.04 13:35) [28]

И ещё раз: shutdown
Правда, SYSDBA это не отключит, ну и нефиг подключаться нескольким SYSDBA одновременно.
P.S. И всё-таки ты решаешь задачу совершенно неподходящим способом. Лучше разберись, почему у тебя тормоза были.


 
Zacho ©   (2004-09-03 13:49) [33]

Или поставь апдейт IBX и используй TIBConfigService.ShutdownDatabase, или используй gfix.exe Описание работы с gfix можно найти в Operations Guide


 
Донской   (2004-09-03 13:52) [34]

Хорошо.
апдейт поищу, спасибо что разъяснил, Zacho.
Sergey13, прости если разозлил.



Страницы: 1 вся ветка

Текущий архив: 2004.10.03;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.022 c
14-1094898124
Delpher
2004-09-11 14:22
2004.10.03
Изучение Delphi


1-1095244218
1008
2004-09-15 14:30
2004.10.03
Удаление символа из вставленного в M$ Word текста


14-1095306382
KilkennyCat
2004-09-16 07:46
2004.10.03
Даж не верится...


1-1095259544
Relaxxx
2004-09-15 18:45
2004.10.03
Как мне у предложения отрезать последнее слово и записать.....


9-1086525671
Nightfure
2004-06-06 16:41
2004.10.03
SOS!!!!!