PDA

View Full Version : حرفه ای: تغییر همزمان اطلاعات چند رکورد ثبت‌شده



Nazir Ahmad
شنبه 24 اسفند 1392, 11:40 صبح
سلام خدمت اساتید گرامی
هرچی بیشتر میگردم کمتر به نتیجه میرسم.
امیدوارم اساتید وقت بذارن و ....
من میخوام با کلیک روی یک دکمه اطلاعاتی که قبلا در چند رکورد یک فیلد، وارد شده رو تغییر بدم. (البته در ساب‌فرم)
یعنی یه ساب فرم داریم که بر اساس نیاز فیلتر شده؛ حالا میخوایم مقادیر یک فیلد رو همزمان به یک مقدار مشخص که در یک تکست‌باکس unbound وارد میکنیم تغییر بدیم.
لطفا راهنمایی کنید

ممنون
یا حق

luckyboy77
شنبه 24 اسفند 1392, 13:34 عصر
بستگی به کد نویسی و نحوه‌ی طراحی فرم شما راه‌های مختلفی وجود داره.
اگه صلاح میدونید نمونه بذارید بهتر میشه کمک کرد.
یک راهش استفاده از دستور UPDATE هستش البته باید شرطی که توی WHERE میذارید شامل همه‌ی رکوردهایی بشه که میخواهید UPDATE کنید.

