PDA

View Full Version : سوال: جستجوی رکورد در پایگاه داده Access



saluck
جمعه 27 شهریور 1388, 10:23 صبح
سلام من می خوام وقتی کاربر فیلد تکراری وارد کرد . در پایگاه داده ام که اکسس است جستجو انجام بدم. و سپس اگر تکراری بود پیام بده . این جستج رو چطوری انجام بدم؟:گیج:

sysman_20
جمعه 27 شهریور 1388, 14:21 عصر
خب اگه پایگاهتو در یه dataGridView بریزی می تونی از روش ساده زیر استفاده کنی


foreach (DataGridViewRow dgr in dataGridView1.Rows)
if (dgr.Cells["نام فیلد مورد نظر برای جستجو"].Value.ToString() == textBox1.Text)
MessageBox.Show("Error");

این کد میاد مقادیر موجود یک فیلد رو در دیتاگرید مقایسه میکنه

Vahid_moghaddam
جمعه 27 شهریور 1388, 14:29 عصر
می تونید اطلاعات رو در یک datatable یا یک لیست قرار بدید و به جای جستجو در پایگاه داده در این لیست جستجو کنید. این لیست مشخصه که باید update بشه

saluck
شنبه 28 شهریور 1388, 16:39 عصر
از پاسختون ممنونم. میشه بیشتر توضیح بدین. نفهمیدم.

Vahid_moghaddam
یک شنبه 29 شهریور 1388, 12:39 عصر
فرض کنید می خواید اسم تکراری وارد نشه. تمام اسم ها یا قسمتی که لازم می شه رو بخونید و در یک لیست ژنریک قرار بدید.


List<string> names=....


حالا وقتی اسمی وارد می شه می تونید از دستور زیر استفاده کنید



if (names.IndexOf( new name )!=-1)
{
تکراری
}


و اگر اسم تکراری نبود بعد از ذخیره در دیتابیس، اسم رو به لیست اضافه کنید.

Sajjad.Aghapour
یک شنبه 29 شهریور 1388, 12:53 عصر
نیازی به این کارا نیست....


cmd.CommandText="select * from users where username='GoogleA5'";
connection.Open();
SqlDataReader reader=cmd.ExecuteReader();

if(reader.Read())
{
//GoogleA5 exists
}
reader.Close();
connection.Close();


...
موفق باشید/
...

Vahid_moghaddam
یک شنبه 29 شهریور 1388, 14:48 عصر
cmd.CommandText="select * from users where username='GoogleA5'";
connection.Open();
SqlDataReader reader=cmd.ExecuteReader();

if(reader.Read())
{
//GoogleA5 exists
}
reader.Close();
connection.Close();


فکر می کنم هر چی کمتر به طور مستقیم سراغ دیتابیس بریم بهتره.

saluck
دوشنبه 30 شهریور 1388, 14:50 عصر
فرض کنید می خواید اسم تکراری وارد نشه. تمام اسم ها یا قسمتی که لازم می شه رو بخونید و در یک لیست ژنریک قرار بدید.


List<string> names=....
حالا وقتی اسمی وارد می شه می تونید از دستور زیر استفاده کنید



if (names.IndexOf( new name )!=-1)
{
تکراری
}
و اگر اسم تکراری نبود بعد از ذخیره در دیتابیس، اسم رو به لیست اضافه کنید.
من که اصلا سر درنیاوردم چی میگین. من مبتدی ام. کجا بنویسم و چی رو؟

Vahid_moghaddam
دوشنبه 30 شهریور 1388, 17:49 عصر
اینجا دو تا روش گفته شد. روشی که دوستمون sajjadlove در پست6 گفتند و روشی که من پیشنهاد دادم. هر دو درست هستند و معایب و مزایای خودشون رو دارن. هر کدوم براتون راحت تره، همون رو استفاده کنید.
شما داده ها رو از دیتابیس می خونید، مثلا با datareader یا اونها رو در یک table قرار می دید یا از معماری سه لایه استفاده می کنید، به هر روش، بالاخره داده ها رو دارید. فرض کنید یکی از فیلدهای شما فیبد نام هست و نمی خواید که نام تکراری وارد دیتابیس بشه. اگه این فیلد کلید باشه برنامه به شما خطا می ده. می تونید از این خطا استفاده کنید. اگه کلید نباشه، یا به هر دلیلی نخواید هنگام update خطا رخ بده، می تونید مثل روش پست 6 ابتدا چک کنید نام تکراری هست یا نه. اما روشی که من گفتم.
شما یک لیست ژنریک درست می کنید. فرض می کنیم فیلد نام از نوع string هست.


List<string> names=new List<string>();

حالا این لیست رو با نام هایی که از دیتابیس خوندید به هر روشی که دوست دارید پر می کنید. مثلا با foreach


foreach (DataRow row in Table)
names.Add ( row["Name"].ToString());

حالا نام ها رو خوندید و اونها رو در لیست دارید. وقتی نام جدیدی قراره وارد دیتابیس بشه، چک می کنید آیا این مقدار در لیست شما یعنی names هست یا نه. اگر بود نمی گذارید تراکنش انجام بشه. برای اینکه ببینید مقداری در لیست هست یا نه از IndexOf می تونید استفاده کنید. اگه مقدار در لیست نباشه خروجی IndexOf می شه 1-
اگر نام تکراری نبود و نام رو وارد دیتابیس کردید، این نام رو باید به لیست خودتون اضافه کنید تا برای نام های بعدی مورد بررسی قرار بگیره. همچنین اگر نامی رو از دیتابیس Delete کردید اون رو از لیست هم با تابع Remove حذف کنید.

zhashemi
یک شنبه 08 فروردین 1389, 21:08 عصر
سلام من می خوام وقتی کاربر فیلد تکراری وارد کرد . در پایگاه داده ام که اکسس است جستجو انجام بدم. و سپس اگر تکراری بود پیام بده . این جستج رو چطوری انجام بدم؟:گیج:


با توجه به اینکه شما کدی قابل فهم میخواهید :اگرفیلد موردنظر شماکلید است من حلقهTry رو پیشنهادمیکنم:

}try
کدهای برنامه(نیازی به کد جستجونیست)
}
}catch
;("کد تکراری است")messagebox.show
}:چشمک: