AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Timer oder Thread für nebenläufigen DB-Code
Thema durchsuchen
Ansicht
Themen-Optionen

Timer oder Thread für nebenläufigen DB-Code

Ein Thema von hoika · begonnen am 25. Aug 2006 · letzter Beitrag vom 25. Aug 2006
Antwort Antwort
Seite 1 von 2  1 2      
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#1

Timer oder Thread für nebenläufigen DB-Code

  Alt 25. Aug 2006, 13:35
Datenbank: FB • Version: 1.5 • Zugriff über: bde
Hallo #,

ich will in meine DB nun endlich mal auch pessimistische Sperren einbauen,
dass heisst, bevor der Nutzer was ändern will, muss das Programm prüfen,
ob nicht schon jemand anderes dran arbeitet.

Bitte keine Info, dass es anders geht,
ich mache das so wie es jeztzt folgt (da war mal nen guter Artikel im Entwickler).

Das Programm führt eine Sperrtabelle mit, wo jeder gesperrte Datensatz
mit seiner ID (prim. key) drinsteht.
Zusätzlich wird auch die Uhrzeit der Sperrung eingetragen,
und diese Uhrzeit wird ständig (alle x Minuten) aktualisiert.
Damit kann man sich gegen Sperren abgestürzter Programme sichern
(veraltete Sperren werden gelöscht).

Nun zum Problem.
Der Ansatz im Artikel benutze einen Timer zur Aktualisierung.

Würde das über einen Thread einfacher / besser sein.
der Thread würde sich "starten", die Aktualisierung machen
und wieder schlafenlegen.

Was meint ihr ?


Danke im voraus
Heiko
Heiko
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Timer oder Thread für nebenläufigen DB-Code

  Alt 25. Aug 2006, 13:38
Ein normaler Timer läuft im gleichen Thread wie das Hauptprogramm, da ist also nix mit Nebenläufigkeit! Mach einen Thread, der tut, was er tun muss, wartet und wieder arbeitet.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Timer oder Thread für nebenläufigen DB-Code

  Alt 25. Aug 2006, 13:40
Zitat:
Würde das über einen Thread einfacher / besser sein.
der Thread würde sich "starten", die Aktualisierung machen
und wieder schlafenlegen.
Auf jeden Fall,m da hier die Sperre nur so lange aktiv ist wie benötigt.

BTW.: Pessimistische Sperren sind bei FB sehr selten nötig. Ab FB2.0 gibt es auch die direkte Unterstützung dafür in SQL!

Warum BDE für FB?
Markus Kinzler
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#4

Re: Timer oder Thread für nebenläufigen DB-Code

  Alt 25. Aug 2006, 13:42
Zitat von hoika:
Würde das über einen Thread einfacher / besser sein.
der Thread würde sich "starten", die Aktualisierung machen
und wieder schlafenlegen.
Ich bin mit meiner Konzeption noch nicht ganz so weit wie Du, habe mir aber bereits Gedanken gemacht.

Nach meiner Vorstellung sollte ein Thread nur dann verwendet werden, wenn er längere Arbeiten zu erledigen hat, während der der Benutzer mit anderen Arbeiten im gleichen Programm fortfahren kann. Wenn Deine Aktualisierung (sehr) viele Datensätze betrifft, dann kann ein Thread sinnvoll sein - das müsstest Du dann ausprobieren.

Wenn es aber nur um die Sperrvermerke geht, handelt es sich eigentlich maximal um 2 Update-Befehle (veraltete Sperrvermerke aufheben, den aktuell gewünschten setzen); dann dürfte der Timer besser sein.

Gruß Jürgen

PS. Bitte teile mit, wozu Du Dich entscheidest.
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Timer oder Thread für nebenläufigen DB-Code

  Alt 25. Aug 2006, 13:56
Hallo,

bde, weil is halt uraltes Programm.
Ich bin ja froh, dass es wenigstens nicht mehr Paradox ist

Bin ja dabei, umzustellen, geht aber nicht so einfach und kostet
nen Haufen Zeit ;(

Pessimistische Sperre, damit das Programm sagt
"Neee, die Personaldaten von Meier befummelt gerade die Frau Müller"

Thread gefällt mir auch besser,
ist aber wohl schwerer zu implementieren,
mal sehen.



Heiko
Heiko
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Timer oder Thread für nebenläufigen DB-Code

  Alt 25. Aug 2006, 14:07
Ich habe nachgeschaut die expliziten Sperren in DSQL geht schon ab Version 1.5 nicht erst ab 2. Du kannst also die Sperren direkt in der Sql-Abfrage anlegen.
Markus Kinzler
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Timer oder Thread für nebenläufigen DB-Code

  Alt 25. Aug 2006, 14:35
Hallo ,

ich weiss,
aber ich will ja schon vor der (Update)-Abfrage sperren,
also direkt in der Anwendung.

Es geht ja wie gesagt nicht um das wie sperren,
sie wie das nebenläufige hinbekommen.

Ah ja, und stellenweise haben die Herren Kunden auch noch IB6
und wollen nicht wechseln (nene, läuft j alles ..)

Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Timer oder Thread für nebenläufigen DB-Code

  Alt 25. Aug 2006, 14:39
ja, warum nicht im thread.

Delphi-Quellcode:
procedure TLockThread.Execute;
begin
  UpdateLocks;
  sleep(1000 * 60) //1 Minute schlafen
end;
wenn du auf ein feld zugreifst, übergibst du dem thread alle nötigen daten, startest ihn, und wenn du fertig bist, beendest du ihn, und gibst die locks wieder frei.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Timer oder Thread für nebenläufigen DB-Code

  Alt 25. Aug 2006, 15:54
Zitat:
Ich weiss,
aber ich will ja schon vor der (Update)-Abfrage sperren,
also direkt in der Anwendung.
Geht doch
SQL-Code:
select ... from ..
for update ..
with lock ...;
sperrt schon beim Select den Datensatz bis zur Ende der Transaktion.
Markus Kinzler
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#10

Re: Timer oder Thread für nebenläufigen DB-Code

  Alt 25. Aug 2006, 15:55
Jepp,

so hatte ich mir das gedacht,
Problem ist, dass ich aber immer noch mit der BDE rumfummeln muss.

Zumindest der Lock-Code soll aber schon mit UIB oder ZEOS laufen,
also brauche ich auch ne 2. Connection .

Und die sollte natürlich nicht mit jedem neuen Thread
neu aufgebaut werden.

Der Teufel liegt im Detail ;(


Heiko
Heiko
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz