PDA

View Full Version : حرفه ای:سوال در مورد Insert & Update iهمزمان با هم



نیما حتمی
شنبه 10 اردیبهشت 1390, 09:05 صبح
با سلام
بنده برنامه ای نوشتم برای حسابداری که در آن یک گرید هست که بایند نیست و کاربر سطر به سطر سند می زنه در گرید و با زدن دکمه ذخیره اطلاعات وارد شده در گرید در بانک ذخیره می شوند حالا مشکل اینجاست اگه کاربر یادش رفت سندی رو بزنه 2روز بعد یادش اومد که باید در سطر 5 سند می زد میاد سطر 5 رو بین سطر 5و6 ایجاد می کنه و سند رو ثبت می کنه چطور این سند رو در بانک Update یا Insert کنم?اگه کاربر بخواد سطری رو editکنه مشکلی نیست اما اگه بخواد سندی رو جدید بزنه و اون رو Insert یا Update کنه نمی دونم داستان چطور میشه
اینم عکس برنامه و چگونگی ثبت سند در آن69345
توضیح:نحوه کار به این صورت است که کاربر وقتی میاد سند رو بزنه(سندی رو که یادش رفته بود بزنه)در بالا دکمه ایجاد ردیف رو می زنه بین ردیف 1 و 2 ردیف 2 جدید ایجاد میشه و سند 2 قدیمی تبدیل به سند شماره 3 میشه و کاربر در سطر 2 سند رو می زنه و بعدش نمی دونم چیکار باید بکنم اینجا به بعدو .اساتید محترم خواهشن کمکم کنید خیلی روش فکر کردم راهی نتونشتم پیدا کنم.در واقع عمل INSERT چطور باید انجام بشه؟

hashemi85sep
شنبه 10 اردیبهشت 1390, 10:15 صبح
سلام دوست عزیز
شماره ردیفی رو که ایجاد میکنی بهتره که update کنی
چون که شماره ردیف داره و بر اساس همین شماره ردیف میتونی update کنی..
به این صورت که شما یه فرم به نام edit بساز و textbox های مربوطه رو بزار و خاصیت Modify اونا رو public کن واطلاعات دیتا گرید رو ارسال کن به صفحه بعد ..
و بعد اطلاعات جدید رو وارد کن ...

اگه متوجه نشدی بگو تا نمونه کد بزارم

نیما حتمی
شنبه 10 اردیبهشت 1390, 10:36 صبح
متوجه نشدم دوستم؟میشه بیشتر توضیح بدی

hashemi85sep
شنبه 10 اردیبهشت 1390, 15:27 عصر
متوجه نشدم دوستم؟میشه بیشتر توضیح بدی
سلام دوست عزیز
این فایل رو اجرا کن
با دوبار کلیک روی سطر انتخابی صفحه ویرایش باز میشه

http://parsaspace.com/files/2843984884/?c=732
http://parsaspace.com/files/0843984884/?c=732

دیتا بیس و پروژه رو چدا آپلود کردم

نیما حتمی
شنبه 10 اردیبهشت 1390, 16:10 عصر
آقا این چطوری کار می کنه؟تکس باکسها چه نقشی دارن؟من تو برنامم تکس باکس استفاده نمی کنم
خیلی ممنونماز زحمتی که کشیدین ولی ظاهرا شما سوال رو درست متوجه نشدین دوباره سوال رو به دقت بخونید با تشکر

hashemi85sep
شنبه 10 اردیبهشت 1390, 18:24 عصر
سلام
دوست عزیز مگه شما نمیخواین که ردیفی رو که بعدا ایجاد میکنید فیلد هاشو پر کنید ؟
؟؟؟؟؟

نیما حتمی
یک شنبه 11 اردیبهشت 1390, 09:37 صبح
ببینین در برنامه من چیزی بنام تکس باکس وجود نداره.کاربر در گریدی که بایند نیست سطر به سطر داده وارد می کنه بعد با زدن دکمه ذخیره دادهای سطرها در بانک ذخیره می شوند.حالا اگه کاربر سطری رو جا انداخت میاد ایجاد سطر می کنه(عکس تایپیک بالا) ودر همان سطرس که ایجاد میکه داده وارد می کنه می خوام در این حالت وقتی کاربر دکمه ذخیره زد سیستم بره اون سطری رو کاربر اضافه کرده رو به سطرهای دیگه در بانک اضافه کنه.چون برنامه حسابداریه و سندها باید به ترتیب پشت سر هم باشند

