Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Delphi 2010 & Firebird 2.1 
:(
    Опции темы
former
Дата 12.4.2010, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


Профиль
Группа: Завсегдатай
Сообщений: 1166
Регистрация: 1.3.2006
Где: Россия

Репутация: 7
Всего: 17



Цитата(VahaC @  12.4.2010,  08:45 Найти цитируемый пост)
Как это сделать с помощью ДБНавигатора к сожалению не знаю, так как в своих проектах его не использую

DBNavigator тут не причем. Подтверждать транзакцию нужно в ClientDataSet, в триггере AfterPost. Ну и, соответственно, выполнять откат при ошибке (OnPostError  и т.п.).


--------------------
Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами.
PM MAIL   Вверх
VahaC
Дата 12.4.2010, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 4.9.2007

Репутация: нет
Всего: нет



Цитата(former @  12.4.2010,  10:27 Найти цитируемый пост)
Подтверждать транзакцию нужно в ClientDataSet, в триггере AfterPost. Ну и, соответственно, выполнять откат при ошибке (OnPostError  и т.п.).

полностью согласен
PM MAIL   Вверх
Keeper89
Дата 12.4.2010, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 1
Всего: 58



Цитата(former @  12.4.2010,  10:27 Найти цитируемый пост)
DBNavigator тут не причем. Подтверждать транзакцию нужно в ClientDataSet, в триггере AfterPost. Ну и, соответственно, выполнять откат при ошибке (OnPostError  и т.п.). 

ок, а как это должно выглядеть в коде?

Это сообщение отредактировал(а) Keeper89 - 12.4.2010, 12:45


--------------------
PM MAIL WWW   Вверх
former
Дата 12.4.2010, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


Профиль
Группа: Завсегдатай
Сообщений: 1166
Регистрация: 1.3.2006
Где: Россия

Репутация: 7
Всего: 17



Код

procedure TForm1.ClientDataSet1AfterPost(DataSet: TDataSet);
begin
  IBTransaction1.CommitRetaining();
end;

procedure TForm1.ClientDataSet1PostError(DataSet: TDataSet; E: EDatabaseError;
  var Action: TDataAction);
begin
  IBTransaction1.Rollback();
end;



--------------------
Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами.
PM MAIL   Вверх
Keeper89
Дата 12.4.2010, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 1
Всего: 58



А что есть IBTransaction1? smile 


+ другой маленький вопрос (не буду делать отдельную тему). Имеется триггер (и соотв. генератор) на BeforeInsert для ID-поля. При вставке новой записи в IBExpert'е автоматически добавляется новый ID как и положено, однако при попытке добавления записи в Delphi такого не происходит. В чем может быть дело?


--------------------
PM MAIL WWW   Вверх
former
Дата 12.4.2010, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


Профиль
Группа: Завсегдатай
Сообщений: 1166
Регистрация: 1.3.2006
Где: Россия

Репутация: 7
Всего: 17



Цитата(Keeper89 @  12.4.2010,  12:46 Найти цитируемый пост)
А что есть IBTransaction1?

Так ты используешь  dbExpress. А я так понял, что после сообщения Данкинг-а IBX. smile 
Вот статья.

Цитата(Keeper89 @  12.4.2010,  12:46 Найти цитируемый пост)
В чем может быть дело? 

Тело триггера в студию.


--------------------
Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами.
PM MAIL   Вверх
Данкинг
Дата 12.4.2010, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Цитата(former @  12.4.2010,  14:15 Найти цитируемый пост)
Так ты используешь  dbExpress. А я так понял, что после сообщения Данкинг-а IBX. 

А, ну да, я про IBX, разумеется. Там без IBTransaction работать и не будет.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Keeper89
Дата 12.4.2010, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 1
Всего: 58



Цитата(former @  12.4.2010,  13:15 Найти цитируемый пост)
Вот статья.

Очень она пессимистичная smile

В моем случае никак? smile

Цитата(former @  12.4.2010,  13:15 Найти цитируемый пост)
Тело триггера в студию. 

Код

AS
BEGIN
  IF (NEW.PRODUCTID IS NULL) THEN
    NEW.PRODUCTID = GEN_ID(GEN_PRODUCT_ID,1);
END



--------------------
PM MAIL WWW   Вверх
Akella
Дата 12.4.2010, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(Keeper89 @  12.4.2010,  12:46 Найти цитируемый пост)
А что есть IBTransaction1?

Это транзакция. Транзакции в базах данных ухх как важны!
Транзакция - это совокупность действий...
PM MAIL   Вверх
Keeper89
Дата 12.4.2010, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 1
Всего: 58



Цитата(Akella @  12.4.2010,  15:32 Найти цитируемый пост)
Это транзакция. Транзакции в базах данных ухх как важны!
Транзакция - это совокупность действий... 

Спасибо за напоминание smile


--------------------
PM MAIL WWW   Вверх
Akella
Дата 12.4.2010, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(Keeper89 @  12.4.2010,  12:46 Найти цитируемый пост)
однако при попытке добавления записи в Delphi такого не происходит. В чем может быть дело? 

А что ты передаёшь серверу, NULL?
Цитата(Keeper89 @  12.4.2010,  15:29 Найти цитируемый пост)
 IF (NEW.PRODUCTID IS NULL)

Согласно условий ты должен передать NULL в запросе для этого поля. А лучше вообще не передавать это поле:
Код
insert into table1 (name, BirthDay) values ('Вася Пупкин', '2001-01-12')


Добавлено @ 15:56
Или если НЕ передаёшь NULL, то должен передать конкретное значение:
Код
insert into table1 (id, name, BirthDay) values (10, 'Вася Пупкин', '2001-01-12')


Это сообщение отредактировал(а) Akella - 12.4.2010, 15:57
PM MAIL   Вверх
Keeper89
Дата 12.4.2010, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 1
Всего: 58



Цитата(Akella @  12.4.2010,  15:55 Найти цитируемый пост)
А что ты передаёшь серверу, NULL?

Ничего не передаю.

У меня есть ClientDataSet, для добавления я делаю ClientDataSet.Insert, заполняю только нужные поля (через DBEdit'ы), и дальше ClientDataSet.Post.


--------------------
PM MAIL WWW   Вверх
Akella
Дата 13.4.2010, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(Keeper89 @  12.4.2010,  12:46 Найти цитируемый пост)
При вставке новой записи в IBExpert'е автоматически добавляется новый ID как и положено, однако при попытке добавления записи в Delphi такого не происходит. В чем может быть дело? 

Хорошо. А что значит "ничего не происходит"? Что ты под этим подразумеваешь? Что ты ожидаешь? Что должно произойти?
PM MAIL   Вверх
Keeper89
Дата 13.4.2010, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 1
Всего: 58



Цитата(Akella @  13.4.2010,  10:41 Найти цитируемый пост)
Хорошо. А что значит "ничего не происходит"? Что ты под этим подразумеваешь? Что ты ожидаешь? Что должно произойти? 

Я подразумеваю, что при Post'е незаполненные поля (которые по идее передаются как NULL) заполнятся автоматически на основании триггеров. А выдается ошибка, что поле должно быть заполнено.


--------------------
PM MAIL WWW   Вверх
Akella
Дата 14.4.2010, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Наверное, это связано с внутренней реализацией компонент. Поэтому два выхода.
1. В клиентской части приложения берём значение генератора и передаём в запросе, как и все остальные поля.
2. Поле ID вообще не должно участвовать в запросе. Зачем ты его туда пхаешь?
PM MAIL   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0584 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.