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
CiaoBabyAsked:
Who is Participating?

Improve company productivity with a Business Account.Sign Up

x
 
jimyXConnect With a Mentor Commented:
So it should read:
  IBDatabase.DefaultTransaction := IBTransaction;
  IBTransaction.DefaultDatabase := IBDatabase;
  IBSQL.Database := IBDatabase;
  IBSQL.Transaction := IBTransaction;

Open in new window

0
 
Sinisa VukCommented:
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.
0
 
Nick UpsonConnect With a Mentor Principal Operations EngineerCommented:
(you don't need all the " characters in the create table statement

procedure TForm1.Button2Click(Sender: TObject);
begin
  IBDatabase1.Open;
         Here you need to start a transaction, IBSQL1.StartTrans I think;
  IBSQL1.ExecQuery;
          and here you need a commit
end;
0
Get 10% Off Your First Squarespace Website

Ready to showcase your work, publish content or promote your business online? With Squarespace’s award-winning templates and 24/7 customer service, getting started is simple. Head to Squarespace.com and use offer code ‘EXPERTS’ to get 10% off your first purchase.

 
jimyXCommented:
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
0
 
CiaoBabyAuthor Commented:
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
0
 
jimyXCommented:
I was referring to IBxxx components.
0
 
CiaoBabyAuthor Commented:
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;
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.

All Courses

From novice to tech pro — start learning today.