AGB  ·  Datenschutz  ·  Impressum  







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

Threads Create

Ein Thema von XXcD · begonnen am 30. Aug 2008 · letzter Beitrag vom 2. Sep 2008
Antwort Antwort
Benutzerbild von XXcD
XXcD

Registriert seit: 19. Sep 2006
581 Beiträge
 
Delphi 2007 Professional
 
#1

Threads Create

  Alt 30. Aug 2008, 21:17
Hallo,
ich versuche gerade mein Programm auf mehrere Dateien auszulagern(der übersichtlichkeit halber).
Nun habe ich aber das Problem, dass ich in einer Datei meinen SQL Zugang erstelle und in einer anderen auch auf die Komponenten zugreifen muss.
Wenn ich jetzt in beiden Dateien .Create ausführe verbindet das Programm sich zweimal zu dem MySQL Server.
Also in etwa so:

Haupt.pas
Delphi-Quellcode:
uses
SQL;
...
var
  SQL: TSQL;
...
SQL:= TSQL.create;
zweite.pas
Delphi-Quellcode:
uses
SQL;
...
var
  SQL: TSQL;
...
SQL:= TSQL.create;
...
SQL.FMysql.Free;
SQL.FResult.free;
SQL.pas
Delphi-Quellcode:
  type
  TSQL = class(TThread)
    FMysql: TMysqlClient;
    FResult: TMysqlResult;
   constructor create;
  private
  public
  end;
...
constructor TSQL.Create;
begin
inherited Create;
FMysql := TMysqlClient.create;
  with FMysql do
  begin
  // Eigenschaften setzen
  Host := 'example.de';
  port := 3306;
  user :='root';
  password := 'pw';
  Db := Functions.readconfig('db');
    if Connect then
     begin
    Functions.WriteLog('MySQL Verbindung aufgebaut');
     end
  else
  begin
    Functions.WriteLog('Fehler, MySQL Server nicht verbunden');
  end;
  end;
end;
Wie kann ich nun in beiden Dateien SQL benutzen ohne, dass es zweimal erstellt wird?
Und ja ich habe mich schon mit Threads beschäftigt, aber hier hänge ich jetzt leider fest
  Mit Zitat antworten Zitat
mr2

Registriert seit: 3. Mai 2003
140 Beiträge
 
Delphi 2006 Enterprise
 
#2

Re: Threads Create

  Alt 30. Aug 2008, 22:48
Hallo,

eine Möglichkeit wäre Deine SQL-Klasse als Singleton zu implementieren, dass heißt die Klasse bekommt eine Klassenmethode welche Dir immer die selbe Instanz zurückliefert, mit der Du dann arbeiten kannst:
Delphi-Quellcode:
type
  TSQL = class
  public
    class function GetInstance: TSQL;
  end;

implementation

var
  _Instance: TSQL;

class function TSQL.GetInstance: TSQL;
begin
  if (_Instance = nil)
  then _Instance := TSQL.Create;
  Result := _Instance;
end;
Wenn Du allerdings mit zwei verschiedenen Threads auf eine Datenbank zugreifen willst, bleibt Dir nichts anderes übrig, als zwei Verbindungen zu öffnen, da die meisten DBMS nicht mit überlappenden Zugriffen von mehreren Threads klar kommen.

mr2
"... we know, there are known knowns; there are things we know we know. We also know there are known unknowns; that is to say we know there are some things we don't know. But there are also unknown unknowns - the ones we don't know we don't know."
  Mit Zitat antworten Zitat
Benutzerbild von XXcD
XXcD

Registriert seit: 19. Sep 2006
581 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Threads Create

  Alt 30. Aug 2008, 22:54
Ja ich möchte eigentlich nur in einer Unit FMysql Freigeben, das geht ja eigentlich so: SQL.FMysql.Free;
Und dafür muss ich ja den gleichen Thread in der Unit benutzen wie den der in der anderen Unit erstellt wurde.
Da muss es doch eine ganz einfache möglichkeit geben, ich bin ja sicherlich nicht der erste der von mehreren Units aus auf einen Thread zugreifen muss.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Threads Create

  Alt 31. Aug 2008, 00:05
Zitat von XXcD:
Nun habe ich aber das Problem, dass ich in einer Datei meinen SQL Zugang erstelle und in einer anderen auch auf die Komponenten zugreifen muss.
Dann stimmt das Design nicht.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
mr2

Registriert seit: 3. Mai 2003
140 Beiträge
 
Delphi 2006 Enterprise
 
#5

Re: Threads Create

  Alt 2. Sep 2008, 21:34
jeder Thread sollte immer nur genau die Verbindung(en) freigeben, die er auch erstellt hat

mr2
"... we know, there are known knowns; there are things we know we know. We also know there are known unknowns; that is to say we know there are some things we don't know. But there are also unknown unknowns - the ones we don't know we don't know."
  Mit Zitat antworten Zitat
Antwort Antwort


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 23:13 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