/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
Interbase og tråde
Fra : Ukendt


Dato : 03-02-03 21:12

Hej

Jeg sidder lige og fedter lidt med Interbase 6.01 og tråde (og Delphi
6). Så vidt jeg har forstået skal hver tråd have sin egen IBDatabase
komponent.

Jeg har en main-form, hvor jeg via en knap kan starte et vist antal
tråde. I min tråd opretter jeg de nødvendige database objekter. Men
lige så snart jeg prøver at åbne databasen hænger tråden?

Det mærkelige (for mig) er dog, at det virker hvis jeg med min
for-løkke kun opretter én tråd. Lige så snart jeg opretter flere, så
får linien med myDB.Open tråden(e) til at hænge. Nogen der kan hjælpe
lidt? På forhånd tak.

procedure TfrmMain.Button1Click(Sender: TObject);
var
Index: Integer;
MinTraad: MyThread;
begin
for Index := 1 to 10 do
begin
MinTraad := MyThread.Create(True);
MinTraad.Index := Index; // Indikerer hvilket nr. tråden har
MinTraad.Resume;
end;
end;

Koden til hver tråd ser ud som nedenstående. (Hav for øje at det kun
er et banalt eksempel).

procedure MyThread.Execute;
var
myDB: TIBDatabase;
myTrans: TIBTransaction;
begin
frmMain.ListBox1.Items.Add(IntToStr(Index) + '. Thread start');

myDB := TIBDatabase.Create(frmMain);
myTrans := TIBTransaction.Create(frmMain);

myDB.DatabaseName := ExtractFilePath(Application.ExeName) +
'test.gdb';
myDB.DefaultTransaction := myTrans;
myDB.LoginPrompt := False;
myDB.Params.Clear;
myDB.Params.Add('user_name=sysdba');
myDB.Params.Add('password=masterkey');

myDB.Open;

myTrans.Free;
myDB.Free;

frmMain.ListBox1.Items.Add(IntToStr(Index) + '. Thread end');
end;   

Mvh, Claus
--
I never apologize! I'm sorry, but that's the way I am.
- Homer Simpson

 
 
Claus Nielsen (04-02-2003)
Kommentar
Fra : Claus Nielsen


Dato : 04-02-03 12:30

For at svare på mit eget spørgsmål, så var tricket tilsyneladende
blot, at sætte databasename med 'localhost:' - sådan her:

myDB.DatabaseName := 'localhost:' +
ExtractFilePath(Application.ExeName) + 'test.gdb';

Men nogen der ved om det virkelig er nok? Eller mangler der noget
fancy i min kode for, at gøre det "mere sikkert"? Umiddelbart som jeg
forstår, så burde det være nok, at hver tråd connecter igennem hver
sit database objekt - men gør jeg det rigtigt?

Mvh, Claus

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408925
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste