الاجراءات الخارجية UDF في فايربيرد
#1
السلام عليكم ورحمة الله


كلما زادت احتياجاتي في برامجي كلما زاد البحث عن حلول
واكتشف ان هناك امور احيانا معقدة تحتاج الى اجراءات معقدة ووجدت ان الفايربيرد لديه شئ يسمى UDF 
طبعا ليس لدي المام كامل ولازلت اجرب وسوف اشرح فقط ما استطعت ان افهمه
الاجراءات الخارجية هي موجودة بمكتبات خارجية DLL عند تنصيب الفايربيرد توجد مكتبة وحيدة مضمنة معه fbudf.dll وموجودة بالمجلد UDF

في ملفات المساعدة يوجد سؤال لماذا الاجراءات الخارجية ولدينا الاجراءات المخزنة
الاجراءات المخزنة تبقى قاصرة احيانا عن اجراء بعض الامور

وهذا لمسته بنفسي فاحيانا يصبح الاجراء مركب ومتداخل ويعترض السيرفر انه غير قادر على تنفيد هذا التركيب المتداخل

مثال

كود :
For Select d1,sun(E1* F4) ,S3,A5 from (Select H1,Sum(O4),sum(p2) From EmpTable);

الاستعلام المركب اذا اضفت له فلترة بالعبارة Where مرتين مرة للعبارة Select الاولى ومرة للعبارة Select الثانية غالبا لن ينفذ السيرفر هذا الاستعلام


ولتفادي هذه المشكلة يمكن اللجؤ الى الاجراءات الخارجية وتنفيذ العمليات المعقدة بشكل منفصل لتخفيف التعقيد على السيرفر في التداخل الذي يحصل عنده وايضا لترتيب وتقليل الشوشرة عليك ايضا في فصل العملية الى عدة عمليات

طبعا لتستخدمها بداخل قاعدة البيانات يجب ان تعلن عن الاجراءات التي تريد ان تستخدمها وتضيفها الى قاعدة البيانات
في برنامج IBexpert او اي برنامج ستجد تحت الجداول والقوادح والاجراءت المخزنة الاجراءات الخارجية UDF's






[صورة: attachment.php?aid=4663]

يمكنك من هنا الاعلان عن الاجراء الخارجي مرئيا
او فتح نافذة SQL-editor وكتابته يدويا مثل

كود :
DECLARE EXTERNAL FUNCTION ADDMONTH     TIMESTAMP,     INTEGER RETURNS TIMESTAMP ENTRY_POINT 'addMonth' MODULE_NAME 'fbudf';

هذا اجراء لاضافة شهور معينة الى التاريخ

ستلاحظ عند كتابة الاستعلامات انه يخبرك ان هذا الاجراء هو اجراء خارجي

[صورة: attachment.php?aid=4662]


طبعا في الملجد UDF بمجلد سيرفر الفايربيرد ستجلد ملفات نصية SQL فيها بيان بكل الاجراءات الموجودة بالمكتبة والتي يمكن استخدامها

بعد الاعلان عن الاجراء يمكنك استخدامه في الاستعلامات بشكل طبيعي مثل

كود :
select      addmonth(Emp.mdate,5) from Emp group by Emp.mdate

هناك الكثير من الاجراءات التي يمكن استخدامها والكثير من المكتبات الي يمكن اضافتها

هنا درس لمكتبات يمكن استخدامها تحوي العشرات وربما المئات من الاجراءات

كود :
https://blogs.embarcadero.com/user-defined-functions-with-interbase/

و من هنا يمكنك تحميل  المكتبة المجانية

كود :
http://freeadhocudf.org/index_eng.html

ومن هنا يمكنك مطالعة كل الاجراءات التي تحويها

كود :
http://freeadhocudf.org/documentation_english/dok_eng_inhalt.html


لاحظ جزء بسيط من الاجراءات التي تحويها