نیما حتمی
یک شنبه 11 اردیبهشت 1390, 10:23 صبح
مدیران محترم سایت به دادم برسین.ظاهرا سوالم فراتر از سخت هستش:گریه:

Amir Oveisi
یک شنبه 11 اردیبهشت 1390, 10:32 صبح
ردیف هاتون چه نقشی دارند؟ آیا جزو PK محسوب میشن یا خیر؟

نیما حتمی
یک شنبه 11 اردیبهشت 1390, 11:22 صبح
ردیفها فقط حکم شماره سطر رو دارن و pk نیستن.و چون برنامه حسابداری هست شماره سطرها باید پشت سر هم به ترتیب باشن یعنی کاربر اگر سند زد و اون سند دارای 20 سطر بود و یادش رفت که مثلا سطر 12 رو وارد کنه(12 رو وارد کرده ولی در واقع 12 ،12 نبوده 13 بوده) میاد روی سطر 12 وا میسته و ایجاد ردیف رو می زنه سطر 12 ایجاد میشه و 12 قبلی به 13 تبدیل میشه.حالا کاربر در سطر 12 جدید داده وارد میکنه حالا دو تا مشکل هست
1-آپدت شماره سطرها در بانک چون همه سطر ها از اون سطری که سطر اضافه شده( نه از اولین سطر گرید) یکی بالا رفته
2-ذخیره (insert)سطر جدید در بانک

Amir Oveisi
یک شنبه 11 اردیبهشت 1390, 13:51 عصر
خوب اول سطری رو که اشتباه وارد شده پیدا کنید و به ازای همه سطرهایی که شماره اون ها از این سطر بزرگتره، شماره اون ها رو +1 کنید. در آخر هم سطر جدید رو insert کنید.

نیما حتمی
یک شنبه 11 اردیبهشت 1390, 14:53 عصر
دوست عزیز سطری اشتباه وارد نشده در واقع اینطوری بگم بهتره (سطری می بایست وارد می شده در محل خودش ولی وارد نشده)حالا چطوری سطری که وارد نشده در جای خودش حالا که کاربر اومده اون سطر رو ایجاد کرده چطور بگه برو اون سطر رو insert کن.اگه گذاشتن سورس برنامه می تونی شما رو در حل این مشکل من یاری کنه بفرمایید بزارم تا بتونین بیشتر راهنماییم کنین

hashemi85sep
یک شنبه 11 اردیبهشت 1390, 19:03 عصر
دوست عزیز سطری اشتباه وارد نشده در واقع اینطوری بگم بهتره (سطری می بایست وارد می شده در محل خودش ولی وارد نشده)حالا چطوری سطری که وارد نشده در جای خودش حالا که کاربر اومده اون سطر رو ایجاد کرده چطور بگه برو اون سطر رو insert کن.اگه گذاشتن سورس برنامه می تونی شما رو در حل این مشکل من یاری کنه بفرمایید بزارم تا بتونین بیشتر راهنماییم کنین
دوست عزیز مثل اینکه شما برنامه ای رو که فرستادم اصلا نگاه نکردید
اینی که من گفتم دقیقا همین چیزیه که شما میخواین ،

نیما حتمی
دوشنبه 12 اردیبهشت 1390, 07:58 صبح
والا این برنامه ای که شما برای من زحمتشو کشیدین هیچ ربطی به سوال من نداره.از اساتید ومدیران محترم سایت خواهش می کنم سوال بنده رو با برنامه این دوست محترممون مقایسه کنن ببینن شاید من اشتباه می کنم

نیما حتمی
دوشنبه 12 اردیبهشت 1390, 07:59 صبح
سوال بنده سخت هست ولی نه به اون سختی که یک نفر هم نتونه پاسخ بده.دوستان یکی جواب من رو بی زحمت بده من خیلی کامل توضیح دادم سوالمو

