Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Update Failed [D6, XP]


Страницы:   1 2

Drowsy ©   (2009-03-17 06:50:00) 

(IBASE)
Есть таблица с данными :
CREATE TABLE LAYOUT (
   TYPERAZ       D_TYPERAZ /* D_TYPERAZ = CHAR(20) */,
   CNT_PRO       SMALLINT,
   WID_PRO_1     SMALLINT,
   WID_PRO_2     SMALLINT,
   WID_PRO_3     SMALLINT,
....
....
.....
);

TYPERAZ  CNT_PRO     WID_PRO_1    WID_PRO_2   WID_PRO_3    
2х12              2           12           18          18
2,2х14            2           12           24          24
2,2х16            2           12           24          24
2,5х14            2           12           24          24
2,5х20            3           15           30          30
2,8х14            3           15           30          30

и новая:

CREATE TABLE DRYBAR (
   CODE     INTEGER NOT NULL, // ключ с автоинкрементом.
   CNT_PRO  SMALLINT
   WID_PRO_1     SMALLINT
);

Вопрос: Можно ли одним запросом заполнить её значениями соответствующих полей из LAYOUT?

Делал разные попытки с
//===== INSERT
uoDryBar.SQL[ukINSERT] =
insert into DRYBAR_S
(CNT_PRO, WID_PRO_1)
SELECT
 CNT_PRO, WID_PRO_1
From LAYOUT ;

//======== UPDATE
uoDryBar.SQL[ukMODIFY] =
update DRYBAR_S
set
 CODE = :CODE,
 CNT_PRO = :CNT_PRO,
 WID_PRO_1 = :WID_PRO_1
where
 CODE = :OLD_CODE

.....
При выполнении:

uoDryBar.ExecSQL(ukInsert);
всё время возникает ошибка Update Failed.


Drowsy   (2009-03-18 17:13:00) [1]

Я Хелен Борри "Firebird..." штудирую. :)


Drowsy   (2009-03-18 17:10:00) [2]

Обязательно!
Теория это основа.
Но, я уверен, что такие нюансы, которые я с твоей помощью, узнал,
в книгах если и встречаются, то без актуально-решаемой-в-данный-момент-проблемы, не запишутся в моск.
Теория+практика+добрый совет(ещё раз огромное спасибо) - это оптимально.


Sergey13   (2009-03-18 16:49:00) [3]

> [37] Drowsy   (18.03.09 16:26)

Методом тыка долго будешь узнавать. И не факт, что узнаешь правильно.
Советую прочитать "Мир Интербейс" Ковязина.
Ну и ibase.ru сделать стартовой страницей. 8-)


Drowsy   (2009-03-18 16:26:00) [4]

Да, если поставить Read Commited, то транзакция отрабатывает по Open, Close набора.
Спасибо, Сергей, бузнать! :)


Sergey13   (2009-03-18 16:10:00) [5]

> [35] Drowsy   (18.03.09 16:01)
> Наверно, в ран-тайме по-умолчанию Read Commited устанавливается?
> ??

Ну так поставь ручками. И проверь без своих "наворотов".


Drowsy   (2009-03-18 16:01:00) [6]

А там все радио-баттоны девственно-пусты.
Наверно, в ран-тайме по-умолчанию Read Commited устанавливается???
...
ХМ, хотя Transaction.Params, в рантайме, как я проверил, тоже пусты....


Sergey13   (2009-03-18 15:54:00) [7]

> [31] Drowsy   (18.03.09 15:45)

Правой кнопкой на них жмякни и выбери редактор транзакций - посмотри что написано.


Drowsy   (2009-03-18 15:52:00) [8]

dmMain.trDryBar_S.Active := True;
И
dmMain.qrDryBar_S.Open;

но:
dmMain.trDryBar_S.Active := False;
И
dmMain.qrDryBar_S.Close;

получается, что разные.
В этом, как я понял, и была ошибка в коде.


