Link to home
Start Free TrialLog in
Avatar of CiaoBaby
CiaoBabyFlag for United States of America

asked on

Embarcadero Interbase

I want to create an Interbase table at run time like
var
  MyTable : TIBTable;
begin
  MyTable := TIBTable.Create(nil);
  MyTable.TableName := 'MyTableName';
  MyTable.Database := AnExistingDatabase;
  MyTable.FieldDefs.AddFieldDef.Name := 'Field1';
  MyTable.FieldDefs.AddFieldDef.DataType := ftInteger;
  MyTable.FieldDefs.AddFieldDef.Size := 0;
  MyTable.FieldDefs.AddFieldDef.Required := False;

  AnExistingDatabase.Open;
  MyTable.CreateTable;

This generates: Unsupported Field Type.


Also Tried to use TIBSQL component

Assign to a TIBSQL components SQL property with the text below
and set the TIBSQL database property to an IBDatabase component that points to
my database

Create Table "Table2"
(
  "Field1" Varchar(20) not null,
  "Field2" Float,
  primary key ("Field1")
);

procedure TForm1.Button2Click(Sender: TObject);
begin
  IBDatabase1.Open;
  IBSQL1.ExecQuery;
end;

I get the message Transaction Not assigned
Avatar of Sinisa Vuk
Sinisa Vuk
Flag of Croatia image

You want to create real table in ib database? If so - use plain sql (create table ...)
I you by create mean: TIBTable.Create(nil) - then you can use some of memory tables.
SOLUTION
Avatar of Nick Upson
Nick Upson
Flag of United Kingdom of Great Britain and Northern Ireland image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of jimyX
jimyX

I use FireBird which is close enough to Interbase:

Drop SQLTransaction and link it to the DBConnection and SQLQuery.
So you should have the following linking done first:
DBConnection.Transaction = SQLTrans
SQLTrans.Database = DBConnection
SQLQuery.Database = DBConnection
SQLQuery.Transaction = SQlTrans
Avatar of CiaoBaby

ASKER

JimyX
When you say link SQLTransaction to the DBConnection and SQLQuery How?

TIBTransaction does not have a Database property
SQLQuery does not have a Database Property
SQLQuery does not have a Transaction property
I was referring to IBxxx components.
ASKER CERTIFIED SOLUTION
Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Finally, success. That was painful.   I can't believe that on all the web there is no reference to how to do this.

It's so not complicated if you know all the steps and relationships.  It took me 2 days to figure this out.  Maybe I should have said that I do not know any SQL.  Maybe it's assumed that if you know any programming that you know all this crap.

Thanks for the help you guys.

procedure TForm1.Button1Click(Sender: TObject);
begin
  IBDatabase1.DatabaseName := 'c:\backupdbs\JPBD.IB';
  IBDatabase1.Params.Clear;
  IBDatabase1.Params.Add('user_name=sysdba');
  IBDatabase1.Params.Add('password=masterkey');
  IBDatabase1.Open;
  IBDatabase1.DefaultTransaction := IBTransaction1;
  IBTransaction1.DefaultDatabase := IBDatabase1;

  IBQuery1.Transaction := IBTransaction1;
  IBQuery1.SQL.Clear;
  IBQuery1.SQl.Add('Create Table Employee4(PersonID Int, LastName varchar(255))');
  IBQuery1.Transaction.StartTransaction;
  IBQuery1.ExecSQL;
  IBQuery1.Transaction.Commit;

  //This also works
  //IBTransaction1.Commit;

  IBDatabase1.Close;
end;