Amir Oveisi
دوشنبه 12 اردیبهشت 1390, 10:46 صبح
سوالتون سخت نیست، به نظر من سناریو کارتون اشتباهه.
فرض کنید 1000000 تا رکورد دارید، یک جایی بعدا متوجه میشید که مثلا رکورد 13، شمارش 13 نبوده بلکه باید 12 می بوده، حالا اگر بخواید این مشکل رو به شیوه ای که گفتید اصلاح کنید، از رکورد 13 تا 1000000 رو باید update کنید که کار متداولی نیست.


دوست عزیز سطری اشتباه وارد نشده در واقع اینطوری بگم بهتره (سطری می بایست وارد می شده در محل خودش ولی وارد نشده)
بر اساس توضیحات شما در پست های قبلی، برداشت من این بوده که:
فرضا 20 تا سند داریم که هر کدوم شماره داره. زمان وارد کردن اطلاعات این سند ها، اشتباهی شماره سند 13 ام رو 12 وارد می کنیم. پس باید برای تصحیح اون سند با شماره 12 رو پیدا کنیم و شماره اون رو 13 کنیم و همه سند های بعد از اون رو هم شمارشونو +1 کنیم. در آخر هم سند 12 ام که باید شمارش 12 باشه (و از قلم افتاده بود و وارد نشده بود) رو وارد می کنیم. پس میشه همون چیزی که در پست قبلی عرض کردم.

موفق باشید

نیما حتمی
دوشنبه 12 اردیبهشت 1390, 11:44 صبح
نه دوست عزیز منظور من از پستها این بود که اگه کاربر بخوارد یه سندی بین 10و11 بزنه(اصلا اشتباه وارد شدن رو فراموش کنین) در واقع 11 میشه 12 و یه ردیف 11 جدید ایجاد میشه چطوری سیستم بیاد از سطر اول گرید تا سطر آخرو بگرده ببینه کدوم سند جدید وارد شده اونو Insert کنه و شماره ردیفهای از اون سطر(11)به بعدو 1 اضافه کنه. همین

Amir Oveisi
دوشنبه 12 اردیبهشت 1390, 11:52 صبح
چطوری سیستم بیاد از سطر اول گرید تا سطر آخرو بگرده ببینه کدوم سند جدید وارد شده اونو Insert کنه و شماره ردیفهای از اون سطر(11)به بعدو 1 اضافه کنه
باز هم با همون روشی که در پست قبلی عرض کردم انجام میشه!
شما میدونین که بین سطر x و x+1 (مثلا 10و11) دارید سطر جدید اضافه می کنید، پس:

از سطر x+1 (شماره 11) تا آخرین سطر، به ازای هر سطر، شماره اونو +1 میکنید. (شماره 11 قبلی الان شده 12 و بقیه سطرهای بعد از اون هم 13و14و...) (Update)
سطر جدید رو وارد می کنید با شماره 11. (Insert)

نیما حتمی
دوشنبه 12 اردیبهشت 1390, 13:34 عصر
خیلی ممنونم ازتون ولی این کارارو کردم جواب نمی ده.نمی دونم چرا ؟چندین بار هم چک کردم که نکونه اشتباه کرده باشم ولی بازم جواب نداد.واقعا کلافم کرده امیر جان

Amir Oveisi
دوشنبه 12 اردیبهشت 1390, 13:45 عصر
منظور از "جواب نمیده" دقیقا چی هست؟ چه اتفاقی میفته؟

نیما حتمی
دوشنبه 12 اردیبهشت 1390, 14:09 عصر
نه ارورری می ده نه اعمال میشه تغییراتی که نوشتم.این کدی هستش که میره در هر جایی که کاربر خواست ردیف با ذکر شماره سطر ایجاد می کنه.حالا شما بفرمایین چی کجاش بنویسم


