PDA

View Full Version : سوال: حذف رکورد از فایل notepad



mahan0o0
پنج شنبه 21 خرداد 1394, 08:31 صبح
سلام دوستان. من یک برنامه دارم که داره از فایل notepad اطللاعات رو می خونه. توی قسمت حذف اطلاعات در صورتی که یک ردیف gv رو انتخاب کنم و دکمه حذف رو بزنم گاهی اوقات درست رکورد رو حذف میکنه و گاهی اوقات هم خطای index was outside the bounds of array رو میده و تمام اطلاعات رو از فایل text پاک می کنه. برنامم هم یک برنامه عادیه ثبت اطلاعات است که 4 عمل اصلی رو انجام میده فقط واسه اینکه قراره توی شبکه استفاده بشه و حجم اطلاعات هم از 2-3 هزار تا رکورد بیبشتر نمیشه اومدم از notepad جهت ذخیره اطلاعات استفاده کردم. همین برنامه رو هم با access نوشتم ولی متاسفانه از access فقط در حالت local میشد استفاده کرد و وقتی فایل access رو توی درایو شبکه می ذاشتم نه خودم نه دیگران می تونستند از برنامه استفاده کنند و فایل access با انجام یک دستور اتصال به دیتابیس تبدیل به readonly می شد. فایل access توی شبکه هم برای کاربران مورد نظر دسترسی fullcontrol داداه شد ولی همچنان مشکل باقی بود. علاوه بر اینکه کاربران با error the microsoft.ace.oledb.12.0 provider is not registered on the local machine وقتی می خواستن برنامه رو اجرا کنند مواجه میشدند که فکر کنم مشکل از دیتابیس access بودن برنامم بوم چون وقتی دیتابیسم notepad باشه همچین مشکلی ندارم. مقدور هم نیست که از sql استفاده کنم. دوستان اگر لطف کنند مشکل دستور حذف رو بگن چیه بسیار ممنون می شم. علاوه بر این اگر نظری هم در مورد اینکه دیتابیس رو چی انتخاب کنم که بشه توی شبکه همه بهش دسترسی داشته باشند ممنون میشم. کدم هم گذاستم واستون ببینید مشکل اصلیم هم همینه حداقل می خوام اگر خطا هم داد دیگه کل رکوردام رو پاک نکنه.میدونم سوالام زیاد شد شرمنده و ممنون می شم راهنمایی کنید



if (dataGridView1.RowCount <= 0)
return;
else
{
int counter = 0;
string temp = "";
StreamReader str = new StreamReader(filename);
string all = str.ReadToEnd();
sr.Close();
string[] records = all.Split('#');
string index = DGW.CurrentRow.Cells[0].Value.ToString();
StreamWriter sw = new StreamWriter(filename);
for (int i = 0; i < records.Length - 1; i++)
{
string[] cells = records[i].Split('-');
if (cells[0] != index)
{
temp += counter
+ "-" + cells[1]
+ "-" + cells[2]
+ "-" + cells[3]
+ "-" + cells[4]
+ "-" + cells[5]
+ "-" + cells[6]
+ "-" + cells[7] + "#";
counter++;
}
}
sw.Write("");
sw.Write(temp);
sw.Close();
ShowList();
}
}

RmeXXXXXXXXX
پنج شنبه 21 خرداد 1394, 19:54 عصر
index was outside the bounds of array
مشخصاً این خطا موقعی صادر میشه اندیس ارایه خارج از محدوده باشه.
دقیقاً کدام خط خطا میده.
در ضمن ی نکته توی کد شما ندیدم: اگه کاربر هیچ سطری رو انتخاب نکرده باشه چی؟

mahan0o0
پنج شنبه 21 خرداد 1394, 20:55 عصر
index was outside the bounds of array
مشخصاً این خطا موقعی صادر میشه اندیس ارایه خارج از محدوده باشه.
دقیقاً کدام خط خطا میده.
در ضمن ی نکته توی کد شما ندیدم: اگه کاربر هیچ سطری رو انتخاب نکرده باشه چی؟

سلول اول خودکار انتخابه مشکلی از این بابت نیست از کاربر هم سوال می شه توی این قسمت خطا میده


temp += counter
+ "-" + cells[1]
+ "-" + cells[2]
+ "-" + cells[3]
+ "-" + cells[4]
+ "-" + cells[5]
+ "-" + cells[6]
+ "-" + cells[7] + "#";
counter++;



چیزی که عجیبه اینه که این خطا ممکنه 1000 بار هم از دسنور delete واسه هر رکوردی که میخوای پاک کنی پیش نیاد من چند بار تمام اطلاعات دیتابیس رو پاک کردم و نوشتم بعضی وقتا پیش میاد بعضی وقتا هم نه

RmeXXXXXXXXX
پنج شنبه 21 خرداد 1394, 21:22 عصر
و دستور ایجاد سطرتون؟ منظورم دستوری ک باهاش سلولهای یک سطر رو ایجاد میکنید؟
احتمال زیاد موقع ایجاد سطر، حداقل یکی از 7 سلول ایجاد نمیشه (خطی که split میشه حداقل یک جداکننده (- دش) کم داره).
از حلقه for یا foreach استفاده فرمائید.

temp= counter.ToString();
for(int i=0;i< cells.Lenght;++i)
temp+= "-" + cells[i];