Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Firebird, Interbase > [Firebird] Заполнение БД


Автор: Lola8669 20.2.2009, 11:42
СУБД Firebird, интерфейс в Delphi.
Когда в EBExpert пытаюсь сохранить данные, например, в столбце Группы пишу название, хочу сохранить, а он выдаёт ошибку:
Error Message:
----------------------------------------
Unsuccessful execution caused by system error that does not preclude successful execution of subsequent statements.
lock conflict on no wait transaction.

Что это значит??

Автор: Данкинг 20.2.2009, 11:57
Цитата(Lola8669 @  20.2.2009,  11:42 Найти цитируемый пост)
заполнять данными в EBExpert или в Delphi??

Да как хочешь, даю добро на оба варианта. smile Только IBExpert он всё же.

Автор: Lola8669 20.2.2009, 12:31
Цитата(Данкинг @ 20.2.2009,  11:57)

Да как хочешь, даю добро на оба варианта.

Я уже поняла smile  А что с ошибкой делать??

Автор: ksili 20.2.2009, 12:38
Цитата(Lola8669 @  20.2.2009,  16:31 Найти цитируемый пост)
А что с ошибкой делать??

Наверно в БД есть какие-то триггеры на Update этой таблицы

Автор: Lola8669 20.2.2009, 12:50
Цитата(ksili @ 20.2.2009,  12:38)

Наверно в БД есть какие-то триггеры на Update этой таблицы

ну у меня все таблицы невозможно заполнить, но есть там вкладка тригеры, перечислены они там, но я ничего не могу понять smile 

Автор: ksili 20.2.2009, 13:21
У меня IBExpert сейчас под рукой нету. Но в принципе там все довольно доступно. 
Кажется если открыть таблицу, там будет много закладок, просмотри их все. Там на какой-то будут все зависимости или ограничения, накладываемые на таблицу, среди них будут триггеры (для них даже кажется будет отдельная закладка)

Но вообще дело может быть и не в триггерах. Это я так предположил.

Автор: Akella 20.2.2009, 13:57
Цитата(Lola8669 @  20.2.2009,  11:42 Найти цитируемый пост)
lock conflict on no wait transaction.

Для начала удели хоть немного времени изучению транзакций.
http://www.ibase.ru/devinfo/ibtrans.htm

Добавлено через 36 секунд
Lola8669, а если перевести? smile  Что получишь?

Добавлено через 1 минуту и 24 секунды
Lola8669, а что гугл говорит по поводу твоей ошибки?

Автор: Lola8669 20.2.2009, 14:17
Блин, Akella, вот ты всегда так отвечаешь, прочитала, всё равно не поняла что мне сделать smile 

