<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[delphi4arab منتديات دلفي للعرب - قسم التعريف بمكونات وادوات دلفي]]></title>
		<link>https://delphi4arab.net/forum/</link>
		<description><![CDATA[delphi4arab منتديات دلفي للعرب - https://delphi4arab.net/forum]]></description>
		<pubDate>Wed, 11 Nov 2026 01:01:28 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[Delphi & HTMX]]></title>
			<link>https://delphi4arab.net/forum/showthread.php?tid=12690</link>
			<pubDate>Fri, 02 Aug 2024 13:04:32 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://delphi4arab.net/forum/member.php?action=profile&uid=7623">mo7ammed</a>]]></dc:creator>
			<guid isPermaLink="false">https://delphi4arab.net/forum/showthread.php?tid=12690</guid>
			<description><![CDATA[السلام عليكم،<br />
<br />
لمن لم يسمع بمكتبة HTMX، فهي مكتبة جافا سكريبت تقوم بإضافة وسومات لل html من خلالها يتم تنفيذ الطلبات على server side، فهي تقلل من كتابة كود الجافا سكريبت، وايضاً تغنيك عن تقسيم كود البرنامج الى front end و backend<br />
<br />
هناك عدة مقالات تم انشائها على موقع شركة Embarcadero<br />
<br />
<a href="https://blogs.embarcadero.com/harnessing-the-power-of-the-web-with-delphi-htmx/" target="_blank" rel="noopener" class="mycode_url">https://blogs.embarcadero.com/harnessing...lphi-htmx/</a><br />
<a href="https://blogs.embarcadero.com/harnessing-the-power-of-the-web-with-delphi-htmx-part-2/" target="_blank" rel="noopener" class="mycode_url">https://blogs.embarcadero.com/harnessing...mx-part-2/</a><br />
<a href="https://blogs.embarcadero.com/running-delphi-htmx-in-wordpress-htmx-series-part-3/" target="_blank" rel="noopener" class="mycode_url">https://blogs.embarcadero.com/running-de...es-part-3/</a>]]></description>
			<content:encoded><![CDATA[السلام عليكم،<br />
<br />
لمن لم يسمع بمكتبة HTMX، فهي مكتبة جافا سكريبت تقوم بإضافة وسومات لل html من خلالها يتم تنفيذ الطلبات على server side، فهي تقلل من كتابة كود الجافا سكريبت، وايضاً تغنيك عن تقسيم كود البرنامج الى front end و backend<br />
<br />
هناك عدة مقالات تم انشائها على موقع شركة Embarcadero<br />
<br />
<a href="https://blogs.embarcadero.com/harnessing-the-power-of-the-web-with-delphi-htmx/" target="_blank" rel="noopener" class="mycode_url">https://blogs.embarcadero.com/harnessing...lphi-htmx/</a><br />
<a href="https://blogs.embarcadero.com/harnessing-the-power-of-the-web-with-delphi-htmx-part-2/" target="_blank" rel="noopener" class="mycode_url">https://blogs.embarcadero.com/harnessing...mx-part-2/</a><br />
<a href="https://blogs.embarcadero.com/running-delphi-htmx-in-wordpress-htmx-series-part-3/" target="_blank" rel="noopener" class="mycode_url">https://blogs.embarcadero.com/running-de...es-part-3/</a>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[اشياء لم يتم التطرق لها في قواعد بيانات فايربيرد]]></title>
			<link>https://delphi4arab.net/forum/showthread.php?tid=12496</link>
			<pubDate>Sat, 03 Feb 2024 08:16:13 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://delphi4arab.net/forum/member.php?action=profile&uid=1588">Delphi4Us</a>]]></dc:creator>
			<guid isPermaLink="false">https://delphi4arab.net/forum/showthread.php?tid=12496</guid>
			<description><![CDATA[السلام عليكم ورحمة الله<br />
<br />
<br />
الدالة ROW_COUNT <br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>BEGIN
    SELECT COL FROM TAB INTO :VAR;

    IF (ROW_COUNT = 0) THEN
      EXCEPTION NO_DATA_FOUND;
  END</code></div></div><br />
تعيد عدد الصفوف المتأثرة من جملة الاستعلام او الحذف او التعديل بمعنى العملية التي تم تنفيدها<br />
مثال اخر<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>update Figures set Number = 0 where id = :id;
if (row_count = 0) then
  insert into Figures (id, Number) values (:id, 0);</code></div></div><br />
<br />
المؤشرات Explicit Cursors<br />
<br />
أصبح من الممكن الآن الإعلان عن مؤشرات متعددة واستخدامها في PSQL. تتوفر المؤشرات الصريحة في بنية DSQL EXECUTE BLOCK وكذلك في الإجراءات والمشغلات المخزنة. <br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>DECLARE RNAME CHAR(31);
    DECLARE C CURSOR FOR ( SELECT RDB&#36;RELATION_NAME
                              FROM RDB&#36;RELATIONS );
    BEGIN
      OPEN C;
      WHILE (1 = 1) DO
      BEGIN
        FETCH C INTO :RNAME;
        IF (ROW_COUNT = 0) THEN
          LEAVE;
        SUSPEND;
      END
      CLOSE C;
    END</code></div></div><br />
<br />
مثال اخر<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>DECLARE RNAME CHAR(31);
    DECLARE FNAME CHAR(31);
    DECLARE C CURSOR FOR ( SELECT RDB&#36;FIELD_NAME
                           FROM RDB&#36;RELATION_FIELDS
                           WHERE RDB&#36;RELATION_NAME = :RNAME
                           ORDER BY RDB&#36;FIELD_POSITION );
    BEGIN
      FOR
        SELECT RDB&#36;RELATION_NAME
        FROM RDB&#36;RELATIONS
        INTO :RNAME
      DO
      BEGIN
        OPEN C;
        FETCH C INTO :FNAME;
        CLOSE C;
        SUSPEND;
      END
    END</code></div></div><br />
بالامكان الان اسناد القيم الافتراضية في الاجراءات المخزنة<br />
Defaults for Stored Procedure Arguments<br />
<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>CREATE PROCEDURE P1 (X INTEGER = 123)
   RETURNS (Y INTEGER)
   AS
   BEGIN
     Y = X;
     SUSPEND;
   END</code></div></div><br />
بالامكان استخدام العبارة LEAVE لانهاء حلقة تكرارية او الخروج من تنفيد اي عملية قائمة<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>FOR
     SELECT COALESCE(RDB&#36;SYSTEM_FLAG, 0), RDB&#36;RELATION_NAME
       FROM RDB&#36;RELATIONS
       ORDER BY 1
     INTO :RTYPE, :RNAME
     DO
     BEGIN
       IF (RTYPE = 0) THEN
         SUSPEND;
       ELSE
         LEAVE; -- exits current loop
     END</code></div></div><br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>CNT = 100;
   L1:
   WHILE (CNT &gt;= 0) DO
   BEGIN
     IF (CNT &lt; 50) THEN
       LEAVE L1; -- exists WHILE loop
     CNT = CNT - l;
   END</code></div></div><br />
العبارة ROW_NUMBER<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>select
  	  id,
  	  salary,
  	  row_number() over (order by salary)
  	from employee
  	order by salary;</code></div></div><br />
تعطي رقم متسلسل للصفوف وتعمل مع عبارة Over التجميعية بما ياتي معها من صيغ مختلفة حسب الطلب<br />
<br />
العبارة RANK<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>select
  	  id,
  	  salary,
  	  rank() over (order by salary)
  	from employee
  	order by salary;</code></div></div><br />
مثل السابقة ولكن تكرر الترقيم بحال كان مكرر لاحظ النتيجة<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>rank salary id
  	-- ------ ----
  	 3  8.00     1
  	 4  9.00     2
  	 1 10.00     3
  	 5 10.00     3
  	 2 12.00     5</code></div></div><br />
العبارة PERCENT_RANK<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>select
  	  id,
  	  salary,
  	  rank() over (order by salary),
  	  percent_rank() over (order by salary)
  	from employee
  	order by salary;</code></div></div><br />
نفس السابقة وبنسب مئوية<br />
<br />
<br />
العبارة  cume_dist<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>select
  	  id,
  	  salary,
  	  cume_dist() over (order by salary)
  	from employee
  	order by salary;</code></div></div><br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>  	 cume_dist salary id
  	-- ------ ---------
  	 3   8.00       0.2
  	 4   9.00       0.4
  	 1  10.00       0.8
  	 5  10.00       0.8
  	 2  12.00         1</code></div></div><br />
<br />
وايضا بحال كنت تتعامل مع بيانات من مليون وفوق انصح بهذه الصفحة التي تحدد فيها اصدار فايربيرد وحجم الرام وعدد المستخدمين وما الى ذلك فتولد لك ملفين احدهما<br />
<br />
firebird.conf وايضا  databases.conf لان فايربيرد عند التثبيت يتم تثبيته باعدادت افتراضية تكون سيئة وغير مضبوطة لتناسب حجم العمل الذي تعمل عليه<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>https://cc.ib-aid.com/democalc.html</code></div></div><br />
سوف تقوم الصفحة باعطاء قيم لاستخدام الرامات وقيم لحجم الصفحات لقاعدة البيانات وامور مهمة لذلك<br />
<br />
<br />
هذه النصائح مجالات مختلفة، من تحسينات الأجهزة/نظام التشغيل وتهيئة Firebird إلى توصيات تحسين SQL.<br />
أولاً: تحسينات الأجهزة/نظام التشغيل:<br />
<ol type="1" class="mycode_list"><li>استخدام SSD لقاعدة البيانات: نقل قاعدة البيانات إلى SSD سيُحسّن سرعة القراءة والكتابة بشكل كبير.<br />
</li>
<li>استخدام RAID 10: إذا كنت تستخدم RAID 1 أو RAID 5، ففكر في استخدام RAID 10، فهو أسرع بنسبة 15-25%.<br />
</li>
<li>التحقق من BBU: تأكد من أن بطارية BBU (بطارية احتياطية للذاكرة) في حالة جيدة.<br />
</li>
<li>ضبط ذاكرة التخزين المؤقت للكتابة على "write-back": سيُحسّن هذا الأداء عند كتابة البيانات على القرص.<br />
</li>
<li>تمكين ذاكرة التخزين المؤقت للقراءة: سيُحسّن هذا الأداء عند قراءة البيانات من القرص.<br />
</li>
<li>التحقق من نظام القرص الفرعي: تأكد من أن نظام القرص الفرعي يعمل بشكل صحيح.<br />
</li>
<li>استخدام مساحة مؤقتة سريعة: خصص مساحة مؤقتة سريعة (SSD أو محرك RAM) لعمليات الفرز الكبيرة.<br />
</li>
</ol>
ثانياً: تحسينات تهيئة Firebird:<br />
<ol type="1" class="mycode_list"><li>استخدام SuperClassic أو Classic في Firebird 2.5: يُقدم SuperClassic أداءً أفضل للعمليات المتزامنة، بينما يُقدم Classic أداءً أفضل للعمليات المتسلسلة.<br />
</li>
<li>استخدام SuperServer 3.0 في Firebird 3: يُقدم SuperServer 3.0 أداءً أفضل للعمليات المتزامنة والمتسلسلة.<br />
</li>
<li>ضبط عدد صفحات ذاكرة التخزين المؤقت: اضبط عدد صفحات ذاكرة التخزين المؤقت وفقًا لحجم قاعدة البيانات وحجمها.<br />
</li>
<li>ضبط عدد الموصلات: اضبط عدد الموصلات وفقًا لعدد المستخدمين المتزامنين.<br />
</li>
<li>ضبط حجم ذاكرة التخزين المؤقت للقراءة/الكتابة: اضبط حجم ذاكرة التخزين المؤقت للقراءة/الكتابة وفقًا لحجم قاعدة البيانات وحجمها.<br />
</li>
<li>ضبط مسار الملف المؤقت: خصص مسارًا سريعًا للملفات المؤقتة.<br />
</li>
<li>إلغاء تنشيط الميزات غير المستخدمة: قم بإلغاء تنشيط الميزات غير المستخدمة لتحسين الأداء.<br />
</li>
</ol>
<br />
والصفحة السابقة تقوم باعطاء اغلب الاعدادات المذكورة لتحسين اداء محرك فايربيرد<br />
<br />
وعلى سبيل المثال اعدادات خاصة قدمها بحسب مواصفات معينة تتماشى مع المواصفات التي تم تقديمها فقام بالغاء اشياء وفعل اشياء وزاد او غير في اشياء<br />
ومن تجربتي الخاصة استعلامات كانت تاخذ حوالي 350 ملي ثانية على مليون و500 الف سجل اصبحت تأخذ 128 ملي ثانية<br />
بمعنى ان الاعدادات هذه لا تصلح لاي جهاز بالضرورة<br />
<br />
اعدادات لملف ملف  firebird.conf<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>ServerMode = Super
DefaultDbCachePages = 50K # pages (SuperServer) - increase pages in databases.conf, not here


LockMemSize = 20M # bytes (SuperServer)
LockHashSlots = 40099 # slots

MaxUnflushedWrites = -1 # default for posix (non-Windows)
MaxUnflushedWriteTime = -1 # default for posix (non-Windows)
UseFileSystemCache = true
TempCacheLimit = 256M
RemoteServicePort = 3050
InlineSortThreshold = 16384 # use REFETCH plan for big sortings


ExtConnPoolSize = 64 # external connections pool size
ExtConnPoolLifeTime = 3600 # seconds

#set DataTypeCompatibility according Migration Guide https://ib-aid.com/download /docs/fb4migrationguide.html
#DataTypeCompatibility =
#WireCryptPlugin = ChaCha64, ChaCha, Arc4
#WireCrypt = Enabled (for client) / Required (for server)
#WireCompression = false
#RemoteAuxPort = 0
#authentication plugin setup
#Recommendation - use SELECT * FROM SEC&#36;USERS
#to check that you have users for all plugins
AuthServer = Srp256, Legacy_Auth
UserManager = Srp, Legacy_UserManager

#MaxIdentifierByteLength = 252
#MaxIdentifierCharLength = 63
#DefaultTimeZone =
#SnapshotsMemSize = 64K # bytes
#TipCacheBlockSize = 4M # bytes</code></div></div><br />
اعدادات ملف  databases.conf<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>security.db = &#36;(dir_secDb)/security4.fdb
{
RemoteAccess = false
DefaultDbCachePages = 256
}
testdb = c:&#92;temp&#92;mydb1.fdb
{
DefaultDBCachePages = 115536
LockMemSize = 30M
TempCacheLimit  =2185M
}</code></div></div><br />
كما تجدر الاشارة الى ان الاعدادات التي يتم تقديمها تقوم بتحسين اداء فايربيرد ولكن ليس بالضرورة ان يكون افضل ما يكون ولتحصل على افضل شئ تحتاج الى فهم عمل كل هذه الخيارات وتجرب بنفسك<br />
<br />
<br />
وهناك اشياء اخرى جديدة واشياء قديمة ومهمة و الذي سوف اضيفه كلما سنحت الفرصة لذلك<br />
<hr class="mycode_hr" />
العبارة MERGE لدمج من مصدر الى جهة مستهدفة<br />
<br />
مثال على الاستخدام<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>MERGE INTO books b
  USING purchases p
  ON p.title = b.title and p.type = 'bk'
  WHEN MATCHED THEN
    UPDATE SET b.desc = b.desc || '; ' || p.desc
  WHEN NOT MATCHED THEN
    INSERT (title, desc, bought) values (p.title, p.desc, p.bought);</code></div></div><br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>MERGE INTO customers c
  	  USING (SELECT * from customers_delta WHERE id &gt; 10) cd
  	  ON (c.id = cd.id)
  	  WHEN MATCHED THEN
  	    UPDATE SET name = cd.name
  	  WHEN NOT MATCHED THEN
  	    INSERT (id, name) values (cd.id, cd.name);</code></div></div><br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>MERGE INTO numbers
   	  USING (
   	    WITH RECURSIVE r(n) AS (
   	      SELECT 1 FROM rdb&#36;database
   	      UNION ALL
   	      SELECT n+1 FROM r WHERE n &lt; 200
   	    )
   	    SELECT n FROM r
   	  ) t
   	  ON numbers.num = t.n
   	  WHEN NOT MATCHED THEN
   	    INSERT(num) VALUES(t.n);</code></div></div><br />
<span style="color: #000000;" class="mycode_color"><span style="font-family: Arial, sans-serif;" class="mycode_font"><span style="font-weight: bold;" class="mycode_b">كيفية الحصول على عدد السجلات لأي استعلام دون تنفيذه؟</span></span><br />
</span><br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>SELECT COUNT(*) FROM ( select * from employee where emp_no &gt; 8 );</code></div></div><br />
عبارة  current_connection تحفظ الاتصال الحالي<br />
<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>select current_connection from rdb&#36;database</code></div></div><br />
ويمكن اجراء عملية ما بها <br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>execute procedure P_Login(current_connection)</code></div></div><br />
للحصول على التاريخ الان والساعة<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>select current_date from rdb&#36;database</code></div></div><br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>select current_time(2) from rdb&#36;database</code></div></div><br />
<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>select current_time from rdb&#36;database</code></div></div><br />
<br />
<br />
العبارة  current_role للحصول على صلاحيات المستخدم الحالي<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>if (current_role &lt;&gt; 'MANAGER')
  then exception only_managers_may_delete;
else
  delete from Customers where custno = :custno;</code></div></div><br />
للحصول على معرف العملية الحالية<br />
<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>select current_transaction from rdb&#36;database</code></div></div><br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>New.Txn_ID = current_transaction;</code></div></div><br />
<br />
للحصول على اسم المستخدم الحالي<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>create trigger bi_customers for customers before insert as
begin
  New.added_by  = CURRENT_USER;
  New.purchases = 0;
end</code></div></div><br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>create trigger bi_customers for customers before insert as
begin
  New.added_by  = USER;
  New.purchases = 0;
end</code></div></div><br />
<br />
<br />
<br />
تستخدم في القوادح لمعرفة اذا كان هناك حدث حذف حصل<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>if (deleting) then
begin
  insert into Removed_Cars (id, make, model, removed)
    values (old.id, old.make, old.model, current_timestamp);
end</code></div></div><br />
<br />
او اضافة او تعديل<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>if (inserting or updating) then
begin
  if (new.serial_num is null) then
    new.serial_num = gen_id(gen_serials, 1);
end</code></div></div><br />
<br />
ماذا لو لم تكن تريد استخدام مولدات الارقام لاستخدامه مع المفاتيح الاساسية بالجداول<br />
هناك طريقة يمكن فعل ذلك بها باستخدام القوادح .<br />
فعند استخدام مولدات الارقام وكان اخر رقم عندك هو مثلا 23000 وقمت بفتح سجل جديد ثم الغيت العملية وعدت واضفت سجل جديد فسيكون الرقم 23002 وليس 23001<br />
ويجب وقتها التدخل برمجيا واعادة الترقيم الى الخلف بمقدر 1 <br />
او استخدام القوادح لاجراء الترقيم كما بالمثال التالي<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>if(Coalesce(new.id,0)=0) then
new.id = Coalesce((Select max(id) from doc),0)+1;
begin</code></div></div><br />
حيث Doc اسم الجدول ويتم وضع هذه السطور في الحدث قبل الاضافة<br />
<br />
ولكن لا ينصح بها اذا كانت بياناتك اكبر من مليون ولازالت تنمو لان جملة Max على البيانات الكثيرة فيها بطئ<br />
<hr class="mycode_hr" />
بخصول حجم الصفحة في اعدادت ملف قاعدة البيانات دور مهم في اداء قاعدة البيانات<br />
<br />
<img src="https://www.ibexpert.net/ibe/uploads/Doc/dmiles841.gif" loading="lazy"  alt="[صورة: dmiles841.gif]" class="mycode_img" /><br />
<br />
<img src="https://www.ibexpert.net/ibe/uploads/Doc/dmiles842.gif" loading="lazy"  alt="[صورة: dmiles842.gif]" class="mycode_img" /><br />
<br />
عند انشاء قاعدة بيانات جديدة افتراضيا يتم وضعه على 16384 وعند انشاء قاعدة البيانات لا يمكن تغييره بعدها الا بانشاء نسخ احتياطي وعملية استرجاع<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">العديد من العمليات المستندة إلى الفهرس (تعمل الفهارس بشكل أسرع إذا تم تقليل عمق الفهرس)</span><ul class="mycode_list"><li>السجلات العريضة: مع وجود هياكل بيانات عريضة جدًا، أي مع العديد من الأعمدة الطويلة جدًا، يكون قراءة مجموعة البيانات أكثر فعالية. بالنسبة لمجموعات البيانات التي لا تلائم صفحة واحدة، يلزم قراءة عدة صفحات لاسترداد مجموعة بيانات واحدة. وينطبق الأمر نفسه على الكتابة، أي أن الجلب عبر عدة صفحات ضروري.<br />
</li>
<li>حقول blob الكبيرة: يتم تخزين البيانات واسترجاعها بكفاءة أكبر إذا كان عدد الصفحات التي تحتاج إلى جلبها أقل. مع البيانات blob الأكبر، تكون عمليات الكتابة والقراءة أكثر فعالية أيضًا، حيث يلزم على سبيل المثال 100 عملية وصول لعمود blob بحجم 100 كيلو بايت مع حجم صفحة 1 كيلو بايت. ولكن مع حجم صفحة 8 كيلو بايت، يلزم فقط 13 عملية.<br />
</li>
<li>حجم صفحة صغير: يكون حجم صفحة صغير كافياً إذا كان العديد من المعاملات يعيد فقط عددًا قليلاً من الأسطر. يمكن الوصول إلى هياكل الجداول النحيل مع صفحات قاعدة بيانات صغيرة بشكل أسرع للقراءة والكتابة حيث يلزم ذاكرة أقل، ويمكن الاحتفاظ بالمزيد من صفحات قاعدة البيانات في ذاكرة التخزين المؤقت. ومع ذلك، لا يُنصح باستخدام قاعدة بيانات بحجم صفحة أقل من 4096 على Windows، حيث أن هذا هو حجم كتلة Windows. لذلك، لا تقدم أحجام الصفحات الأصغر أي ميزات، حيث سيظل Windows يستخرج كتل 4 كيلو بايت.<br />
</li>
</ul>
<span style="font-weight: bold;" class="mycode_b">تأثير حجم صفحة قاعدة البيانات على ذاكرة التخزين المؤقت:</span><br />
<ul class="mycode_list"><li>يؤثر حجم صفحة قاعدة البيانات بشكل مباشر على مقدار ذاكرة التخزين المؤقت لقاعدة البيانات، والذي يؤثر على جميع النقاط المذكورة أعلاه. إذا تم تحديد حجم صفحة 16 كيلو بايت وحدد ذاكرة التخزين المؤقت لقاعدة بيانات خادم Firebird في firebird.conf بحد أقصى 128,000 صفحة، فسيتم توفير إجمالي ذاكرة تخزين مؤقت 2 غيغابايت لإيواء صفحات البيانات. لا يوفر نفس مواصفات ذاكرة التخزين المؤقت مع حجم صفحة 1 كيلو بايت سوى 180 ميغابايت من ذاكرة التخزين المؤقت. يُرجى الرجوع إلى تكوين الذاكرة للحصول على تفاصيل مواصفات ذاكرة التخزين المؤقت لخادم Firebird Superserver وخادم Classic.<br />
<br />
</li>
</ul>
<span style="font-weight: bold;" class="mycode_b">عوامل أخرى يجب مراعاتها:</span><br />
<ul class="mycode_list"><li>على الرغم من إمكانية إضاعة مساحة معينة بحجم صفحة كبير، إلا أنه لا ينبغي أن يكون هذا مشكلة خطيرة بأسعار الأجهزة الحالية، ويمكن أن يوفر مزايا أكبر في الأداء.<br />
</li>
<li>الطريقة الوحيدة لتغيير حجم صفحة قاعدة البيانات لاحقًا هي إجراء نسخة احتياطية لقاعدة البيانات يليها استعادة (بند قائمة IBExpert، الخدمات / استعادة قاعدة البيانات) حيث يمكن إعادة تعريف حجم صفحة قاعدة البيانات.<br />
</li>
</ul>
]]></description>
			<content:encoded><![CDATA[السلام عليكم ورحمة الله<br />
<br />
<br />
الدالة ROW_COUNT <br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>BEGIN
    SELECT COL FROM TAB INTO :VAR;

    IF (ROW_COUNT = 0) THEN
      EXCEPTION NO_DATA_FOUND;
  END</code></div></div><br />
تعيد عدد الصفوف المتأثرة من جملة الاستعلام او الحذف او التعديل بمعنى العملية التي تم تنفيدها<br />
مثال اخر<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>update Figures set Number = 0 where id = :id;
if (row_count = 0) then
  insert into Figures (id, Number) values (:id, 0);</code></div></div><br />
<br />
المؤشرات Explicit Cursors<br />
<br />
أصبح من الممكن الآن الإعلان عن مؤشرات متعددة واستخدامها في PSQL. تتوفر المؤشرات الصريحة في بنية DSQL EXECUTE BLOCK وكذلك في الإجراءات والمشغلات المخزنة. <br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>DECLARE RNAME CHAR(31);
    DECLARE C CURSOR FOR ( SELECT RDB&#36;RELATION_NAME
                              FROM RDB&#36;RELATIONS );
    BEGIN
      OPEN C;
      WHILE (1 = 1) DO
      BEGIN
        FETCH C INTO :RNAME;
        IF (ROW_COUNT = 0) THEN
          LEAVE;
        SUSPEND;
      END
      CLOSE C;
    END</code></div></div><br />
<br />
مثال اخر<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>DECLARE RNAME CHAR(31);
    DECLARE FNAME CHAR(31);
    DECLARE C CURSOR FOR ( SELECT RDB&#36;FIELD_NAME
                           FROM RDB&#36;RELATION_FIELDS
                           WHERE RDB&#36;RELATION_NAME = :RNAME
                           ORDER BY RDB&#36;FIELD_POSITION );
    BEGIN
      FOR
        SELECT RDB&#36;RELATION_NAME
        FROM RDB&#36;RELATIONS
        INTO :RNAME
      DO
      BEGIN
        OPEN C;
        FETCH C INTO :FNAME;
        CLOSE C;
        SUSPEND;
      END
    END</code></div></div><br />
بالامكان الان اسناد القيم الافتراضية في الاجراءات المخزنة<br />
Defaults for Stored Procedure Arguments<br />
<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>CREATE PROCEDURE P1 (X INTEGER = 123)
   RETURNS (Y INTEGER)
   AS
   BEGIN
     Y = X;
     SUSPEND;
   END</code></div></div><br />
بالامكان استخدام العبارة LEAVE لانهاء حلقة تكرارية او الخروج من تنفيد اي عملية قائمة<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>FOR
     SELECT COALESCE(RDB&#36;SYSTEM_FLAG, 0), RDB&#36;RELATION_NAME
       FROM RDB&#36;RELATIONS
       ORDER BY 1
     INTO :RTYPE, :RNAME
     DO
     BEGIN
       IF (RTYPE = 0) THEN
         SUSPEND;
       ELSE
         LEAVE; -- exits current loop
     END</code></div></div><br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>CNT = 100;
   L1:
   WHILE (CNT &gt;= 0) DO
   BEGIN
     IF (CNT &lt; 50) THEN
       LEAVE L1; -- exists WHILE loop
     CNT = CNT - l;
   END</code></div></div><br />
العبارة ROW_NUMBER<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>select
  	  id,
  	  salary,
  	  row_number() over (order by salary)
  	from employee
  	order by salary;</code></div></div><br />
تعطي رقم متسلسل للصفوف وتعمل مع عبارة Over التجميعية بما ياتي معها من صيغ مختلفة حسب الطلب<br />
<br />
العبارة RANK<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>select
  	  id,
  	  salary,
  	  rank() over (order by salary)
  	from employee
  	order by salary;</code></div></div><br />
مثل السابقة ولكن تكرر الترقيم بحال كان مكرر لاحظ النتيجة<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>rank salary id
  	-- ------ ----
  	 3  8.00     1
  	 4  9.00     2
  	 1 10.00     3
  	 5 10.00     3
  	 2 12.00     5</code></div></div><br />
العبارة PERCENT_RANK<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>select
  	  id,
  	  salary,
  	  rank() over (order by salary),
  	  percent_rank() over (order by salary)
  	from employee
  	order by salary;</code></div></div><br />
نفس السابقة وبنسب مئوية<br />
<br />
<br />
العبارة  cume_dist<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>select
  	  id,
  	  salary,
  	  cume_dist() over (order by salary)
  	from employee
  	order by salary;</code></div></div><br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>  	 cume_dist salary id
  	-- ------ ---------
  	 3   8.00       0.2
  	 4   9.00       0.4
  	 1  10.00       0.8
  	 5  10.00       0.8
  	 2  12.00         1</code></div></div><br />
<br />
وايضا بحال كنت تتعامل مع بيانات من مليون وفوق انصح بهذه الصفحة التي تحدد فيها اصدار فايربيرد وحجم الرام وعدد المستخدمين وما الى ذلك فتولد لك ملفين احدهما<br />
<br />
firebird.conf وايضا  databases.conf لان فايربيرد عند التثبيت يتم تثبيته باعدادت افتراضية تكون سيئة وغير مضبوطة لتناسب حجم العمل الذي تعمل عليه<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>https://cc.ib-aid.com/democalc.html</code></div></div><br />
سوف تقوم الصفحة باعطاء قيم لاستخدام الرامات وقيم لحجم الصفحات لقاعدة البيانات وامور مهمة لذلك<br />
<br />
<br />
هذه النصائح مجالات مختلفة، من تحسينات الأجهزة/نظام التشغيل وتهيئة Firebird إلى توصيات تحسين SQL.<br />
أولاً: تحسينات الأجهزة/نظام التشغيل:<br />
<ol type="1" class="mycode_list"><li>استخدام SSD لقاعدة البيانات: نقل قاعدة البيانات إلى SSD سيُحسّن سرعة القراءة والكتابة بشكل كبير.<br />
</li>
<li>استخدام RAID 10: إذا كنت تستخدم RAID 1 أو RAID 5، ففكر في استخدام RAID 10، فهو أسرع بنسبة 15-25%.<br />
</li>
<li>التحقق من BBU: تأكد من أن بطارية BBU (بطارية احتياطية للذاكرة) في حالة جيدة.<br />
</li>
<li>ضبط ذاكرة التخزين المؤقت للكتابة على "write-back": سيُحسّن هذا الأداء عند كتابة البيانات على القرص.<br />
</li>
<li>تمكين ذاكرة التخزين المؤقت للقراءة: سيُحسّن هذا الأداء عند قراءة البيانات من القرص.<br />
</li>
<li>التحقق من نظام القرص الفرعي: تأكد من أن نظام القرص الفرعي يعمل بشكل صحيح.<br />
</li>
<li>استخدام مساحة مؤقتة سريعة: خصص مساحة مؤقتة سريعة (SSD أو محرك RAM) لعمليات الفرز الكبيرة.<br />
</li>
</ol>
ثانياً: تحسينات تهيئة Firebird:<br />
<ol type="1" class="mycode_list"><li>استخدام SuperClassic أو Classic في Firebird 2.5: يُقدم SuperClassic أداءً أفضل للعمليات المتزامنة، بينما يُقدم Classic أداءً أفضل للعمليات المتسلسلة.<br />
</li>
<li>استخدام SuperServer 3.0 في Firebird 3: يُقدم SuperServer 3.0 أداءً أفضل للعمليات المتزامنة والمتسلسلة.<br />
</li>
<li>ضبط عدد صفحات ذاكرة التخزين المؤقت: اضبط عدد صفحات ذاكرة التخزين المؤقت وفقًا لحجم قاعدة البيانات وحجمها.<br />
</li>
<li>ضبط عدد الموصلات: اضبط عدد الموصلات وفقًا لعدد المستخدمين المتزامنين.<br />
</li>
<li>ضبط حجم ذاكرة التخزين المؤقت للقراءة/الكتابة: اضبط حجم ذاكرة التخزين المؤقت للقراءة/الكتابة وفقًا لحجم قاعدة البيانات وحجمها.<br />
</li>
<li>ضبط مسار الملف المؤقت: خصص مسارًا سريعًا للملفات المؤقتة.<br />
</li>
<li>إلغاء تنشيط الميزات غير المستخدمة: قم بإلغاء تنشيط الميزات غير المستخدمة لتحسين الأداء.<br />
</li>
</ol>
<br />
والصفحة السابقة تقوم باعطاء اغلب الاعدادات المذكورة لتحسين اداء محرك فايربيرد<br />
<br />
وعلى سبيل المثال اعدادات خاصة قدمها بحسب مواصفات معينة تتماشى مع المواصفات التي تم تقديمها فقام بالغاء اشياء وفعل اشياء وزاد او غير في اشياء<br />
ومن تجربتي الخاصة استعلامات كانت تاخذ حوالي 350 ملي ثانية على مليون و500 الف سجل اصبحت تأخذ 128 ملي ثانية<br />
بمعنى ان الاعدادات هذه لا تصلح لاي جهاز بالضرورة<br />
<br />
اعدادات لملف ملف  firebird.conf<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>ServerMode = Super
DefaultDbCachePages = 50K # pages (SuperServer) - increase pages in databases.conf, not here


LockMemSize = 20M # bytes (SuperServer)
LockHashSlots = 40099 # slots

MaxUnflushedWrites = -1 # default for posix (non-Windows)
MaxUnflushedWriteTime = -1 # default for posix (non-Windows)
UseFileSystemCache = true
TempCacheLimit = 256M
RemoteServicePort = 3050
InlineSortThreshold = 16384 # use REFETCH plan for big sortings


ExtConnPoolSize = 64 # external connections pool size
ExtConnPoolLifeTime = 3600 # seconds

#set DataTypeCompatibility according Migration Guide https://ib-aid.com/download /docs/fb4migrationguide.html
#DataTypeCompatibility =
#WireCryptPlugin = ChaCha64, ChaCha, Arc4
#WireCrypt = Enabled (for client) / Required (for server)
#WireCompression = false
#RemoteAuxPort = 0
#authentication plugin setup
#Recommendation - use SELECT * FROM SEC&#36;USERS
#to check that you have users for all plugins
AuthServer = Srp256, Legacy_Auth
UserManager = Srp, Legacy_UserManager

#MaxIdentifierByteLength = 252
#MaxIdentifierCharLength = 63
#DefaultTimeZone =
#SnapshotsMemSize = 64K # bytes
#TipCacheBlockSize = 4M # bytes</code></div></div><br />
اعدادات ملف  databases.conf<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>security.db = &#36;(dir_secDb)/security4.fdb
{
RemoteAccess = false
DefaultDbCachePages = 256
}
testdb = c:&#92;temp&#92;mydb1.fdb
{
DefaultDBCachePages = 115536
LockMemSize = 30M
TempCacheLimit  =2185M
}</code></div></div><br />
كما تجدر الاشارة الى ان الاعدادات التي يتم تقديمها تقوم بتحسين اداء فايربيرد ولكن ليس بالضرورة ان يكون افضل ما يكون ولتحصل على افضل شئ تحتاج الى فهم عمل كل هذه الخيارات وتجرب بنفسك<br />
<br />
<br />
وهناك اشياء اخرى جديدة واشياء قديمة ومهمة و الذي سوف اضيفه كلما سنحت الفرصة لذلك<br />
<hr class="mycode_hr" />
العبارة MERGE لدمج من مصدر الى جهة مستهدفة<br />
<br />
مثال على الاستخدام<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>MERGE INTO books b
  USING purchases p
  ON p.title = b.title and p.type = 'bk'
  WHEN MATCHED THEN
    UPDATE SET b.desc = b.desc || '; ' || p.desc
  WHEN NOT MATCHED THEN
    INSERT (title, desc, bought) values (p.title, p.desc, p.bought);</code></div></div><br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>MERGE INTO customers c
  	  USING (SELECT * from customers_delta WHERE id &gt; 10) cd
  	  ON (c.id = cd.id)
  	  WHEN MATCHED THEN
  	    UPDATE SET name = cd.name
  	  WHEN NOT MATCHED THEN
  	    INSERT (id, name) values (cd.id, cd.name);</code></div></div><br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>MERGE INTO numbers
   	  USING (
   	    WITH RECURSIVE r(n) AS (
   	      SELECT 1 FROM rdb&#36;database
   	      UNION ALL
   	      SELECT n+1 FROM r WHERE n &lt; 200
   	    )
   	    SELECT n FROM r
   	  ) t
   	  ON numbers.num = t.n
   	  WHEN NOT MATCHED THEN
   	    INSERT(num) VALUES(t.n);</code></div></div><br />
<span style="color: #000000;" class="mycode_color"><span style="font-family: Arial, sans-serif;" class="mycode_font"><span style="font-weight: bold;" class="mycode_b">كيفية الحصول على عدد السجلات لأي استعلام دون تنفيذه؟</span></span><br />
</span><br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>SELECT COUNT(*) FROM ( select * from employee where emp_no &gt; 8 );</code></div></div><br />
عبارة  current_connection تحفظ الاتصال الحالي<br />
<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>select current_connection from rdb&#36;database</code></div></div><br />
ويمكن اجراء عملية ما بها <br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>execute procedure P_Login(current_connection)</code></div></div><br />
للحصول على التاريخ الان والساعة<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>select current_date from rdb&#36;database</code></div></div><br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>select current_time(2) from rdb&#36;database</code></div></div><br />
<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>select current_time from rdb&#36;database</code></div></div><br />
<br />
<br />
العبارة  current_role للحصول على صلاحيات المستخدم الحالي<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>if (current_role &lt;&gt; 'MANAGER')
  then exception only_managers_may_delete;
else
  delete from Customers where custno = :custno;</code></div></div><br />
للحصول على معرف العملية الحالية<br />
<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>select current_transaction from rdb&#36;database</code></div></div><br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>New.Txn_ID = current_transaction;</code></div></div><br />
<br />
للحصول على اسم المستخدم الحالي<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>create trigger bi_customers for customers before insert as
begin
  New.added_by  = CURRENT_USER;
  New.purchases = 0;
end</code></div></div><br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>create trigger bi_customers for customers before insert as
begin
  New.added_by  = USER;
  New.purchases = 0;
end</code></div></div><br />
<br />
<br />
<br />
تستخدم في القوادح لمعرفة اذا كان هناك حدث حذف حصل<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>if (deleting) then
begin
  insert into Removed_Cars (id, make, model, removed)
    values (old.id, old.make, old.model, current_timestamp);
end</code></div></div><br />
<br />
او اضافة او تعديل<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>if (inserting or updating) then
begin
  if (new.serial_num is null) then
    new.serial_num = gen_id(gen_serials, 1);
end</code></div></div><br />
<br />
ماذا لو لم تكن تريد استخدام مولدات الارقام لاستخدامه مع المفاتيح الاساسية بالجداول<br />
هناك طريقة يمكن فعل ذلك بها باستخدام القوادح .<br />
فعند استخدام مولدات الارقام وكان اخر رقم عندك هو مثلا 23000 وقمت بفتح سجل جديد ثم الغيت العملية وعدت واضفت سجل جديد فسيكون الرقم 23002 وليس 23001<br />
ويجب وقتها التدخل برمجيا واعادة الترقيم الى الخلف بمقدر 1 <br />
او استخدام القوادح لاجراء الترقيم كما بالمثال التالي<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>if(Coalesce(new.id,0)=0) then
new.id = Coalesce((Select max(id) from doc),0)+1;
begin</code></div></div><br />
حيث Doc اسم الجدول ويتم وضع هذه السطور في الحدث قبل الاضافة<br />
<br />
ولكن لا ينصح بها اذا كانت بياناتك اكبر من مليون ولازالت تنمو لان جملة Max على البيانات الكثيرة فيها بطئ<br />
<hr class="mycode_hr" />
بخصول حجم الصفحة في اعدادت ملف قاعدة البيانات دور مهم في اداء قاعدة البيانات<br />
<br />
<img src="https://www.ibexpert.net/ibe/uploads/Doc/dmiles841.gif" loading="lazy"  alt="[صورة: dmiles841.gif]" class="mycode_img" /><br />
<br />
<img src="https://www.ibexpert.net/ibe/uploads/Doc/dmiles842.gif" loading="lazy"  alt="[صورة: dmiles842.gif]" class="mycode_img" /><br />
<br />
عند انشاء قاعدة بيانات جديدة افتراضيا يتم وضعه على 16384 وعند انشاء قاعدة البيانات لا يمكن تغييره بعدها الا بانشاء نسخ احتياطي وعملية استرجاع<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">العديد من العمليات المستندة إلى الفهرس (تعمل الفهارس بشكل أسرع إذا تم تقليل عمق الفهرس)</span><ul class="mycode_list"><li>السجلات العريضة: مع وجود هياكل بيانات عريضة جدًا، أي مع العديد من الأعمدة الطويلة جدًا، يكون قراءة مجموعة البيانات أكثر فعالية. بالنسبة لمجموعات البيانات التي لا تلائم صفحة واحدة، يلزم قراءة عدة صفحات لاسترداد مجموعة بيانات واحدة. وينطبق الأمر نفسه على الكتابة، أي أن الجلب عبر عدة صفحات ضروري.<br />
</li>
<li>حقول blob الكبيرة: يتم تخزين البيانات واسترجاعها بكفاءة أكبر إذا كان عدد الصفحات التي تحتاج إلى جلبها أقل. مع البيانات blob الأكبر، تكون عمليات الكتابة والقراءة أكثر فعالية أيضًا، حيث يلزم على سبيل المثال 100 عملية وصول لعمود blob بحجم 100 كيلو بايت مع حجم صفحة 1 كيلو بايت. ولكن مع حجم صفحة 8 كيلو بايت، يلزم فقط 13 عملية.<br />
</li>
<li>حجم صفحة صغير: يكون حجم صفحة صغير كافياً إذا كان العديد من المعاملات يعيد فقط عددًا قليلاً من الأسطر. يمكن الوصول إلى هياكل الجداول النحيل مع صفحات قاعدة بيانات صغيرة بشكل أسرع للقراءة والكتابة حيث يلزم ذاكرة أقل، ويمكن الاحتفاظ بالمزيد من صفحات قاعدة البيانات في ذاكرة التخزين المؤقت. ومع ذلك، لا يُنصح باستخدام قاعدة بيانات بحجم صفحة أقل من 4096 على Windows، حيث أن هذا هو حجم كتلة Windows. لذلك، لا تقدم أحجام الصفحات الأصغر أي ميزات، حيث سيظل Windows يستخرج كتل 4 كيلو بايت.<br />
</li>
</ul>
<span style="font-weight: bold;" class="mycode_b">تأثير حجم صفحة قاعدة البيانات على ذاكرة التخزين المؤقت:</span><br />
<ul class="mycode_list"><li>يؤثر حجم صفحة قاعدة البيانات بشكل مباشر على مقدار ذاكرة التخزين المؤقت لقاعدة البيانات، والذي يؤثر على جميع النقاط المذكورة أعلاه. إذا تم تحديد حجم صفحة 16 كيلو بايت وحدد ذاكرة التخزين المؤقت لقاعدة بيانات خادم Firebird في firebird.conf بحد أقصى 128,000 صفحة، فسيتم توفير إجمالي ذاكرة تخزين مؤقت 2 غيغابايت لإيواء صفحات البيانات. لا يوفر نفس مواصفات ذاكرة التخزين المؤقت مع حجم صفحة 1 كيلو بايت سوى 180 ميغابايت من ذاكرة التخزين المؤقت. يُرجى الرجوع إلى تكوين الذاكرة للحصول على تفاصيل مواصفات ذاكرة التخزين المؤقت لخادم Firebird Superserver وخادم Classic.<br />
<br />
</li>
</ul>
<span style="font-weight: bold;" class="mycode_b">عوامل أخرى يجب مراعاتها:</span><br />
<ul class="mycode_list"><li>على الرغم من إمكانية إضاعة مساحة معينة بحجم صفحة كبير، إلا أنه لا ينبغي أن يكون هذا مشكلة خطيرة بأسعار الأجهزة الحالية، ويمكن أن يوفر مزايا أكبر في الأداء.<br />
</li>
<li>الطريقة الوحيدة لتغيير حجم صفحة قاعدة البيانات لاحقًا هي إجراء نسخة احتياطية لقاعدة البيانات يليها استعادة (بند قائمة IBExpert، الخدمات / استعادة قاعدة البيانات) حيث يمكن إعادة تعريف حجم صفحة قاعدة البيانات.<br />
</li>
</ul>
]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[الاجراءات الخارجية UDF في فايربيرد]]></title>
			<link>https://delphi4arab.net/forum/showthread.php?tid=12017</link>
			<pubDate>Thu, 28 Jul 2022 11:32:22 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://delphi4arab.net/forum/member.php?action=profile&uid=1588">Delphi4Us</a>]]></dc:creator>
			<guid isPermaLink="false">https://delphi4arab.net/forum/showthread.php?tid=12017</guid>
			<description><![CDATA[السلام عليكم ورحمة الله<br />
<br />
<br />
كلما زادت احتياجاتي في برامجي كلما زاد البحث عن حلول<br />
واكتشف ان هناك امور احيانا معقدة تحتاج الى اجراءات معقدة ووجدت ان الفايربيرد لديه شئ يسمى UDF <br />
طبعا ليس لدي المام كامل ولازلت اجرب وسوف اشرح فقط ما استطعت ان افهمه<br />
الاجراءات الخارجية هي موجودة بمكتبات خارجية DLL عند تنصيب الفايربيرد توجد مكتبة وحيدة مضمنة معه fbudf.dll وموجودة بالمجلد UDF<br />
<br />
في ملفات المساعدة يوجد سؤال لماذا الاجراءات الخارجية ولدينا الاجراءات المخزنة<br />
الاجراءات المخزنة تبقى قاصرة احيانا عن اجراء بعض الامور<br />
<br />
وهذا لمسته بنفسي فاحيانا يصبح الاجراء مركب ومتداخل ويعترض السيرفر انه غير قادر على تنفيد هذا التركيب المتداخل<br />
<br />
مثال<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>For Select d1,sun(E1* F4) ,S3,A5 from (Select H1,Sum(O4),sum(p2) From EmpTable);</code></div></div><br />
الاستعلام المركب اذا اضفت له فلترة بالعبارة Where مرتين مرة للعبارة Select الاولى ومرة للعبارة Select الثانية غالبا لن ينفذ السيرفر هذا الاستعلام<br />
<br />
<br />
ولتفادي هذه المشكلة يمكن اللجؤ الى الاجراءات الخارجية وتنفيذ العمليات المعقدة بشكل منفصل لتخفيف التعقيد على السيرفر في التداخل الذي يحصل عنده وايضا لترتيب وتقليل الشوشرة عليك ايضا في فصل العملية الى عدة عمليات<br />
<br />
طبعا لتستخدمها بداخل قاعدة البيانات يجب ان تعلن عن الاجراءات التي تريد ان تستخدمها وتضيفها الى قاعدة البيانات<br />
في برنامج IBexpert او اي برنامج ستجد تحت الجداول والقوادح والاجراءت المخزنة الاجراءات الخارجية UDF's<br />
<br />
<br />
<br />
<br />
<br />
<br />
<img src="https://delphi4arab.net/forum/attachment.php?aid=4663" loading="lazy"  alt="[صورة: attachment.php?aid=4663]" class="mycode_img" /><br />
<br />
يمكنك من هنا الاعلان عن الاجراء الخارجي مرئيا<br />
او فتح نافذة SQL-editor وكتابته يدويا مثل<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>DECLARE EXTERNAL FUNCTION ADDMONTH
    TIMESTAMP,
    INTEGER
RETURNS TIMESTAMP
ENTRY_POINT 'addMonth' MODULE_NAME 'fbudf';</code></div></div><br />
هذا اجراء لاضافة شهور معينة الى التاريخ<br />
<br />
ستلاحظ عند كتابة الاستعلامات انه يخبرك ان هذا الاجراء هو اجراء خارجي<br />
<br />
<img src="https://delphi4arab.net/forum/attachment.php?aid=4662" loading="lazy"  alt="[صورة: attachment.php?aid=4662]" class="mycode_img" /><br />
<br />
<br />
طبعا في الملجد UDF بمجلد سيرفر الفايربيرد ستجلد ملفات نصية SQL فيها بيان بكل الاجراءات الموجودة بالمكتبة والتي يمكن استخدامها<br />
<br />
بعد الاعلان عن الاجراء يمكنك استخدامه في الاستعلامات بشكل طبيعي مثل<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>select 
     addmonth(Emp.mdate,5)

from Emp
group by Emp.mdate</code></div></div><br />
هناك الكثير من الاجراءات التي يمكن استخدامها والكثير من المكتبات الي يمكن اضافتها<br />
<br />
هنا درس لمكتبات يمكن استخدامها تحوي العشرات وربما المئات من الاجراءات<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>https://blogs.embarcadero.com/user-defined-functions-with-interbase/</code></div></div><br />
و من هنا يمكنك تحميل  المكتبة المجانية<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>http://freeadhocudf.org/index_eng.html</code></div></div><br />
ومن هنا يمكنك مطالعة كل الاجراءات التي تحويها<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>http://freeadhocudf.org/documentation_english/dok_eng_inhalt.html</code></div></div><br />
<br />
لاحظ جزء بسيط من الاجراءات التي تحويها<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>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';</code></div></div><br />
مثال من الاجراء الاول على سبيل المثال<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>select  F_ARABIC2ROMAN(1) from Emp</code></div></div><br />
يعيد الحرف I من الحروف الانجليزية<br />
<br />
واعتقد بالامكان استخدام حتى مكتبات النظام ويندوز نفسه لانك لو لاحظت التالي<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>DECLARE EXTERNAL FUNCTION RDB&#36;GET_CONTEXT
    VARCHAR(80) NULL,
    VARCHAR(80) NULL
RETURNS VARCHAR(255) FREE_IT
ENTRY_POINT 'get_context' MODULE_NAME 'system_module';</code></div></div><br />
في الـ MODULE_NAME تكتب اسم المكتبة اللتي تريدها <br />
<br />
 كما ان بالامكان انشاء ملف DLL بالدلفي واستخدام الاجراءات التي فيه من داخل قاعدة البيانات او من قبل سيرفر الفايربيرد<br />
<br />
وهنا مثال على الاستخدام<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>https://firebirdsql.org/en/writing-udfs-for-interbase/</code></div></div><br />
<br />
وتبقى ملاحظة صغيرة عند اضافة مكتبات جديدة System32  او مجلد Bin للسيرفر اغلق برنامج ادارة قواعد البيانات وافتحه من جديد للتعرف عليها<br />
<br />
<img src="https://delphi4arab.net/forum/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
&nbsp;&nbsp;<a href="attachment.php?aid=4662" target="_blank" title="">111.jpg</a> (الحجم : 21.19 ك ب / التحميلات : 97)
<br />
<br />
<img src="https://delphi4arab.net/forum/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
&nbsp;&nbsp;<a href="attachment.php?aid=4663" target="_blank" title="">222.jpg</a> (الحجم : 26.62 ك ب / التحميلات : 102)
]]></description>
			<content:encoded><![CDATA[السلام عليكم ورحمة الله<br />
<br />
<br />
كلما زادت احتياجاتي في برامجي كلما زاد البحث عن حلول<br />
واكتشف ان هناك امور احيانا معقدة تحتاج الى اجراءات معقدة ووجدت ان الفايربيرد لديه شئ يسمى UDF <br />
طبعا ليس لدي المام كامل ولازلت اجرب وسوف اشرح فقط ما استطعت ان افهمه<br />
الاجراءات الخارجية هي موجودة بمكتبات خارجية DLL عند تنصيب الفايربيرد توجد مكتبة وحيدة مضمنة معه fbudf.dll وموجودة بالمجلد UDF<br />
<br />
في ملفات المساعدة يوجد سؤال لماذا الاجراءات الخارجية ولدينا الاجراءات المخزنة<br />
الاجراءات المخزنة تبقى قاصرة احيانا عن اجراء بعض الامور<br />
<br />
وهذا لمسته بنفسي فاحيانا يصبح الاجراء مركب ومتداخل ويعترض السيرفر انه غير قادر على تنفيد هذا التركيب المتداخل<br />
<br />
مثال<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>For Select d1,sun(E1* F4) ,S3,A5 from (Select H1,Sum(O4),sum(p2) From EmpTable);</code></div></div><br />
الاستعلام المركب اذا اضفت له فلترة بالعبارة Where مرتين مرة للعبارة Select الاولى ومرة للعبارة Select الثانية غالبا لن ينفذ السيرفر هذا الاستعلام<br />
<br />
<br />
ولتفادي هذه المشكلة يمكن اللجؤ الى الاجراءات الخارجية وتنفيذ العمليات المعقدة بشكل منفصل لتخفيف التعقيد على السيرفر في التداخل الذي يحصل عنده وايضا لترتيب وتقليل الشوشرة عليك ايضا في فصل العملية الى عدة عمليات<br />
<br />
طبعا لتستخدمها بداخل قاعدة البيانات يجب ان تعلن عن الاجراءات التي تريد ان تستخدمها وتضيفها الى قاعدة البيانات<br />
في برنامج IBexpert او اي برنامج ستجد تحت الجداول والقوادح والاجراءت المخزنة الاجراءات الخارجية UDF's<br />
<br />
<br />
<br />
<br />
<br />
<br />
<img src="https://delphi4arab.net/forum/attachment.php?aid=4663" loading="lazy"  alt="[صورة: attachment.php?aid=4663]" class="mycode_img" /><br />
<br />
يمكنك من هنا الاعلان عن الاجراء الخارجي مرئيا<br />
او فتح نافذة SQL-editor وكتابته يدويا مثل<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>DECLARE EXTERNAL FUNCTION ADDMONTH
    TIMESTAMP,
    INTEGER
RETURNS TIMESTAMP
ENTRY_POINT 'addMonth' MODULE_NAME 'fbudf';</code></div></div><br />
هذا اجراء لاضافة شهور معينة الى التاريخ<br />
<br />
ستلاحظ عند كتابة الاستعلامات انه يخبرك ان هذا الاجراء هو اجراء خارجي<br />
<br />
<img src="https://delphi4arab.net/forum/attachment.php?aid=4662" loading="lazy"  alt="[صورة: attachment.php?aid=4662]" class="mycode_img" /><br />
<br />
<br />
طبعا في الملجد UDF بمجلد سيرفر الفايربيرد ستجلد ملفات نصية SQL فيها بيان بكل الاجراءات الموجودة بالمكتبة والتي يمكن استخدامها<br />
<br />
بعد الاعلان عن الاجراء يمكنك استخدامه في الاستعلامات بشكل طبيعي مثل<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>select 
     addmonth(Emp.mdate,5)

from Emp
group by Emp.mdate</code></div></div><br />
هناك الكثير من الاجراءات التي يمكن استخدامها والكثير من المكتبات الي يمكن اضافتها<br />
<br />
هنا درس لمكتبات يمكن استخدامها تحوي العشرات وربما المئات من الاجراءات<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>https://blogs.embarcadero.com/user-defined-functions-with-interbase/</code></div></div><br />
و من هنا يمكنك تحميل  المكتبة المجانية<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>http://freeadhocudf.org/index_eng.html</code></div></div><br />
ومن هنا يمكنك مطالعة كل الاجراءات التي تحويها<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>http://freeadhocudf.org/documentation_english/dok_eng_inhalt.html</code></div></div><br />
<br />
لاحظ جزء بسيط من الاجراءات التي تحويها<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>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';</code></div></div><br />
مثال من الاجراء الاول على سبيل المثال<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>select  F_ARABIC2ROMAN(1) from Emp</code></div></div><br />
يعيد الحرف I من الحروف الانجليزية<br />
<br />
واعتقد بالامكان استخدام حتى مكتبات النظام ويندوز نفسه لانك لو لاحظت التالي<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>DECLARE EXTERNAL FUNCTION RDB&#36;GET_CONTEXT
    VARCHAR(80) NULL,
    VARCHAR(80) NULL
RETURNS VARCHAR(255) FREE_IT
ENTRY_POINT 'get_context' MODULE_NAME 'system_module';</code></div></div><br />
في الـ MODULE_NAME تكتب اسم المكتبة اللتي تريدها <br />
<br />
 كما ان بالامكان انشاء ملف DLL بالدلفي واستخدام الاجراءات التي فيه من داخل قاعدة البيانات او من قبل سيرفر الفايربيرد<br />
<br />
وهنا مثال على الاستخدام<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>https://firebirdsql.org/en/writing-udfs-for-interbase/</code></div></div><br />
<br />
وتبقى ملاحظة صغيرة عند اضافة مكتبات جديدة System32  او مجلد Bin للسيرفر اغلق برنامج ادارة قواعد البيانات وافتحه من جديد للتعرف عليها<br />
<br />
<img src="https://delphi4arab.net/forum/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
&nbsp;&nbsp;<a href="attachment.php?aid=4662" target="_blank" title="">111.jpg</a> (الحجم : 21.19 ك ب / التحميلات : 97)
<br />
<br />
<img src="https://delphi4arab.net/forum/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
&nbsp;&nbsp;<a href="attachment.php?aid=4663" target="_blank" title="">222.jpg</a> (الحجم : 26.62 ك ب / التحميلات : 102)
]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Smart Mobile Studio]]></title>
			<link>https://delphi4arab.net/forum/showthread.php?tid=11742</link>
			<pubDate>Tue, 04 Jan 2022 02:55:19 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://delphi4arab.net/forum/member.php?action=profile&uid=843">wadoud</a>]]></dc:creator>
			<guid isPermaLink="false">https://delphi4arab.net/forum/showthread.php?tid=11742</guid>
			<description><![CDATA[<img src="https://smartmobilestudio.com/wp-content/uploads/2018/07/IDEBrowser.png" loading="lazy"  alt="[صورة: IDEBrowser.png]" class="mycode_img" /><br />
<br />
<br />
<span style="color: #00369b;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b"><a href="https://smartmobilestudio.com/" target="_blank" rel="noopener" class="mycode_url">للتعرف أكثر من هنا</a></span></span>]]></description>
			<content:encoded><![CDATA[<img src="https://smartmobilestudio.com/wp-content/uploads/2018/07/IDEBrowser.png" loading="lazy"  alt="[صورة: IDEBrowser.png]" class="mycode_img" /><br />
<br />
<br />
<span style="color: #00369b;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b"><a href="https://smartmobilestudio.com/" target="_blank" rel="noopener" class="mycode_url">للتعرف أكثر من هنا</a></span></span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[شركة الفا كنترول تستعرض عضلاتها لمكوناتها]]></title>
			<link>https://delphi4arab.net/forum/showthread.php?tid=10349</link>
			<pubDate>Thu, 01 Aug 2019 08:43:37 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://delphi4arab.net/forum/member.php?action=profile&uid=1588">Delphi4Us</a>]]></dc:creator>
			<guid isPermaLink="false">https://delphi4arab.net/forum/showthread.php?tid=10349</guid>
			<description><![CDATA[هذه الشركة التي تقدم مجموعة من المكونات والسكين تقدم صفحة فيها مجموعة مختلفة من المشاريع الجاهزة للتنفيذ EXE والتي تظهر قدرات مكوناتها<br />
وطبعا هذه المكونات مرفقة معنا بالقسم هنا للتثبيت<br />
<br />
رابط الصفحة التي فيها الاستعراض<br />
<br />
<a href="http://www.alphaskins.com/ademos.php" target="_blank" rel="noopener" class="mycode_url">http://www.alphaskins.com/ademos.php</a><br />
<br />
<br />
في المثال هنا وطبعا لا يحتاج ان تكون مثبت دلفي للتجربة <br />
<br />
<a href="http://www.alphaskins.com/sfiles/askindemo.zip" target="_blank" rel="noopener" class="mycode_url">http://www.alphaskins.com/sfiles/askindemo.zip</a><br />
<br />
<br />
ستجدون خيار فوق كما بالصورة تحت  Custom DPI هو للتحكم بحجم البرنامج واعطاء برنامجك حجم ليتناسب مع احجام الشاشة<br />
بينما يلهث الاخرون حول حلول لتناسب حجم الشاشة يقدم لكم هذا في الدلفي على طبق من الذهب .<br />
لانك كمبرمج دلفي وباسكال تعتبر مبرمج ذهبي ونادر ايضا .<br />
جربوه واعطوني انطباعكم ورأيكم<br />
<br />
<img src="http://www.alphaskins.com/sshots/amegademo.png" loading="lazy"  alt="[صورة: amegademo.png]" class="mycode_img" /><br />
<br />
<br />
<br />
في مثال اخر تظهر بشكل بسيط وسهل وظريف محتوى قاعدة البيانات مع صورة السجل في شكل تلميح Hint بمجرد مرور الفأرة<br />
<br />
<img src="http://www.alphaskins.com/sfiles/demos/sshots/dbhints.png" loading="lazy"  alt="[صورة: dbhints.png]" class="mycode_img" /><br />
<br />
<br />
<br />
<br />
كما تستعرض امكانيات حتى ادواتها القياسية التي خرجت بها عن المألوف مثلا ازرار لها ازرار صغيرة تحمل ارقام هي مفيدة مثلا زر يحمل عنوان الاصناف له زر او تلميح فيه رقم 560 اي عدد الاصناف<br />
<br />
<img src="http://www.alphaskins.com/sshots/a118.png" loading="lazy"  alt="[صورة: a118.png]" class="mycode_img" /><br />
<br />
<br />
كما انها لم تنسى اعطائكم التركيز على الشئ الذي تعملون عليه وتشويش الخلفية او حتى اعطائكم رسائل مختلفة متميزة للتفاعل<br />
حتى الشريط العلوي للنافذة تحت تصرفك لاظافة ما تريد من ازرار وقوائم كما هنا بالصورة تحت العنوان Show panel<br />
<br />
<img src="http://www.alphaskins.com/sfiles/demos/sshots/splitviewdemo.png" loading="lazy"  alt="[صورة: splitviewdemo.png]" class="mycode_img" /><br />
<br />
<br />
هل تعتقدون ان المكونات تأتي بشكل جامد وتابث ، لا طبعا مثلا عندكم المكون Tap يأتي بخيارات كثيرة حتى تتلائم مع العمل الذي تقوم به<br />
<br />
<img src="http://www.alphaskins.com/sfiles/demos/sshots/spagectrldemo.jpg" loading="lazy"  alt="[صورة: spagectrldemo.jpg]" class="mycode_img" /><br />
<br />
كما تقدم Popup Control  التي تعطيك ميزات رائعة في تصميم واجهة مشروعك وتوفر مساحات كبيرة وايضا دعم من اليمين لليسار للمكونات<br />
<br />
 
<br />
<img src="https://delphi4arab.net/forum/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
&nbsp;&nbsp;<a href="attachment.php?aid=4052" target="_blank" title="">13.jpg</a> (الحجم : 159.32 ك ب / التحميلات : 19)
<br />
<br />
الحديث عنها يطول وافضل الاكتشاف الفردي لها]]></description>
			<content:encoded><![CDATA[هذه الشركة التي تقدم مجموعة من المكونات والسكين تقدم صفحة فيها مجموعة مختلفة من المشاريع الجاهزة للتنفيذ EXE والتي تظهر قدرات مكوناتها<br />
وطبعا هذه المكونات مرفقة معنا بالقسم هنا للتثبيت<br />
<br />
رابط الصفحة التي فيها الاستعراض<br />
<br />
<a href="http://www.alphaskins.com/ademos.php" target="_blank" rel="noopener" class="mycode_url">http://www.alphaskins.com/ademos.php</a><br />
<br />
<br />
في المثال هنا وطبعا لا يحتاج ان تكون مثبت دلفي للتجربة <br />
<br />
<a href="http://www.alphaskins.com/sfiles/askindemo.zip" target="_blank" rel="noopener" class="mycode_url">http://www.alphaskins.com/sfiles/askindemo.zip</a><br />
<br />
<br />
ستجدون خيار فوق كما بالصورة تحت  Custom DPI هو للتحكم بحجم البرنامج واعطاء برنامجك حجم ليتناسب مع احجام الشاشة<br />
بينما يلهث الاخرون حول حلول لتناسب حجم الشاشة يقدم لكم هذا في الدلفي على طبق من الذهب .<br />
لانك كمبرمج دلفي وباسكال تعتبر مبرمج ذهبي ونادر ايضا .<br />
جربوه واعطوني انطباعكم ورأيكم<br />
<br />
<img src="http://www.alphaskins.com/sshots/amegademo.png" loading="lazy"  alt="[صورة: amegademo.png]" class="mycode_img" /><br />
<br />
<br />
<br />
في مثال اخر تظهر بشكل بسيط وسهل وظريف محتوى قاعدة البيانات مع صورة السجل في شكل تلميح Hint بمجرد مرور الفأرة<br />
<br />
<img src="http://www.alphaskins.com/sfiles/demos/sshots/dbhints.png" loading="lazy"  alt="[صورة: dbhints.png]" class="mycode_img" /><br />
<br />
<br />
<br />
<br />
كما تستعرض امكانيات حتى ادواتها القياسية التي خرجت بها عن المألوف مثلا ازرار لها ازرار صغيرة تحمل ارقام هي مفيدة مثلا زر يحمل عنوان الاصناف له زر او تلميح فيه رقم 560 اي عدد الاصناف<br />
<br />
<img src="http://www.alphaskins.com/sshots/a118.png" loading="lazy"  alt="[صورة: a118.png]" class="mycode_img" /><br />
<br />
<br />
كما انها لم تنسى اعطائكم التركيز على الشئ الذي تعملون عليه وتشويش الخلفية او حتى اعطائكم رسائل مختلفة متميزة للتفاعل<br />
حتى الشريط العلوي للنافذة تحت تصرفك لاظافة ما تريد من ازرار وقوائم كما هنا بالصورة تحت العنوان Show panel<br />
<br />
<img src="http://www.alphaskins.com/sfiles/demos/sshots/splitviewdemo.png" loading="lazy"  alt="[صورة: splitviewdemo.png]" class="mycode_img" /><br />
<br />
<br />
هل تعتقدون ان المكونات تأتي بشكل جامد وتابث ، لا طبعا مثلا عندكم المكون Tap يأتي بخيارات كثيرة حتى تتلائم مع العمل الذي تقوم به<br />
<br />
<img src="http://www.alphaskins.com/sfiles/demos/sshots/spagectrldemo.jpg" loading="lazy"  alt="[صورة: spagectrldemo.jpg]" class="mycode_img" /><br />
<br />
كما تقدم Popup Control  التي تعطيك ميزات رائعة في تصميم واجهة مشروعك وتوفر مساحات كبيرة وايضا دعم من اليمين لليسار للمكونات<br />
<br />
 
<br />
<img src="https://delphi4arab.net/forum/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
&nbsp;&nbsp;<a href="attachment.php?aid=4052" target="_blank" title="">13.jpg</a> (الحجم : 159.32 ك ب / التحميلات : 19)
<br />
<br />
الحديث عنها يطول وافضل الاكتشاف الفردي لها]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[خبير تثبيت حزم دلفي يعمل على جميع النسخ]]></title>
			<link>https://delphi4arab.net/forum/showthread.php?tid=10262</link>
			<pubDate>Fri, 21 Jun 2019 23:16:42 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://delphi4arab.net/forum/member.php?action=profile&uid=1588">Delphi4Us</a>]]></dc:creator>
			<guid isPermaLink="false">https://delphi4arab.net/forum/showthread.php?tid=10262</guid>
			<description><![CDATA[<img src="http://www.davidghoyle.co.uk/WordPress/wp-content/uploads/2018/04/ExpertMgr.png" loading="lazy"  alt="[صورة: ExpertMgr.png]" class="mycode_img" /><br />
<br />
<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>https://www.davidghoyle.co.uk/WordPress/?page_id=1361</code></div></div>]]></description>
			<content:encoded><![CDATA[<img src="http://www.davidghoyle.co.uk/WordPress/wp-content/uploads/2018/04/ExpertMgr.png" loading="lazy"  alt="[صورة: ExpertMgr.png]" class="mycode_img" /><br />
<br />
<br />
<br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>https://www.davidghoyle.co.uk/WordPress/?page_id=1361</code></div></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Package Viewer]]></title>
			<link>https://delphi4arab.net/forum/showthread.php?tid=10260</link>
			<pubDate>Fri, 21 Jun 2019 23:05:51 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://delphi4arab.net/forum/member.php?action=profile&uid=1588">Delphi4Us</a>]]></dc:creator>
			<guid isPermaLink="false">https://delphi4arab.net/forum/showthread.php?tid=10260</guid>
			<description><![CDATA[<img src="http://www.davidghoyle.co.uk/WordPress/wp-content/uploads/2016/05/DGHPackageViewer.png" loading="lazy"  alt="[صورة: DGHPackageViewer.png]" class="mycode_img" /><br />
<br />
<br />
<br />
<blockquote class="mycode_quote"><cite>إقتباس :</cite><a href="https://www.davidghoyle.co.uk/WordPress/?page_id=1299" target="_blank" rel="noopener" class="mycode_url">https://www.davidghoyle.co.uk/WordPress/?page_id=1299</a></blockquote>
<br />
<br />
<div style="text-align: left;" class="mycode_align">Download</div>
<div style="text-align: left;" class="mycode_align"><span style="color: #444444;" class="mycode_color">[size=small]You can download the code and BPL files for this Open Tools API project below for RAD Studio 2006 to XE2, XE7, XE10 and XE10.1.[/size]</span></div>
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>http://www.davidghoyle.co.uk/WordPress/wp-content/uploads/2016/05/DGHPackageViewer-1.0c-2006-XE10.2.zip</code></div></div><br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>https://github.com/DGH2112/Package-Viewer</code></div></div>]]></description>
			<content:encoded><![CDATA[<img src="http://www.davidghoyle.co.uk/WordPress/wp-content/uploads/2016/05/DGHPackageViewer.png" loading="lazy"  alt="[صورة: DGHPackageViewer.png]" class="mycode_img" /><br />
<br />
<br />
<br />
<blockquote class="mycode_quote"><cite>إقتباس :</cite><a href="https://www.davidghoyle.co.uk/WordPress/?page_id=1299" target="_blank" rel="noopener" class="mycode_url">https://www.davidghoyle.co.uk/WordPress/?page_id=1299</a></blockquote>
<br />
<br />
<div style="text-align: left;" class="mycode_align">Download</div>
<div style="text-align: left;" class="mycode_align"><span style="color: #444444;" class="mycode_color">[size=small]You can download the code and BPL files for this Open Tools API project below for RAD Studio 2006 to XE2, XE7, XE10 and XE10.1.[/size]</span></div>
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>http://www.davidghoyle.co.uk/WordPress/wp-content/uploads/2016/05/DGHPackageViewer-1.0c-2006-XE10.2.zip</code></div></div><br />
<div class="codeblock"><div class="title">كود :</div><div class="body" dir="ltr"><code>https://github.com/DGH2112/Package-Viewer</code></div></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Graphics32_RBC]]></title>
			<link>https://delphi4arab.net/forum/showthread.php?tid=10004</link>
			<pubDate>Thu, 17 Jan 2019 09:54:22 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://delphi4arab.net/forum/member.php?action=profile&uid=1588">Delphi4Us</a>]]></dc:creator>
			<guid isPermaLink="false">https://delphi4arab.net/forum/showthread.php?tid=10004</guid>
			<description><![CDATA[<blockquote class="mycode_quote"><cite>إقتباس :</cite><a href="https://github.com/uparlayan/Graphics32_RBC" target="_blank" rel="noopener" class="mycode_url">https://github.com/uparlayan/Graphics32_RBC</a></blockquote>
<br />
مكونات مجانية<br />
<br />
<img src="https://user-images.githubusercontent.com/24311198/40005929-d2840ed0-57a1-11e8-86c7-92c325726bd5.gif" loading="lazy"  alt="[صورة: 40005929-d2840ed0-57a1-11e8-86c7-92c325726bd5.gif]" class="mycode_img" />]]></description>
			<content:encoded><![CDATA[<blockquote class="mycode_quote"><cite>إقتباس :</cite><a href="https://github.com/uparlayan/Graphics32_RBC" target="_blank" rel="noopener" class="mycode_url">https://github.com/uparlayan/Graphics32_RBC</a></blockquote>
<br />
مكونات مجانية<br />
<br />
<img src="https://user-images.githubusercontent.com/24311198/40005929-d2840ed0-57a1-11e8-86c7-92c325726bd5.gif" loading="lazy"  alt="[صورة: 40005929-d2840ed0-57a1-11e8-86c7-92c325726bd5.gif]" class="mycode_img" />]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[ماهذا البرنامج وماهي وظيفته]]></title>
			<link>https://delphi4arab.net/forum/showthread.php?tid=9980</link>
			<pubDate>Sun, 30 Dec 2018 19:00:18 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://delphi4arab.net/forum/member.php?action=profile&uid=1588">Delphi4Us</a>]]></dc:creator>
			<guid isPermaLink="false">https://delphi4arab.net/forum/showthread.php?tid=9980</guid>
			<description><![CDATA[لا يظهر اسمه من يعرف ماهو<br />
<br />
حيث يبدو انه يعطي معلومات عن المكونات<br />
<br />
<br />
<img src="https://i.imgur.com/z0BuxqO.jpg" loading="lazy"  alt="[صورة: z0BuxqO.jpg]" class="mycode_img" />]]></description>
			<content:encoded><![CDATA[لا يظهر اسمه من يعرف ماهو<br />
<br />
حيث يبدو انه يعطي معلومات عن المكونات<br />
<br />
<br />
<img src="https://i.imgur.com/z0BuxqO.jpg" loading="lazy"  alt="[صورة: z0BuxqO.jpg]" class="mycode_img" />]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[TDUMP]]></title>
			<link>https://delphi4arab.net/forum/showthread.php?tid=9754</link>
			<pubDate>Fri, 21 Sep 2018 01:57:14 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://delphi4arab.net/forum/member.php?action=profile&uid=4226">AX302</a>]]></dc:creator>
			<guid isPermaLink="false">https://delphi4arab.net/forum/showthread.php?tid=9754</guid>
			<description><![CDATA[السلام عليكم <br />
<br />
كما في العنوان Embar9adero (Turbo Dump)  TDUMP , اداة تقوم بعمل دامب للملفات <br />
<br />
صورة للاداة <br />
<br />
<br />
<img src="https://i.imgur.com/cJcQHtQ.png" loading="lazy"  alt="[صورة: cJcQHtQ.png]" class="mycode_img" /><br />
<br />
<br />
تجدها في مسار تثبيث الدلفي <br />
<br />
وهنا صورة للملف الناتج <br />
<br />
<img src="https://i.imgur.com/S7Wy51S.png" loading="lazy"  alt="[صورة: S7Wy51S.png]" class="mycode_img" /><br />
<br />
<br />
من الموقع الرسمي <br />
<br />
<div class="codeblock phpcodeblock"><div class="title">PHP كود :</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">http</span><span style="color: #007700">:</span><span style="color: #FF8000">//docwiki.embarcadero.com/RADStudio/Tokyo/en/TDUMP.EXE,_the_File_Dumping_Utility&nbsp;<br /></span></code></div></div></div>]]></description>
			<content:encoded><![CDATA[السلام عليكم <br />
<br />
كما في العنوان Embar9adero (Turbo Dump)  TDUMP , اداة تقوم بعمل دامب للملفات <br />
<br />
صورة للاداة <br />
<br />
<br />
<img src="https://i.imgur.com/cJcQHtQ.png" loading="lazy"  alt="[صورة: cJcQHtQ.png]" class="mycode_img" /><br />
<br />
<br />
تجدها في مسار تثبيث الدلفي <br />
<br />
وهنا صورة للملف الناتج <br />
<br />
<img src="https://i.imgur.com/S7Wy51S.png" loading="lazy"  alt="[صورة: S7Wy51S.png]" class="mycode_img" /><br />
<br />
<br />
من الموقع الرسمي <br />
<br />
<div class="codeblock phpcodeblock"><div class="title">PHP كود :</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">http</span><span style="color: #007700">:</span><span style="color: #FF8000">//docwiki.embarcadero.com/RADStudio/Tokyo/en/TDUMP.EXE,_the_File_Dumping_Utility&nbsp;<br /></span></code></div></div></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[EK RTF report]]></title>
			<link>https://delphi4arab.net/forum/showthread.php?tid=9527</link>
			<pubDate>Wed, 13 Jun 2018 19:07:03 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://delphi4arab.net/forum/member.php?action=profile&uid=1588">Delphi4Us</a>]]></dc:creator>
			<guid isPermaLink="false">https://delphi4arab.net/forum/showthread.php?tid=9527</guid>
			<description><![CDATA[<div class="codeblock phpcodeblock"><div class="title">PHP كود :</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">http</span><span style="color: #007700">:</span><span style="color: #FF8000">//www.128byte.ru/&nbsp;<br /></span></code></div></div></div><br />
<br />
يسمح تقرير EK RTF باستخدام كل إمكانيات MS Word لإنشاء التقارير ومعاينتها وتحريرها وطباعتها من تطبيقات دلفي.<br />
كيفية استخدامها:<ul class="mycode_list"><li>إنشاء قالب التقرير<br />
</li>
<li>احفظه بتنسيق RTF<br />
</li>
<li>تحضير البيانات في التطبيق<br />
</li>
<li>توليد تقرير باستخدام مكون Ek RTF<br />
</li>
</ul>
الخصائص الرئيسية:<ul class="mycode_list"><li>تصميم قالب مرئي مع جميع ميزات MS Word<br />
</li>
<li>يعمل مع أي نوع من مجموعة البيانات جيدًا مثل البيانات غير المنضمة<br />
</li>
<li>وظائف قوية محددة للمستخدم<br />
</li>
</ul>
<img src="http://www.128byte.ru/assets/templates/site/images/ekrtf_how_it_works.png" loading="lazy"  alt="[صورة: ekrtf_how_it_works.png]" class="mycode_img" /><br />
<br />
<img src="http://www.128byte.ru/assets/templates/site/images/article/001_form.png" loading="lazy"  alt="[صورة: 001_form.png]" class="mycode_img" /><br />
<br />
الكود لانشاء التقرير<br />
<div class="codeblock phpcodeblock"><div class="title">PHP كود :</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">procedure&nbsp;TForm1</span><span style="color: #007700">.</span><span style="color: #0000BB">Button2Click</span><span style="color: #007700">(</span><span style="color: #0000BB">Sender</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">TObject</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">begin<br />&nbsp; </span><span style="color: #007700">(*&nbsp;</span><span style="color: #0000BB">check&nbsp;report&nbsp;template&nbsp;file&nbsp;</span><span style="color: #007700">*)<br />&nbsp;</span><span style="color: #0000BB"> if&nbsp;not&nbsp;FileExists</span><span style="color: #007700">(</span><span style="color: #0000BB">EkRTF1</span><span style="color: #007700">.</span><span style="color: #0000BB">InFile</span><span style="color: #007700">)&nbsp;</span><span style="color: #0000BB">then<br />&nbsp; begin<br />&nbsp; &nbsp; if&nbsp;RTFDialog</span><span style="color: #007700">.</span><span style="color: #0000BB">Execute&nbsp;then&nbsp;begin<br />&nbsp; &nbsp; &nbsp; &nbsp;EkRTF1</span><span style="color: #007700">.</span><span style="color: #0000BB">InFile&nbsp;</span><span style="color: #007700">:=&nbsp;</span><span style="color: #0000BB">RTFDialog</span><span style="color: #007700">.</span><span style="color: #0000BB">FileName</span><span style="color: #007700">;<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; end&nbsp;</span><span style="color: #007700">else&nbsp;exit;<br />&nbsp;</span><span style="color: #0000BB"> end</span><span style="color: #007700">;<br />&nbsp;</span><span style="color: #0000BB"> </span><span style="color: #007700">(*&nbsp;</span><span style="color: #0000BB">create&nbsp;report&nbsp;</span><span style="color: #007700">*)<br />&nbsp;</span><span style="color: #0000BB"> EkRTF1</span><span style="color: #007700">.</span><span style="color: #0000BB">ClearVars</span><span style="color: #007700">;<br />&nbsp;</span><span style="color: #0000BB"> EkRTF1</span><span style="color: #007700">.</span><span style="color: #0000BB">CreateVar</span><span style="color: #007700">(</span><span style="color: #DD0000">'database_name'</span><span style="color: #007700">,</span><span style="color: #0000BB">dbname</span><span style="color: #007700">);<br />&nbsp;</span><span style="color: #0000BB"> EkRtf1</span><span style="color: #007700">.</span><span style="color: #0000BB">ExecuteOpen</span><span style="color: #007700">([</span><span style="color: #0000BB">Customers</span><span style="color: #007700">],</span><span style="color: #0000BB">SW_SHOW</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">end</span><span style="color: #007700">;&nbsp;<br /></span></code></div></div></div>]]></description>
			<content:encoded><![CDATA[<div class="codeblock phpcodeblock"><div class="title">PHP كود :</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">http</span><span style="color: #007700">:</span><span style="color: #FF8000">//www.128byte.ru/&nbsp;<br /></span></code></div></div></div><br />
<br />
يسمح تقرير EK RTF باستخدام كل إمكانيات MS Word لإنشاء التقارير ومعاينتها وتحريرها وطباعتها من تطبيقات دلفي.<br />
كيفية استخدامها:<ul class="mycode_list"><li>إنشاء قالب التقرير<br />
</li>
<li>احفظه بتنسيق RTF<br />
</li>
<li>تحضير البيانات في التطبيق<br />
</li>
<li>توليد تقرير باستخدام مكون Ek RTF<br />
</li>
</ul>
الخصائص الرئيسية:<ul class="mycode_list"><li>تصميم قالب مرئي مع جميع ميزات MS Word<br />
</li>
<li>يعمل مع أي نوع من مجموعة البيانات جيدًا مثل البيانات غير المنضمة<br />
</li>
<li>وظائف قوية محددة للمستخدم<br />
</li>
</ul>
<img src="http://www.128byte.ru/assets/templates/site/images/ekrtf_how_it_works.png" loading="lazy"  alt="[صورة: ekrtf_how_it_works.png]" class="mycode_img" /><br />
<br />
<img src="http://www.128byte.ru/assets/templates/site/images/article/001_form.png" loading="lazy"  alt="[صورة: 001_form.png]" class="mycode_img" /><br />
<br />
الكود لانشاء التقرير<br />
<div class="codeblock phpcodeblock"><div class="title">PHP كود :</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">procedure&nbsp;TForm1</span><span style="color: #007700">.</span><span style="color: #0000BB">Button2Click</span><span style="color: #007700">(</span><span style="color: #0000BB">Sender</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">TObject</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">begin<br />&nbsp; </span><span style="color: #007700">(*&nbsp;</span><span style="color: #0000BB">check&nbsp;report&nbsp;template&nbsp;file&nbsp;</span><span style="color: #007700">*)<br />&nbsp;</span><span style="color: #0000BB"> if&nbsp;not&nbsp;FileExists</span><span style="color: #007700">(</span><span style="color: #0000BB">EkRTF1</span><span style="color: #007700">.</span><span style="color: #0000BB">InFile</span><span style="color: #007700">)&nbsp;</span><span style="color: #0000BB">then<br />&nbsp; begin<br />&nbsp; &nbsp; if&nbsp;RTFDialog</span><span style="color: #007700">.</span><span style="color: #0000BB">Execute&nbsp;then&nbsp;begin<br />&nbsp; &nbsp; &nbsp; &nbsp;EkRTF1</span><span style="color: #007700">.</span><span style="color: #0000BB">InFile&nbsp;</span><span style="color: #007700">:=&nbsp;</span><span style="color: #0000BB">RTFDialog</span><span style="color: #007700">.</span><span style="color: #0000BB">FileName</span><span style="color: #007700">;<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; end&nbsp;</span><span style="color: #007700">else&nbsp;exit;<br />&nbsp;</span><span style="color: #0000BB"> end</span><span style="color: #007700">;<br />&nbsp;</span><span style="color: #0000BB"> </span><span style="color: #007700">(*&nbsp;</span><span style="color: #0000BB">create&nbsp;report&nbsp;</span><span style="color: #007700">*)<br />&nbsp;</span><span style="color: #0000BB"> EkRTF1</span><span style="color: #007700">.</span><span style="color: #0000BB">ClearVars</span><span style="color: #007700">;<br />&nbsp;</span><span style="color: #0000BB"> EkRTF1</span><span style="color: #007700">.</span><span style="color: #0000BB">CreateVar</span><span style="color: #007700">(</span><span style="color: #DD0000">'database_name'</span><span style="color: #007700">,</span><span style="color: #0000BB">dbname</span><span style="color: #007700">);<br />&nbsp;</span><span style="color: #0000BB"> EkRtf1</span><span style="color: #007700">.</span><span style="color: #0000BB">ExecuteOpen</span><span style="color: #007700">([</span><span style="color: #0000BB">Customers</span><span style="color: #007700">],</span><span style="color: #0000BB">SW_SHOW</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">end</span><span style="color: #007700">;&nbsp;<br /></span></code></div></div></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[TMS Aurelius]]></title>
			<link>https://delphi4arab.net/forum/showthread.php?tid=9526</link>
			<pubDate>Wed, 13 Jun 2018 18:55:54 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://delphi4arab.net/forum/member.php?action=profile&uid=1588">Delphi4Us</a>]]></dc:creator>
			<guid isPermaLink="false">https://delphi4arab.net/forum/showthread.php?tid=9526</guid>
			<description><![CDATA[هذا الذي لن استطيع ان اذكر كل خصائصه او مهامه وانما ما فهمته او بعض مما فهمته فقط<br />
ويبدو يستحق النشر والتعريف به<br />
<div class="codeblock phpcodeblock"><div class="title">PHP كود :</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">https</span><span style="color: #007700">:</span><span style="color: #FF8000">//www.tmssoftware.com/site/aureliusblog.asp&nbsp;<br /></span></code></div></div></div><br />
يمكنك من استخدام ثقنية Linq او شئ شبيه بها في عملية البحث بالبيانات<br />
<div class="codeblock phpcodeblock"><div class="title">PHP كود :</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">Manager</span><span style="color: #007700">.</span><span style="color: #0000BB">Find</span><span style="color: #007700">&lt;</span><span style="color: #0000BB">TOrder</span><span style="color: #007700">&gt;&nbsp;</span><span style="color: #0000BB"> <br />&nbsp; </span><span style="color: #007700">.</span><span style="color: #0000BB">CreateAlias</span><span style="color: #007700">(</span><span style="color: #DD0000">'OrderDetails'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'d'</span><span style="color: #007700">)&nbsp;</span><span style="color: #0000BB"> <br />&nbsp; </span><span style="color: #007700">.</span><span style="color: #0000BB">Select</span><span style="color: #007700">(</span><span style="color: #0000BB">TProjections</span><span style="color: #007700">.</span><span style="color: #0000BB">ProjectionList&nbsp; <br />&nbsp; &nbsp; </span><span style="color: #007700">.</span><span style="color: #0000BB">Add</span><span style="color: #007700">(</span><span style="color: #0000BB">Linq</span><span style="color: #007700">[</span><span style="color: #DD0000">'OrderDate'</span><span style="color: #007700">].</span><span style="color: #0000BB">Year</span><span style="color: #007700">.</span><span style="color: #0000BB">Group</span><span style="color: #007700">.</span><span style="color: #0000BB">As_</span><span style="color: #007700">(</span><span style="color: #DD0000">'Group'</span><span style="color: #007700">))&nbsp;</span><span style="color: #0000BB"> <br />&nbsp; &nbsp; </span><span style="color: #007700">.</span><span style="color: #0000BB">Add</span><span style="color: #007700">((</span><span style="color: #0000BB">Linq</span><span style="color: #007700">[</span><span style="color: #DD0000">'d.UnitPrice'</span><span style="color: #007700">]&nbsp;*&nbsp;</span><span style="color: #0000BB">Linq</span><span style="color: #007700">[</span><span style="color: #DD0000">'d.Quantity'</span><span style="color: #007700">]).</span><span style="color: #0000BB">Sum</span><span style="color: #007700">.</span><span style="color: #0000BB">As_</span><span style="color: #007700">(</span><span style="color: #DD0000">'Value'</span><span style="color: #007700">))&nbsp;</span><span style="color: #0000BB"> <br />&nbsp; </span><span style="color: #007700">)&nbsp;</span><span style="color: #0000BB"> <br />&nbsp; </span><span style="color: #007700">.</span><span style="color: #0000BB">Where</span><span style="color: #007700">(</span><span style="color: #0000BB">Linq</span><span style="color: #007700">[</span><span style="color: #DD0000">'OrderDate'</span><span style="color: #007700">].</span><span style="color: #0000BB">Year</span><span style="color: #007700">.</span><span style="color: #0000BB">_In</span><span style="color: #007700">([</span><span style="color: #0000BB">1997</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">1998</span><span style="color: #007700">]))&nbsp;</span><span style="color: #0000BB"> <br />&nbsp; </span><span style="color: #007700">.</span><span style="color: #0000BB">OrderBy</span><span style="color: #007700">(</span><span style="color: #DD0000">'Value'</span><span style="color: #007700">)&nbsp;</span><span style="color: #0000BB"> &nbsp;<br /></span></code></div></div></div><br />
وايضا انشاء الكلاسس والبحث فيها<br />
<div class="codeblock phpcodeblock"><div class="title">PHP كود :</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">type&nbsp; <br />&nbsp; TContact&nbsp;</span><span style="color: #007700">=&nbsp;class&nbsp;</span><span style="color: #0000BB"> <br />&nbsp; private&nbsp; <br />&nbsp; &nbsp; FId</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">integer</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB"> <br />&nbsp; &nbsp; FName</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">string</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB"> <br />&nbsp; &nbsp; FCountry</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">TCountry</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB"> <br />&nbsp; public&nbsp; <br />&nbsp; &nbsp; property&nbsp;Id</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">integer&nbsp;read&nbsp;FId&nbsp;write&nbsp;FId</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB"> <br />&nbsp; &nbsp; property&nbsp;Name</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">string&nbsp;read&nbsp;FName&nbsp;write&nbsp;FName</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB"> <br />&nbsp; &nbsp; property&nbsp;Country</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">TCountry&nbsp;read&nbsp;FCountry&nbsp;write&nbsp;FCountry</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB"> <br />&nbsp; end</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB"> &nbsp;<br /></span></code></div></div></div><br />
<div class="codeblock phpcodeblock"><div class="title">PHP كود :</div><div class="body"><div dir="ltr"><code><span style="color: #FF8000">//&nbsp;Get&nbsp;all&nbsp;contacts&nbsp; <br /></span><span style="color: #0000BB">MyContacts&nbsp;</span><span style="color: #007700">:=&nbsp;</span><span style="color: #0000BB">Manager</span><span style="color: #007700">.</span><span style="color: #0000BB">Find</span><span style="color: #007700">&lt;</span><span style="color: #0000BB">TContact</span><span style="color: #007700">&gt;.List;&nbsp;</span><span style="color: #0000BB"> <br />&nbsp; <br /></span><span style="color: #FF8000">//&nbsp;Get&nbsp;name&nbsp;of&nbsp;country&nbsp;of&nbsp;first&nbsp;contact:&nbsp; <br /></span><span style="color: #0000BB">FirstContactCountryName&nbsp;</span><span style="color: #007700">:=&nbsp;</span><span style="color: #0000BB">MyContacts</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">].</span><span style="color: #0000BB">Country</span><span style="color: #007700">.</span><span style="color: #0000BB">Name</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB"> &nbsp;<br /></span></code></div></div></div><br />
اي انك لم تعد في حاجة الى استخدام جمل الاستعلام التقليدية مثل<br />
<br />
<div class="codeblock phpcodeblock"><div class="title">PHP كود :</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">SELECT&nbsp;A</span><span style="color: #007700">.</span><span style="color: #0000BB">ID&nbsp;</span><span style="color: #007700">AS&nbsp;</span><span style="color: #0000BB">A_ID</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">A</span><span style="color: #007700">.</span><span style="color: #0000BB">NAME&nbsp;</span><span style="color: #007700">AS&nbsp;</span><span style="color: #0000BB">A_NAME</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">A</span><span style="color: #007700">.</span><span style="color: #0000BB">COUNTRY_ID&nbsp;</span><span style="color: #007700">AS&nbsp;</span><span style="color: #0000BB">A_COUNTRY_ID</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">B</span><span style="color: #007700">.</span><span style="color: #0000BB">ID&nbsp;</span><span style="color: #007700">AS&nbsp;</span><span style="color: #0000BB">B_ID</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">B</span><span style="color: #007700">.</span><span style="color: #0000BB">NAME&nbsp;</span><span style="color: #007700">AS&nbsp;</span><span style="color: #0000BB">B_NAME<br />FROM&nbsp;CONTACT&nbsp;A&nbsp;LEFT&nbsp;JOIN&nbsp;COUNTRY&nbsp;B&nbsp;ON&nbsp;</span><span style="color: #007700">(</span><span style="color: #0000BB">B</span><span style="color: #007700">.</span><span style="color: #0000BB">ID&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">A</span><span style="color: #007700">.</span><span style="color: #0000BB">COUNTRY_ID</span><span style="color: #007700">)&nbsp;<br /></span></code></div></div></div><br />
مع امور اخرى كثيرة يمكن مراجعتها بالرابط فوق]]></description>
			<content:encoded><![CDATA[هذا الذي لن استطيع ان اذكر كل خصائصه او مهامه وانما ما فهمته او بعض مما فهمته فقط<br />
ويبدو يستحق النشر والتعريف به<br />
<div class="codeblock phpcodeblock"><div class="title">PHP كود :</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">https</span><span style="color: #007700">:</span><span style="color: #FF8000">//www.tmssoftware.com/site/aureliusblog.asp&nbsp;<br /></span></code></div></div></div><br />
يمكنك من استخدام ثقنية Linq او شئ شبيه بها في عملية البحث بالبيانات<br />
<div class="codeblock phpcodeblock"><div class="title">PHP كود :</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">Manager</span><span style="color: #007700">.</span><span style="color: #0000BB">Find</span><span style="color: #007700">&lt;</span><span style="color: #0000BB">TOrder</span><span style="color: #007700">&gt;&nbsp;</span><span style="color: #0000BB"> <br />&nbsp; </span><span style="color: #007700">.</span><span style="color: #0000BB">CreateAlias</span><span style="color: #007700">(</span><span style="color: #DD0000">'OrderDetails'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'d'</span><span style="color: #007700">)&nbsp;</span><span style="color: #0000BB"> <br />&nbsp; </span><span style="color: #007700">.</span><span style="color: #0000BB">Select</span><span style="color: #007700">(</span><span style="color: #0000BB">TProjections</span><span style="color: #007700">.</span><span style="color: #0000BB">ProjectionList&nbsp; <br />&nbsp; &nbsp; </span><span style="color: #007700">.</span><span style="color: #0000BB">Add</span><span style="color: #007700">(</span><span style="color: #0000BB">Linq</span><span style="color: #007700">[</span><span style="color: #DD0000">'OrderDate'</span><span style="color: #007700">].</span><span style="color: #0000BB">Year</span><span style="color: #007700">.</span><span style="color: #0000BB">Group</span><span style="color: #007700">.</span><span style="color: #0000BB">As_</span><span style="color: #007700">(</span><span style="color: #DD0000">'Group'</span><span style="color: #007700">))&nbsp;</span><span style="color: #0000BB"> <br />&nbsp; &nbsp; </span><span style="color: #007700">.</span><span style="color: #0000BB">Add</span><span style="color: #007700">((</span><span style="color: #0000BB">Linq</span><span style="color: #007700">[</span><span style="color: #DD0000">'d.UnitPrice'</span><span style="color: #007700">]&nbsp;*&nbsp;</span><span style="color: #0000BB">Linq</span><span style="color: #007700">[</span><span style="color: #DD0000">'d.Quantity'</span><span style="color: #007700">]).</span><span style="color: #0000BB">Sum</span><span style="color: #007700">.</span><span style="color: #0000BB">As_</span><span style="color: #007700">(</span><span style="color: #DD0000">'Value'</span><span style="color: #007700">))&nbsp;</span><span style="color: #0000BB"> <br />&nbsp; </span><span style="color: #007700">)&nbsp;</span><span style="color: #0000BB"> <br />&nbsp; </span><span style="color: #007700">.</span><span style="color: #0000BB">Where</span><span style="color: #007700">(</span><span style="color: #0000BB">Linq</span><span style="color: #007700">[</span><span style="color: #DD0000">'OrderDate'</span><span style="color: #007700">].</span><span style="color: #0000BB">Year</span><span style="color: #007700">.</span><span style="color: #0000BB">_In</span><span style="color: #007700">([</span><span style="color: #0000BB">1997</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">1998</span><span style="color: #007700">]))&nbsp;</span><span style="color: #0000BB"> <br />&nbsp; </span><span style="color: #007700">.</span><span style="color: #0000BB">OrderBy</span><span style="color: #007700">(</span><span style="color: #DD0000">'Value'</span><span style="color: #007700">)&nbsp;</span><span style="color: #0000BB"> &nbsp;<br /></span></code></div></div></div><br />
وايضا انشاء الكلاسس والبحث فيها<br />
<div class="codeblock phpcodeblock"><div class="title">PHP كود :</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">type&nbsp; <br />&nbsp; TContact&nbsp;</span><span style="color: #007700">=&nbsp;class&nbsp;</span><span style="color: #0000BB"> <br />&nbsp; private&nbsp; <br />&nbsp; &nbsp; FId</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">integer</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB"> <br />&nbsp; &nbsp; FName</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">string</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB"> <br />&nbsp; &nbsp; FCountry</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">TCountry</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB"> <br />&nbsp; public&nbsp; <br />&nbsp; &nbsp; property&nbsp;Id</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">integer&nbsp;read&nbsp;FId&nbsp;write&nbsp;FId</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB"> <br />&nbsp; &nbsp; property&nbsp;Name</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">string&nbsp;read&nbsp;FName&nbsp;write&nbsp;FName</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB"> <br />&nbsp; &nbsp; property&nbsp;Country</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">TCountry&nbsp;read&nbsp;FCountry&nbsp;write&nbsp;FCountry</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB"> <br />&nbsp; end</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB"> &nbsp;<br /></span></code></div></div></div><br />
<div class="codeblock phpcodeblock"><div class="title">PHP كود :</div><div class="body"><div dir="ltr"><code><span style="color: #FF8000">//&nbsp;Get&nbsp;all&nbsp;contacts&nbsp; <br /></span><span style="color: #0000BB">MyContacts&nbsp;</span><span style="color: #007700">:=&nbsp;</span><span style="color: #0000BB">Manager</span><span style="color: #007700">.</span><span style="color: #0000BB">Find</span><span style="color: #007700">&lt;</span><span style="color: #0000BB">TContact</span><span style="color: #007700">&gt;.List;&nbsp;</span><span style="color: #0000BB"> <br />&nbsp; <br /></span><span style="color: #FF8000">//&nbsp;Get&nbsp;name&nbsp;of&nbsp;country&nbsp;of&nbsp;first&nbsp;contact:&nbsp; <br /></span><span style="color: #0000BB">FirstContactCountryName&nbsp;</span><span style="color: #007700">:=&nbsp;</span><span style="color: #0000BB">MyContacts</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">].</span><span style="color: #0000BB">Country</span><span style="color: #007700">.</span><span style="color: #0000BB">Name</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB"> &nbsp;<br /></span></code></div></div></div><br />
اي انك لم تعد في حاجة الى استخدام جمل الاستعلام التقليدية مثل<br />
<br />
<div class="codeblock phpcodeblock"><div class="title">PHP كود :</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">SELECT&nbsp;A</span><span style="color: #007700">.</span><span style="color: #0000BB">ID&nbsp;</span><span style="color: #007700">AS&nbsp;</span><span style="color: #0000BB">A_ID</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">A</span><span style="color: #007700">.</span><span style="color: #0000BB">NAME&nbsp;</span><span style="color: #007700">AS&nbsp;</span><span style="color: #0000BB">A_NAME</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">A</span><span style="color: #007700">.</span><span style="color: #0000BB">COUNTRY_ID&nbsp;</span><span style="color: #007700">AS&nbsp;</span><span style="color: #0000BB">A_COUNTRY_ID</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">B</span><span style="color: #007700">.</span><span style="color: #0000BB">ID&nbsp;</span><span style="color: #007700">AS&nbsp;</span><span style="color: #0000BB">B_ID</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">B</span><span style="color: #007700">.</span><span style="color: #0000BB">NAME&nbsp;</span><span style="color: #007700">AS&nbsp;</span><span style="color: #0000BB">B_NAME<br />FROM&nbsp;CONTACT&nbsp;A&nbsp;LEFT&nbsp;JOIN&nbsp;COUNTRY&nbsp;B&nbsp;ON&nbsp;</span><span style="color: #007700">(</span><span style="color: #0000BB">B</span><span style="color: #007700">.</span><span style="color: #0000BB">ID&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">A</span><span style="color: #007700">.</span><span style="color: #0000BB">COUNTRY_ID</span><span style="color: #007700">)&nbsp;<br /></span></code></div></div></div><br />
مع امور اخرى كثيرة يمكن مراجعتها بالرابط فوق]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[TMS Echo]]></title>
			<link>https://delphi4arab.net/forum/showthread.php?tid=9525</link>
			<pubDate>Wed, 13 Jun 2018 18:39:40 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://delphi4arab.net/forum/member.php?action=profile&uid=1588">Delphi4Us</a>]]></dc:creator>
			<guid isPermaLink="false">https://delphi4arab.net/forum/showthread.php?tid=9525</guid>
			<description><![CDATA[<span style="font-weight: bold;" class="mycode_b">ماذا تعمل، أو ماذا تفعل؟</span><br />
فهو يسمح لك بوجود قاعدتي بيانات أو أكثر ومزامنة البيانات بينهما. يمكن إرسال التغييرات التي تجريها على قاعدة بيانات عميل واحد (إدراج ، تحديثات ، حذف) إلى قاعدة بيانات أخرى. إنه ثنائي الاتجاه ، لذا يمكنك إرسال وتلقي التغييرات بين قواعد البيانات.<br />
<br />
<div class="codeblock phpcodeblock"><div class="title">PHP كود :</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">https</span><span style="color: #007700">:</span><span style="color: #FF8000">//www.tmssoftware.com/site/tmsecho.asp&nbsp;<br /></span></code></div></div></div><br />
<br />
<br />
<img src="https://www.tmssoftware.com/site/img/tms_echo_demo.gif" loading="lazy"  alt="[صورة: tms_echo_demo.gif]" class="mycode_img" /><br />
<br />
<br />
<img src="https://www.tmssoftware.com/site/img/echo_process.png" loading="lazy"  alt="[صورة: echo_process.png]" class="mycode_img" />]]></description>
			<content:encoded><![CDATA[<span style="font-weight: bold;" class="mycode_b">ماذا تعمل، أو ماذا تفعل؟</span><br />
فهو يسمح لك بوجود قاعدتي بيانات أو أكثر ومزامنة البيانات بينهما. يمكن إرسال التغييرات التي تجريها على قاعدة بيانات عميل واحد (إدراج ، تحديثات ، حذف) إلى قاعدة بيانات أخرى. إنه ثنائي الاتجاه ، لذا يمكنك إرسال وتلقي التغييرات بين قواعد البيانات.<br />
<br />
<div class="codeblock phpcodeblock"><div class="title">PHP كود :</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">https</span><span style="color: #007700">:</span><span style="color: #FF8000">//www.tmssoftware.com/site/tmsecho.asp&nbsp;<br /></span></code></div></div></div><br />
<br />
<br />
<img src="https://www.tmssoftware.com/site/img/tms_echo_demo.gif" loading="lazy"  alt="[صورة: tms_echo_demo.gif]" class="mycode_img" /><br />
<br />
<br />
<img src="https://www.tmssoftware.com/site/img/echo_process.png" loading="lazy"  alt="[صورة: echo_process.png]" class="mycode_img" />]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[هل رأيتم مكون TAdvStringGrid عن قرب]]></title>
			<link>https://delphi4arab.net/forum/showthread.php?tid=9524</link>
			<pubDate>Wed, 13 Jun 2018 18:35:05 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://delphi4arab.net/forum/member.php?action=profile&uid=1588">Delphi4Us</a>]]></dc:creator>
			<guid isPermaLink="false">https://delphi4arab.net/forum/showthread.php?tid=9524</guid>
			<description><![CDATA[الموقع<br />
<a href="https://www.tmssoftware.com/site/advgrid.asp" target="_blank" rel="noopener" class="mycode_url">https://www.tmssoftware.com/site/advgrid.asp</a><br />
<img src="https://www.tmssoftware.com/site/img/advgrid45_small.png" loading="lazy"  alt="[صورة: advgrid45_small.png]" class="mycode_img" /><br />
<br />
بنهاية الصفحة ستجدون حوالي 92 وظيفة وميزة مشروحة بالصور والامثلة لكل ما يمكن عمله]]></description>
			<content:encoded><![CDATA[الموقع<br />
<a href="https://www.tmssoftware.com/site/advgrid.asp" target="_blank" rel="noopener" class="mycode_url">https://www.tmssoftware.com/site/advgrid.asp</a><br />
<img src="https://www.tmssoftware.com/site/img/advgrid45_small.png" loading="lazy"  alt="[صورة: advgrid45_small.png]" class="mycode_img" /><br />
<br />
بنهاية الصفحة ستجدون حوالي 92 وظيفة وميزة مشروحة بالصور والامثلة لكل ما يمكن عمله]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[ZylSerialPort]]></title>
			<link>https://delphi4arab.net/forum/showthread.php?tid=9523</link>
			<pubDate>Wed, 13 Jun 2018 16:11:15 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://delphi4arab.net/forum/member.php?action=profile&uid=1588">Delphi4Us</a>]]></dc:creator>
			<guid isPermaLink="false">https://delphi4arab.net/forum/showthread.php?tid=9523</guid>
			<description><![CDATA[<span style="font-weight: bold;" class="mycode_b">وصف</span><br />
ZylSerialPort هو مكون متعدد مؤشرات الترابط وغير متزامن للتوصيل إلى المنافذ التسلسلية في Delphi و C ++ Builder. تم ترميز هذه المكتبة بتنسيق غير متزامن ومتعدد الارتباطات. وهذا يعني أن عملية تلقي المعلومات من المنفذ التسلسلي في الخلفية وواجهة المستخدم الخاصة بالتطبيق الخاص بك لا يتم تجميدها أو تعليقها أثناء قراءة البيانات ولا تزال قادرة على التفاعل مع المستخدمين. باستخدام هذا المكون ، يمكنك بسهولة قراءة وكتابة المعلومات من الأجهزة التسلسلية الخارجية مثل الماسحات الضوئية لبصمات الأصابع ومودم الفاكس والطابعات وقارئات الباركود ووحدات GSM وأجهزة GPS والمزيد.<br />
بالإضافة إلى المنافذ التسلسلية ، ستتمكن من الحصول على بيانات من منفذ USB بالإضافة إلى منافذ أخرى ، مثل irDA و bluetooth.ويرجع ذلك إلى أن هذه الأجهزة لديها عادة برامج تشغيل لإعادة توجيه البيانات إلى منافذ المنافذ التسلسلية ، ويمكن للمكوِّن الاتصال بسهولة بالجهاز الوجهة عبر هذا المنفذ الظاهري. إذا لم يكن منفذ USB الخاص بجهازك يحتوي على مثل هذه الميزة ، فحاول استخدام وحدة تحكم USB توفر مثل هذا المنفذ الظاهري ، مثل محولات FTDI أو USB / RS-232.<br />
يمكن استخدام هذا المكون في Delphi وفي C ++ Builder ولديه أمثلة في كلتا اللغتين. نحن نشجع المبرمجين في دلفي و ++ C على نسيان معالجة الأخطاء وإعادة اختراع العجلة للتواصل مع البوابات التسلسلية.<br />
<br />
<div class="codeblock phpcodeblock"><div class="title">PHP كود :</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">http</span><span style="color: #007700">:</span><span style="color: #FF8000">//componentwanted.com/author/s-c-zyl-soft-s-r-l/&nbsp;<br /></span></code></div></div></div><br />
<br />
<img src="http://componentwanted.com/uploads/images/shut-down-expert-howto.png" loading="lazy"  alt="[صورة: shut-down-expert-howto.png]" class="mycode_img" /><br />
<br />
<br />
<br />
<br />
<br />
<br />
<img src="http://componentwanted.com/author/s-c-zyl-soft-s-r-l/" loading="lazy"  alt="[صورة: s-c-zyl-soft-s-r-l]" class="mycode_img" />]]></description>
			<content:encoded><![CDATA[<span style="font-weight: bold;" class="mycode_b">وصف</span><br />
ZylSerialPort هو مكون متعدد مؤشرات الترابط وغير متزامن للتوصيل إلى المنافذ التسلسلية في Delphi و C ++ Builder. تم ترميز هذه المكتبة بتنسيق غير متزامن ومتعدد الارتباطات. وهذا يعني أن عملية تلقي المعلومات من المنفذ التسلسلي في الخلفية وواجهة المستخدم الخاصة بالتطبيق الخاص بك لا يتم تجميدها أو تعليقها أثناء قراءة البيانات ولا تزال قادرة على التفاعل مع المستخدمين. باستخدام هذا المكون ، يمكنك بسهولة قراءة وكتابة المعلومات من الأجهزة التسلسلية الخارجية مثل الماسحات الضوئية لبصمات الأصابع ومودم الفاكس والطابعات وقارئات الباركود ووحدات GSM وأجهزة GPS والمزيد.<br />
بالإضافة إلى المنافذ التسلسلية ، ستتمكن من الحصول على بيانات من منفذ USB بالإضافة إلى منافذ أخرى ، مثل irDA و bluetooth.ويرجع ذلك إلى أن هذه الأجهزة لديها عادة برامج تشغيل لإعادة توجيه البيانات إلى منافذ المنافذ التسلسلية ، ويمكن للمكوِّن الاتصال بسهولة بالجهاز الوجهة عبر هذا المنفذ الظاهري. إذا لم يكن منفذ USB الخاص بجهازك يحتوي على مثل هذه الميزة ، فحاول استخدام وحدة تحكم USB توفر مثل هذا المنفذ الظاهري ، مثل محولات FTDI أو USB / RS-232.<br />
يمكن استخدام هذا المكون في Delphi وفي C ++ Builder ولديه أمثلة في كلتا اللغتين. نحن نشجع المبرمجين في دلفي و ++ C على نسيان معالجة الأخطاء وإعادة اختراع العجلة للتواصل مع البوابات التسلسلية.<br />
<br />
<div class="codeblock phpcodeblock"><div class="title">PHP كود :</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">http</span><span style="color: #007700">:</span><span style="color: #FF8000">//componentwanted.com/author/s-c-zyl-soft-s-r-l/&nbsp;<br /></span></code></div></div></div><br />
<br />
<img src="http://componentwanted.com/uploads/images/shut-down-expert-howto.png" loading="lazy"  alt="[صورة: shut-down-expert-howto.png]" class="mycode_img" /><br />
<br />
<br />
<br />
<br />
<br />
<br />
<img src="http://componentwanted.com/author/s-c-zyl-soft-s-r-l/" loading="lazy"  alt="[صورة: s-c-zyl-soft-s-r-l]" class="mycode_img" />]]></content:encoded>
		</item>
	</channel>
</rss>