PDA

View Full Version : استفاده از SQL بر روی داده های ذخیره شده در حافظه



Mohammadi_F
دوشنبه 14 اسفند 1385, 16:44 عصر
سلام
قبلا من توی چند تاپیک در مورد برنامه ای که در حال بهینه کردن اون هستم سوالاتی رو پرسیده بودم که دوستان هم لطف کردند و جوابهای بسیار خوبی رو داده بودند .
عکسی رو که در قسمت زمیمه گذاشتم ، بخشی از جداول برنامم است که فیلدهای اصلی و نحوه ارتباط رو نشون می ده.
الان چند سوال دارم که امیدوارم بازهم دوستان اطلاعاتشون رو دریغ نکنند.
من توی این برنامه (یعنی در ویرایش جدید) از SQLServer2000 و دلفی 2006 و ADOوClientDataSet استفاده کردم. یکی از مهمترین مشکلات برنامه قبلی من و همچنین این برنامه نحوه وارد کردن اطلاعات در این چهار جدوله که بصورت تو در تو (همانطور که در دیاگرام دیده میشه) بهم وصل هستند ، یعنی با وارد کردن اطلاعات در جدول Afrad(بالاترین سطح از جداول) در 99% موارد یک یا چند رکورد به جدول Avarez بایستی اضافه شود(توسط کاربر) و به همین ترتیب برای باقی جداول تا پایین ترین سطح که جدول Ahyan باشه.
در مورد طراحی فرم وارد کردن اطلاعات برای این چهار جدول قبلا یک تاپیک گذاشته بودم که دوستان لطف کردند و جوابهای خوبی دادند.
فیلدهای اصلی جداول: (Afrad:ParvandehAlpha,ParvandehNumوAvarez:AYearو Arseh:LocateوAhyan:Masaleh) که این فیلدها توسط کاربر قابل تغییرند. بنابراین من به ازاء هر کدام از فیلدهای اصلی یک فیلد جدا تعریف کردم که از دید کاربر مخفی باشه و فقط برای ارتباط جداول استفاده بشه.(Afrad:ParvandehNoوAvarez:YearNoوArseh:Lo cateNo)
این فیلدها بصورت خودکار توسط برنامه مقدار می گیرند که صد البته بایستی یونیک باشند.
با افزودن یک رکورد(سال جدید) به جدول Avarez بایستی تمامی اطلاعات جدول Arseh,Ahyan مربوط به سال قبل از این سال در صورت وجود داشتن به سال جدید منتقل شود.
اما سوالاتم:
1- چه جوری مقدار جدید یونیک برای فیلدهای جدول تولید کنم ؟ از SQL نمی تونم استفاده کنم چون امکان داره که کاربر چند رکورد به جدول اضافه کنه و اونا رو Apply نکنه ، یعنی فقط توی حافظه محلی باشه وبه سرور نرفته باشه تا جزء نتایج SQL باشه. میشه از یه متغیر برای نگهداری بزرگترین مقدار استفاده کرد که نیاز به کنترل مداوم داره. راه دیگه ای نیست؟
2- مقادیر جداول ArsehوAhyan رو وقتی که یک رکورد به جدول Avarez اضافه می کنم چه جوری به سال جدید منتقل کنم؟(در صورت اضافه شدن یک رکورد به جدول Avarez بایستی مقادیر جداول ArsehوAhyan مربوط به سال قبل از این سال به سال جدید منتقل شود).
حتما می پرسید این مشکلات رو توی ویرایش قبلی برنامه چه جوری حل کرده بودم. تمام این مسائل وقتی پیش اومد که خواستم برنامه رو بصورت دو لایه بنویسم و از ClientDataSet استفاده کردم تا هر کار بر با یک کپی از اطلاعات کار کنه و بعد از انجام تغییرات اون رو به Server بفرسته ، توی ویرایش قبلی چون اطلاعات بصورت آنی به جدول اصلی منتقل میشد به راحتی از دستورات SQL برای حل این مشکلات استفاده می کردم ولی در حالتی که قسمتی از اطلاعات در حافظه محلی وجود داره که هنوز به Server ارسال نشده نمی دونم چه کار کنم .
معذرت می خوام که سرتون رو درد آوردم و اگه خیلی شلم شوربا نوشته بودم ببخشید.