PDA

View Full Version : فیلدهای جدول update



Mahsa Hatefi
دوشنبه 28 اسفند 1385, 13:20 عصر
با سلام و تبریک سال نو به همه عزیزان

فرض بگیرید اطلاعات پرسنلی یک برنامه را قرار است سالی چند بار در جدولی در برنامه ی خودتان دریافت و آپدیت کنید مثلا

نام فامیل پدر تعداد فرزند
رکورد1 - احمد آرامی جواد 2

اما بعد از 6 ماه احمد آرامی یک فرزند دیگر پیدا می کند پس

نام فامیل پدر تعداد فرزند
رکورد1 - احمد آرامی جواد 3

خوب برای اینکه هم رکوردهای جدید اضافه شود و هم رکوردهای حذفی حذف و فیلدهای تغییریافته هم تغییر لازم را پیدا کند ، با دریافت سالی چند بار ، چه روشی را توصیه می کنید

من خودم از این روش استفاده می کنم ابتدا با دستورات sql کلیه اطلاعات را حذف و سپس دوباره از فایل ورودی جدید که بصورت تکست از برنامه ی پرسنل دریافت گردیده ، در جدول مربوطه دریافت می کنم

اولاً آیا این روش منطقی است
ثانیاً اگر نیست روش صحیح و منطقی کدام است ؟

majid325
چهارشنبه 01 فروردین 1386, 20:58 عصر
دوست عزیز من نکته خاصی در سئوال شما نمیبینم اگه نکته ای هست میشه واضح تر بگی...
اگه هم نیست ==> مگه به صورت عادی نمیتونی اطلاعات رکورد ها رو edit کنی؟

davood-ahmadi
جمعه 03 فروردین 1386, 01:52 صبح
من این برداشت را از نوشته های شما دارم که اصل اطلاعات توسط یک برنامه و یا شخص دیگری به شما بصورت یک فایل Text داده می شود و شما هم یک برنامه دارید که در اطلاعات پرسنلی وجود دارد و حالا می خواهید که تغییراتی که در فایل text به شما داده اند را روی برنامه خودتان بریزید. اگر برداشت من صحیح باشد جواب این است: اولا اینکه اطلاعات قبلی حذف می شود و اطلاعات جدید جایگزین می شود یک کار غیراستاندارد است(البته نسبت به نیاز بودن سابقه در کار) . ولی طبق شیوه شما روش منطقی در این گونه برنامه ها این است که شما طبق یک کد خاص مثلا کد پرسنلی یا شماره کارت و غیره کار کنید و آنها فقط لیست تغییرات را به شما بدهند و شما فقط تغییرات در برنامه خود Update کنید. ولی این روشی که شما کار می کنید هم در این صورت درست است که آنها مایل به این کار نباشند و یا توانایی این را نداشته باشند که به شما فقط لیست تغییرات را به همراه کدهای پرسنلی به شما بدهند. چون چاره ای جز این کار نیست و شما هردفعه کل اطلاعات خود را باید عوض کنید.

Mahsa Hatefi
یک شنبه 05 فروردین 1386, 08:28 صبح
دوست عزیز ، دقیقاً منظورم همین بود . فرض کنید اطلاعات پرسنل حدود 15000 نفر باشد که ماهیانه اطلاعات فیلدهای زیادی برای هر رکورد تغییر می کند ، بروزرسانی اطلاعات به روش edit یکی یکی به نظر کار منطقی نمی آید . من یک دریافت کلی بصورت تکست انجام می دهم و سپس در برنامه ی خودم دریافت می کنم اما مشکلی که دارم اینجاست من جداول زیادی دارم که بعضی از آنها رابطه آنها one to many است بنابراین موقع حذف کلیه اطلاعات چون در آن جداول که با فایل پرسنل رابطه ی یک به چند دارد باید تغییراتی در رابطه بدهم و اطلاعات را دریافت کنم و بعد دوباره رابطه ها را اصلاح کنم . منظورم این بود .... حالا آیا راه منطقی تری که حذف اضافه و اصلاح را همزمان انجام دهم بدون دستکاری روابط بین جداول وجود دارد یا نه ؟
متشکرم

Alirezagoodarzi
دوشنبه 06 فروردین 1386, 11:29 صبح
به عنوان یک کار تمیز:
شما بیاد رکوردهای قبلی را آرشیو کنید.
همه تغییرات را با کد اعمال کنید.
اگر آنقدر این کار به دلیل روابط بین جداول شما سخت باشد یا غیر ممکن با کمال احترام بانک شما نرمال نیست و باید در طراحی آن تجدید نظر کنید.

