PDA

View Full Version : سوال: شمارش تعداد یک نام خاص از جدول



Helmod
جمعه 04 اردیبهشت 1394, 14:48 عصر
سلام دوستان

من یک فرم دارم که تووی اون فقط یک دکمه و یک تکست باکس قرار داره ! حالا می خوام به دکمه بگم وقتی کلیک شدی برو نامی رو که کاربر در تکست باکس نوشته رو از تووی جدول " Names" بشمار ببین چندتا از این نام وجود داره و پیام بده مثلاً 10 عدد یافت شد ( بانک اطلاعاتی اکسس )

این کد رو مینوسم ارور میده :

using (OleDbConnection A = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Application.StartupPath + "\\DB_2008.accdb"))
using (OleDbCommand Command = new OleDbCommand(" SELECT COUNT (lname) FROM Table1 as total", A))
{

A.Open();
OleDbDataReader DB_Reader = Command.ExecuteReader();
if (DB_Reader.HasRows)
{
DB_Reader.Read();
int id = DB_Reader.GetInt32(0);


MessageBox.Show(" تعداد " + id.ToString() + "");

}


}


130596

Mahmoud Zaad
جمعه 04 اردیبهشت 1394, 17:03 عصر
سلام
الان مشکل توی کوئری شماست، رشته رو باید به صورت '"+Program.CurrentUser+"' بنویسید. البته اگه به صورت پارامتری بنویسید دیگه این مشکلات رو ندارید.
بعد خیلی راحت می تونید نتیجه رو به صورت زیر نشون بدید نیازی به دیتاریدر نیست.
A.Open();
int id = Convert.ToInt32(Command.ExecuteScalar());
A.Close();

malizergani
جمعه 04 اردیبهشت 1394, 17:04 عصر
سلام دوست عزیز

SELECT COUNT(*) AS CountFullName
FROM Customer_table
WHERE (family = 'زرگاني')

Helmod
جمعه 04 اردیبهشت 1394, 17:19 عصر
سلام دوست عزیز

SELECT COUNT(*) AS CountFullName
FROM Customer_table
WHERE (family = 'زرگاني')


شمار از تابع Count فقط برای اعداد باید استفاده کنید نه برای String ایراد کد شما در اینجاست

داداش دمت گرم بد جور جواب داد ! درست شد مرسی

Mahmoud Zaad
جمعه 04 اردیبهشت 1394, 17:37 عصر
سلام دوست عزیز

SELECT COUNT(*) AS CountFullName
FROM Customer_table
WHERE (family = 'زرگاني')


شمار از تابع Count فقط برای اعداد باید استفاده کنید نه برای String ایراد کد شما در اینجاست
منظور داخل تابع Count هست؟ ابداً محدودیتی نداره، مشکل همون بود که عرض کردم البته شما هم نام فامیل رو توی سنیگل کوتیشن ' ' نوشتید.

Helmod
جمعه 04 اردیبهشت 1394, 18:17 عصر
منظور داخل تابع Count هست؟ ابداً محدودیتی نداره، مشکل همون بود که عرض کردم البته شما هم نام فامیل رو توی سنیگل کوتیشن ' ' نوشتید.

بله دقیقاً حق با شماست،‌ البته یه سوال دیگه هم داشتم ، اگه بخوام این اطلاعات مثلاً Table1 رو در یک دیتا گرید ویوو نشون بدم ، فقط باید گزینه Datagridview رو به فرم اضافه کنم و تیبل و بهش وصل کنم ؟ دیگه کد نویسی نمی خواد ؟

آخه من وقتی می خوام بصورت ویزاردی به فرمم دیتاگرید وییو رو اضافه کنم و تیبل رو اتصال بدم به اون ، این خطا رو میده و وقتی فرم لود میشه صفحه خالیه
Could not retrieve schema information for table or view Table1.

130600

Mahmoud Zaad
جمعه 04 اردیبهشت 1394, 18:42 عصر
این خطا نمیدونم چی هست ولی شما با این چند خط میتونید اطلاعات رو توی دیتاگریدویو نمایش بدید(بدون استفاده از ویزارد):

OleDbDataAdapter da = new OleDbDataAdapter("SELECT * from table1", cn);

DataTable dt = new DataTable();

da.Fill(dt);

dataGridView1.DataSource = dt;

Helmod
جمعه 04 اردیبهشت 1394, 19:30 عصر
این خطا نمیدونم چی هست ولی شما با این چند خط میتونید اطلاعات رو توی دیتاگریدویو نمایش بدید(بدون استفاده از ویزارد):

OleDbDataAdapter da = new OleDbDataAdapter("SELECT * from table1", cn);

DataTable dt = new DataTable();

da.Fill(dt);

dataGridView1.DataSource = dt;

داداش دستت درد نکنه ، بخوابی ج داد ! ببخشید اگر خسته کردم شما رو فقط اگر ممکنه اینم ج بدید لطفاً :


یه کمبو باکی دارم که با کد زیر پر میشه :

comboxUserList.Text = "انتخاب کنید";
OleDbConnection CMB = new OleDbConnection();
CMB.ConnectionString = Program.DBPath;
CMB.Open();
OleDbDataReader DR;

string STR = "SELECT UserFName, UserLName FROM Users";


OleDbCommand CMD = new OleDbCommand(STR, CMB);
DR = CMD.ExecuteReader();

while (DR.Read())
{
comboxUserList.Items.Add(DR.GetValue(1));


}

CMB.Close();

سوالم اینه تووی کد بالا فقط یه مقدار دریافت و پر میشه: GetValue[1]q که اونم توی جدول من نام خانوادگی هست، آیا میتونم هم زمان دوتا رو دریافت کنم هم نام و هم نام خانوادگی ؟

بیتا حکمت
جمعه 04 اردیبهشت 1394, 19:35 عصر
سلام . تا حالا با اکسس کار نکردم اما حدس می زنم که DR.GetValue(0) نام کاربری رو برمی گردونه یعنی اگر شما پایین خط 15 بنویسید


comboxUserList.Items.Add(DR.GetValue(0));


نام کاربری هم با کامبوباکس اضافه میشه

Helmod
جمعه 04 اردیبهشت 1394, 19:42 عصر
سلام . تا حالا با اکسس کار نکردم اما حدس می زنم که DR.GetValue(0) نام کاربری رو برمی گردونه یعنی اگر شما پایین خط 15 بنویسید


comboxUserList.Items.Add(DR.GetValue(0));


نام کاربری هم با کامبوباکس اضافه میشه

ممنون از پاسخ شما ولی دستوری که بهش اشاری کردید فقط یه مقدار رو بر میگردونه مثلاً نام ! و کمبو باکس رو پر میکنه ، می خوام هم نام و هم نام خانوادگی رو بخونه و پر کنه و اگر اونجوری بنویسم که اشاره فرمودید در هر بار پر کردن اینتر میکنه مثلاً مینویسه : حامد ( یه خز پائین میاد ) مینویسه پروینی ، من میخوام بنویسه : حامد پروینی بعد بره لاین بعدی بنویسه هومن رضایی و ...

بیتا حکمت
جمعه 04 اردیبهشت 1394, 20:09 عصر
می تونید Name و username رو بهم الحالق کنید .



comboBox1.Items.Add(DR.GetValue(0).ToString() + DR.GetValue(1).ToString());



اگر خطا داد اینو تست کنید




comboBox1.Items.Add(DR.GetValue(0) + DR.GetValue(1));

Helmod
جمعه 04 اردیبهشت 1394, 20:28 عصر
ممنون از راهنماییتون
اولی خطا نمیده ولی درست هم کار نمیکنه


130601

دومی هم که خطا میده

Helmod
جمعه 04 اردیبهشت 1394, 20:31 عصر
این کد ج داد بالاخره ! مرسی از راهنمائی شما

comboxUserList.Items.Add(DR.GetValue(0).ToString() +" "+(DR.GetValue(1).ToString()));

malizergani
جمعه 04 اردیبهشت 1394, 23:13 عصر
داداش دستت درد نکنه ، بخوابی ج داد ! ببخشید اگر خسته کردم شما رو فقط اگر ممکنه اینم ج بدید لطفاً :


یه کمبو باکی دارم که با کد زیر پر میشه :

comboxUserList.Text = "انتخاب کنید";
OleDbConnection CMB = new OleDbConnection();
CMB.ConnectionString = Program.DBPath;
CMB.Open();
OleDbDataReader DR;

string STR = "SELECT UserFName, UserLName FROM Users";


OleDbCommand CMD = new OleDbCommand(STR, CMB);
DR = CMD.ExecuteReader();

while (DR.Read())
{
comboxUserList.Items.Add(DR.GetValue(1));


}

CMB.Close();

سوالم اینه تووی کد بالا فقط یه مقدار دریافت و پر میشه: GetValue[1]q که اونم توی جدول من نام خانوادگی هست، آیا میتونم هم زمان دوتا رو دریافت کنم هم نام و هم نام خانوادگی ؟

comboxUserList.Text = "انتخاب کنید";
OleDbConnection CMB = new OleDbConnection();
CMB.ConnectionString = Program.DBPath;
CMB.Open();
OleDbDataReader DR;

string STR = "SELECT ID,UserFName, UserLName,(UserFName + ' ' + UserLName) as FullName FROM Users";


OleDbCommand CMD = new OleDbCommand(STR, CMB);
DR = CMD.ExecuteReader();

comboxUserList.DataSource = DR;
comboxUserList.DisplayMember = "FullName";
comboxUserList.ValueMember = "ID";

CMB.Close();

malizergani
جمعه 04 اردیبهشت 1394, 23:16 عصر
می تونید Name و username رو بهم الحالق کنید .



comboBox1.Items.Add(DR.GetValue(0).ToString() + DR.GetValue(1).ToString());



اگر خطا داد اینو تست کنید




comboBox1.Items.Add(DR.GetValue(0) + DR.GetValue(1));



DR.GetValue مقدار هر ستون از سطر رو برمیگردونه درواقع مقدار هر Cell