AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Datenbankabfragen mit Threads?

Ein Thema von hronny · begonnen am 18. Apr 2008 · letzter Beitrag vom 21. Apr 2008
Antwort Antwort
Seite 1 von 2  1 2      
hronny

Registriert seit: 4. Mai 2006
Ort: Thüringen
97 Beiträge
 
Delphi 2007 Professional
 
#1

Datenbankabfragen mit Threads?

  Alt 18. Apr 2008, 10:05
Ich hab hier eine lokale Datenbank die ich leider nur mittels ADO Komponenten abfragen kann. Da diese Abfragen über mehrere Tabellen geht und fast 250000 Einträge hervorbringt, ist es bestimmt sicherer das ganze über Threads zu lösen. Problem ist im Moment das mittels TTimer eine Uhr läuft, diese aber während der Abfrage steht (und man denkt das Programm ist fest). Die Abfrage ist schon gut optimiert und dauert fast 15 Sekunden. Eine Aktion während der Abfrage ist unmöglich.

Aber geschnallt habe ich das mit den Threads noch nicht. Wo wird die Datenbankabfrage ausgeführt und wo läuft die Uhr auf meinem Formular? Es gibt unter den Jedis eine Klasse JvThreadTimer kann ich mit der so etwas anfangen?
grep -ri shit /usr/src/linux/*
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Datenbankabfragen mit Threads?

  Alt 18. Apr 2008, 10:13
Threading Tutorial: http://delphitutorials.michael-puff.de
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
hronny

Registriert seit: 4. Mai 2006
Ort: Thüringen
97 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Datenbankabfragen mit Threads?

  Alt 19. Apr 2008, 11:09
Das Tutorial ist schön geschrieben, leider versteh ich immernoch nicht wo was hingehört. Thread erstellen mit VCL ok, verstanden. Aber wo kommt jetzt meine Datenbankgeschichte hin, also öffnen und auslesen? Dachte in den Thread, aber da brauch ich theoretisch keine Schleife. Aber wenn die Datenbank im Thread geöffnet wäre, wie kriege ich dann die Informationen wieder zurück ins Haupt-Formularfeld? Vielleicht kann mir das mal ein wenig verdeutlichen (meine Vermutung steht in Klammern)
  • ADOConnection1 (Haupt)
  • ADOQuery (Thread)
  • Timer für Uhranzeige in der Statusbar (Haupt)
grep -ri shit /usr/src/linux/*
  Mit Zitat antworten Zitat
hronny

Registriert seit: 4. Mai 2006
Ort: Thüringen
97 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Datenbankabfragen mit Threads?

  Alt 19. Apr 2008, 13:02
So nach langem suchen hab ich die Lösung gefunden Auf einer Webseite habe ich das gefunden und es funktioniert! Also mein TTimer läuft im Hauptformular. Dieser Timer wird gestartet sobald ich einen Button drücke und die Abfrage startet. In der ADOQuery Komponente ist der Funktion "AfterOpen" hinterlegt das der Timer stopt. Geht super!
Delphi-Quellcode:
type
  TOpenQuery = Class(TThread)
  Public
    constructor Create(Q: TADOQuery;sSQL: String);
  protected
    tQry: TADOQuery;
    tSQL: String;
    procedure Execute; override;
  end;
.
.
.
{ TOpenQuery } 

constructor TOpenQuery.Create(Q: TADOQuery; sSQL: String);
begin
  inherited Create(False);
  FreeOnTerminate:=True;
  tQry:=Q;
  tSQL:=sSQL;
end;

procedure TOpenQuery.Execute;
begin
  inherited;
  Screen.Cursor:=crAppStart;
  with tQry do
  Begin
    SQL.Text:=tSQL;
    Open;
  End;
  Screen.Cursor:=crDefault;
end;
grep -ri shit /usr/src/linux/*
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Datenbankabfragen mit Threads?

  Alt 19. Apr 2008, 14:27
Das sieht in meinen Augen nicht gut aus. Ich würde, um eine klare Schnittstelle zu schaffen, die komplette Datenbankarbeit samt aller Komponenten in den Thread legen.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
hronny

Registriert seit: 4. Mai 2006
Ort: Thüringen
97 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Datenbankabfragen mit Threads?

  Alt 20. Apr 2008, 11:25
Und wie kann ich es dann machen? Da müsste quasi der Thread in einer Schleife sein und auf ein Signal warten?
grep -ri shit /usr/src/linux/*
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Datenbankabfragen mit Threads?

  Alt 20. Apr 2008, 12:16
Wenn sich mehrere Queries ein und diesselbe Connection teilen, riskierst du massive Probleme. Um sicher zu gehen, würde ich auf jeden Fall in jedem Thread seine eigene Connection verpassen.
  Mit Zitat antworten Zitat
hronny

Registriert seit: 4. Mai 2006
Ort: Thüringen
97 Beiträge
 
Delphi 2007 Professional
 
#8

Re: Datenbankabfragen mit Threads?

  Alt 20. Apr 2008, 12:51
Die "dumme" SyBase Datenbank erlaubt vom Hersteller nur exclusiv Zugriff, also eine Connection gleichzeitig. Somit ist das nicht möglich noch eine Verbindung zu erstellen bzw gibt es dann einen Fehler.
grep -ri shit /usr/src/linux/*
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Datenbankabfragen mit Threads?

  Alt 20. Apr 2008, 12:58
Zitat von hronny:
Also mein TTimer läuft im Hauptformular.
Wozu der Timer?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#10

Re: Datenbankabfragen mit Threads?

  Alt 20. Apr 2008, 13:08
Zitat von hronny:
Die "dumme" SyBase Datenbank erlaubt vom Hersteller nur exclusiv Zugriff.
Ich kenne Sybase nicht, aber diese Aussage kann nicht zutreffen, höchstens auf einer Express oder sonstigen kostenlosen Version von Sybase. Es ist ja gerade Sinn und Sache einer Datenbank, eben gerade mehrere Connections zuzulassen.
  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 03:51 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