کسر نکردن از موجودی دیتابیس انبار
باسلام خدمت دوستان و بزرگواران
تو پروژم یک کنترل با نام txtNumber دارم که یک عدد از کاربر میگیره و از فیلد ستون CompanyName کم کنه.
اومدم شرطی گذاشتم که اگه کد محصولی (txtSaleCodCommodity) با توجه به محصولی که کاربر انتخاب میکنه پر میشه،اگر با کد محصول دیتابیس (CommodCod) برابر بود اون تعدادی که کاربر وارد کرده رو از تعداد محصولی که کاربر انتخاب کرده کسر کنه.
من از کد زیر استفاده کردم:
if (btnInsert.Text == "درج")
{
db = new LinqToTrazoDataContext();
int Numbertxt = int.Parse(txtNumber.Text), NumberTbl;
string CommodCodTab;
var TabCom = new CommoTable();
CommodCodTab = TabCom.CommodCod;
NumberTbl = Convert.ToInt16(TabCom.CommodNumb);
if (txtSaleCodCommodity.Text == TabCom.CommodCod)
{
NumberTbl = NumberTbl - Numbertxt;
TabCom.CommodNumb = Convert.ToInt16(NumberTbl);
db.CommoTables.InsertOnSubmit(TabCom);
db.SubmitChanges();
}
}
ولی نمیدونم چرااز دیتابیسم کم نمیکنه.
ممنون میشم بهم بگین ایراد کارم کجاست و از چه کدی باید استفاده کنم.
باتشکر از تمام دوستان
نقل قول: کسر نکردن از دیتابیس انبار
شما داری رکورد جدید درج می کنی در صورتی که باید جستجو کنید و رکورد را بدست بیارید و مقدار را بروزرسانی کنید
نقل قول: کسر نکردن از دیتابیس انبار
نقل قول:
نوشته شده توسط
Mahmoud.Afrad
شما داری رکورد جدید درج می کنی در صورتی که باید جستجو کنید و رکورد را بدست بیارید و مقدار را بروزرسانی کنید
یعنی از همچین کدی استفاده کنم:
var tab = from q in db.CommoTables
where txtSaleCodCommodity.Text == q.CommodCod
select q;
اگه از همچین دستوری استفاده کنم، میشه راهنماییم بفرمایی که از چه کدی باید استفاده کنم که از تعداد کالای دیتابیس انبارم کم کنه؟
ممنون میشم راهنماییم کنید از چه کدی استفاده کنم؟
ممنون میشم
نقل قول: کسر نکردن از دیتابیس انبار
نقل قول:
نوشته شده توسط
bmvgod
یعنی از همچین کدی استفاده کنم:
var tab = from q in db.CommoTables
where txtSaleCodCommodity.Text == q.CommodCod
select q;
اگه از همچین دستوری استفاده کنم، میشه راهنماییم بفرمایی که از چه کدی باید استفاده کنم که از تعداد کالای دیتابیس انبارم کم کنه؟
ممنون میشم راهنماییم کنید از چه کدی استفاده کنم؟
ممنون میشم
ممنون میشم کسی بتونه راهنماییم کنه
نقل قول: کسر نکردن از دیتابیس انبار
شما چجوری یه رکورد رو ویرایش میکنی؟ اینم دقیقا همون قضیه ست، کدی که برای ویرایش یک رکورد استفاده میکنی رو بذار تا راهنماییت کنیم
نقل قول: کسر نکردن از دیتابیس انبار
نقل قول:
نوشته شده توسط
mr.sirwan
شما چجوری یه رکورد رو ویرایش میکنی؟ اینم دقیقا همون قضیه ست، کدی که برای ویرایش یک رکورد استفاده میکنی رو بذار تا راهنماییت کنیم
ازین کد برای ویرایش قسمت دیگری از برنامه استفاده میکنم:
SelectedIndexId = int.Parse(dgvSalesInvoi.CurrentRow.Cells["RowFact"].Value.ToString());
db = new LinqToTrazoDataContext();
var fcTableEdit = db.FactorSaleTables.Where(c=>c.RowFact==SelectedIn dexId).Single();
fcTableEdit.CommodCodFact = txtSaleCodCommodity.Text;
fcTableEdit.CommodName = cmbCommodityName.Text;
fcTableEdit.CompanyName = txtNameCO.Text;
fcTableEdit.Number = Int16.Parse(txtNumber.Text);
fcTableEdit.TotalPrice = float.Parse(txtTotalPrice.Text);
fcTableEdit.Weight = float.Parse(txtWeight.Text);
fcTableEdit.TotalWeight = float.Parse(txtTotalWeight.Text);
fcTableEdit.CommodSize = cmbSiz.Text;
fcTableEdit.UnitPrice = float.Parse(txtUnitPrice.Text);
fcTableEdit.Tax = float.Parse(txtTax.Text);
fcTableEdit.Dicount = float.Parse(txtTax.Text);
db.SubmitChanges();
نقل قول: کسر نکردن از دیتابیس انبار
خب دیگه دقیقا همینطوری عمل میکنی اول باید رکورد موردنظرتو واکشی کنی بعد اون فیلدی که مدنظرت هست رو ویرایش میکنی و تمام، به این شکل:SelectedIndexId = int.Parse(dgvSalesInvoi.CurrentRow.Cells["TabComId"].Value.ToString());
db = new LinqToTrazoDataContext();
var TabCom = db.CommoTables.SingleOrDefault(c => c.Id == SelectedIndexId);
if(TabCom != null)
{
TabCom.CommodNumb -= Convert.ToInt16(NumberTbl);
db.SubmitChanges();
}
نقل قول: کسر نکردن از دیتابیس انبار
نقل قول:
نوشته شده توسط
mr.sirwan
خب دیگه دقیقا همینطوری عمل میکنی اول باید رکورد موردنظرتو واکشی کنی بعد اون فیلدی که مدنظرت هست رو ویرایش میکنی و تمام، به این شکل:
SelectedIndexId = int.Parse(dgvSalesInvoi.CurrentRow.Cells["TabComId"].Value.ToString());
db = new LinqToTrazoDataContext();
var TabCom = db.CommoTables.SingleOrDefault(c => c.Id == SelectedIndexId);
if(TabCom != null)
{
TabCom.CommodNumb -= Convert.ToInt16(NumberTbl);
db.SubmitChanges();
}
ببخشید من برا ویرایش قسمت انبارم فاقد گریدویو ست و ازکد زیر استفاده کردم:
CommoTable codeTbable = new CommoTable
{
CommodName = txtCommodName.Text,
CommodGenre = txtCommodGenre.Text,
CommodSize = txtCommodSize.Text,
CompanyName = txtCo.Text,
CommodNumb = Convert.ToInt16(txtCommodNume.Text),
CommodWeight = float.Parse(txtCommodWeight.Text) ,
CommodTotal = float.Parse(txtCommodTotal.Text),
UnitPrice = Int16.Parse(txtUnitPrice.Text),
Dicount = byte.Parse(txtDicount.Text),
Tax = Int16.Parse(txtTax.Text),
};
db.SubmitChanges();
نقل قول: کسر نکردن از دیتابیس انبار
در هر حال روال به همون صورتیه که گفتم: 1. واکشی رکورد موردنظر (حالا به هر طریقی) 2. ویرایش از طریق کدی که نوشتم 3. ذخیره تغییرات
نقل قول: کسر نکردن از دیتابیس انبار
نقل قول:
نوشته شده توسط
mr.sirwan
در هر حال روال به همون صورتیه که گفتم: 1. واکشی رکورد موردنظر (حالا به هر طریقی) 2. ویرایش از طریق کدی که نوشتم 3. ذخیره تغییرات
از طریق کد زیر سعی دارم رکود مورد نظرمو واکشی کنم:
var tab = from q in db.CommoTables
where txtSaleCodCommodity.Text == q.CommodCod
select q.RowCommo;
و با کد زیر تغییراتو انجام و اعمال کنم:
if (tab != null)
{
TabCom.CommodNumb -= Convert.ToInt16(NumberTbl);
db.SubmitChanges();
}
ولی کجای کدم اشتباه هست که روی جدول انبارم اعمال نمیشه نمیدونم؟
نقل قول: کسر نکردن از دیتابیس انبار
نقل قول:
نوشته شده توسط
bmvgod
از طریق کد زیر سعی دارم رکود مورد نظرمو واکشی کنم:
var tab = from q in db.CommoTables
where txtSaleCodCommodity.Text == q.CommodCod
select q.RowCommo;
و با کد زیر تغییراتو انجام و اعمال کنم:
if (tab != null)
{
TabCom.CommodNumb -= Convert.ToInt16(NumberTbl);
db.SubmitChanges();
}
ولی کجای کدم اشتباه هست که روی جدول انبارم اعمال نمیشه نمیدونم؟
تست کنید
foreach (var VARIABLE in tab) {
VARIABLE .CommodNumb -= Convert.ToInt32( NumberTbl);
db.SubmitChanges();
}
نقل قول: کسر نکردن از دیتابیس انبار
چک کنید که اصلا کالایی واکشی میشه یا خیر؟
نقل قول: کسر نکردن از دیتابیس انبار
نقل قول:
نوشته شده توسط
alexmcse
تست کنید
foreach (var VARIABLE in tab) {
VARIABLE .CommodNumb -= Convert.ToInt32( NumberTbl);
db.SubmitChanges();
}
کلا کد به این صورت شد:
var tab = from q in db.CommoTables
where txtSaleCodCommodity.Text == q.CommodCod
select q.RowCommo;
foreach (var r in tab)
{
r.CommodNumb -= Convert.ToInt32(NumberTbl);
db.SubmitChanges();
}
ولی از خط بعد foreach از کلمه CommodNumb خطا میگیره و متن خطا اینه:
نقل قول:
int' does not contain a definition for 'CommodNumb' and no extension method 'CommodNumb' accepting a first argument of type 'int' could be found (are you missing a using directive or an assembly reference?)
ممنون میشم راهنماییم کنید که این کد رو چجوری درست کنم که خروجی بده.
با تشکر از تمامی دوستان
نقل قول: کسر نکردن از دیتابیس انبار
var tab = from q in db.CommoTables
where txtSaleCodCommodity.Text == q.CommodCod
select q.RowCommo;
foreach (var r in tab)
{
var n = r.CommodNumb;
n=n-Convert.ToInt32(NumberTbl);
r.CommodNumb = n;
db.SubmitChanges();
}
3 ضمیمه
نقل قول: کسر نکردن از دیتابیس انبار
نقل قول:
نوشته شده توسط
alexmcse
var tab = from q in db.CommoTables
where txtSaleCodCommodity.Text == q.CommodCod
select q.RowCommo;
foreach (var r in tab)
{
var n = r.CommodNumb;
n=n-Convert.ToInt32(NumberTbl);
r.CommodNumb = n;
db.SubmitChanges();
}
از CommodNumb ایراد میگیره:
ضمیمه 149834
خطای زیر رو میده:
ضمیمه 149835
وقتی بعد از r دات میزنم تو لیست اسمی از CommodNumb نیست:
ضمیمه 149836
کلا بخش اول کدی که مربوط به درج میشه بصورت زیره:
private void btnInsert_Click(object sender, EventArgs e)
{
if (btnInsert.Text == "درج")
{
db = new LinqToTrazoDataContext();
int Numbertxt = int.Parse(txtNumber.Text);
Int16 NumberTbl;
var TabCom = new CommoTable();
NumberTbl =Convert.ToInt16( TabCom.CommodNumb);
var tab = from q in db.CommoTables
where txtSaleCodCommodity.Text == q.CommodCod
select q.RowCommo;
foreach (var r in tab)
{
var n = r.CommodNumb;
n = n - Convert.ToInt16( NumberTbl);
r.CommodNumb = n;
db.SubmitChanges();
}
var fcTable = new FactorSaleTable();
fcTable.SaleDate = DateTime.Now;
fcTable.FactorNo = int.Parse(txtCodFactor.Text);
fcTable.CommodCodFact = txtSaleCodCommodity.Text;
fcTable.CommodName = cmbCommodityName.Text;
fcTable.CompanyName = txtNameCO.Text;
fcTable.Number = Int16.Parse(txtNumber.Text);
fcTable.TotalPrice = float.Parse(txtTotalPrice.Text);
fcTable.Weight = float.Parse(txtWeight.Text);
fcTable.TotalWeight = float.Parse(txtTotalWeight.Text);
fcTable.CommodSize = cmbSiz.Text;
fcTable.UnitPrice = float.Parse(txtUnitPrice.Text);
fcTable.Tax = float.Parse(txtTax.Text);
fcTable.Dicount = float.Parse(txtTax.Text);
db.FactorSaleTables.InsertOnSubmit(fcTable);
db.SubmitChanges();
dgvSalesInvoi.DataSource = db.FactorSaleTables;
}
ممنون میشم از دوستان راهنماییم کنن که چجوری این مشکلو حل کنم
با تشکر از تمامی دوستان
نقل قول: کسر نکردن از دیتابیس انبار
q را بایست سلکت کنید.
//...
select q;
1 ضمیمه
نقل قول: کسر نکردن از دیتابیس انبار
نقل قول:
نوشته شده توسط
Mahmoud.Afrad
q را بایست سلکت کنید.
//...
select q.;
ممنون حل شد.
ولی ازین دو خط ایراد میگیره:
n = n - Convert.ToInt16( NumberTbl);
db.SubmitChanges();
متن خطا هم بصورت زیره:
ضمیمه 149837
خطای دومی برا خط اول کده و هشدار اولی برا خط دوم کده
ممنون میشم راهنماییم کنید که چکار باید بکنم.
باتشکر از تمامی دوستان
نقل قول: کسر نکردن از دیتابیس انبار
خب از خطا مشخصه که نمیتونه تبدیلات رو انجام بده. همیشه مقدار خالی یا null بودنو قبل از انجام عمل محاسباتی در نظر بگیرید با یه if ساده.
نقل قول: کسر نکردن از دیتابیس انبار
نقل قول:
نوشته شده توسط
bmvgod
ممنون حل شد.
ولی ازین دو خط ایراد میگیره:
n = n - Convert.ToInt16( NumberTbl);
db.SubmitChanges();
متن خطا هم بصورت زیره:
ضمیمه 149837
خطای دومی برا خط اول کده و هشدار اولی برا خط دوم کده
ممنون میشم راهنماییم کنید که چکار باید بکنم.
باتشکر از تمامی دوستان
توی دیتابیس int گذاشتید و اینجا int16 یا همون short
تبدیل رو روی ToInt32 قرار بدید
int? a = 12;
int b = Convert.ToInt32(a);
نقل قول: کسر نکردن از دیتابیس انبار
نقل قول:
نوشته شده توسط
Shadow_net
توی دیتابیس int گذاشتید و اینجا int16 یا همون short
تبدیل رو روی ToInt32 قرار بدید
int? a = 12;
int b = Convert.ToInt32(a);
توی دیتابیس فیلد CoomodNumb روی smallint گذاشتم، مقایسه کردم نوع متغییر دیتابیس رو با سی شارپ از نظر بازه عددی smsllint برابر Int16 تو سی شارپ میشه.
با این شیوه تبدیل Type چجوری میشه؟
ممنون میشم راهنماییم کنید
نقل قول: کسر نکردن از دیتابیس انبار
نقل قول:
نوشته شده توسط
Shadow_net
توی دیتابیس int گذاشتید و اینجا int16 یا همون short
تبدیل رو روی ToInt32 قرار بدید
int? a = 12;
int b = Convert.ToInt32(a);
برای تبدیل Type تو سی شارپ برا اینکه نوع داده فیلد CommodNum از نوع Smallint باشه نتونستم تبدیل Type انجام بدم که خطا نگیره و تین نکته برا من مهمه که smallint باشه، چکار باید کنم نمیدونم؟
برا اینکه کارم راه بیفنه CommodNum از نوع int گذاشتمو کدم بصورت زیر درومد:
db = new LinqToTrazoDataContext();
Int32 Numbertxt = int.Parse(txtNumber.Text);
var TabCom = new CommoTable();
NumberTbl =Convert.ToInt32( TabCom.CommodNumb);
var tab = from q in db.CommoTables
where txtSaleCodCommodity.Text == q.CommodCod
select q;
if (tab != null)
{
foreach (var ry in tab)
{
var n = ry.CommodNumb;
n = n - Numbertxt;
//n=TabCom.CommodNumb - Numbertxt;
ry.CommodNumb = n;
db.SubmitChanges();
}
}
ممنون میشم راهنماییم کنید مشکل تبدیل Type تو #C برای Smallint چجوری انجام بدم؟
از نوع Int16 هم میزارم باز گیر میده
باتشکر از نمامی دوستان
نقل قول: کسر نکردن از دیتابیس انبار
نقل قول:
نوشته شده توسط
bmvgod
برای تبدیل Type تو سی شارپ برا اینکه نوع داده فیلد CommodNum از نوع Smallint باشه نتونستم تبدیل Type انجام بدم که خطا نگیره و تین نکته برا من مهمه که smallint باشه، چکار باید کنم نمیدونم؟
برا اینکه کارم راه بیفنه CommodNum از نوع int گذاشتمو کدم بصورت زیر درومد:
db = new LinqToTrazoDataContext();
Int32 Numbertxt = int.Parse(txtNumber.Text);
var TabCom = new CommoTable();
NumberTbl =Convert.ToInt32( TabCom.CommodNumb);
var tab = from q in db.CommoTables
where txtSaleCodCommodity.Text == q.CommodCod
select q;
if (tab != null)
{
foreach (var ry in tab)
{
var n = ry.CommodNumb;
n = n - Numbertxt;
//n=TabCom.CommodNumb - Numbertxt;
ry.CommodNumb = n;
db.SubmitChanges();
}
}
ممنون میشم راهنماییم کنید مشکل تبدیل Type تو #C برای Smallint چجوری انجام بدم؟
از نوع Int16 هم میزارم باز گیر میده
باتشکر از نمامی دوستان
خط 3و4 اصلا برای چی هست؟!! حذفش کنید.
نقل قول: کسر نکردن از دیتابیس انبار
سلام دوست عزیز
سناریو کسر و اضافه کردن به انبار این مدلی نیست که شما بخای هربار یه عددی رو در بانک آپدیت کنید 2 تا روش من کار کردم تابحال
1 - یه ستون باید داشته باشید با عنوان "وارده" و یه فیلد هم "صادره"
هربار جنس اومد = ستون وارده مقدارش ثبت میشه و در ستون صادره مقدار صفر
هربار جنس رفت = ستون صادره مقدارش ثبت میشه و در ستون وارده مقدار صفر
با تابع sum در sql جمع هردو ستون رو میگیری وارده رو منهای صادره میکنی
2- کلا یه ستون در نظر میگیری برای مقدار ، اگر جنس خارج شد مقدارش منفی و اگر وارد شد همون مقدار رو مینویسی بعد با تابع sum کل موجودی رو میده ، هر رکوردی هم حذف بشه یا اضافه بشه موجودی و به راحتی میتونی بگیری