PDA

View Full Version : سوال: مشکل DBISAM



gbg
جمعه 25 تیر 1389, 12:16 عصر
سلام
من مدتی طولانی هست که با DBISAM کار می کنم و علاوه بر مزیت های خیلی زیادش به مشکلاتی هم بر خوردم ولی همیشه غیر مستقیم از کنارشون گذشتم حالا 2 تا از مشکلات رو من اینجا می گم اگه مشکل دیگه ای هم هست شما بگین نسخه من 4.29 Build 1 هستش.

1- رویداد AfterScroll در DBISAMQury به تعداد تمام رکوردها اجرا میشه ، نه یک بار (برای Table تست نکردم)
2- قابلیت Edit و ... در DBISAMQury وجود داره ولی کار نمی کنه.(کار می کنه ولی تغییری در دیتا بوجود نمیاره)

bootshow
شنبه 02 مرداد 1389, 15:00 عصر
1-من مورد 1 را امتحان کردم مشکلی نداشت.قبل از اجرای کامل ،تمام (یا قسمتی از ) رکوردها را scroll میکند که فکر کنم امری طبیعی باشه.ولی بعد از اجرای کامل روی هر رکوردی که کلیک کنی فقط یکبار OnScroll فراخوانی میشه.
کلا اگر از table استفاده کنی حتی اگر صد هزار رکورد بصورت شبکه بخواهی در گرید نمایش بدی تنها اطلاعات مثلا 10 رکوردی که برای نمایش لازم است از بانک خوانده میشه و هر اسکرول روی جدول باعث لود 10 رکورد بعدی میشه.ولی هنگامیکه از DBISAMQury استفاده کنی چون اطلاعات بصورت offline خوانده میشه (مثل ADO.NET ) تمام رکوردهای کوئری اجرا شده در دستور sql یکباره باید از بانک خوانده بشه.

2-در DBISAMQury چون اطلاعات در حافظه RAM قرار داده میشه در نتیجه هر Edit و post ای که روی DBISAMQury اعمال کنید تغییرات تنها در حافظه RAM اعمال میشه.که این هم طبیعیه.برای اینکار میتونید از clientdataset و datasetprovider (کنترلهای دلفی)استفاده کنید که تغییرات edit و post را تبدیل به دستورات sql میکنه و بصورت فیزیکی در بانک ذخیره میکنه.و بصورت اوتوماتیک از transaction استفاده میشه

gbg
شنبه 02 مرداد 1389, 17:56 عصر
خب وقتی از ADO (نه ADO.NET) استفاده میشه این اشکالات وجود نداره و به نظر من یه ضعف برای DBISAM به شمار میاد برای رفع مشکل اول از رویداد OnChange از Dataset میشه استفاده کرد و برای مورد دوم از Table یا نوشتن مستقیم دستورات SQL (البته من اینجوری این دو مشکلم رو رفع کردم)

mofrad
شنبه 02 مرداد 1389, 18:57 عصر
من مشکل دوم رو از طریق مقداردهی true به خاصیت RequestLive مربوط به DBISAMQuery حل کردم ولی یه مشکل داره و اونم اینه که وقتی به طور مستقیم در Dbgrid میخوای ویرایش کنی، در حالتی که در حالت Edit قرار داره اگه اسکرول کنی خطای
DBISAM Engine Error # 10242 Cannot unlock the table or record in the table 'test' رو میده!!!:اشتباه:

mofrad
دوشنبه 04 مرداد 1389, 00:21 صبح
مشکل بالا که گفتم مربوط به کامپوننت NxDbgrid بود که با هم سازگار نیستند!
حالا یه مشکل دیگه!
وقتی از DBISAMQury استفاده میکنم (با True کردن RequestLive) و یا از Table فرقی نمیکنه...! هردوشون یک مشکل مشابه دارن!
اونم اینه که اگه از فیلتر یا Where برای فیلتر کردن چند رکورد خاص استفاده کرده و مثلا یه شماره ردیف هم در dbgrid داشته باشید بعد می بینید که چه اشتباه فاحشی داره رخ میده! ردیف ها مثلا اینطوری میشه: 1 2 3 5 7 و...:متعجب:
چه جوری و چراش رو نمیدونم! فقط میدونم که کدهام مطمئناً درسته!

یواش یواش دارم از DBISAM نا امید میشم! تازه داشت از مهندسی معکوسش خوشم می اومد!!!

gbg
دوشنبه 04 مرداد 1389, 12:34 عصر
شماره رکورد هات رو از جدول می خونی یا با کمک فیلد AutoInc جدول می سازی؟

mofrad
دوشنبه 04 مرداد 1389, 13:08 عصر
شماره رکورد هات رو از جدول می خونی یا با کمک فیلد AutoInc جدول می سازی؟
از RecNo استفاده میکنم.
میدونید وقتی requestLive مقدار True داشته باشه با query میتونید داده هاتون رو post کنید ولی مشکلی که داره اینه که اگر از دستور where استفاده کرده باشی اونوقت ترتیب RecNo بهم میخوره! اصطلاحاً ordinal نیست!
این مشکل بارها در پشتیبانی خود سایت سازنده هم عنوان شده ولی هیچ راه حلی اصولی من که پیدا نکردم.
مثلا: این لینک (http://www.elevatesoft.com/forums?action=view&category=dbisam&id=dbisam_sql&msg=10595&start=1&keywords=query%20recno&searchbody=True&forum=DBISAM_General&forum=DBISAM_SQL#10595) و این یکی (http://www.elevatesoft.com/forums?action=view&category=dbisam&id=dbisam_general&msg=33003&start=1&keywords=query%20recno&searchbody=True&forum=DBISAM_General&forum=DBISAM_SQL#33003) رو ببینید.

gbg
سه شنبه 05 مرداد 1389, 00:52 صبح
آره من هم این مشکل رو داشتم ولی یادم رفته بود می خواستم با Recno دیبیگیرد رو یکی در میون رنگی کنم آخر هم از کامپوننت www استفاده کردم