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.
Pingback: Firebird News » How to create new empty FireBird database using FreePascal/Lazarus
I’m curious to know, how many kilobytes is an empty FireBird database?
It is 802,816 bytes
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
Thanks for the useful link.
سلام عليك
أعتذر عن الكتابة بالعربية مع أن المدونة للغة الانجليزية لأني لو فعلت ذلك لأغلت الحاسب ثم رميته من البالكونة ثم تذهب لتبيع الخضار والفواكه 🙂
أنشأت قاعدة بيانات بالطريقة التي ذكرت ولكن أحببت أن أرفع اسكريبت سكيول إلى
sqlquery
عن طريق الإجراء
loadfromfile
ولكن لم يتم تنفيذ السكريبت على القاعة وتظهر رسالة خطأ
تنبيه السكريبت يحتوي أوامر لإنشاء عدة جداول وليس جدولا واحدا
السلام عليكم
ماهو الخطأ الذي تحصلت عليه؟
ويمكن تجربة تنفيذ كل إسكريبت على حده ولا تنسى مناداة
SQLTransaction.Commit
عند النهاية
سلام عليك
شكرا لسرعة ردك وهذا هو السكريبت الذي وضعته في ملف
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.
أزيدك أمرا هذا السكريب لا يتم قراءته أيضا ببرنامجك
turbobird
ولكنه يقرأ وينفذ ببرنامج
flamerobin
بالنسبة للتعليق الأخير أعدت التجربة فتم التنفيذ بنجاح ببرنامجك الرائع
turbobird
السلام عليكم
سوف أرد عليك بإختصار لأنه لدي صُداع مستمر من أمس لم يتوقف.
في برنامج توربو بيرد أقوم بتجزئة اﻷوامة،
مثلاً يُمكنك تحميل الجزء اﻷول (إنشاء الجدول CHEMAIN) لحده
ثم المرة الثانية إنشاء الجدول الثاني
إذا أردت تنفيذ أكثر من أمر من نفس الملف إستخدم مكون آخر يُدعى
SQLScript أوشيء من هذا القبيل في الصفحة
SQLdb
سلام عليك
اخي جزاك الله عني كل خير وشفاك من كل ضر وداء عاجلا غير آجل
حقيقة أنت أستاذي وإن لم أرك ولم ترني
فأنا ما تعلمت إلا من كتابيك الرائعين
واليوم استفدت منك شيئا جديدا
ولقد تم الأمر بنجاح
شكرا لك كثيرا
هذا الموضوع الذي سألت عنه من المواضيع الصعبة والشائكة، وقد جلست فيها كثيراً في برنامج توربو بيرد ولم أصل إلى اﻵن لحل مرضي حيث يوجد عدة إحتمالات لإنشاء جداول، حقول، تغيير فهرس، إنشاء إجراء جديد.
إذا راجعت كود برنامج توربو بريد (QueryWindow)سوف تجد هذا بوضوح
نعم …الأمر كما ذكرت فقد جربت هذا السكريبت
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 ; ^
جربته على برنامجك ولكنه لم يعمل
قُمت بتنفيذ هذا اﻹسكريبت في برنامج توربو بيرد وقد عمل بنجاح كما في الصورة التالية:
http://imagebin.org/246238
وتمت إضافة الجدول واﻹجراءات
سلام عليك استاذي
نعم السكريبت يعمل بنجاح ، ولكن لم يكن هو الذي قصدته وإنما هذا
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
مع أن هذا الرول لم أنشئه من قبل لأن القاعدة جديدة
شكرا لك أستاذي على صبرك علي
هذه المشكلة تحدث لي عندما أقوم بإعطاء صلاحية رول غير موجودة لجدول مثلاً، ثم عندما أقوم بإنشاء تلك الرول يعطيني البرنامج أن الرول موجودة مسبقاً.
كأنها مشكلة في فيربيرد
سوف أقوم بالدراستها لاحقاً إن شاء الله
سلام عليك أستاذي
ارجو أني لا أزعجك ولا أثقل عليك
هذه المشكلة أعلاه ليس فقط في إنشاء الرول وإنما ايضا في إنشاء جينيراتور…احذف السطر الأول من السكريبت وسيظهر نفس الخطأ …أي أن الجينيراتور موجودة مع أني لم أقم بإنشائها من قبل
المشكلة ليس من الفايربارد لأني جربت
flamerobin
وتم التنفيذ بنجاح
تحياتي
نعم حدث معي نفس الخطأ.
يبدو أن هُناك مشكلة
لكن عند تنفيذه بطريقة
Run As Script
وذلك بإستخدام القائمة، يمين علامة الساعة يتم النتفيذ بنجاح
http://imagebin.org/246262
نعم يتم التنفيذ بنجاح بهذه الطريقة
شكرا لتعاونك
Hello Brother,
I did write the code to create the database, but I see this error message:
what and where is the problem?
I did : sudo chown firebird /home/abubaker/firebirdDataBase
and my code is:
IBDatabase1.DatabaseName:= ‘/home/abubaker/Desktop/FB/market.fdb’;
IBDatabase1.CharSet:= ‘UTF8’;
IBDatabase1.UserName:= ‘sysdba’;
IBDatabase1.Password:= ‘masterkey’;
IBDatabase1.CreateDB;
I’m sorry, the code is this:
IBDatabase1.DatabaseName:= ‘/home/abubaker/firebirdDataBase/market.fdb’;
IBDatabase1.CharSet:= ‘UTF8’;
IBDatabase1.UserName:= ‘sysdba’;
IBDatabase1.Password:= ‘masterkey’;
IBDatabase1.CreateDB;
Hello Abubakr
It looks like permission problem
Are you sure firebird user has full access to firebirdDatabase folder?
لو سمحت عايز اعرف ازاى اربط بين 3 جداول فى فاير بيرد
يعنى انا عندى جدول المنتجات وجدول الاصناف وفى جدول ثالث بيربط المنتجات والاصناف ب ID
السؤال هنا ازاى اظهر المنتجات وأصنافها كإنها جدول واحد
استخدم ما يُعرف بالـ
Inner join
http://www.w3schools.com/sql/sql_join_inner.asp