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

Вниз

Кеш базы???   Найти похожие ветки 

 
Кузьмич   (2015-06-29 13:18) [0]

Всем доброго времени суток! Столкнулся с одной непоняткой.
Юзаю Firebird 2.5, пишу инфу в базу хранимками. Например в поле MyField(Numeric 15/2) базы начальное значение: 1 Читаю в проге,вижу 1. Потом пишу значение 2,сразу после записи читаю и вижу прежнее, тоесть 1. Но IBExpert показывает в это время что 2 успешно записалось. Затем для теста делаю по другому,читаю и вижу 1,пишу 2,connect=false,connect=true снова читаю и вижу 2 как и должно быть. В чем может быть трабла?


 
brother ©   (2015-06-29 13:20) [1]

комит?


 
Ega23 ©   (2015-06-29 14:00) [2]


> сразу после записи читаю и вижу прежнее, тоесть 1


В пишущей транзакции - будет 2. В другой, будет 1 до коммита пишущей, после будет 2. В случае отката пишущей - значение не изменится.


>  Но IBExpert показывает в это время что 2

Значит где-то между записью в твоей транзакции и чтением в IBExpert произошёл коммит.


 
кгшзх ©   (2015-06-29 14:30) [3]

http://delphimaster.net/view/2-1435321941/


 
Кузьмич   (2015-06-29 15:24) [4]

Хранимка:

begin
 if (:fin_id < 0) then
 begin
   insert into MyTable(MyField)
   values (:FIN_MyField);
 end
 else
 begin
   update
     MyTable
   set
     MyField=:FIN_MyField
   where
     id = :fin_id;
 end
end

Пишу в проге своей процедурой:

procedure RecordData(r:Real;sid:String);
begin
try
   with DataModule1.IBQuery1 do
   begin
   SQL.Text := "execute procedure PROCMYTABLE(" + sid +",:Name_param1)";
   DataModule1.IBQuery1.ParamByName("Name_param1").Value :=r;
   if not Transaction.Active then Transaction.StartTransaction;
   ExecSQL;
   Transaction.Commit;
   Transaction.Active := false;
   end;
 except
   on E: Exception do
   begin
     if DataModule1.IBQuery1.Active then DataModule1.IBQuery1.Transaction.Rollback;
     Application.MessageBox(PChar(E.Message), "Ошибка отката данных", MB_ICONERROR);
   end;
 end;
end;

К IBQuery1 прикручен IBTransaction(DefaultAction=TACommit)
В sid передаю нужный ID, в r нужное значение

Читаю сразу после записи с помощью IBQuery так: select MyField from MyTable
ParamChek=True

Что делаю не так? Может IBQuery1.Close в начале процедуры нужен?


 
кгшзх ©   (2015-06-29 15:41) [5]

http://delphimaster.net/view/2-1435321941/


 
Кузьмич   (2015-06-29 15:46) [6]

Только начал осваивать SQL, по ссылке кгшзх не совсем понятна причина проблемы. Если можно обьясните подробнее. Спасибо!


 
brother ©   (2015-06-29 15:50) [7]

да не обращай внимания, он у нас нервный аноним... бывает...


 
кгшзх ©   (2015-06-29 16:08) [8]

ты слушай бразера. он в курсе причины.
и не нервный аноним.


 
Кузьмич   (2015-06-29 16:13) [9]

Понятно что ничего не понятно... ((



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

Текущий архив: 2017.03.05;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.005 c
1-1349099238
jacksotnik
2012-10-01 17:47
2017.03.05
Вопрос по ZipMaster


15-1458634342
Игорь Шевченко
2016-03-22 11:12
2017.03.05
Нужен совет по поводу обработки большого количества почты


15-1458293246
DayGaykin
2016-03-18 12:27
2017.03.05
VCL для веб


15-1458310315
ВладОшин
2016-03-18 17:11
2017.03.05
Архиватор 7z, извлечение в cmd, пустые папки


15-1458419671
Kilkennycat
2016-03-19 23:34
2017.03.05
час земли