Нет у меня в Database такого свойства TransIsolation =(

Ни в IBExpert'e, ни в Delphi не разрешает редактировать =(

Автор: Lola8669 20.2.2009, 14:41
Цитата(ksili @ 20.2.2009,  13:21)

Кажется если открыть таблицу, там будет много закладок, просмотри их все. 

Там есть закладка ПРАВА и пользователи: PUBLIC и SYSDBA. У 1-го не стоит ни на что прав, а у 2-го есть права.

Автор: Данкинг 20.2.2009, 15:14
Цитата(Lola8669 @  20.2.2009,  14:41 Найти цитируемый пост)
а у 2-го есть права.

SYSDBA - это самый главный босс по умолчанию, у него всегда есть права. smile 

Автор: Lola8669 20.2.2009, 15:27
Цитата(Данкинг @ 20.2.2009,  15:14)

SYSDBA - это самый главный босс по умолчанию, у него всегда есть права

я знаю, ну блин, чё не работает smile 

Автор: Akella 20.2.2009, 16:08
Цитата(Lola8669 @  20.2.2009,  14:17 Найти цитируемый пост)
Блин, Akella, вот ты всегда так отвечаешь, прочитала, всё равно не поняла что мне сделать smile 

 smile  smile прости за такие ответы, но... нужно самой понимать, что делаешь, о чём читаешь, иначе знания в голове у тебя не сохранятся.
Ладно, подсказываю, ты редактируешь запись, которая УЖЕ находится в редактировании. Т.е. как выше уже сказали, смотри, что там у тебя в триггерах BeforUpdate. Возможно ты редактируешь или пытаешься сохранить данные посредствам триггеров не в текущей таблице,  а в зависимой какой-то, другой. Откуда нам здесь знать структуру твоей базы. Отстаётся только догадываться?

Возможно, что ты запросом где-то уже начала редактировать запись или отредактировала, а транзакцию НЕ подтвердила и не откатила. Поэтому запись и заблокирована.

Понимаешь, пока пишущая транзакция, которая редактировала записи не подтверждена и ли не откачена - эти записи редактировать нельзя другой транзакцией, т.к. они заблокированы первой (пишущей) транзакцией.


Цитата(Lola8669 @  20.2.2009,  14:17 Найти цитируемый пост)
Нет у меня в Database такого свойства TransIsolation =(

Ни в IBExpert'e, ни в Delphi не разрешает редактировать =(

ну покажи хоть код триггеров, чтоле

Добавлено через 8 минут и 1 секунду
О, а у тебя есть внешний ключи, где правило обновления стоит CASCADE?

Добавлено через 9 минут и 20 секунд
Возможно, что ты меняешь запись в триггере, а её ещё и внешний ключ меняет? Я имею ввиду запись таблицы, которая привязана к текущей внешним ключом (ссылочной целостностью).

Добавлено через 14 минут и 4 секунды
Вот ещё тебе пример по конфликтам транзакций:
1. старт  транзакции №1

2. update table set name = 'Вася Пупкин' where id = 10 (как видишь, здесь редактируется запись с id = 10, а значит она блокируется)

3. старт  транзакции №2

4. update table set name = 'Вова Дятлов' where id = 10 (а здесь мы пытаемся отредактировать запись с id = 10, которая заблокирована транзакцией №1, ведь транзакция №1 ещё НЕ ПОДТВЕРЖЕНА и НЕ ОТКАЧЕНА)

поэтому на шаге 4 мы получим пинок от сервера.


Автор: Lola8669 21.2.2009, 13:08
Ну вот, теперь в EBExpert вводятся данные, а в делфи - нет, пишет что-то там про DataSet!!! smile 

Автор: Данкинг 21.2.2009, 13:37
Цитата(Lola8669 @  21.2.2009,  13:08 Найти цитируемый пост)
пишет что-то там про DataSet!!!

Сочувствую. И что же там (и кто) пишет про DataSet ?
Наверное, это IBExpert пишет о том, что ты никак не можешь запомнить его имени. smile

Автор: Akella 21.2.2009, 14:44
Цитата(Lola8669 @  21.2.2009,  13:08 Найти цитируемый пост)
пишет что-то там про DataSet!!!

Что-то? Это плохо, это не лечится!

Автор: Lola8669 21.2.2009, 15:33
Цитата(Данкинг @ 21.2.2009,  13:37)

Наверное, это IBExpert пишет о том, что ты никак не можешь запомнить его имени. smile

 smile 

Когда нажимаю редактировать, то пишет: Проект вызвал исключение класса EDatabaseError с сообщением 'GRUPPI: Cannot modify a read-only dataset'. Процесс остановлен. Используйте шаг или Запуск для продолжения.

Автор: Akella 22.2.2009, 12:03
Цитата(Lola8669 @  21.2.2009,  15:33 Найти цитируемый пост)
Cannot modify a read-only dataset'.

опять перевести религия не позволяет?

Автор: Данкинг 22.2.2009, 23:17
Lola8669, а что ты там такое редактируешь? Вот я от нечего делать экспериментирую, всё у меня работает (а FB я начал изучать вместе с тобой, как ты помнишь  smile ) :

Код

procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
randomize;
IBDatabase1.Open;
for i:=1 to 100 do
 begin
  IBTransaction1.StartTransaction;
  IBQuery1.Close;
  IBQuery1.SQL.Clear;
  IBQuery1.SQL.Text:='insert into ggg values (:par1,:par2,:par3)';
  IBQuery1.ParamByName('par1').AsString:=inttostr(random(100));
  IBQuery1.ParamByName('par2').AsString:='Бугога '+inttostr(i);
  IBQuery1.ParamByName('par3').AsString:='fuuuuuck OFFF !!!! '+inttostr(i*i);
  try
  IBQuery1.ExecSQL;
  IBTransaction1.Commit;
  except
  IBTransaction1.Rollback;
  end;
 end;
IBDatabase1.Close;
showmessage('Готово');
end;


smile smile smile

Автор: Lola8669 23.2.2009, 15:30
Я всё подключила, в DBGrid отображаются поля таблиц, а добавлять запись не разрешает. smile 

Автор: Akella 23.2.2009, 16:39
Значит у тебя нередактируемый SQL запрос.

Автор: Данкинг 23.2.2009, 17:35
Цитата(Lola8669 @  23.2.2009,  15:30 Найти цитируемый пост)
а добавлять запись не разрешает.

И запросом тоже? Как у меня.

Автор: Lola8669 24.2.2009, 11:42
Цитата(Данкинг @ 23.2.2009,  17:35)

И запросом тоже? Как у меня.

Да, как сделать, чтоб можно было добавлять и редактировать записи?? 

Автор: Данкинг 24.2.2009, 11:46
Цитата(Lola8669 @  24.2.2009,  11:42 Найти цитируемый пост)
Да, как сделать, чтоб можно было добавлять и редактировать записи??  

Покажи свой код. smile Я же говорю: ничего неординарного не делал, просто кинул на форму компоненты и подключился к БД.

Автор: Akella 24.2.2009, 19:02
запрос вида 
Код

select id, name from table


считается редактируемым

запрос вида:
Код

select t1.id, t2.name from table t1
left join table2 t2 on (t1.id_det = t2.id)

считается нередактируемым

И ещё. У набора данных есть свойство requestlive. Почитайте на эту тему.

Автор: Deniz 25.2.2009, 07:01
Akella, вопрос редактируемости набора данных решается заполнением соответствующих свойств у DataSet'а.
Если она использует IBX, то там есть InsertSQL и т.д. и с их помощью даже запрос с left join можно сделать редактируемым.

Автор: Akella 25.2.2009, 11:51
Цитата(Deniz @  25.2.2009,  07:01 Найти цитируемый пост)
Если она использует IBX, то там есть InsertSQL 

Deniz, ну если человек не может про insertSQL и UpdateSQL не может сам догадаццо или справку посмотреть, что зачем тогда вообще пытаться программировать?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)