View Full Version : مشکل در مورد ایندکس اطلاعات
rahro
پنج شنبه 24 شهریور 1384, 05:57 صبح
در برنامه نویسی تحت داس - بسیاری از مواقع لازم میشه که اطلاعات بانکها که بر اساس ایندکس مرکب مرتب شده اند را دوباره برای رفع یک مشکل بازسازی کرد لذا من خودم در پروژ ه هایم منوی را برای ایندکس اطلاعات (cdx.*) تعریف میکردم تا در موقع لزوم کاربر از ان استفاده کند حال با همین مشکل در ویژوال فاکس مواجه شدم ! یکی از جداول دیتابیس من برای اضافه کردن یک شماره سند با دستور gobottom که بر اساس همین فیلد ایندکس شده به انتها بانک هدایت میشه و اخرین شماره سند را به اضافه یک میکنه در بعضی از مواقع این عمل صورت نمیگره و شماره تکراری رو به انتها بانک اضافه میکنه !!
البته حال که تعداد رکوردهایم بیش از 2هزار رکورد شده
من جداولم را با این دستورات باز میکنم
select personel
set order to sanad
اگر بانک من reindex شود مشکل حل میشود حال چطور میتوانم از داخل برنامه این کار انجام دهم
آیا من در نوشتن پروژه اشتباه کرده ام !
javad_hosseiny
پنج شنبه 24 شهریور 1384, 15:42 عصر
اگر منظورتان بازسازی مجدد ایندکس باشد خوب دستور reindex که خودتان نیز اشاره کرده اید اینکار را انجام می دهد (از داخل برنامه یا از طریق پنجره command فرقی نمی کند)
اما راه حل مناسب برای اینگونه مشکلات استفاده از روتینی جهت کنترل خطاها در محیط برنامه می باشد مثلا
on error do trap with error,(),message(),lineno(),
کنترل خطا را به تابعی به نام trap هدایت می کند که پارمترهای کد خطا, پیغام خطا, سطری از برنامه که باعث ایجاد خطا شده (و حتی پارامترهای بیشتری را نیز می توانید ارسال کنید مثل مقدار حافظه خالی, برنامه فراخوانی شده (منظور تابع یا پروسیجر فعال) و ...) و خوب در داخل آن تابع توسط دستور case مدیریت خطاهای ایجاد شده را کنترل کنید و بهتر اینکه در ابتدای کار گزارش کاملی (مثلا بصورت خطی) نسبت به خطای اتفاق افتاده در یک فایل خطا (مثلا error.msg) ذخیره کنید (در حقیقت یک نوع لوگر برای خطاها) و خوب در این مدیریت خطاها هر وقت کد خطای مربوط به اشتباه در ایندکس فعال و یا عدم وجود فایل ایندکس آن را بازسازی کنید (مثلا با استفاده از تابع dbf() جدول فعال را پیدا کرده و با توجه به آن , فایل ایندکس موردنظر را بازسازی کنید) و ....
و در نهایت پیشنهاد می کنم مخصوصا در مورد استفاده در ایندکس های مرکب از خود دستور index (یعنی استفاده مجدد از خود دستور ایندکس جهت بازسازی مجدد) بصورت مجدد استفاده کردند بهتر است از بازسازی توسط دستور reindex (البته این بصورت یک قانون یا فرضیه نیست بلکه بصورت تجربی امتحان شده است)
rahro
پنج شنبه 24 شهریور 1384, 17:13 عصر
سلام
جناب حسینی فرمایش شما متین است من هم خیلی سعی کردم واما نشد شما نمونه ای از این کار دارید
از تمام دوستان برای رفع این مشکل استمداد یاری دارم
javad_hosseiny
جمعه 25 شهریور 1384, 11:32 صبح
من نمونه تابعی که برای کنترل خطاها در برنامه خودم استفاده می کردم براتون آپلود کردم
محل ذخیره خطاها نیز در فایل error.msg در مسیر داخلی برنامه و در شاخه font هست (که البته خوب شما بالطبع نیاز برنامه اتان مسیر آن را می توانید عوض کنید) و نحوه فراخوانی آن نیز در سطر اول تابع نوشته شده
on error do trap with error(),message(),lineno()
و البته کنترل اینگونه خطاها (خرابی ایندکس ها و یا جداول) برمی گرد به الگوریتم کلی برنامه ایتان
مثلا جزء تمهیدات کنترلی می توانید از یک لوگر دیگر جهت کنترل ورود و خروج (ساعت ورودوخروج) کاربران مختلف در برنامه استفاده کنید که مثلا هر وقت که به صورت اضطراری (آنرمال شات داون) از برنامه خارج شد سری بعد که به برنامه وارد می شود به علت عدم ثبت خروج در فایل لوگر شما متوجه این خروج اضطراری شده و تابعی جهت بازسازی ایندکس ها را فراخوانی کنید.
(و زیباتر این که این لوگر کلیه عملیات کاربر در داخل برنامه را نیز ذخیره کند (جهت گزارش برای مدیرپروژه (از این مورد یک مصرف بسیار جالب در نرم افزاری مدیریت صندوق که به سفارش زندان مرکزی نوشته بودم استفاده شد ) جهت جلوگیری از هرگونه استفاده غیرمجاز از امکانات برنامه می باشد)
شاگرد آرام
دوشنبه 04 مهر 1384, 15:37 عصر
سلام
شما می توانید بدون استفاده از ایندکس این مشکل رو حل کنید
برای زدن شماره جدید شما با دستور calculate maxبزرگترین شماره سند را پیدا می کنید و بعد می توانید جواب بدست آمده را +1 کنید
mehran_337
چهارشنبه 29 شهریور 1385, 15:06 عصر
نتونستم این و دانلود کنم اگه کسی داره می تونه بزاره؟
binyaz2003
چهارشنبه 29 شهریور 1385, 19:20 عصر
لینک فایل سالمه . من دانلود کردم.
mehran_337
پنج شنبه 30 شهریور 1385, 00:30 صبح
آره ممنون از قرار معلوم سیستم من مشکل داشت الان گرفتمش. اگر میشه مشکل ایندکس منم حل کنی ممنون می شم
http://barnamenevis.org/forum/showthread.php?t=1852
rahro
پنج شنبه 30 شهریور 1385, 10:46 صبح
آره ممنون از قرار معلوم سیستم من مشکل داشت الان گرفتمش. اگر میشه مشکل ایندکس منم حل کنی ممنون می شم
http://barnamenevis.org/forum/showthread.php?t=1852
سلام
جناب مهران
تا اونجایی که یادمه اگر اشتباه نکرده باشم شما خودتان یک فانکشن برای این موضوع ارائه کرده بودید من همون رو دستکاری کردم و از فانکشن قدیمی خودم بهتر تر شد!!!!
mehran_337
جمعه 31 شهریور 1385, 22:32 عصر
آره . اما بعد توی عمل دیدم اون فانکشن فرقی بین حرف پ و ب نمی زاره یعنی کل حروف جایگزینی رو فرق نمی زاره حالا فانکشن اقای توکل را دانلود کردم ببینم چطور می شه.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.