Drowsy   (2009-03-18 15:47:00) [9]


> Что то не очень похоже на код из

Я ж не ровно на попе сижу, а еложу... :)


Drowsy   (2009-03-18 15:45:00) [10]

Я параметры транзакций не устанавливал.
В дизайн тайме они так выглядят:

 object trDryBar_S: TIBTransaction
   Active = False
   DefaultDatabase = dbProjects
   AutoStopAction = saNone
   Left = 416
   Top = 400
 end


Sergey13   (2009-03-18 15:18:00) [11]

> [28] Drowsy   (18.03.09 14:22)
> Параметры всех транзакций по-умолчанию.

какие конкретно?


Sergey13   (2009-03-18 15:11:00) [12]

> [28] Drowsy   (18.03.09 14:22)
> Что скажешь,Сергей?

Шаманизм какой то. С бубном. 8-)

> Было :
> /=========

Что то не очень похоже на код из
> [19] Drowsy   (18.03.09 11:59)

> if dmMain.qrDryBar_S.RecordCount

Не надо пользоваться RecordCount на серверных СУБД. На пустоту датасет проверяется isEmpty.

> (!!!)  dmMain.trDryBar_S.Active := True;
> dmMain.qrDryBar_S.Open;

Это по сути одно и то же.


Drowsy   (2009-03-18 14:22:00) [13]

Параметры всех транзакций по-умолчанию.

Было :
/=========================
 dmMain.qrDryBar_S.Close;

(!!!)  dmMain.trDryBar_S.Active := False;

 with dmMain.IBSQL, SQL do begin
   Transaction.StartTransaction;
   Clear;
   Add('   insert into DRYBAR_S');
//..........
//..........
   ExecQuery;
   Transaction.Commit;
 end;

(!!!)  dmMain.trDryBar_S.Active := True;
 dmMain.qrDryBar_S.Open;
 if dmMain.qrDryBar_S.RecordCount <> 0 then begin
   fmFDBTest.DBGridEh.DataSource := dmMain.dsDryBar_S;
   fmFDBTest.ShowModal;
 end;
 dmMain.qrDryBar_S.Close;
(!!!)  dmMain.trDryBar_S.Active := False;

/=========================

(!!!) - добавленные-заработало.

Что скажешь,Сергей?


Sergey13   (2009-03-18 14:11:00) [14]

> [25] Drowsy   (18.03.09 13:57)
> Всё, разобрался!

Сомнительно. 8-)

> Как  понял, перед инсертом надо закрывать транзакцию на наборе.
А попонятнее можешь объяснить эту фразу. Какая транзакция, какой набор?

И все таки ответь на
> [24] Sergey13 ©   (18.03.09 13:52)


Drowsy   (2009-03-18 13:59:00) [15]

Я думал, по-наивности, что Close закрывает транзакцию на селект наборе.


Drowsy   (2009-03-18 13:57:00) [16]

Всё, разобрался!
Как  понял, перед инсертом надо закрывать транзакцию на наборе.
После инсерта StartTransaction. И потом Ореn.
Сергей, Юрий, спасибо за участие!!!


Sergey13   (2009-03-18 13:52:00) [17]

> [23] Drowsy   (18.03.09 13:34)

Какие параметры у твоих транзакций?


Drowsy   (2009-03-18 13:34:00) [18]

Я, не выходя из проги, после инсерта смотрю в IBExpert-е и вижу, что все данные внесены. Но сколько форму с гридом не вызываю - пусто. Выхожу из проги, захожу снова, и только тогда появлются.


Drowsy   (2009-03-18 13:28:00) [19]

У меня они изначально в дизайне были. Я их от отчаяния вытащил в реал-тайм. :(


Sergey13   (2009-03-18 13:26:00) [20]

> [19] Drowsy   (18.03.09 11:59)

Попробуй прописать все запросы и прочее свойства в дизайне.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо