Go Premium for a chance to win a PS4. Enter to Win

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

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
0
CiaoBaby
Asked:
CiaoBaby
2 Solutions
 
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
 
NickUpsonCommented:
(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
 
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
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
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
 
jimyXCommented:
So it should read:
  IBDatabase.DefaultTransaction := IBTransaction;
  IBTransaction.DefaultDatabase := IBDatabase;
  IBSQL.Database := IBDatabase;
  IBSQL.Transaction := IBTransaction;

Open in new window

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

Featured Post

What is SQL Server and how does it work?

The purpose of this paper is to provide you background on SQL Server. It’s your self-study guide for learning fundamentals. It includes both the history of SQL and its technical basics. Concepts and definitions will form the solid foundation of your future DBA expertise.

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