Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.23;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.032 c
1-1084003411
Virus.exe
2004-05-08 12:03
2004.05.23
Как добавить свой пункт в меню?


7-1081610499
Alexis
2004-04-10 19:21
2004.05.23
Вопрос о процессах и не только...


1-1084169747
nejest
2004-05-10 10:15
2004.05.23
конвертор dfm


8-1078908668
КомофОнСамый
2004-03-10 11:51
2004.05.23
чем загрузить на TImage картинку TIF?


4-1080997615
Swimmer
2004-04-03 17:06
2004.05.23
Загрузка bmp-ресурса в массив





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