PDA

View Full Version : حلقه for و مقدار دهی متغیر



sadra1234
یک شنبه 26 تیر 1390, 17:32 عصر
سلام دوستان
یه برنامه نوشتم برای درج اطلاعات اقساط درون دیتا بیس
می خوام که با یک بار ورود اطلاعات تعداد رکورد مشخصی(تعداد اقساط)درون دیتابیسم ذخیره بشه
برای اینکار از یه حلقه استفاد کردم
ولی مشکلی که دارم اینه که باید قسط اول با سررسید وارد شده توسط کاربر ثبت بشه و اقساط بعدی با فاصله ای که کاربر وارد می کند(فاصله اقساط)از قسط اول ثبت بشن(سررسید هر قسط به اندازه فاصله اقساط از قسط قبلی خود فاصله داشته باش)
دوم اینکه یه فیلدی دارم با نام شماره قسط که نشاندهنده شماره هر قسط هست.
برنامه رو ضمیمه کردم اگه دوستان لطف کنن و منو تو حل این دومسئه راهنمایی کنن منون میشم.

Legend M.A.R
یک شنبه 26 تیر 1390, 19:57 عصر
حلقه رو به این شکل تغییر بده فکر کنم مشکلت حل بشه

cmd.CommandText = "insert into main values(@shobe,@kelase,@name,@tas,@mablagh,@sar,@no ) "
+ "declare @_Result int select @_Result = max(no) from main select @_Result as num";
cmd.Parameters.AddWithValue("@shobe", txtsho.Text);
cmd.Parameters.AddWithValue("@kelase", txtkelase.Text);
cmd.Parameters.AddWithValue("@name", txtname.Text);
cmd.Parameters.AddWithValue("@tas", txttas.Text);
cmd.Parameters.AddWithValue("@mablagh", txtmablagh.Text);
cmd.Parameters.AddWithValue("@sar", sar2);
cmd.Parameters.AddWithValue("@no", n);
cmd.Connection = con;
using (OleDbDataReader g_readNumber = cmd.ExecuteReader())
if (g_readNumber.Read())
n = g_readNumber.GetInt32(g_readNumber.GetOrdinal("num"));
cmd.Parameters.Clear();


توی کوئری هم شماره قسط به صورت خودکار به متغییر n داده میشه البته اگر متغییر هاتو اشتباه نکرده باشم
موفق باشی

sadra1234
دوشنبه 27 تیر 1390, 09:52 صبح
سلام
جناب
Legend M.A.R

ممنون از جوابتون ولی اگه ممکنه این کدی رو که زحمت کشیدین یه بار امتحان کنید ، من تست کردم خطا میده.

Legend M.A.R
دوشنبه 27 تیر 1390, 12:33 عصر
حداقل بگو چه خطایی میده؟
برنامه رو تریس کن ببین تو کدوم قسمت خطا میده چون من فقط query رو روی یکی از بانک های خودم امتحان کردم و درست بود, اگر ممکنه برنامه رو توی try...catch بزار و یک exception هم سر راهش قرار بده ببین متن خطا چیه

sadra1234
دوشنبه 27 تیر 1390, 19:32 عصر
سلام
شما این کدی رو که گذاشتین اولا فکر کنم فقط برای ثبت شماره قسط باشه
دوما خطای تعریف نشدن g_readNumber رو میده.
لطفا روی سورسی که گذاشتم امتحان کنید و نتیجه رو اعلام کنید
متشکرم

Legend M.A.R
دوشنبه 27 تیر 1390, 19:46 عصر
سلام
شما این کدی رو که گذاشتین اولا فکر کنم فقط برای ثبت شماره قسط باشه
دوما خطای تعریف نشدن g_readNumber رو میده.
لطفا روی سورسی که گذاشتم امتحان کنید و نتیجه رو اعلام کنید
متشکرم

اگر دقت کنید تمام کار ها رو انجام میده اول اطلاعات قسط رو ثبت می کنه بعد بزرگترین شماره قسط رو پیدا میکنه و اون رو بر می گردونه با افزودن یک واحد به مقدار برگشتی شما می تونید شماره قسط بعدی رو مشخص کنید در ضمن من نمی دونم ساختار بانک اطلاعاتی شما چیه خودتون باید کد رو بر اساس ساختار خودتون تغییر بدید
مورد دیگه ای که گفتید در مورد g_readNumber محل تعریف و استفاده مشخصه یعنی توی محدوده using دقت کنید
using (OleDbDataReader g_readNumber = cmd.ExecuteReader())
if (g_readNumber.Read())
n = g_readNumber.GetInt32(g_readNumber.GetOrdinal("num "));

حالا اگر به g_readNumber گیر میده ممکنه زمان خوندن اون این خطا رو میده یعنی خط آخر بنابر این تابع GetInt32 رو بر اساس نوع متغییر شماره خودتون باید تغییر بدین مورد دیگه ای توی کد نمی بینم که بخواد خطا ایجاد کنه البته یادم نیست شما قبل از خط ExecuteReader() آیا Connection.Open() رو اجرا کردید یا نه, یعنی ارتباط با بانک فعال شده یا نه؟

sadra1234
سه شنبه 28 تیر 1390, 13:23 عصر
سلام
من اطلاعات رو توی یه دیتا گرید ویو نشان دادم درست ثبت میشه
اگه بخوام اونا رو از داخل دیتا گرید ویو به بانک انتقال بدم باید چکار کنم؟

Legend M.A.R
سه شنبه 28 تیر 1390, 14:15 عصر
سلام
من اطلاعات رو توی یه دیتا گرید ویو نشان دادم درست ثبت میشه
اگه بخوام اونا رو از داخل دیتا گرید ویو به بانک انتقال بدم باید چکار کنم؟
اگر منظورت خوندن اطلاعات هست که می تونی توی حلقه و با استفاده از مثلا زیر می تونی از اطلاعات هر سطر استفاده کنی
string g_results;
DataGridView g_dataGrid = new DataGridView();
foreach (DataGridViewRow g_row in g_dataGrid.Rows)
for (int g_i = 0; g_i < g_row.Cells.Count; g_i++)
g_results = g_row.Cells[g_i].Value.ToString();

sadra1234
چهارشنبه 29 تیر 1390, 07:03 صبح
به نظر من باید برای هرکدام از فیلدها یه متغیر تعریف کنیم و بع از مقدار دهی به اونا ، با ارسال پارامتر اونا رو ثبت کنیم