Nazir Ahmad
یک شنبه 25 اسفند 1392, 10:39 صبح
سلام دوست عزیز
این هم نمونه، توضیحات بیشتر هم در خود ضمیمه هست
FillAllRec.rar (http://www.uplooder.net/cgi-bin/dl.cgi?key=d6b8da414466d41c30285f665b2d6f39)

ممنون
یا حق

luckyboy77
یک شنبه 25 اسفند 1392, 12:29 عصر
سلام دوست عزیز
فایل شمارو دانلود کردم. متاسفانه بانک اطلاعاتی شما نرمال نیست و این اساس مشکل کار شماست. ارتباط بین جداول تعریف نشده و داده‌های پراکنده زیاد داره. به خاطر این مشکلات به روزرسانی اون با استفاده از کد نویسی مشکل میشه و خالی از خطا نخواهد بود.
با این شرایط کاری که شما می‌تونید بکنید اینه که برای جداول مختلف Recordset های متفاوتی تعریف کنید که اطلاعات را بر اساس کمبوباکسهای شما فیلتر کرده و به روز رسانی کنند. یه چیزی شبیه کد زیر

Set rst = db.OpenRecordset("SELECT * FROM _Branch WHERE Branch= " & str_Bakhsh_flt.Text)
حالا می توانید با استفاده از دستور UPDATE رکورد ست را به روز رسانی کنید.

در هر صورت بهترین کار نرمال کردن بانک اطلاعاتی خواهد بود که بروزرسانی جداول را برای شما بسیار ساده و کم هزینه خواهد کرد.

Nazir Ahmad
یک شنبه 25 اسفند 1392, 14:17 عصر
سلام دوست عزیز
فایل شمارو دانلود کردم. متاسفانه بانک اطلاعاتی شما نرمال نیست و این اساس مشکل کار شماست. ارتباط بین جداول تعریف نشده و داده‌های پراکنده زیاد داره. به خاطر این مشکلات به روزرسانی اون با استفاده از کد نویسی مشکل میشه و خالی از خطا نخواهد بود.
با این شرایط کاری که شما می‌تونید بکنید اینه که برای جداول مختلف Recordset های متفاوتی تعریف کنید که اطلاعات را بر اساس کمبوباکسهای شما فیلتر کرده و به روز رسانی کنند. یه چیزی شبیه کد زیر

Set rst = db.OpenRecordset("SELECT * FROM _Branch WHERE Branch= " & str_Bakhsh_flt.Text)
حالا می توانید با استفاده از دستور UPDATE رکورد ست را به روز رسانی کنید.

در هر صورت بهترین کار نرمال کردن بانک اطلاعاتی خواهد بود که بروزرسانی جداول را برای شما بسیار ساده و کم هزینه خواهد کرد.

ممنون دوست گرامی که وقت گذاشتید
از راهنمایی‌های مفیدتون تشکر . دلیل اون هم این بود من جداول و فرمها رو از داخل دیتابیس اصلی کپی کردم و به فایل جدید پیست کردم برای همین تما ارتباط بین اونها از بین رفته بود. برای همین جداول و ارتباطاشون رو اصلاح کردم و فایل رو دوباره ضمیمه کردم. اگر ممکنه لطف کنید و در داخل فایل اصلاحات رو انجام بدید.
FillAllRec2.rar (http://www.uplooder.net/cgi-bin/dl.cgi?key=09d8cfcca43b8e9113f7a579fa41479e)
ممنون
یا حق

luckyboy77
یک شنبه 25 اسفند 1392, 17:07 عصر
دوست گرامی
با پوزش ولی من درست متوجه منظورتون نشدم که فرمودید

مقدار تمام رکوردهای یک فیلد رو به مقدار داخل تکست تغییر بدم (فرقی نمیکنه کدوم فیلد باشه، فقط فیلد ممکنه هم عدد باشه یا تکست)

رکوردهای شما همه منحصر به فرد هست.

لطفا بیشتر راهنمایی کنید. و مسیر اطلاعات را تشریح کنید.

Nazir Ahmad
دوشنبه 26 اسفند 1392, 08:08 صبح
سلام مجدد
مقدار تمام رکوردهای یک فیلد یعنی بهتر بود مینوشتم مقادیر تمام رکوردهای یک فیلد. یعنی با کلیک روی دکمه مقداری که داخل تکست‌باکس هست در تمام رکوردهای یک فیلد ساب‌فرم (مثلا فیلد کلاس یا فیلدی که تیک مارک داره) درج بشه و در صورتیکه در ساب‌فرم رکوردهای یک فیلد اطلاعاتی داشت به مقدار جدید داخل تکست‌باکس تغییر کنه و اگر نداشت هم که باز هم مقدار تکست‌باکس به اون اضافه میشه.
یه حالت دیگه هم اگر امکان داشته باشه بهتره، اینکه مثلا رکوردهایی که فیلد تیک اونا تیک‌مارک داشت اطلاعات داخل تکسـت‌باکس به اون اضافه بشه و اگر تیک‌ نداشت اضافه نشه.

ممنون
یا حق

luckyboy77
دوشنبه 26 اسفند 1392, 15:38 عصر
سلام دوست گرامی
اول عذر میخوام بابت تاخیر در پاسخ.
دوست عزیز منظور شمارو متوجه شدم. با توجه به رابطه‌ی بین جداول که تعریف شده برای فیلدهای سال، Cls، Branch، شیفت و ST-ID فقط کافی است جدول مربوطه را به روز رسانی کنید (البته این تنها روش اصولی می‌باشد زیرا در غیر اینصورت با وارد کردن اطلاعاتی در فیلدهای مذکور که در جدول والد نباشد با پیام خطا مواجه خواهید شد.
اما در مورد سایر فیلدها در جدول Student که رکوردها بر حسب ST-ID منحصر بفرد هستند ولی در جدول Natayej نیاز به محدود کردن دستور با WHERE دارید.
نکته‌ی آخر اینکه چون آپدیت کردن و درج در بانک اطلاعاتی با دستورات SQL نیازمند دانستت نام فیلد و نوع داده‌ی آن می باشد شما حتما باید فیلد یا فیلدهای مورد نظر را بدانید به عنوان پیشنهاد می‌ توانید از یک کمبو باکس یا لیست باکس کمکی جهت مشخص کردن فیلدها برای بروزرسانی یا درج استفاده نمایید.
برنامه با فرض بروزرسانی فیلد ShobeNبرای رکوردهای دارای تیک مارک در جدول Natayej آماده شده است.
فایل اصلاح شده (http://www.4shared.com/rar/1hnkbTblce/FillAllRec2.html)

Nazir Ahmad
سه شنبه 27 اسفند 1392, 08:30 صبح
ممنون luckyboy77 (http://barnamenevis.org/member.php?242350-luckyboy77) عزیز.
تقریبا همونیه که میخواستم؛ اما یه مشکل داره اونم اینه که همونطور که در پست اول گفتم ما ساب فرم رو فیلتر میکنیم (مثلا سال 1391، شعبه اول، کلاس 1(الف) و شیفت صبح) بعدا میخوایم مثلا همون شعبه رو از اول به دوم تغییر بدیم که تنها در همین محدودة فیلتر شده این کار انجام بشه نه در تمام کویری. چون فیلد تیک به شکل پیش‌فرض برای تمام رکوردها انتخاب شده هست.

ممنون
یا حق

luckyboy77
سه شنبه 27 اسفند 1392, 12:17 عصر
دوست گرامی
سلام
بابت تاخیر در پاسخ عذر خواهی می کنم. به خاطر نوروز حسابی سرمون شلوغه.
برنامه بنا به خواسته‌ی شما تغییر داده شد. اگر نقصی هست ببخشید چون با عجله آماده کردم. برنامه با فرض بروزرسانی فیلد ShobeNبرای رکوردهای فیلتر شده در جدول Natayej آماده شده است.
برنامه‌ی اصلاح شده (http://www.4shared.com/rar/3gZ4Ss6Lce/FillAllRec2-1.html)

Nazir Ahmad
چهارشنبه 28 اسفند 1392, 08:24 صبح
با سلام مجدد
باز هم ممنون که وقت گذاشتید و پوزش به خاطر اینقدر سوال که میپرسم.:خجالت:
مشکل اعمال شروط در رکوردهای فیلتر شده حل شد اما باز هم دو تا مشکل دیگه:
1- در صورتیکه هیچ فیلتری موجود نباشه ارور میده و عملیات متوقف میشه.
2- در صورتیکه فیلتر انجام بشه تمام رکوردهای فیلتر شده رو تغییر میده و دیگه به تیک داشتن و یا نداشتن فیلد مورد نظر توجهی نمیکنه.

ممنون
یاحق

luckyboy77
چهارشنبه 28 اسفند 1392, 12:25 عصر
جناب Nazir Ahmad گرامی
همونطور که در پست قبلی عرض کردم بابت نواقص احتمالی عذر می‌خوام. حق با شماست من باید برنامه رو برای تمامی شرایط مختلف تست می کردم ولی به علت اینکه بنده کارمندم و در روزهای پایانی سال وقت بسیار کمی دارم نتونستم برنامه رو کامل تست کنم. در هر صورت امیدوارم مشکلتون حل شده باشد
پیوست (http://www.4shared.com/rar/yks3RSMfba/FillAllRec2-2.html)

Nazir Ahmad
چهارشنبه 28 اسفند 1392, 12:38 عصر
:تشویق:ممنونluckyboy77 (http://barnamenevis.org/member.php?242350-luckyboy77) عزیز