PDA

View Full Version : سوال: کم کردن مقدار از یک فیلد



sirmohsen
جمعه 04 اسفند 1391, 12:52 عصر
سلام دوستان من برنامه ای با C#‎ و بانک اکسس نوشتم حالا میخوام وقتی یک جنس فروخته میشه از مقدار کلش تو اکسس کم بشه این دستورم نوشتم ولی eror میده لطفا کمک کنید

try
{
int b = int.Parse(fi.Text);
int a = int.Parse(maj.Text);
maj.Text = (a + b).ToString();
dataGridView1.Rows.Add(code.Text, name.Text, fi.Text);
//باقی مانده
OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Application.StartupPath + "\\Lebas.accdb");
OleDbCommand cmd = new OleDbCommand("", con);
string a1 = "Update lebas set num =num-" + 1.ToString() + "where code=" + code.Text;
cmd.CommandText = a1;
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
catch
{
MessageBox.Show(" مشکلی روی داده دوباره امتحان کنید", "Eror");
}

ferankyy
جمعه 04 اسفند 1391, 13:39 عصر
شما ابتدا باید مقدار فیلد داخل جدول رو select کنی و در ادامه ازش کم کنی و دوباره Update کنید .

sirmohsen
جمعه 04 اسفند 1391, 14:03 عصر
من نمیفهمم دستور selecto کجا بنویسم میشه کد منو ویرایش کنید

ferankyy
جمعه 04 اسفند 1391, 14:16 عصر
try
{
int b = int.Parse(fi.Text);
int a = int.Parse(maj.Text);
maj.Text = (a + b).ToString();
dataGridView1.Rows.Add(code.Text, name.Text, fi.Text);
//باقی مانده
OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12. 0;Data Source=" + Application.StartupPath + "\\Lebas.accdb");
OleDbCommand cmd = new OleDbCommand("", con);
string a1="Select num From leabs where code="+code;
cmd.CommandText=a1;
con.Open();
int cuurval=int.Parse(cmd.ExecuteScalar());
cuurval-=1;
a1 = "Update lebas set num ="+cuurval+" where code=" + code.Text;

cmd.CommandText = a1;
con.Close();
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
catch
{
MessageBox.Show(" مشکلی روی داده دوباره امتحان کنید", "Eror");

}

sirmohsen
جمعه 04 اسفند 1391, 14:44 عصر
این syntax eror میده int cuurval=int.Parse(cmd.ExecuteScalar()); این قسمت اشتباهه

ferankyy
جمعه 04 اسفند 1391, 14:47 عصر
int.Parse رو بردار

sirmohsen
جمعه 04 اسفند 1391, 14:50 عصر
بازم همون ایرادو داره

ali_habibi1384
جمعه 04 اسفند 1391, 14:52 عصر
در برنامه هاي حسابداري فيلدي بنام موجودي در جدول ديتا بيس ايجاد نميشه . اين فيلد در اثر جمع و تفريق فاكتورهاي خريد و فروش از كالاي خاص طي دوره با انضمام موجودي اول دوره بصورت فيلد واسط ظاهر ميشه.
كدهايي رو كه نوشتيد لطفا داخل تگ مربوطه (#C) قرار بديد ، طوريكه شما نوشتيد خيلي ناخوانا و نا منظم هستند

sirmohsen
جمعه 04 اسفند 1391, 14:59 عصر
try
{
int b = int.Parse(fi.Text);
int a = int.Parse(maj.Text);
maj.Text = (a + b).ToString();
dataGridView1.Rows.Add(code.Text, name.Text, fi.Text);
//باقی مانده
OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Application.StartupPath + "\\Lebas.accdb");
OleDbCommand cmd = new OleDbCommand("", con);
string a1 = "Update lebas set num =num-" + 1.ToString() + "where code=" + code.Text;
cmd.CommandText = a1;
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
catch
{
MessageBox.Show(" مشکلی روی داده دوباره امتحان کنید", "Eror");
}

sirmohsen
جمعه 04 اسفند 1391, 15:02 عصر
من قبلا تو sql این کارو کردم نمیدونم چرا تو اکسس نمیشه

ferankyy
جمعه 04 اسفند 1391, 15:11 عصر
int cuurval=int.Parse(cmd.ExecuteScalar().ToString());

sirmohsen
جمعه 04 اسفند 1391, 15:38 عصر
syntax یر طرف شد
ولی کار نمیکنه بازم run time میده

ma.rad
جمعه 04 اسفند 1391, 15:59 عصر
همانطور که دوستمون ferankyy (http://barnamenevis.org/member.php?101096-ferankyy) گفتن ابتدا اون فیلد رو فراخوانی کنید و نیاز نیست تو بانک ،مقدار کم یا زیاد کنید، بعد عملیات لازم رو روش انجام بدید وسپس فیلد مورد نظر آپدیت کنید.

sirmohsen
جمعه 04 اسفند 1391, 19:15 عصر
من اینکارو کردم دستور سلکت رو هم همونطور که گفتن وارد کردم ولی برنامه باز eror میده

cherchil_hra
شنبه 05 اسفند 1391, 14:09 عصر
سلام دوستان من برنامه ای با C#‎‎‎‎‎‎ و بانک اکسس نوشتم حالا میخوام وقتی یک جنس فروخته میشه از مقدار کلش تو اکسس کم بشه این دستورم نوشتم ولی eror میده لطفا کمک کنید

try
{
int b = int.Parse(fi.Text);
int a = int.Parse(maj.Text);
maj.Text = (a + b).ToString();
dataGridView1.Rows.Add(code.Text, name.Text, fi.Text);
//باقی مانده
OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Application.StartupPath + "\\Lebas.accdb");
OleDbCommand cmd = new OleDbCommand("", con);
string a1 = "Update lebas set num =num-" + 1.ToString() + "where code=" + code.Text;
cmd.CommandText = a1;
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
catch
{
MessageBox.Show(" مشکلی روی داده دوباره امتحان کنید", "Eror");
}


نیاز به دو کار نیست:
1. استفاده از دستور select، برای اینکه اول مقدار رو بدست بیاری و بعد یکی ازش کم کنی و بعد از اون در Update استفاده کنی
2. یکی هم 1.ToString()

شما داخل دستور Update این کار رو انجام بده:
UPDATE Lebas SET num=num-1 WHERE code=1;

دوتا پیشنهاد:
1.موقع استفاده از try catch اول خودت خطاها رو ببین چیه (بفهمی سمت db مشکل هست یا برنامه)، بعد اگه نخواستی کار خاصی روی خطاها انجام بدی یک پیغام کلی بذار! مثلا اینجا شما نمی دونی err که بهت میده چیه.

2.دستورات Sql رو با استفاده از پارامترها ایجاد کن و یا از String.Format استفاده کن تا رشته ای که در کد دیده و ایجاد میشه خواناتر و کم خطاتر بشه

مثلا:String.Format("UPDATE Lebas SET num=num-{0} WHERE code={1}", tedad, code)

موفق باشید!