delphi4arab منتديات دلفي للعرب
ماهي أفضل طريقة لدمج قاعة بيانات فايربيرد مع البرنامج؟ - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15)
+--- الموضوع : ماهي أفضل طريقة لدمج قاعة بيانات فايربيرد مع البرنامج؟ (/showthread.php?tid=12391)

الصفحات: 1 2


ماهي أفضل طريقة لدمج قاعة بيانات فايربيرد مع البرنامج؟ - ALG2009 - 15-09-2023

السلام عليكم

هل هناك تحسين في الفايربيرد4 بالنسبة لدمج قاعدة البيانات مع البرنامج دون تثبيت الفايربيرد في جهاز الكميوتر

هل بنفس الطريقة

أن نرفق البرنامج بالملفات التالية:

fbembed.dll
firebird.msg
ib_util.dll
icudt30.dll
icuin30.dll
icuuc30.dll

ونقوم بكتابة الكود في oncreate للفورم
PHP كود :
[align=right]procedure TForm1.FormCreate(Sender: TObject);
var 
FolderApplication:String;
begin
FolderApplication
:=ExtractFilePath(ParamStr(0));
dmData.FDPhysFBDriverLink1.Release;
                  dmData.FDPhysFBDriverLink1.DriverID := 'FB';
                  dmData.FDPhysFBDriverLink1.VendorHome := EmptyStr;
                  dmData.FDPhysFBDriverLink1.VendorLib := FolderApplication+'\bin\fbclient.dll'; 
                  dmData.FDPhysFBDriverLink1.Embedded  := True; 
                  dmData.myConn.Connected := False;  
                  dmData
.myConn.DriverName                    := 'FB'; 
                  dmData.myConn.Params.Values['Port']        := '3050';  
                  dmData
.myConn.Params.Values['Protocol']    := 'local';
                  dmData.myConn.Params.Values['Server']      := EmptyStr;
                  dmData.myConn.Params.Values['CharacterSet'] := 'UTF8';  
                  dmData
.myConn.Params.Values['SQLDialect']  := '3';
                  dmData.myConn.Params.Values['Database']    := FolderApplication+'Database.fdb'; 
                  dmData.myConn.Params.Values['User_Name']    := 'sysdba';
                  dmData.myConn.Params.Values['Password']    := 'masterkey';
                  dmData.myConn.Params.Values['ExtendedMetadata']    := 'True';
                    dmData.Table1.TableName  :=  'Student';
                    dmData.Table2.TableName  :=  'Class';
                    dmData.Table3.TableName  :=  'Grades';
                    dmData.Table4.TableName  :=  'attendance';
                    dmData.myConn.Connected  := True;
                    dmData.Table1.Active      := True;
                    dmData.Table2.Active      := True;
                    dmData.Table3.Active      := True;
                    dmData.Table4.Active      := True;
                    dmData.query1.Active      := True
end
;[/align] 

أليس الأمر متعب بأن تكتب أسماء كل الجداول ثم نقوم بفتح كل جدول على حدى
وكذلك نقوم بفتح كل كويري على حدى 
فلو قمنا بنسيان جدول أو كوري لا يعمل البرنامج بطريقة صحيحة
هل من حلول أفضل أو هناك تحسينات في الفايربيرد4



RE: ماهي أفضل طريقة لدمج قاعة بيانات فايربيرد مع البرنامج؟ - أبو معاذ - 16-09-2023

وعليكم السلام ورحمة الله وبركاته.
السؤال المطروح ، لماذا تقوم بفتح جميع الجداول و الاستعلامات في الحدث OnCreate  ؟

افتح الجدول عندما تحتاج إليه فقط ، و لا تنس إغلاقه عندما تنتهي الحاجة منه.


RE: ماهي أفضل طريقة لدمج قاعة بيانات فايربيرد مع البرنامج؟ - ALG2009 - 16-09-2023

