View Full Version : ADO و مشکل کندی(6 دقیقه)
parhizkar2000
شنبه 25 مهر 1383, 23:25 عصر
من یک بانک اطلاعاتی از روی یک برنامه دیگه که با VB نوشته شده برداشتم .بانک از نوع اکسس است . حالا که با استفاده از ADO اون رو توی دلفی باز می کنم . برای هر بار باز وبسته کردن فایل چیزی حدود 6 دقیقه وقت لازمه .در صورتی که توی برنامه اصلی که با VB نوشته شده مشکلی نداره و سریع باز میشه . بنظر شما مشکل کجاست . بانک چیزی حدود چهل هزار رکورد دارهو شامل دو فیلد یکی متنی بطول 7 دیگری MEMO است. توی هر رکورد فیلد Memo چیزی در حدود 17000 کاراکتر ذخیره میشه .
omidsm
یک شنبه 26 مهر 1383, 09:28 صبح
فکر کنم اگه از BDEClientDataSet در BDE استفاده کنین مشکلتون حل می شه البته با مقدار دهی صحیح PacketRecords ::نوشتن::
ولی شرمنده در ADO یه همچین چیزی ندیدم :sorry:
به نظر من چرا از BDE استفاده نمی کنین که از ADO بهتره و امکانات زیادی داره؟ :sunglass:
nasr
یک شنبه 26 مهر 1383, 11:10 صبح
متاسفانه من هم این مشکل را داشتم و برای حل این مشکل دست از Ado برداشته و به DBISam روی آوردم
http://www.barnamenevis.org/forum/viewtopic.php?t=5140&highlight=%E3%D4%DF%E1
JavanSoft
یک شنبه 26 مهر 1383, 13:20 عصر
ADO مشکلی ندارد
اشکال شمادر استفاده از ACCESS است ... برای حل مسئله بدون تغییر در برنامه بانکها را به SqlServer انتقال دهید
omidsm
یک شنبه 26 مهر 1383, 13:26 عصر
ADO مشکلی ندارد
اشکال شمادر استفاده از ACCESS است ... برای حل مسئله بدون تغییر در برنامه بانکها را به SqlServer انتقال دهید
در هر حالت
این ADO خیلی امکاناتش کمه برای مثال ClientDataSet رو نداره که خیلی در این موارد به درد بخوره و برای افزایش سرعت خیلی موثره این یه نمونه از ضعفه ADO است
ADO ایراد هایی هم دارد که حوصله بحثشون نیست
parhizkar2000
یک شنبه 26 مهر 1383, 22:45 عصر
از اظهار لطفتون ممنونم
ولی دوستان مثل اینکه توجه نکردند . مشکل من اینه که برنامه که از این بانکها استفاده می کنه مال خودم نیست و من بایستی اطلاعاتی رو از این بانک هر ماهه استخراج کنم و من بانک او از جای دیگه میگیرم که اونها هم هیچوقت ساختار و نوع بانکشون رو تغییر نمی دهند. اگه دراین زمینه راه حلی وجود داره لطف بفرمایید
omidsm
دوشنبه 27 مهر 1383, 06:06 صبح
من که عرض کردم اگر مشکل شما سرعت باشد از BDE استفاده کنین و به جای TABLE,QUARY از ClientDataSet استفاده کنید و پروپرتی PacketRecords را مثلا مقدار بیست بدهید
می دانید مشکل شما چیست ؟ مشکل شما در این است که TABLE سطرها را در هنگام باز کردن buffer می کند بنابراین چون داده شما از حجم زیادی برخوردار است زمان زیادی طول می کشد حال اینکه ClientDataSet این کار را به تعداد مشخص شده در پروپرتی PacketRecords انجام می دهد شما خیلی راحت می توانید این کار را به صورت تستی انجام دهید اگر نتیجه نگرفتید ان وقت دنبال راه حل دیگری باشید :sunglass:
JavanSoft
دوشنبه 04 آبان 1383, 19:34 عصر
ADO ایراد هایی هم دارد که حوصله بحثشون نیست
اتفاقا من علاقه دارم اشکالات ADO را بدانم ... اگر زحمت کشیده و چند نمونه انرا لیست بفرمایید ممنون می شوم
اطلاعاتی رو از این بانک هر ماهه استخراج کنم و من بانک او از جای دیگه میگیرم که اونها هم هیچوقت ساختار و نوع بانکشون رو تغییر نمی دهند
در اینصورت فکر می کنم چاره دیگری نداشته باشید
البته یک راه دیگر هم هست که من برای انتقال اطلاعات از آن تا 100000 رکورد هم سرعت خوبی دیده ام (البته فیلدهای من Memo نبودند ) .... آن هم باز کردن فایل در برنامه ACCESS و تبدیل آن به فرمت Text و سپس Import فایل Text در SqlServer است
اما اگر می خواهید حتما از دلفی برای انتقال استفاده کنید از DBExpress برای باز کردن استفاده و رو به جلو حرکت و انتقال دهید
azhdari
سه شنبه 05 آبان 1383, 13:46 عصر
parhizkar2000
در ADOCONNECTION , ADOTABLE , ADOQUERY پروپرتی cursorlocation رو به clUseServer تغییر بدهید
مشکل برطرف میشه همچنین پروپرتی cursortype رو توی ADOTABLE , ADOQUERY میتونید با توجه به ساختار جدولهاتون تغییر بدهید
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.