صبا9841
دوشنبه 06 فروردین 1386, 11:45 صبح
من جداول زیادی دارم که بعضی از آنها رابطه آنها one to many است بنابراین موقع حذف کلیه اطلاعات چون در آن جداول که با فایل پرسنل رابطه ی یک به چند دارد باید تغییراتی در رابطه بدهم و اطلاعات را دریافت کنم و بعد دوباره رابطه ها را اصلاح کنم . منظورم این بود .... حالا آیا راه منطقی تری که حذف اضافه و اصلاح را همزمان انجام دهم بدون دستکاری روابط بین جداول وجود دارد یا نه ؟
متشکرم
اینکه دوباره اصلاح کنی یعنی چی؟
اصولاً در جداول رابطه ای اگر گزینه های حذف و به روزرسانی (Delete & Update) انتخاب شده باشد هر تغییری در سطر جدول پدر(طرف یک از یک به چند) منجر به ایجاد تغییر مشابه در سطر جدول فرزند(طرف چند) میشود.
بعبارتی نیازی به حذف یا تغییر در رابطه ها یا جداول مرتبط نیست.

davood-ahmadi
سه شنبه 07 فروردین 1386, 01:59 صبح
چندین راه کار را برای کار شما تست کردم در نهایت به نتیجه ای رسیدم که برنامشو برای شما می گذرام. البته قبل از اجرای برنامه نیاز است که فرمی که در برنامه است را در داخل برنامه خود Import کنید و قبل از اجرای فرم از برنامه خود حمتاً کپی بگیرید. بعد تستش کنید که آیا جواب کار را می دهد یا نه. البته خودم جواب گرفتم. اجرای برنامه به این صورت است که شما جدولی که آماده کردید برای جایگزین جدول قبلی را در همان فرم استفاده کنید. و دکمه جایگزین را بزنید.

Mahsa Hatefi
سه شنبه 07 فروردین 1386, 09:07 صبح
دوست بزرگوار

فایل شما را دریافت کردم خیلی جالب بود واقعاً متشکرم . برای جاهای مختلفی بکار می آید . اما مشکل من کمی پیچیده تر است . فرض کنید از برنامه ای که با +C تحت داس کار می کند من گزارشی ثابت را بصورت خروجی تکست اجرا و در برنامه خودم در یک جدول ثابت باید دریافت کنم . اول به کمک مبدل پارسا تکست مربوطه را به ایران سیستم تبدیل و سپس با اجرای دستورات حذف در SQL ، اطلاعات جدول مربوطه را حذف و اطلاعات جدید را از فایل تکست جدید دریافت می کردم . بعد یه ماژول جالب پیدا کردم که با تعریف طول هر فیلد ، کاراکتر ها را یکی یکی می خواند و به کدپیج فارسی تبدیل و در جدول می ریخت که با این کار user Friendly بودن برنامه را بیشتر می کرد . بنابراین دلم می خواست بدانم آیا روش حذف کلیه رکوردها و سپس جایگزینی اطلاعات جدید روش صحیحی است یا خیر ؟ ثانیاً در هر بار دریافت اطلاعات تفاوتهای زیادی در آن هست مثلا اشخاصی منتقل می شوند که دیگر در لیست نیستند و اشخاصی جدید می آیند که قبلا نبوده اند . حال اگر شما از شخصی که منتقل شده در جداول دیگر که با جدول پرسنل هست اطلاعات وارد کرده باشید مثل دریافت وام ، با حذف شدن آن شخص از جدول پرسنل ، اطلاعات وی در جداول دیگر یا باید حذف گردد که کار صحیحی نیست و یا بلااستفاده و بدون دسترسی در جدول باقی بماند . پس کار مشکل می شود .

متشکرم

davood-ahmadi
سه شنبه 07 فروردین 1386, 16:02 عصر
خواهشم می کنم. حذف کلی و اضافه کردن اطلاعات جدید به جدول یک کار غیر استاندارد است. بعلت اینکه 1- شما اطلاعات قبلی را حذف می کنید و هیچ سابقه ای از آن ندارید 2- بقول خود شما اگر شخصی از لیست حذف بشود اطلاعات دیگرش نیز درخصوص جدولهای دیگر نیز عملاً بلامصرف می شود و بانک شما را از یک بانک اصولی خارج می سازد. 3- نمی دانید که چه اطلاعاتی به اطلاعات جدید اضافه شده است. اگر می شود برای من برنامه تون و توضحاتی راجع به اینکه شما چه اطلاعاتی از آن برنامه تحت داس می گیرید و به کدام جدولها اضافه می کنید در اختیار من بگذارید تا بتوانم بهتر و سریعتر کمکتان کنم. البته اگر خواستید فقط جداولی که با آنها کار داریم را ارسال کنید و یا اینکه می توانید از طریق ایمیل هم بفرستید.
NovinParse@yahoo.com