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

Вниз

Транзакция в АДО?   Найти похожие ветки 

 
kvit ©   (2004-04-30 07:14) [0]

Проблема примера заключается в том, что в случае, если срабатывает условие (cbPlita.KeyValue>0), то нет записи в таблицу KVARTIRA. Если убрать блок обработки транзакции, то все Ок. Но мне нужен блок обработки транзакции.
Из таблицы KVARTIRA поле identity считывается с правильным значением.

Для более подробного наглядного пособия предоставляю полный код:
try
            DM.LUES.BeginTrans;
            //--------------------- KVARTIRA ----------------------
            DM.Temp.Close;
            DM.Temp.SQL.Clear;
            DM.Temp.SQL.Add("insert into KVARTIRA (ID_dom, Kvart, FIO_Kvart, Lic_sch, cnt_komn, debet, kredit, saldo)");
            DM.Temp.SQL.Add("values (:ID_dom, :Kvart, :FIO_Kvart, :Lic_sch, :cnt_komn, 0, 0, 0)");

            DM.Temp.Parameters.ParamByName("ID_DOM").Value:=DM.DOM.FieldByName("ID_DOM").asInteger;
            DM.Temp.Parameters.ParamByName("Kvart").Value:=trim(edKvart.text);
            DM.Temp.Parameters.ParamByName("FIO_Kvart").Value:=trim(edFIO_Kvart.text);
            DM.Temp.Parameters.ParamByName("Lic_Sch").Value:=trim(edLic_Sch.text);
            DM.Temp.Parameters.ParamByName("Cnt_komn").Value:=edCnt_komn.Value;
            DM.Temp.ExecSQL;

            //---------
            DM.Temp1.Close;
            DM.Temp1.SQL.Clear;
            DM.Temp1.SQL.Add("select distinct(@@identity) as ID_kvart from KVARTIRA");
            DM.Temp1.Open;
            ID_kvart:=DM.Temp1.FieldByName("ID_kvart").asInteger;
            //-------------------- PLITA -----------------------
            if (cbPlita.KeyValue>0) then
            begin
                DM.Temp2.Close;
                DM.Temp2.SQL.Clear;
                DM.Temp2.SQL.Add("insert into PLITA (ID_Kvart, plita_data, plita, plita_tarif)");
                DM.Temp2.SQL.Add("values (:ID_Kvart, :plita_data, :plita, 0)");

                DM.Temp2.Parameters.ParamByName("ID_Kvart").Value:=ID_Kvart;
                DM.Temp2.Parameters.ParamByName("plita_data").Value:=dPLITA.Date;
                DM.Temp2.Parameters.ParamByName("plita").Value:=cbPlita.KeyValue;

                DM.Temp2.ExecSQL;
            end;
            //------------------------------------------------
            DM.LUES.CommitTrans;
        except
            DM.LUES.RollbackTrans;
            ShowError("Îøèáêà çàïèñè äàííûõ.");
            exit;
        end;


 
Hooch ©   (2004-04-30 07:34) [1]

во-первых BeginTrans до try, т.е.

BeginTrans
try
 Commin
except
 Rollback
end;

а коннекшин у Temp1 и Temp2 одинаковые ?


 
kvit ©   (2004-04-30 08:06) [2]

Соединение все через один ADOConnection


 
sniknik ©   (2004-04-30 08:34) [3]

зачем повторятся?
http://delphimaster.net/view/3-1083214133/
тем более без изменений, от повторов того же самого лутше не станет.

рекомендаций не выполнил (советовал делать командами sql на сервере, да и вообще все можно в один блок запихнуть (необязательно процедуру но всетаки связанные данные нужно ложить в одном, максимально быстро без задержек между командами зависящих от клиента)), возникших вопросов не прояснил.. (со структурой к примеру, поле действительно автоинкремент?)


 
kvit ©   (2004-04-30 08:44) [4]

KVARTIRA:
ID_kvart int (identity 1,1)
ID_dom int
Kvart varchar(6)
FIO_kvart varchar(100)
Lic_sch varchar(10)
cnt_komn int
debet Numeric(12,5)
kredit Numeric(12,5)
saldo Numeric(12,5)

PLITA:
ID_kvart int
plita_data datetime
plita int
plita_tarif numeric(12,5)

Почему без блока DM.LUES.BeginTrans, CommitTrans - Все отлично пишет, а с ними - только запись в последнюю таблицу.
В BDE такой номер работал? Может я неправильно уровни изоляции транзакции указал в ADOConnection (=ilCursorStability)?


 
sniknik ©   (2004-04-30 08:54) [5]

а транзакзакцию на сервере sql командами как я говорил пробовал?

и  вот это
select distinct(@@identity) as ID_kvart from KVARTIRA
бред
то же самое без задействования таблици
select @@identity as ID_kvart


 
kvit ©   (2004-04-30 09:07) [6]

Дело в том, что иногда бывает так, что просто
select @@identity as ID_kvart
выдает не одну строку, а несколько одиннаковых, по-этому не зная почему так проиисходит (этот процесс без закономерности) я стал себя перестраховывать и писать с оператором distinct


 
kvit ©   (2004-04-30 09:10) [7]

Транзакции на сервере точно работают, это уже проверено в другой части программы.
Но меня раздирает вопрос почему ADOConnection.BeginTrans  и .CommitTrans  не дают такого же результата , ведь под BDE данный код работает????


 
sniknik ©   (2004-04-30 10:41) [8]

> select @@identity as ID_kvart
> выдает не одну строку, а несколько одиннаковых
такой запрос несколько записей выдавать не может! вот тот что у тебя с привязкой к таблице без дистинкта вытаст по количеству записей в таблице. неужели не разглядел разницу в двух запросах? -> [5]

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



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

Форум: "Базы";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.035 c
8-1078786855
ПсихЪ
2004-03-09 02:00
2004.05.23
TDirectDrawSurface из DelphiX


14-1083567626
Белый волк
2004-05-03 11:00
2004.05.23
Правильное отображение кирилицы в консольном приложении Delphi


14-1083743013
WondeRu
2004-05-05 11:43
2004.05.23
DMClient


14-1083798415
Германн
2004-05-06 03:06
2004.05.23
О конференции "Потрепаться"


4-1081139547
juiceman
2004-04-05 08:32
2004.05.23
Хук на клавиатуру и мышь





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