Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.10.03;
Скачать: [xml.tar.bz2];

Вниз

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

 
Донской   (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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.53 MB
Время: 0.048 c
3-1094130836
Heretic
2004-09-02 17:13
2004.10.03
Необходим особенный DBGrid


4-1093774979
DimOn2
2004-08-29 14:22
2004.10.03
Заставка


1-1095697968
N
2004-09-20 20:32
2004.10.03
TGisNavigator


3-1094111059
Iconka
2004-09-02 11:44
2004.10.03
Транзакции в FIBPlus (БД FireBird 1.5)


3-1094021618
Senator
2004-09-01 10:53
2004.10.03
SQL





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский