PDA

View Full Version : سوال: مشکل در تغییر مقادیر آخرین رکورد ذخیره شده در جدول



MINA B
جمعه 27 تیر 1393, 22:32 عصر
سلام دوستان .میدونم طولانیه ولی خواهش می کنم کمکم کنید الان دو ساعته دنبال راه حلم کلافه شدم به خدا:ناراحت:
من یه سری چک باکس دارم مربوط به امکانات یک ملک درون فرم مربوط به درج یک ملک. مقادیر اولیه همه ی این امکانات را در دیتابیس 0 گذاشتم حالا میخوام هر بار که درج صورت میگیره اگه چک باکسی علامت خورده بود مقدارش به یک تغییر کنه یه تابع نوشتم که آخرین مقدار کلید ذخیره شده رو به string تبدیل می کنه و این مقدار رو پاس میدم به تک تک توابعی که قراره مقدار اون امکانات رو به یک تبدیل کنن در صورتی که چک باکس علامت خورده بود
public string Get_maxcodeemkanat()
{
this.Open();
string sql = "select max(Codeemkanat) from tbl_emkanat";
cmd.CommandText = sql;
dt.Clear();
daa.Fill(dt);
this.Close();
return dt.Rows[0].ItemArray.GetValue(0).ToString();
}
کد بالا رو برای گرفتن آخرین مقدار کلید نوشتم.
public void Set_ab(string a)
{
this.Open();
string sql = "insert into tbl_emkanat(Ab) values(1) where Codeemkanat=@a";
cmd.CommandText = sql;
cmd.Parameters.AddWithValue("@a",a);
cmd.ExecuteNonQuery();
this.Close();
}
به جای string a هم مقداری که تابع Get_maxcodeemkanat برمی گردونه رو قرار میدم .
موقع اجرا error می گیره.

Rejnev
جمعه 27 تیر 1393, 22:44 عصر
سلام.
متن خطا رو هم بذارید تا ببینیم از کجا خطا میگیره...

پ.ن:این که برای تک تک فیلد ها تابع برای بروز رسانی بسازین فکر جالبی نیست، مگر این که دلیل خاصی داشته باشین.

MINA B
جمعه 27 تیر 1393, 22:50 عصر
سلام.
متن خطا رو هم بذارید تا ببینیم از کجا خطا میگیره...

پ.ن:این که برای تک تک فیلد ها تابع برای بروز رسانی بسازین فکر جالبی نیست، مگر این که دلیل خاصی داشته باشین.
این متن خطا Incorrect syntax near the keyword 'where'.
متاسفانه من با 10 جلسه کلاس سی شارپ که چیز های خیلی ساده تری رو گفته بودن دارم کد می نویسم تا آخر مردادم بیشتر وقت ندارم
به همین دلیل اولین راهی که به ذهنم برسه رو می نویسم که چون هیچی بلد نیستم طولانین!

sohil_ww
جمعه 27 تیر 1393, 23:05 عصر
در دستور اینسرت شرط قرار نمی گیره مگر اینکه برای اینسرت از یک select دیگه استفاده بشه

sohil_ww
جمعه 27 تیر 1393, 23:06 عصر
سعی کنید کدت هاتونو تو تگ مربوطه قرار بدید تا خوانا بشه

MINA B
جمعه 27 تیر 1393, 23:13 عصر
سعی کنید کدت هاتونو تو تگ مربوطه قرار بدید تا خوانا بشه

public string Get_maxcodeemkanat() {
this.Open();
string sql = "select max(Codeemkanat) from tbl_emkanat";
cmd.CommandText = sql;
dt.Clear();
daa.Fill(dt);
this.Close();
return dt.Rows[0].ItemArray.GetValue(0).ToString();
}

public void Set_ab(string a) {
this.Open();
string sql = "insert into tbl_emkanat(Ab) values(1) where Codeemkanat=@a";
cmd.CommandText = sql;
cmd.Parameters.AddWithValue("@a",a);
cmd.ExecuteNonQuery();
this.Close();
}

if (checkBox1.Checked) {
db.Set_ab(db.Get_maxcodeemkanat());
}

MINA B
جمعه 27 تیر 1393, 23:15 عصر
دو تا کد اول رو تو یه کلاس جداگانه به اسم database قرار دادم بعد پشت دکمه ی ثبت همراه با یه سری کد دیگه کد سوم رو نوشتم

sohil_ww
جمعه 27 تیر 1393, 23:36 عصر
insert into tbl_emkanat(Ab) values(1) where Codeemkanat=@a";
همنجور که گفتم ما شرط where تو دستور insert نداری و اگه شما تو دیتا بیست قبلا به اون فیلد مقدار دادی و می خوایش ویرایشش کنی باید از شرط update استفاده کنی پس کئوری شما می شه
update tbl_emkanat set ab=1 where codeemkanat=@a
موفق باشی

MINA B
شنبه 28 تیر 1393, 00:01 صبح
insert into tbl_emkanat(Ab) values(1) where Codeemkanat=@a";
همنجور که گفتم ما شرط where تو دستور insert نداری و اگه شما تو دیتا بیست قبلا به اون فیلد مقدار دادی و می خوایش ویرایشش کنی باید از شرط update استفاده کنی پس کئوری شما می شه
update tbl_emkanat set ab=1 where codeemkanat=@a
موفق باشی
وای چه اشتباه بزرگی! ممنون
اون error قبلی رفع شد اما کدم کار نمی کنه امکانات با تیک خوردن همون 0 باقی می مونه دستوری که برای تبدیل data table به string نوشتم درسته؟

sohil_ww
شنبه 28 تیر 1393, 00:10 صبح
string sql = "select max(Codeemkanat) from tbl_emkanat";
اول از همه این کد بزرگترین مقدارو برمی گردنونه و نه آخرین مقدار و مگر اینکه ساختار بانکتون به این صورت باشه و دوم از همه اینکه من اصلا دقیق نمی دونم می خواید چی کار کنید تو متادتون که خطایی نمی بینم اگه اروروی می ده متن ارور بزارید اگه نه که مرحله به مرحله برنامه رو تست کنید تا متوجه بشید مشکل از کجاست

MINA B
شنبه 28 تیر 1393, 00:27 صبح
string sql = "select max(Codeemkanat) from tbl_emkanat";
اول از همه این کد بزرگترین مقدارو برمی گردنونه و نه آخرین مقدار و مگر اینکه ساختار بانکتون به این صورت باشه و دوم از همه اینکه من اصلا دقیق نمی دونم می خواید چی کار کنید تو متادتون که خطایی نمی بینم اگه اروروی می ده متن ارور بزارید اگه نه که مرحله به مرحله برنامه رو تست کنید تا متوجه بشید مشکل از کجاست
کد امکاناتم خودش اتومات افزایش پیدا می کنه.
راستش خودمم چند بار موقع کد نوشتن قاطی کردم که دارم چه کار می کنم!
موقعی که ملکو می خوام ثبت کنم اول یه رکورد به جدول امکاناتم اضافه می کنم که همه ی فیلد هاش 0 هست.بعد آخرین کد امکانات رو از طریق تابع اول می گیرم و به عنوان آرگومان ورودی میدم به تابع (Set_ab(string a .
بعد اگه چک باکس تیک خورده بود تابع Set_ab(string a رو صدا میزنم. میشه اگه راه حل دیگه ای میدونین راهنماییم کنین واقعا شرمنده ام ولی چند ساعته درگیر این قسمت هستم.

MINA B
شنبه 28 تیر 1393, 00:58 صبح
همونطور که گفتین تست کردم برنامه رو و کد مربوط به تابع Get_maxcodeemkanat کار نمی کنه:ناراحت:

MINA B
شنبه 28 تیر 1393, 12:00 عصر
همونطور که گفتین تست کردم برنامه رو و کد مربوط به تابع Get_maxcodeemkanat کار نمی کنه:ناراحت:
راه حلی نبود؟ :گریه:

MINA B
شنبه 28 تیر 1393, 12:38 عصر
من دوباره برنامه رو چک کردم تابعم درسته یه مشکلی توی شرط دستور آپدیت کردن کد امکانات وجود داره