هل تقصد أني أكتب هذا الكود فقط في oncreate
كود :
var FolderApplication:String; begin FolderApplication:=ExtractFilePath(ParamStr(0)); dmData.FDPhysFBDriverLink1.Release;                   dmData.FDPhysFBDriverLink1.DriverID := 'FB';                   dmData.FDPhysFBDriverLink1.VendorHome := EmptyStr;                   dmData.FDPhysFBDriverLink1.VendorLib := FolderApplication+'\bin\fbclient.dll';                   dmData.FDPhysFBDriverLink1.Embedded  := True;                   dmData.myConn.Connected := False;                    dmData.myConn.DriverName                    := 'FB';                   dmData.myConn.Params.Values['Port']        := '3050';                    dmData.myConn.Params.Values['Protocol']    := 'local';                   dmData.myConn.Params.Values['Server']      := EmptyStr;                   dmData.myConn.Params.Values['CharacterSet'] := 'UTF8';                    dmData.myConn.Params.Values['SQLDialect']  := '3';                   dmData.myConn.Params.Values['Database']    := FolderApplication+'Database.fdb';                   dmData.myConn.Params.Values['User_Name']    := 'sysdba';                   dmData.myConn.Params.Values['Password']    := 'masterkey';                   dmData.myConn.Params.Values['ExtendedMetadata']    := 'True';   var FolderApplication:String; begin FolderApplication:=ExtractFilePath(ParamStr(0)); dmData.FDPhysFBDriverLink1.Release;                   dmData.FDPhysFBDriverLink1.DriverID := 'FB';                   dmData.FDPhysFBDriverLink1.VendorHome := EmptyStr;                   dmData.FDPhysFBDriverLink1.VendorLib := FolderApplication+'\bin\fbclient.dll';                   dmData.FDPhysFBDriverLink1.Embedded  := True;                   dmData.myConn.Connected := False;                    dmData.myConn.DriverName                    := 'FB';                   dmData.myConn.Params.Values['Port']        := '3050';                    dmData.myConn.Params.Values['Protocol']    := 'local';                   dmData.myConn.Params.Values['Server']      := EmptyStr;                   dmData.myConn.Params.Values['CharacterSet'] := 'UTF8';                    dmData.myConn.Params.Values['SQLDialect']  := '3';                   dmData.myConn.Params.Values['Database']    := FolderApplication+'Database.fdb';                   dmData.myConn.Params.Values['User_Name']    := 'sysdba';                   dmData.myConn.Params.Values['Password']    := 'masterkey';                   dmData.myConn.Params.Values['ExtendedMetadata']    := 'True';  


والجداول والاستعلامات يتم فتحها في زر الإضافة مثلا؟

نفرض أن البرنامج عند فتحه يقوم بعرض قائمة الطلاب في الواجهة الأساسية هنا يجب فتحهم في الحدث oncreate

هل هناك برنامج صغير به عملية الاتصال دون تثبيت قاعدة البيانات فايربيرد؟


RE: ماهي أفضل طريقة لدمج قاعة بيانات فايربيرد مع البرنامج؟ - أبو معاذ - 16-09-2023

نعم.
في الحدث oncreate للفورم الرئيسي قم بفتح قاعدة البيانات.
أما عندما تستدي الفورم الخاص بالطلاب ، قم بفتح جدول الطلاب فقط في الحدث oncreate.  ولا تنس إغلاقه عند غلق الفورم.
هل تستعمل الsql في برنامجك؟
2-لم إفهم طلبك عن برنامج صغير . اوضح أكثر.


RE: ماهي أفضل طريقة لدمج قاعة بيانات فايربيرد مع البرنامج؟ - ALG2009 - 17-09-2023

(16-09-2023, 09:44 PM)أبو معاذ كتب : هل تستعمل الsql في برنامجك؟

نعم 


أقصد إن كان هناك برنامج يوضح عملية الاتصال بقاعدة البيانات دون التثبيت بطريقة إحترافية


RE: ماهي أفضل طريقة لدمج قاعة بيانات فايربيرد مع البرنامج؟ - Delphi4Us - 18-09-2023

وعليكم السلام ورحمة الله

يمكن ذلك بشكل مباشر ايضا

كود :
data1.Uni1.Database:= path+'\DB.FDB'; data1.Uni1.SpecificOptions.Values['Clientlibrary'] := Path + '\fbembed.dll';

حيث Uni1  هو TUniConnection مكون الاتصال ويمكن استخدام نفس الشئ مع مكون FDConnection حيث يمكن الوصول للخصائص او العناصر عن طريق [params]


RE: ماهي أفضل طريقة لدمج قاعة بيانات فايربيرد مع البرنامج؟ - ALG2009 - 18-09-2023

أين توضع  في الخصائص

[صورة: fx4T0bX]

https://ibb.co/fx4T0bX


RE: ماهي أفضل طريقة لدمج قاعة بيانات فايربيرد مع البرنامج؟ - Delphi4Us - 20-09-2023

يبدو ان فايرداك لا يمكن الوصول لتلك الخصائص له عن طريق كائن الاتصال مباشرة بعدما اطلعت عليه

طريقتك تبدو صحيحة ربما فقط تحتاج الى تعديل وترتيب

حسبما رأيت يوجد ملف INI يمكن ضبط اعدادات تكوين الاتصال للمكون بحيث تصبح ثابتة كلما اخترت نوع من قواعد البيانات يتم وضع هذه الاعدادات ألياً .
ومسار الملف هنا :

كود :
C:\Users\Public\Documents\Embarcadero\Studio\FireDAC\FDDrivers.ini


يصف كيفية تكوين برامج تشغيل FireDAC DBMS، بما في ذلك كيفية تحديد مكتبة عملاء DBMS. لربط برنامج تشغيل FireDAC بأحد التطبيقات، حدد عميل DBMS لبرنامج التشغيل والمعلمات الاختيارية الأخرى. قد يستخدم التطبيق مكونات TFDPhysXxxDriverLink و/أو ملف تكوين خارجي.

[size=1]ملف تكوين برنامج التشغيل[/size]
ملف تكوين برنامج التشغيل هو ملف نصي INI قياسي. ولا يمكن تحريره إلا يدويًا. في الأساس، يتيح لك ملف تكوين برنامج التشغيل ما يلي:
  • ضبط معلمات برنامج التشغيل الأساسي (اسم القسم = معرف برنامج التشغيل الأساسي).
  • تقديم برنامج تشغيل ظاهري جديد ، وهو عبارة عن مجموعة من معلمات برنامج التشغيل الأساسية المحفوظة تحت اسم جديد (اسم القسم = معرف برنامج التشغيل الظاهري الجديد).
يبحث FireDAC عن ملف تكوين برنامج التشغيل في الأماكن التالية:
  • FDDrivers.ini في مجلد التطبيق EXE.
  • إذا لم يتم العثور على الملف أعلاه، فإنه يبحث عن الملف المحدد في مفتاح التسجيل HKCU\Software\Embarcadero\FireDAC\DriverFile . بشكل افتراضي، هذا هو 
    C:\Users\Public\Documents\Embarcadero\Studio\FireDAC\FDDrivers.ini
    .
في وقت التصميم، يستخدم FireDAC الملف الموجود في مجلد RAD Studio Bin أو كما هو محدد في السجل.

نموذج لمحتوى ملف تكوين برنامج التشغيل

كود :
[ASA] ; ASA base driver will use specified ODBC driver ODBCDriver=Adaptive Server Anywhere 8.0 [Ora815] ; Ora815 virtual driver will use specified Oracle Home BaseDriverID=Ora VendorHomeWin32=OraHome815 VendorHomeWin64=OraHome815_64 [MySQL327] ; MySQL327 virtual driver will use specified LIBMYSQL.DLL BaseDriverID=MySQL VendorLib=c:\LIBMYSQL327.DLL [MySQL510_Embedded] ; MySQL510_Embedded virtual driver will use specified MySQL embedded library and arguments BaseDriverID=MySQL VendorLib=c:\LIBMYSQLD.DLL EmbeddedArgs=--datadir=./data;--language=./;--skip-innodb;--skip-networking [MSSQL_2000] ; MSSQL_2000 virtual driver will use specified ODBC driver BaseDriverID=MSSQL ODBCDriver=SQL SERVER ODBCAdvanced= [FB21] ; FB21 virtual driver will use specified Firebird client library BaseDriverID=FB VendorLibWin32=C:\ib\fb21\bin\fbclient.dll VendorLibWin64=C:\ib\fb21_64\bin\fbclient.dll [FB21_Embedded] ; FB21_Embedded virtual driver will use specified Firebird client library BaseDriverID=FB VendorLib=C:\ib\fb21_embed\bin\fbembed.dll

وهنا يمكنك ان ترى اخر اعدادات خاصة بفايربيرد المضمن  fbembed.dll

تكوين برامج التشغيل في التعليمات البرمجية


يمكنك أيضًا تكوين برامج تشغيل FireDAC في رمز التطبيق في وقت التشغيل. للقيام بذلك، قم بإسقاط مكونات TFDPhysXXXDriverLink المناسبة في النموذج الخاص بك. وله نفس الخصائص المسماة مثل المعلمات الموجودة في ملف تكوين برنامج التشغيل. يجب تعيين خصائص مكون الارتباط قبل فتح أول اتصال بنظام إدارة قواعد البيانات (DBMS) من خلال برنامج التشغيل هذا. يوضح نموذج التعليمات البرمجية التالي كيفية تكوين برنامج تشغيل Firebird في وقت التشغيل:

كود :
interface uses   ..., FireDAC.Phys.FB; type   TForm1 = class(TForm)   ......     FDPhysFBDriverLink1: TFDPhysFBDriverLink;     FDConnection1: TFDConnection;     procedure FormCreate(Sender: TObject);   ......   end; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin   FDPhysFBDriverLink1.VendorLib := 'C:\ib\fb21_embed\bin\fbembed.dll';   FDConnection1.ConnectionDefName := 'FB_Demo';   FDConnection1.Connected := True; end;


يستخدم الاتصال التالي باستخدام برنامج التشغيل هذا خصائص الارتباط الجديدة. يوضح نموذج التعليمات البرمجية التالي كيفية تغيير تكوين برنامج تشغيل Firebird في وقت التشغيل:

كود :
FDConnection1.Close; FDPhysFBDriverLink1.Release; FDPhysFBDriverLink1.VendorLib := 'C:\fbclient.dll'; FDConnection1.Open;


إقتباس :ملاحظة : على الرغم من أنه من الممكن استخدام مكونات الارتباط لتكوين برامج التشغيل في وقت التصميم، إلا أننا لا نوصي بذلك، لأنه من الصعب تحميل وحدة بمكون ارتباط قبل تحميل أي وحدة نمطية أخرى بمكونات FireDAC. ولذلك، يقوم مكون الارتباط بتكوين برنامج التشغيل بشكل صحيح.

  • الاتصال بقاعدة بيانات تعمل على خادم بعيد عبر بروتوكول TCP/IP:

كود :
DriverID=FB Database=C:\fb\ADDEMO_FB21.FDB Protocol=TCPIP Server=FBSrv User_Name=sysdba Password=masterkey CharacterSet=win1252 ExtendedMetadata=True


  • الاتصال بقاعدة بيانات تعمل على خادم بعيد عبر بروتوكول TCP/IP:

كود :
DriverID=FB Database=FBSrv:C:\fb\ADDEMO_FB21.FDB User_Name=sysdba Password=masterkey CharacterSet=utf8

  • الاتصال بقاعدة البيانات المحلية:

كود :
DriverID=FB Database=C:\fb\ADDEMO_FB21.FDB User_Name=sysdba Password=masterkey CharacterSet=win1251

  • الاتصال بقاعدة بيانات Firebird المدمجة:
قم بإسقاط مكون TFDPhysFBDriverLink إلى النموذج وقم بتعيين VendorLib الخاص به على <your path<\fbembed.dll أو استخدم تعريف برنامج التشغيل الظاهري.

كود :
DriverID=FB Database=C:\fb\ADDEMO_FB21.FDB User_Name=sysdba CharacterSet=utf8



RE: ماهي أفضل طريقة لدمج قاعة بيانات فايربيرد مع البرنامج؟ - ALG2009 - 22-09-2023

جواكم الله خير
جاري التجربة


RE: ماهي أفضل طريقة لدمج قاعة بيانات فايربيرد مع البرنامج؟ - S.FATEH - 23-09-2023

السلام عليكم اذا واجهتك مشاكل حاول إعادة تسمية fbembed.dll إلى fbclient.dll ملاحظة لم اجربها..