dataGridView1.Rows.Insert(dataGridView1.CurrentRow .Index + 1, 1);
dataGridView1.Rows[dataGridView1.CurrentRow.Index + 1].Cells[0].Value = b + 1;
if (b == 1)
{
for (int i = b; i < dataGridView1.Rows.Count; i++)
dataGridView1.Rows[i].Cells[0].Value = b + i;
}
else
{
for (int i = b + 1; i < dataGridView1.Rows.Count; i++)
{
int z = int.Parse(dataGridView1.Rows[i].Cells[0].Value.ToString());
z = z + 1;
dataGridView1.Rows[i].Cells[0].Value = z.ToString();
dataGridView1.Rows[dataGridView1.Rows.Count - 1].Cells[0].Value = dataGridView1.Rows.Count;
}

Amir Oveisi
دوشنبه 12 اردیبهشت 1390, 14:20 عصر
مقدار b چی هست؟ if برای چه کاریه؟ for آخرین خط دستورش واسه چیه؟

حالا گذشته از این ها، شما فقط دارید تو gridview تغییرات رو میدید، چطور به دیتابیس اعمال کردید این تغییرات رو؟

نیما حتمی
دوشنبه 12 اردیبهشت 1390, 16:09 عصر
b شماره ردیف سطری است که کاربر انتخابش میکنه که سطر جدید زیر اون ایجاد بشه.
ifیزای اینه که اگر کاربر در اولین سطر بود و خواست سطر جدید ایجاد کنه شماره ردیفش درست محاسبه بشه اگه این کارو نکنم شماره ردیف 2 یه عدد دیگه میشه.
for دستور آخرش واسه اینه که همیشه شماره آخرین سطر برابر با تعداد سطرهای گرید باشه

Amir Oveisi
دوشنبه 12 اردیبهشت 1390, 16:36 عصر
جواب سوال آخر رو ندادید

نیما حتمی
سه شنبه 13 اردیبهشت 1390, 11:23 صبح
چطور اعمال شدنش تو دیتا بیس رو نمی دونم کجای این دستوران بگنجونم.میشه با توجه به داشته هام بگین چیکار کنم؟شما همین دستوران رو در یک دکمه بزارین و در گرید اعمال کنین و دستوراتی که فرمودین بنویسم هم خودتون در این کد من اعمال کنین ببینین میشه؟

alimanam
چهارشنبه 14 اردیبهشت 1390, 17:08 عصر
با سلام

شما میتونی خیلی راحت این کار رو انجام بدی البته من اطلاعاتی از جدول دیتابیس شما ندارم ؟ به سوال زیر پاسخ بدین بقیه اش خیلی ساده است :

آیا جدول دارای Primary Key هست ؟ اگه خیر شما بر چه اساس یک ردیف رو آپدیت میکنین ؟!!!
آیا شماره سطر رو در جدول ذخیره میکنین ؟!!!

نیما حتمی
یک شنبه 18 اردیبهشت 1390, 09:09 صبح
با سلام خدمت شما دوست عزیز

ببینین من دوتا گرید دارم در فرمم که در یکی اطلاعات خلاصه سند و در دیگری اطلاعات خود سند قرار میگیره.حالا هر سندی که زده میشه دارای شماره قبضه .مثلا در شماره قبض 12 ردیفهای 1 تا 100 ثبت شدن.در 13 دوبار ه 1 تا 100 .این موضوع محدودیت نداره.چون در هر سندی شماره ردیف تکراری وجود داره نمیشه primary key در نظر بگیرم.من براساس شماره قبض اون سند میام سطرهاشو آپدیت می کنم.میگم بیا سندهایی رو آپدیت کن که شماره قبضشون A باشه چون در اسناد شماره قبض یونیکه.چطور به سادگی امکان پذیره ؟

نیما حتمی
سه شنبه 20 اردیبهشت 1390, 08:14 صبح
آقای alimanam شما گفتین به سادگی میشه پس چی سد برادر؟

alimanam
سه شنبه 20 اردیبهشت 1390, 13:18 عصر
با سلام


آقای alimanam شما گفتین به سادگی میشه پس چی سد برادر؟

برادر ! من بیشتر توی تالار وی بی فعال هستم کمتر به تالار سی شارپ سر میزنم Sorry

و اما بعد ! ببین این کدی که واست نوشتم به دردت میخوره ؟ البته باید به کد سی شارپ تبدیلش کنی چون با سی شارپ سرناسازگاری دارم ببخشید

نیما حتمی
سه شنبه 20 اردیبهشت 1390, 15:14 عصر
خیلی ممنونم از جوابتون چطور convert کنم به c#

alimanam
سه شنبه 20 اردیبهشت 1390, 21:16 عصر
با سلام

هم میتونی از نرم افزارهای ویندوزی استفاده کنی هم میتونی از این سایت (http://www.developerfusion.com/tools/convert/vb-to-csharp/) استفاده کنی .

موفق باشید ./