How to create new empty FireBird database using FreePascal/Lazarus

This is a very easy task in FreePascal/Lazarus.

Drop TIBConnection component from SQLdb page in a form or data module.

Drop a button, and write this code in button’s OnClick event:


procedure TForm1.Button1Click(Sender: TObject);
begin
  IBConnection1.DatabaseName:= '/home/motaz/firebird/newdb.fdb';
  IBConnection1.CharSet:= 'UTF8';
  IBConnection1.UserName:= 'sysdba';
  IBConnection1.Password:= 'masterkey';
  IBConnection1.CreateDB;
end;

This will create an empty FireBird database in the location you have specified in DatabaseName property, with UTF8 character set.

Later you can create tables, generators, indexes,  and constraints using SQLQuery component example:


create table BOOKS (
  BOOKID INTEGER not null ,
  BOOKNAME VARCHAR(52) ,
  CONTENTS BLOB,
  LOCATION VARCHAR(55)
  , constraint PK_BOOKS_1 primary key (BOOKID)
);

This will create a new table called Books. You need to put this DDL script in SQL property of SQLQuery component that linked to your IBConnection.

About these ads

20 responses

  1. I’m curious to know, how many kilobytes is an empty FireBird database?

  2. You can read the internal Firebird database structure and what happens when you create a new empty database

    http://www.firebirdsql.org/file/documentation/reference_manuals/reference_material/html/fbint-structure.html

  3. Thanks for the useful link.

  4. سلام عليك
    أعتذر عن الكتابة بالعربية مع أن المدونة للغة الانجليزية لأني لو فعلت ذلك لأغلت الحاسب ثم رميته من البالكونة ثم تذهب لتبيع الخضار والفواكه :-)
    أنشأت قاعدة بيانات بالطريقة التي ذكرت ولكن أحببت أن أرفع اسكريبت سكيول إلى
    sqlquery
    عن طريق الإجراء
    loadfromfile
    ولكن لم يتم تنفيذ السكريبت على القاعة وتظهر رسالة خطأ
    تنبيه السكريبت يحتوي أوامر لإنشاء عدة جداول وليس جدولا واحدا

  5. السلام عليكم
    ماهو الخطأ الذي تحصلت عليه؟
    ويمكن تجربة تنفيذ كل إسكريبت على حده ولا تنسى مناداة
    SQLTransaction.Commit
    عند النهاية

  6. سلام عليك
    شكرا لسرعة ردك وهذا هو السكريبت الذي وضعته في ملف
    CREATE TABLE CHEMAIN
    (
    ID smallint NOT NULL,
    CHEMAIN varchar(70),
    CONSTRAINT INTEG_23 PRIMARY KEY (ID)
    );
    CREATE TABLE COMPANY
    (
    ID smallint,
    STATUS varchar(50),
    ACTIVITY varchar(50),
    CF varchar(30),
    NIS varchar(30),
    NA varchar(30),
    RC varchar(30),
    CB1 varchar(30),
    CB2 varchar(30),
    TEL varchar(30),
    FAX varchar(30),
    ADR varchar(50),
    LOGO blob sub_type 0,
    CAPITAL varchar(50)
    );
    ولقد حملته بالكود التالي
    with SQLQuery1 do
    begin
    close;
    sql.LoadFromFile(‘/home/ahmed/Public/gestshb.sql’);
    ExecSQL;
    end;

    وهذه رسالة الخطأ

    -Dynamic SQL Error
    -SQL error code = -104
    -Token unknown – line 7, column 1
    -CREATE.

  7. أزيدك أمرا هذا السكريب لا يتم قراءته أيضا ببرنامجك
    turbobird
    ولكنه يقرأ وينفذ ببرنامج
    flamerobin

  8. بالنسبة للتعليق الأخير أعدت التجربة فتم التنفيذ بنجاح ببرنامجك الرائع
    turbobird

  9. السلام عليكم
    سوف أرد عليك بإختصار لأنه لدي صُداع مستمر من أمس لم يتوقف.
    في برنامج توربو بيرد أقوم بتجزئة اﻷوامة،
    مثلاً يُمكنك تحميل الجزء اﻷول (إنشاء الجدول CHEMAIN) لحده
    ثم المرة الثانية إنشاء الجدول الثاني
    إذا أردت تنفيذ أكثر من أمر من نفس الملف إستخدم مكون آخر يُدعى
    SQLScript أوشيء من هذا القبيل في الصفحة
    SQLdb

  10. سلام عليك
    اخي جزاك الله عني كل خير وشفاك من كل ضر وداء عاجلا غير آجل
    حقيقة أنت أستاذي وإن لم أرك ولم ترني
    فأنا ما تعلمت إلا من كتابيك الرائعين
    واليوم استفدت منك شيئا جديدا
    ولقد تم الأمر بنجاح
    شكرا لك كثيرا

  11. هذا الموضوع الذي سألت عنه من المواضيع الصعبة والشائكة، وقد جلست فيها كثيراً في برنامج توربو بيرد ولم أصل إلى اﻵن لحل مرضي حيث يوجد عدة إحتمالات لإنشاء جداول، حقول، تغيير فهرس، إنشاء إجراء جديد.
    إذا راجعت كود برنامج توربو بريد (QueryWindow)سوف تجد هذا بوضوح

  12. نعم …الأمر كما ذكرت فقد جربت هذا السكريبت
    SET TERM ^ ;
    CREATE PROCEDURE ADDMEMBRE (
    RF integer,
    NM varchar(50),
    AD varchar(50),
    RC varchar(10),
    CF varchar(20),
    TEL varchar(20),
    FAX varchar(20),
    AI varchar(20),
    CB varchar(20),
    MAIL varchar(30) )
    AS
    BEGIN SUSPEND; END^
    SET TERM ; ^

    SET TERM ^ ;
    CREATE PROCEDURE ADDOPEARION (
    IDF integer,
    PR varchar(25),
    QN numeric(15,2),
    UN varchar(5),
    PRIX numeric(15,2),
    TVA numeric(2,2) )
    AS
    BEGIN SUSPEND; END^
    SET TERM ; ^

    SET TERM ^ ;
    CREATE PROCEDURE ADDPRO (
    S varchar(25),
    PRODUIT varchar(70),
    UNITE varchar(5),
    VT numeric(15,2),
    CH numeric(15,2),
    C numeric(15,2),
    GR varchar(30) )
    AS
    BEGIN SUSPEND; END^
    SET TERM ; ^
    جربته على برنامجك ولكنه لم يعمل

  13. قُمت بتنفيذ هذا اﻹسكريبت في برنامج توربو بيرد وقد عمل بنجاح كما في الصورة التالية:

    http://imagebin.org/246238

    وتمت إضافة الجدول واﻹجراءات

  14. سلام عليك استاذي
    نعم السكريبت يعمل بنجاح ، ولكن لم يكن هو الذي قصدته وإنما هذا
    CREATE ROLE DONT_TRY_ACCES;
    CREATE GENERATOR GEN_FACTURE_VENTE_ID;
    CREATE GENERATOR GEN_FRAIS_TABLE_ID;

    SET TERM ^ ;
    CREATE PROCEDURE ADDMEMBRE (
    RF integer,
    NM varchar(50),
    AD varchar(50),
    RC varchar(10),
    CF varchar(20),
    TEL varchar(20),
    FAX varchar(20),
    AI varchar(20),
    CB varchar(20),
    MAIL varchar(30) )
    AS
    BEGIN SUSPEND; END^
    SET TERM ; ^

    SET TERM ^ ;
    CREATE PROCEDURE ADDOPEARION (
    IDF integer,
    PR varchar(25),
    QN numeric(15,2),
    UN varchar(5),
    PRIX numeric(15,2),
    TVA numeric(2,2) )
    AS
    BEGIN SUSPEND; END^
    SET TERM ; ^

    وهذه صورة الخطأ

    http://imagebin.org/246244

    مع أن هذا الرول لم أنشئه من قبل لأن القاعدة جديدة
    شكرا لك أستاذي على صبرك علي

  15. هذه المشكلة تحدث لي عندما أقوم بإعطاء صلاحية رول غير موجودة لجدول مثلاً، ثم عندما أقوم بإنشاء تلك الرول يعطيني البرنامج أن الرول موجودة مسبقاً.
    كأنها مشكلة في فيربيرد
    سوف أقوم بالدراستها لاحقاً إن شاء الله

  16. سلام عليك أستاذي
    ارجو أني لا أزعجك ولا أثقل عليك
    هذه المشكلة أعلاه ليس فقط في إنشاء الرول وإنما ايضا في إنشاء جينيراتور…احذف السطر الأول من السكريبت وسيظهر نفس الخطأ …أي أن الجينيراتور موجودة مع أني لم أقم بإنشائها من قبل

    المشكلة ليس من الفايربارد لأني جربت
    flamerobin
    وتم التنفيذ بنجاح
    تحياتي

  17. نعم حدث معي نفس الخطأ.
    يبدو أن هُناك مشكلة
    لكن عند تنفيذه بطريقة
    Run As Script
    وذلك بإستخدام القائمة، يمين علامة الساعة يتم النتفيذ بنجاح

    http://imagebin.org/246262

  18. نعم يتم التنفيذ بنجاح بهذه الطريقة
    شكرا لتعاونك

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Follow

Get every new post delivered to your Inbox.

%d bloggers like this: