Article View: pl.comp.lang.delphi
Article #268053DLL i FB
From: kamil
Date: Thu, 14 Jul 2005 09:38
Date: Thu, 14 Jul 2005 09:38
103 lines
3093 bytes
3093 bytes
Witam,
mam w DLL forme, ktora robi cos tam na bazie (FB). wszystko jest ok, az do
chwili kiedy "pusty update" ktory stwierdza zajetosc wybranego rekordu nie
wywali bledu "lock conflikt on nowait transaction", czyli w chwili kiedy chce
edytowac rekord, ktory juz jest edytowany. oczywiscie wszystko jest obudowane
w try/except wiec program wyswietla komunikat ze nie mozna edytowac rekordu,
ale przy probie zamkniecia okna (tego wywolywanego z dll) program glowny sie
zawiesza na instrukcji freelibrary, dodam ze jesli "lock conflikt" nie wystapi
to dll daje sie zwolnic bez problemu.
troche kodu(wersja uproszczona na potrzeby zadania pytania, ale problem
wystepuje ten sam):
wywolanie formy z DLL:
tdll_frm = function :boolean; stdcall;
var
LibHandle: THandle;
ShowForm: Tdll_frm;
begin
LibHandle := LoadLibrary('project2.DLL');
try
@ShowForm := GetProcAddress(LibHandle, 'ShowForm');
if not (@ShowForm = nil) then
ShowForm;
except
showmessage('z bledem');
FreeLibrary(Libhandle);
end;
try
FreeLibrary(Libhandle);
except
showmessage('blad');
a oto exportowana funkcja z dll:
function ShowForm:boolean; stdCall;
var DLLForm : Tform1;
begin
DLLForm:=Tform1.Create(nil);
try
DLLForm.ShowModal;
Result:=true;
if Result then begin
end;
finally
DLLForm.Free;
end;
end;
exports showform;
a na formie jest button ktory robi:
procedure TForm1.Button2Click(Sender: TObject);
begin
ibsql1.Transaction.StartTransaction;
ibsql1.ParamByName('id_kontrahent').Value:=strtoint(edit1.text);
try
ibsql1.ExecQuery
except
showmessage('error');
end;
ibsql1.Transaction.Rollback;
end;
forma zawiera button1 i same kontroli od bazy, czyli:
IBTransaction1 z ustawieniami:
concurrency
nowait
IBDatabase1 i
IBTransaction1 z zapytaniem:
update kontrahent set nazwa=nazwa
where
id_kontrahent=:id_kontrahent;
jako :id_kontrahent podstawiam wartosc identyfikatora rekordu.
dla testu raz zajmuje go przez inny program, wtedy program sie wiesza a innym
razem, gdy rekord nie jest zblokowany i ibsql1.exec wykona sie poprawnie
program pozwala zamknac okno bez problemu.
dzieki za pomoc
pozdrawiam
Kamil
--
Wysลano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
Technical Details
Message-ID:
<db5bqd$162$1@inews.gazeta.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mailShow Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail From: "kamil" <kielon.SKASUJ@gazeta.pl> Newsgroups: pl.comp.lang.delphi Subject: DLL i FB Date: Thu, 14 Jul 2005 09:38:21 +0000 (UTC) Organization: "Portal Gazeta.pl -> http://www.gazeta.pl" Lines: 103 Message-ID: <db5bqd$162$1@inews.gazeta.pl> NNTP-Posting-Host: aib254.internetdsl.tpnet.pl X-Trace: inews.gazeta.pl 1121333901 1218 172.20.26.237 (14 Jul 2005 09:38:21 GMT) X-Complaints-To: usenet@agora.pl NNTP-Posting-Date: Thu, 14 Jul 2005 09:38:21 +0000 (UTC) X-User: kielon X-Forwarded-For: 172.20.6.62 X-Remote-IP: aib254.internetdsl.tpnet.pl MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit