Improve company productivity with a Business Account.Sign Up

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 202
  • Last Modified:

IBX component in thread

Hi,

I'm new to using threads and am looking for an example of how to do the following:

I want a blank form with a button. When I press the button I want to start a thread that creates a tibdatabase component, opens the connection, and then shows a message saying successful.


0
jamesr123456
Asked:
jamesr123456
  • 8
  • 5
1 Solution
 
sftwengCommented:
So just go to File -> New -> Other -> Thread Object and put the application code into the Execute procedure, being certain that you use Synchronize to make ANY references to GUI components.
0
 
sftwengCommented:
Oh, and yes, within your button's OnClick event, you could do the creation (dynamically).
0
 
jamesr123456Author Commented:
I've tried doing that, but it just does nothing. I get no error messages either.
0
Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
sftwengCommented:
Would you mind posting your code?
0
 
jamesr123456Author Commented:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, DB, IBDatabase;


type  TForm1 = class(TForm)
    Label1: TLabel;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end; { of class declaration }

type
  mythread = class(TThread)
  private
    { Private declarations }
  procedure opendatabase;
  protected
    procedure Execute; override;
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
mythread.Create(false);
end; { of procedure }

procedure mythread.Execute;
begin
  { Place thread code here }
synchronize(opendatabase);
  end;

procedure mythread.opendatabase;
var db:tibdatabase;
begin
db:=tibdatabase.Create(db);
db.DatabaseName:='z:\track.gdb';
db.Params.add('user_name=sysdba');
db.params.add('password=masterkey');
db.Open;
if db.connected then form1.label1.caption:='connected';
end;

end.

0
 
sftwengCommented:
The problem is in the ButtonClick.

procedure TForm1.Button1Click(Sender: TObject);
var
  this MyThread : mythread;
begin
  thismythread := mythread.Create(false);
end; { of procedure }
0
 
jamesr123456Author Commented:
still dosnt work. the label changes to 'starting' and stays like that

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, DB, IBDatabase;


type  TForm1 = class(TForm)
    Label1: TLabel;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end; { of class declaration }

type
  mythread = class(TThread)
  private
    { Private declarations }
  procedure opendatabase;
  protected
    procedure Execute; override;
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var f:mythread;
begin
f:=mythread.Create(false);
end; { of procedure }

procedure mythread.Execute;
begin
  { Place thread code here }
synchronize(opendatabase);
  end;

procedure mythread.opendatabase;
var db:tibdatabase;
begin
form1.label1.caption:='starting';
db:=tibdatabase.Create(db);
db.DatabaseName:='z:\track\protrack.gdb';
db.Params.add('user_name=sysdba');
db.params.add('password=masterkey');
form1.label1.caption:='about to open';
db.Open;
if db.connected then form1.label1.caption:='connected' else form1.Label1.caption:='disconnected';

end;

end.

0
 
sftwengCommented:
Does the same code work successfully in a non-thread procedure?
0
 
jamesr123456Author Commented:
yes. works fine if its not in a thread
0
 
sftwengCommented:
Hmm. This will take some experimenting. But not today I'm afraid.
0
 
jamesr123456Author Commented:
Okay not to worry, i've sorted it out.
I've upgraded to the latest IBX, and also found an example of how to use IBconnectionbroker in a thread.
0
 
sftwengCommented:
As the only responder, I have no objection, so don't bother waiting on my behalf.
0
 
moduloCommented:
PAQ-ing the question and refunding 50  points

Thanks sftweng !

modulo

Community Support Moderator
Experts Exchange
0
 
sftwengCommented:
My pleasure. But I would appreciate some attention being given to http://www.experts-exchange.com/Community_Support/Q_20912205.html
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

The 14th Annual Expert Award Winners

The results are in! Meet the top members of our 2017 Expert Awards. Congratulations to all who qualified!

  • 8
  • 5
Tackle projects and never again get stuck behind a technical roadblock.
Join Now