Форум: "Начинающим";
Текущий архив: 2017.03.05;
Скачать: [xml.tar.bz2];
ВнизКеш базы??? Найти похожие ветки
← →
Кузьмич (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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.002 c