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

Вниз

Работа с транзакцией   Найти похожие ветки 

 
Demien   (2010-11-15 20:19) [0]

Здравствуйте!
мне необходимо в рамках явной транзакции организовать изменение поля "Улица". к примеру с "Мира" на "Анисимова".
и если более трех записей имеют одну и ту же улицу, то необходимо сделать откат транзакции, иначе принять изменения.

вот часть кода:

procedure TForm1.Button1Click(Sender: TObject);
var     BufStreet:string;
begin
BufStreet:=Table1Street.asstring;
Edit1.Text:=BufStreet;
end;

procedure TForm1.Button2Click(DataSet: TDataSet);
var buf,i,j,c:integer;
BufStreet:string;
begin
if Database1.InTransaction=true then   begin
try
Table1.First;
c:=Table1.RecordCount;
j:=0;
for i:=1 to c do
table1.RecNo:=i;
begin
BufStreet:=Table1Street.asstring;
Table1.Filter:="Street = """ + bufstreet + "*""";
Table1.Filtered:=true;
If Table1.RecordCount>3 then
j:=j+1;
Table1.Filtered:=false;
end;
if j= 0 then
begin
DataBase1.Commit;
Button1.Enabled:=true;
end
else if j>0 then begin
Table1.Cancel;
DataBase1.RollBack;
Table1.Refresh;
Button4.Enabled:=true;
            end;
Except
Table1.Cancel;
DataBase1.RollBack;
Table1.Refresh;
Button4.Enabled:=true;
end;
end;
end;


проблема в том, что в части кода, когда происходит фильтрация, поиск, и т.п., эти операции автоматически вызывают POST, который принимает все сделанные изменения.
но мне надо, чтобы принятие или откат изменений просходил именно там, где я их описал(в зависимости от выполнения условий j=0 или j>0)..
Как можно это реалазовать?

заранее спасибо за помощь!


 
Demien ©   (2010-11-15 20:23) [1]

ой, простите не то вставил=(
в начале кода вместо

procedure TForm1.Button1Click(Sender: TObject);
var     BufStreet:string;
begin
BufStreet:=Table1Street.asstring;
Edit1.Text:=BufStreet;
end;


должно быть
procedure TForm1.Button1Click(Sender: TObject);
begin
DataBase1.StartTransaction;
Button4.Enabled:=false;

end;


 
Johnmen ©   (2010-11-16 09:26) [2]

М.б. более логично сначала проверить, что "если более ДВУХ записей имеют одну и ту же улицу", то и ничего не делать?
И какие могут быть транзакции в Парадоксе???


 
Виталий Панасенко   (2010-11-16 09:48) [3]

есть там псевдотранзакции. т.е. их реально можно откатить.. но если система падает, то все изменения будут подтверждены...и ограничение на 255 строк на таблицу кажись. т.е. толку от них маловата так скажем..


 
Demien ©   (2010-11-16 13:09) [4]

а вообще Парадокс поддерживает вложенную транзакцию?
просто пришла идея,
где код с фильтрацией и поиском запихнуть в эту вложенную транзакцию,
то на основную, она не повлияет, и результат достигнется...

или к примеру разделить всю транзакцию на 2 сессии...но это я не знаю как сделать, может кто нибудь даст инфу по этому?
просто я искал, и к сожалению ни к чему не пришел(


 
Виталий Панасенко   (2010-11-16 14:01) [5]

совет: уйти с парадокса на, хотя бы, связку АДО+MS Access 2000 И выше.там транзакции нормальные. хотя с адо нужно много всяких всячин знать.я, вот, например, никак не могу обновить одну строку, либо не знаю как, либо так нельзя.. а вот используя FIBPlus+FireBird - это элементарное, стандартное поведение фибов...там наоборот, чтобы обновить весь набор данных нужно переоткрывать его.


 
Demien ©   (2010-11-16 14:32) [6]

эм, понимаете, дело в том, что это т.н. тестовая работа...
и я обязан сделать ее именно на парадоксе, и именно с использованием транзакций=)
вот и бьюсь с решением..


 
Виталий Панасенко   (2010-11-17 10:15) [7]

а, ну тогда удачи.. и тому, кто ее поставил, тем более..:-)


 
Anatoly Podgoretsky ©   (2010-11-17 10:20) [8]


> и я обязан сделать ее именно на парадоксе, и именно с использованием
> транзакций=)
> вот и бьюсь с решением..

Ты не обязан ее сделать, там достаточно иммитации.


 
Виталий Панасенко   (2010-11-17 10:23) [9]

учат всяким глупостям :-)


 
Anatoly Podgoretsky ©   (2010-11-17 19:08) [10]

> Виталий Панасенко  (17.11.2010 10:23:09)  [9]

Деньги платят.



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

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

Наверх





Память: 0.47 MB
Время: 0.003 c
2-1348466696
Вячеслав
2012-09-24 10:04
2013.06.09
Дескриптор ClientSocket


15-1359043243
Kerk
2013-01-24 20:00
2013.06.09
Джо Армстронг об обучении программированию


15-1359801615
Киноман
2013-02-02 14:40
2013.06.09
Вспомнить фильм


2-1352445326
NapalmRain
2012-11-09 11:15
2013.06.09
MultiByteToWideChar или другой способ перевести UTF16 LE в ANSI


3-1289900330
12
2010-11-16 12:38
2013.06.09
ORA-20004 при попытке задать параметр процедуре





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