سؤال

هل من الممكن وضع النتائج من أكثر من استعلام على أكثر من جدول في TClientDataset؟

مجرد شيء من هذا القبيل

SELECT * from t1;
SELECT * from t2;
SELECT * from t3;

لا يبدو أنني أستطيع اكتشاف طريقة لجعل موفر البيانات (SetProvider) يسحب النتائج من أكثر من جدول واحد في المرة الواحدة.

هل كانت مفيدة؟

المحلول

لا توجد طريقة للحصول على بيانات جدول متعددة في نفس TClientDataSet كما أشرت إليه.تحتوي TClientDataSet على مؤشر واحد لمجموعة بيانات واحدة.

نصائح أخرى

ClientDatasets يمكن أن تحتوي على حقول تمثل في حد ذاتها مجموعات بيانات أخرى.لذا، إذا كنت تريد إنشاء ثلاثة جداول في مجموعة بيانات واحدة، فقم بإنشاء ثلاثة ClientDatasets عقد مجموعات النتائج الثلاثة التي تريدها، ومن ثم يمكنك وضعها في مجموعة واحدة ClientDataSet.

هذا المقال:

http://dn.codegear.com/article/29001

يوضح لك كيفية القيام بذلك في وقت التشغيل وفي وقت التصميم.انتبه بشكل خاص إلى القسم الذي يحمل عنوان:

"خلق شيء ClientDataSet's الهيكل في وقت التشغيل باستخدام TFields"

الطريقة الوحيدة هي الانضمام إلى الجداول.ولكن بعد ذلك يتعين عليك توفير معايير الانضمام من خلال المفاتيح الخارجية المرتبطة.

select * from t1, t2, t3 where t1.key = t2.key and t2.key = t3.key;

لنفترض الآن أنك توصلت إلى مفتاح (مثل LineNr) يسمح بمثل هذا الارتباط.يمكنك بعد ذلك استخدام صلة خارجية كاملة لتضمين كافة السجلات (مهم إن لم تكن جميع الجداول تحتوي على نفس عدد الصفوف).ولكن هذا من شأنه أن يكون بطريقة أو بأخرى الاختراق.تأكد من عدم استخدام الرقم التلقائي للمفتاح، لأنه لا يعيد استخدام المفاتيح وبالتالي يميل إلى ترك فجوات في الترقيم، مما يؤدي إلى ظهور العديد من الأسطر التي يتم ملؤها جزئيًا فقط بالقيم.

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top