كود :
DECLARE EXTERNAL FUNCTION F_ARABIC2ROMAN     INTEGER     RETURNS CSTRING(255) FREE_IT     ENTRY_POINT 'arabic2roman' MODULE_NAME 'FreeAdhocUDF'; DECLARE EXTERNAL FUNCTION F_CONVERTFROM33     CSTRING(255)     RETURNS INTEGER FREE_IT     ENTRY_POINT 'convertfrom33' MODULE_NAME 'FreeAdhocUDF'; DECLARE EXTERNAL FUNCTION F_CONVERTFROMBASE     CSTRING(255) ,     INTEGER ,     CSTRING(255)     RETURNS INTEGER FREE_IT     ENTRY_POINT 'convertfrombase' MODULE_NAME 'FreeAdhocUDF'; DECLARE EXTERNAL FUNCTION F_CONVERTTO33     INTEGER     RETURNS CSTRING(255) FREE_IT     ENTRY_POINT 'convertto33' MODULE_NAME 'FreeAdhocUDF'; DECLARE EXTERNAL FUNCTION F_CONVERTTOBASE     INTEGER ,     INTEGER ,     CSTRING(255)     RETURNS CSTRING(255) FREE_IT     ENTRY_POINT 'converttobase' MODULE_NAME 'FreeAdhocUDF'; DECLARE EXTERNAL FUNCTION F_C_AC2SQM     DOUBLE PRECISION     RETURNS DOUBLE PRECISION FREE_IT     ENTRY_POINT 'ac2sqm' MODULE_NAME 'FreeAdhocUDF'; DECLARE EXTERNAL FUNCTION F_C_AR2SQM     DOUBLE PRECISION     RETURNS DOUBLE PRECISION FREE_IT     ENTRY_POINT 'ar2sqm' MODULE_NAME 'FreeAdhocUDF'; DECLARE EXTERNAL FUNCTION F_C_BAR2PA     DOUBLE PRECISION     RETURNS DOUBLE PRECISION FREE_IT     ENTRY_POINT 'bar2pa' MODULE_NAME 'FreeAdhocUDF'; DECLARE EXTERNAL FUNCTION F_C_BAR2TORR     DOUBLE PRECISION     RETURNS DOUBLE PRECISION FREE_IT     ENTRY_POINT 'bar2torr' MODULE_NAME 'FreeAdhocUDF'; DECLARE EXTERNAL FUNCTION F_C_BBL2L     DOUBLE PRECISION     RETURNS DOUBLE PRECISION FREE_IT     ENTRY_POINT 'bbl2l' MODULE_NAME 'FreeAdhocUDF'; DECLARE EXTERNAL FUNCTION F_C_BHP2KW     DOUBLE PRECISION     RETURNS DOUBLE PRECISION FREE_IT     ENTRY_POINT 'bhp2kw' MODULE_NAME 'FreeAdhocUDF'; DECLARE EXTERNAL FUNCTION F_C_C2F     DOUBLE PRECISION     RETURNS DOUBLE PRECISION FREE_IT     ENTRY_POINT 'c2f' MODULE_NAME 'FreeAdhocUDF'; DECLARE EXTERNAL FUNCTION F_C_CAL2J     DOUBLE PRECISION     RETURNS DOUBLE PRECISION FREE_IT     ENTRY_POINT 'cal2j' MODULE_NAME 'FreeAdhocUDF'; DECLARE EXTERNAL FUNCTION F_C_CBL2M     DOUBLE PRECISION     RETURNS DOUBLE PRECISION FREE_IT     ENTRY_POINT 'cbl2m' MODULE_NAME 'FreeAdhocUDF'; DECLARE EXTERNAL FUNCTION F_C_CBM2RT     DOUBLE PRECISION     RETURNS DOUBLE PRECISION FREE_IT     ENTRY_POINT 'cbm2rt' MODULE_NAME 'FreeAdhocUDF'; DECLARE EXTERNAL FUNCTION F_C_CH2M     DOUBLE PRECISION     RETURNS DOUBLE PRECISION FREE_IT     ENTRY_POINT 'ch2m' MODULE_NAME 'FreeAdhocUDF'; DECLARE EXTERNAL FUNCTION F_C_CT2G     DOUBLE PRECISION     RETURNS DOUBLE PRECISION FREE_IT     ENTRY_POINT 'ct2g' MODULE_NAME 'FreeAdhocUDF'; DECLARE EXTERNAL FUNCTION F_C_CUB2CUYD     DOUBLE PRECISION     RETURNS DOUBLE PRECISION FREE_IT     ENTRY_POINT 'cum2cuyd' MODULE_NAME 'FreeAdhocUDF';

مثال من الاجراء الاول على سبيل المثال

كود :
select  F_ARABIC2ROMAN(1) from Emp

يعيد الحرف I من الحروف الانجليزية

واعتقد بالامكان استخدام حتى مكتبات النظام ويندوز نفسه لانك لو لاحظت التالي

كود :
DECLARE EXTERNAL FUNCTION RDB$GET_CONTEXT     VARCHAR(80) NULL,     VARCHAR(80) NULL RETURNS VARCHAR(255) FREE_IT ENTRY_POINT 'get_context' MODULE_NAME 'system_module';

في الـ MODULE_NAME تكتب اسم المكتبة اللتي تريدها 

 كما ان بالامكان انشاء ملف DLL بالدلفي واستخدام الاجراءات التي فيه من داخل قاعدة البيانات او من قبل سيرفر الفايربيرد

وهنا مثال على الاستخدام

كود :
https://firebirdsql.org/en/writing-udfs-for-interbase/


وتبقى ملاحظة صغيرة عند اضافة مكتبات جديدة System32  او مجلد Bin للسيرفر اغلق برنامج ادارة قواعد البيانات وافتحه من جديد للتعرف عليها


الملفات المرفقة
.jpg   111.jpg (الحجم : 21.19 ك ب / التحميلات : 97)
.jpg   222.jpg (الحجم : 26.62 ك ب / التحميلات : 102)
قل: اللهم فاطِرَ السماوات والأرض عالم الغيبِ والشهادة، ربَّ كُلِّ شَيءٍ ومَلِيكَه، أَشْهد أن لا إله إلا أنت، أعوذ بك من شرِّ نفسي وشرِّ الشيطان وشِرْكِهِ وأن أقترف على نفسي سوءًا أو أجرُّه إلى مسلم
[-] كل من 5 users say قال شكرا ل Delphi4Us على المشاركة المفيدة
  • محمد عبد العزيز, larbiparadox, أبو معاذ, bassem_43, haniid
الرد


الردود في هذا الموضوع
الاجراءات الخارجية UDF في فايربيرد - بواسطة Delphi4Us - 28-07-2022, 11:32 AM

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم