PDA

View Full Version : سوال: درج شماره رديف در يك محدوده خاص در يكي از فيلدهاي ديتابيس نه ديتاگريد



patrick5053
پنج شنبه 24 فروردین 1391, 08:43 صبح
سلام، من يك تيبل در اسكيوال 2008 دارم كه شامل ، رديف، تاريخ، شرح ، بدهكار و بستانكار است؛ حالا ميخوام از يك تاريخ تا يك تاريخ خاص رو از يك تا تعدادي كه در بين اين دو تاريخ هست شماره بخوره، البته گفتم ميخوام در فيلد رديف كه در خود ديتابيس هست اين كار انجام بشه، نوع فيلد رديف هم اينتيجر هست، من از دستور for استفاده كردم ولي مياد آمار كل رديفها رو توي هر سطر در فيلد رديف درج ميكنه، مثلا اگه 10 ركورد هست مياد فيلد رديف هر 10 تا ركورد رو ميزنه 10 ، از يك شروع نميكنه، راستي سرچ هم كردم و راههايي وجود داشت البته براي خود ديتاگريد بود نه در ديتابيس، لطفا كمك كنيد. (زباني كه استفاده ميكنم سي شارپ 2008 است).

patrick5053
پنج شنبه 24 فروردین 1391, 09:03 صبح
سلام، دستوري كه من استفاده كردم،
for (int i = 0; i < datagridview.rowcount; i++)
}
connection.open();
command.commandtexe = "update table a set shomareh='"+ i.tostring() +"'";
command.executcommand;
connection.close();
{
ولي اين دستور آمار كل محدوده رو در فيلد رديف درج ميكنه ، من ميخوام از يك تا تعداد پيدا شده شرع به درج كنه، لطفا كمك كنيد:اشتباه::ناراحت::افسرده:

petross
پنج شنبه 24 فروردین 1391, 09:05 صبح
با سلام
میشه دستوری که در حلقه for نوشتی را قرار بدهید احتمالا شما دارید در هر بار تمامی رکورد ها را بروزرسانی می کنید که در نهایت عدد 10 برای همه قرار می گیرد

petross
پنج شنبه 24 فروردین 1391, 09:07 صبح
در این دستور شما هیچگونه شرطی برای بروز رسانی اینکه کدام رکورد باید چه مقداری رو بگیرد ننوشتین
شمامی توانید مثلا براساس یک فیلد کلید یک شرط قرار بدهید تا عدد گذاری درست انجام شود

patrick5053
پنج شنبه 24 فروردین 1391, 09:17 صبح
سلام دوست عزيز، اتفاقا منم همين حدس زدم، من مثلا با فيلد id شرت گذاشتم كه ركوردي رو ويرايش كنه كه id اون ركورد برابر با id همون روكورد باشه ولي انجوري به سطرهاي ديگه نميره و فقط همون ركورد رو شماره ميزنه.
ميشه يك نمونه كد رو برام بنويسي البته اگه زحمتي نيست.

patrick5053
پنج شنبه 24 فروردین 1391, 09:29 صبح
اگه ميشه كمك كنيد خيلي واجبه، لطفا.

tehran11
پنج شنبه 24 فروردین 1391, 10:02 صبح
for (int i = 0; i < datagridview.rowcount; i++)
}
connection.open();
command.commandtexe = "update table a set shomareh='"+ i.tostring() +"'";
command.executcommand;
connection.close();
دوست عزیز، شما تو این حلقه تمام رکودهاتو به تعداد خودشون آپدیت میکنه.
هرچند کاری رو که مد نظریه میتونی تو یه پروسیجر داخل دیتابیس انجام بدی.
به هر حال؛ من برنامه شما رو تغییرش دادم، به این شکل
for (int i = 0; i < datagridview.rowcount; i++)
{
connection.open();
command.commandtexe = "update table a set shomareh='"+ i.tostring() +"' where ID = " + i.tostring();
command.executcommand;
connection.close();
}
با این کد هر رکوردی که فیلد ID اون برابر متغیر i باشه، فیلد shomarehش آپدیت میشه.
اگه میخوای تو تعداد خواصی از رکوردات این تغییرات اعمال بشه، باید اول تعدادشونو بدست بیاری (از تاریخ شروع تا پایان)؛ بعد حلقه for رو به اون تعداد تنظیم کنی و اونوقت دیتابیستو آپدیت کنی

راه دیگشم اینه که اگه فقط برای نمایش اطلاعاتت داری این کارو انجام میدی، بعد از اینکه تو gridview اطلاعاتتو پر کردی، یه ستون اظافه کنی و با یه شمارنده توش ردیفها تو بذاری که البته این کار تغییری تو دیتابیست نمیده و فقط ردیف رو نمایش میده.

patrick5053
پنج شنبه 24 فروردین 1391, 10:16 صبح
حالا من با اين روش فرض كنيد از ركورد 10 تا ركورد 20 رو بخوام شماره بدم، در اين حالت تعداد ركورد من 10تا ميشه و فيلد id هم از 10 به بعد شروع ميشه اونوقت متغير دستور for تا بياد كه به 10 برسه دستور for تموم ميشه و اين كار انجام نميشه.

patrick5053
پنج شنبه 24 فروردین 1391, 10:19 صبح
من ميخوام وابسته به فيلدهاي جدول نباشه يعني با متغير آمار بگيره مثل دلفي

patrick5053
پنج شنبه 24 فروردین 1391, 10:53 صبح
توي زبان دلفي اين كار خيلي راحته، يعني سي شارپ با اين قدرت يه همچين كاري رو نميتونه مثل دلفي مستقل انجام بده؟

patrick5053
پنج شنبه 24 فروردین 1391, 12:09 عصر
اوه عجب سوال سختي شد هيچكس نميتونه جواب بده، اهاي كسي بلد نيست؟

patrick5053
شنبه 26 فروردین 1391, 09:06 صبح
كمك كنيد لطفا، اگه كسي باشه كه اين سوال رو جواب بده من حاضرم دستمزدش رو هم بهش بدم.