Avatar billede morten_s Nybegynder
03. juni 2002 - 15:59 Der er 8 kommentarer og
1 løsning

Skrive til Database fra Tråd

Jeg har hørt at ovenstående isue kan give problemer med blandede data hvis flere tråde skriver samtidig i en DB, ogen som har erfaring med dette ?

det skal bemærkes at jeg "kun" skal lave en insert eller en update, i sql ingen select parametre skal anvendes i trådene
Avatar billede morten_s Nybegynder
03. juni 2002 - 16:00 #1
ogen = nogen
Avatar billede pellelil Nybegynder
03. juni 2002 - 16:17 #2
Det er ikke noget jeg har nogen personlig erfaring med, men i følge hvad jeg har læst så kan det sagtens lade sig gøre uden nogen som helst problemer. Dog skal du være klar over (hvis du bruger BDE'en) har hver tråd skal have sin egen TSession (normalt behøver du ikke explicit at lave en sådan da Borland/Delphi automatisk gør dette for dig, men dette skal du som sagt gøre hvis du ønsker at en separat tråd får adgang til DBen).
Avatar billede pellelil Nybegynder
03. juni 2002 - 16:19 #3
Lige en reminder hver TSession skal også have hver sin TDatabase
Avatar billede morten_s Nybegynder
03. juni 2002 - 17:16 #4
pellelil> det vil sige at hver tråd skal bruge tid på at connecte
til databasen ?
det er måske ikke så smart ;-(

Jeg bruger ikke BDE, men MySql som jeg connecter til med komponenterne fra MicroOlap
Avatar billede pellelil Nybegynder
03. juni 2002 - 18:53 #5
Jeg vil ikke gør mig til talsmand for hvorvidt det er smart eller ej, men faktum er (når vi taler BDE) så skal hver tråd have sin egen TSession og TDatabase (og skal således hverisær "connecte" til databasen). Hvis du havde anvendt Interbase (via IBX) skulle hver tråd have sin TIBDatabase.

Jeg har ingen kendskab til MySql, men kan ikke forestille mig at denne er anderledes og du skal således sikkert have en TxxSesstion og eller TxxDatabase for hver tråd. Når du tænker over det er det ikke så mærkeligt da databasen (serveren) skal være i stand til at kunne skelne de enkelte tråde fra hinanden - således at tråd B ikke får svaret til en forespørgsel fra Tråd A (en rimelig forenkling af sagen men alligevel).

Nu kender jeg ikke dit program men mange gange vil du kunne lave en række tråde der connecter/disconnecter til databasen i forbindelse med program opstart også ellers forblive "i live" i hele programmets levetid (i såfald betyder "tiden" i forbindelse med connect/disconnect ingen ting).
Avatar billede cms Nybegynder
03. juni 2002 - 21:29 #6
Du kan vel bare lave en ekstra tråd, der sørger for at connecte til Databasen. Så kalder du en event i denne db-tråd fra hver af dine andre tråde og denne db-tråd tager så bare for sig af de retter den nu får serveret. Så slipper du med én db-connection og det er garanteret threadsafe!
Avatar billede morten_s Nybegynder
10. juni 2002 - 15:14 #7
cms> hvordan skal en sådan tråd se ud ?
jeg plejer normalt kun at lade dem udfører deres execute en gang og derefter FreeOnTerminate := True
Avatar billede cms Nybegynder
10. juni 2002 - 16:06 #8
Den kan bruge flere ting; messages og events f.eks.

Den kunne bruge en løkke, der hedder:
  while not Terminated do
  begin
    blablabla
  end;

Den kunne også bruge events - WaitForEvent tror jeg den hedder.
Har desværre ikke tid til at uddybe lige nu
Avatar billede morten_s Nybegynder
19. juni 2002 - 08:34 #9
Har nu selv fundet ud af det, det går godt når
man bruger synchronize(ExecSQL) men tak for de gode råd

Pelle får pointene fordi det bliver fint vejr idag
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester