delphi4arab منتديات دلفي للعرب

نسخة كاملة : كيف منع البرنامج من التجمد اثناء البحث (قاعدة البيانات تقريبا 800 ميغا)
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2
بسم الله الرحمن الرحيم
السلام عليك ورحمة الله وبركاته ..
هل يمكن منع البرنامج من التجمد اثناء البحث (قاعدة البيانات تقريبا 800 ميغا)
والسلام عليكم
اجل اجعل عملية بحث في ثريد منفصل
راقب مدة اشتغال ثريد ادا زادت عند وقت معين عشر ثواني - دقيقة timeout ولو تنتهي من بحث نبه مستخدم و اغلق ثريد لينتهي بحث
شكرا لك أخي هوديني ممكن مثال
لأني لم أتعامل بالثريد من قبل
يمكنك العثور على عدة امثله في نت ان استعمال ثريد فقط استثناء لو كنت تستعمل ado connection لقواعد بيانات فلا يمكن ان تشارك مجموعة من ثريد نفس اتصال
يجب لكا اتصال ثريد منفصل
كود :
TADOSQLThread = class(TThread) private FADOQ: TADOQuery; // Internal query FSQL: string; // SQL To execute FID: integer; // Internal ID public constructor Create(CreateSuspended:Boolean; AConnString:String; ASQL:string; IDThread:integer); destructor Destroy; override; procedure Execute(); override; property ID:integer read FID write FID; property SQL:string read FSQL write FSQL; property ADOQ:TADOQuery read FADOQ write FADOQ; end;
الباني معدل ليناسبنا و يبدوا هكداا
كود :
constructor TADOSQLThread.Create(CreateSuspended:Boolean; AConnString:String; ASQL:string; IDThread:integer); begin inherited Create(CreateSuspended); // ini Self.FreeOnTerminate := False; // Create the Query FADOQ := TAdoquery.Create(nil); // assign connections FADOQ.ConnectionString := AConnString; FADOQ.SQL.Add(ASQL); Self.FID := IDThread; Self.FSQL:= ASQL; end;

تنفيد ثريد بسيط في دالة excu
كود :
procedure TADOSQLThread.Execute(); begin inherited; try // Ejecutar la consulta Self.FADOQ.Open; except // Error al ejecutar ...Error treattement end; end;

لبدء ثريد هكداا
كود :
//crear el Thread th := TADOSQLThread.Create(True, mmConnection.Lines.Text, ASQL, AId); // internal for me (for controled the number of active threads and limete it) inc(numThreads); // evento finalizacion th.OnTerminate := TerminateThread; // Ejecutarlo th.Resume;
قمنا بربط ثريد مع دالة انتهاء TerminateThread لتنبهنا عند انتهاء ثريد
هدا كل ما فس الامر

مثال من stackoverflow.
وعليكم اسلام ورحمة الله
إقتباس :هل يمكن منع البرنامج من التجمد اثناء البحث (قاعدة البيانات تقريبا 800 ميغا)
أعد التفكير في تصميم قاعدة البيانات وكيفية استخدام البحث وما له علاقة
نوع قاعدة البيانات / كيفية الاتصال / كيفية البحث، جدول Table /استعلام SQL ، الادلة الفريدة Index
السلام عليكم او باستخدام مكونات حفظ البيانات في الذاكرة مثل TClientDataSet او KBMTable
شكرا لك أخي هوديني على المثال ..
سأحاول العمل به علما أني لم أستحدم الثريد من قبل
شكرا لكم اخواني. عبد العزيز . فاتح .
أنا أستعمل قاعدة بيانات أكسس وحجمها كما قلت تقريبا 800 ميغا
تتكون من الاسم اللقب ورقم الهاتف ....
والمعلومات الناتجة بعد البحث تعرض في Dbgrid و Label
فما نصيحتكم
+
وهل يمكن البحث في القاعدة مثل محرر نصوص الوندوز
أي تبحث عن اسم يظهر الناتج و تظغط مرة أخرى ويظهر الاسم المشابه وهكذا
وشكرا لكم مرة أخرى
إقتباس :هل يمكن البحث في القاعدة مثل محرر نصوص الوندوز
أي تبحث عن اسم يظهر الناتج و تظغط مرة أخرى ويظهر الاسم المشابه وهكذا
طبعا ممكن.
إقتباس :قاعدة بيانات أكسس وحجمها كما قلت تقريبا 800 ميغا
تتكون من الاسم اللقب ورقم الهاتف ....
كم من سجل ؟
b.m.abdelaziz كتب :طبعا ممكن.


كم من سجل ؟
اذا أمكن كيف لأني لم أجد في النت أي شرح أو حتى تلميح
....
قاعدة البينات تحتوي على مايقارب 18000000
وجدت كتاب عربي يتكلم عن الثريد
و تمكنت بحل مشكل الثقل والحمد لله باستخدام الثريد
السلام عليكم

إقتباس :قاعدة البينات تحتوي على مايقارب 18000000
* هل تقوم بجلب كل السجلات ؟
يمكنك تحديد عدد السجلات المجلوبة ( لا أظن أن المستخدم يحتاج 18 مليون سجل دفعة واحدة ، بالعكس تسبب له الصداع :eek: )
* ما مكونات الإتصال ؟ إذا كانت FireDac-AnyDac يمكن تحديد عدد السجلات المجلوبة RowsetSize ، أظن أن Unidac .. لها خاصية مشابهة
كما يمكن تحديدها 'عدد السجلات المجلوبة' يدويا ( برمجيا)
http://delphi4arab.net/forum/showthread.php?tid=8890

بالتوفيق
الصفحات : 1 2