PDA

View Full Version : به روز رسانی خودکار اطلاعات جداول در SQL



sirvan-me
شنبه 27 خرداد 1391, 20:18 عصر
سلام به همه ی دوستان . من می خوام راهی رو پیدا کنم که بتونم یک فیلد خاص از جدولم که حاوی مانده حساب بانکی افراده ، هر ماه به روز بشه ( برای همه ی رکوردهایی که فاصله به روز رسانی قبلیشون با به روز رسانی جدید 1 ماهه ) برای انجام خودکار این به روز رسانی چه راهی رو پیشنهاد می کنید ؟ ممنون میشم کمکم کنید ....

Arash_janusV3
شنبه 27 خرداد 1391, 21:17 عصر
چرا به روز رسانی را می خواهید ذخیره کنید؟
آن را می توانید به صورت محاسبه انجام بدید
شما در view یک فیلد مجازی ایجاد کنید که در آن بتواند به طور مثال a را از b کم کند(a-b=c)
و c یعنی مانده
این بهترین روشه و برای مانده یک فیلد ذخیره سازی در نظر گرفتن درست نیست

sirvan-me
شنبه 27 خرداد 1391, 21:35 عصر
میشه یذره بیشتر راجع به روشی که گفتین توضیح بدین .... ببینید من دو تا جدول دارم یکی سپرده بلند مدت یکی کوتاه مدت می خوام فیلد مانده حساب تو کوتاه مدت ( سود بلند مدت ) هر ماه بر حسب فیلد مانده تو بلند مدت به روز رسانی بشه ( مثلا سود 21 درصد ) .... و هر بار که کاربر خواست گزارش بگیره اطلاعات باشه .....

Arash_janusV3
شنبه 27 خرداد 1391, 21:58 عصر
لطفا فیلدهای که در تیبل وجود داره را بگید
و توضیح مختصری در مورد فیلدهای مهم هم بگید
با توضیحاتی که شما دادید خیلی نمی شه با قاطعیت کمک کرد

sirvan-me
یک شنبه 28 خرداد 1391, 20:55 عصر
دو جدول به نام های Boland_Modat و Kutah_Modat دارم که فیلد های جدول Boland_Modat : شماره حساب ، نام ، نام خانوادگی ، ش شناسنامه ، ش ملی ، تاریخ افتتاح حساب ، تاریخ واریز پول ، مانده حساب و جدول Kutah_Modat : شماره حساب ، نام ، نام خانوادگی ، ش شناسنامه ، ش ملی ، تاریخ افتتاح حساب ، تاریخ واریز پول ، تاریخ آخرین به روز رسانی ، مانده حساب


عملکرد به اینصورته که وقتی مشتری حساب باز می کنه ( بلند مدت ) همزمان علاوه بر ساخت یه رکورد تو جدول بلند مدت تو جدول کوتاه مدت یه رکورد جداگونه براش ساخته میشه ( بیشتر اطلاعات اولیه رو از جدول بلند مدت می گیره ) ، مانده حساب اولیه این مشتری تو کوتاه مدت 21 درصد مانده حساب جاری حساب بلند مدتشه .... خب کاری نداریم حالا می خوام برنامم ، فیلد مانده حساب ( که در واقع سود ماهیانه 21 درصدی فیلد بلند مدته ) همه ی رکورد های جدول کوتاه مدتم رو هر زمان که اختلاف مقدار فیلد تاریخ به روز رسانیشون با تاریخ روز جاری 1 ماه بود به روز کنه یعنی به فیلد مانده حساب کوتاه مدت که گفتم 21 درصد مانده حساب بلند مدت اضافه بشه ..... :متفکر:

Arash_janusV3
یک شنبه 28 خرداد 1391, 21:01 عصر
می شه یک مثال کاربردی هم بزنید ؟
پس مبلغ واریز را کجا وارد می کنید؟

آیا کوتاه مدت را برای واریز سود بلند مدت می خواهید؟
درصد همیشه 21 درصد ثابت است؟

sirvan-me
یک شنبه 28 خرداد 1391, 21:05 عصر
مبلغ واریزی مربوط به هر حساب تو مانده حساب مربوطه قرار میگیره دیگه !!!!! درصد هم همیشه 21 درصده ( البته فعلا )

sirvan-me
یک شنبه 28 خرداد 1391, 21:09 عصر
من خودم به این صورت گذاشتم که هر بار برنامه Run میشه تاریخ روز رو می گیره بعد با فیلد تاریخ آخرین به روز رسانی جدول کوتاه مدت مقایسه می کنه اگر ... Update می کنه ... اما فکر نکنم اینطوری زیاد جالب باشه ....

کد مبتدیانستا ..... اگه اشکالاتشم بگی که دیگه .... :چشمک:

string Date_Temp = Persian.Miladi2Shamsi(DateTime.Now);
string[] Numbers_Date_Temp = Date_Temp.Split('/');
int Year_Date = Convert.ToInt16(Numbers_Date_Temp[0]);
int Munth_Date = Convert.ToInt16(Numbers_Date_Temp[1]);
int Day_Date = Convert.ToInt16(Numbers_Date_Temp[2]);

con.ConnectionString = "SERVER = .;DATABASE = Seporde_Kutah_Modat;INTEGRATED SECURITY = true";
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = "SELECT Number,Tarikhe_akh_b,Mande FROM Kutah_Modat";
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
con.Open();
DataSet ds = new DataSet();
da.Fill(ds, "Kutah_Modat");
dtgv.DataSource = ds;
dtgv.DataMember = "Kutah_Modat";


for (int i = 0; i < (dtgv.Rows.Count - 1); i++)
{
string Number_Of_Customer = dtgv.Rows[i].Cells[0].Value.ToString();
string Temp_Date_Database = dtgv.Rows[i].Cells[1].Value.ToString();
Int64 Mablagh_kutah_m_ghabli = Convert.ToInt64(dtgv.Rows[i].Cells[2].Value.ToString());
string[] Numbers_Temp_Date_Database = Temp_Date_Database.Split('/');
int Year = Convert.ToInt16(Numbers_Temp_Date_Database[0]);
int Munth = Convert.ToInt16(Numbers_Temp_Date_Database[1]);
int Day = Convert.ToInt16(Numbers_Temp_Date_Database[2]);
int Diffrence_Munth = Munth_Date - Munth;

cmd.CommandText = "SELECT Mande FROM Boland_Modat";

da.SelectCommand = cmd;
da.Fill(ds, "Boland_Modat");
dtgv2.DataSource = ds;
dtgv2.DataMember = "Boland_Modat";

if (Year_Date == Year && Day_Date == Day && Diffrence_Munth == 1)
{
Int64 Mablagh_kutah_m_baedi = Convert.ToInt64(dtgv2.Rows[i].Cells[0].Value.ToString());

Mablagh_kutah_m_baedi *= 21;
Mablagh_kutah_m_baedi /= 100;
Mablagh_kutah_m_ghabli += Mablagh_kutah_m_baedi;


cmd.CommandText = "UPDATE Kutah_Modat SET Tarikhe_akh_b=@Tarikhe_akh_b,Mande=@Mande wHERE Number=@Number";
cmd.Parameters.AddWithValue("@Tarikhe_akh_b", Date_Temp.Trim());
cmd.Parameters.AddWithValue("@Mande",Mablagh_kutah_m_ghabli.ToString());
cmd.Parameters.AddWithValue("@Number", Number_Of_Customer);
cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
}

}
con.Close();

Arash_janusV3
یک شنبه 28 خرداد 1391, 21:23 عصر
جداول شما باید اصلاح شود
شما نیاز ندارید در جدول کوتاه مدت آن همه اطلاعات ذخیره کنید
باید فیلدهای تکراری در کوتاه مدت را حذف کنید و فقط یک ID از بلند مدت در کوتاه مدت بگذازید

و شما باید فیلد سود را در view محاسبه کنید که فیلد مبلغ در 100 تقسیم می شود و در 21 ضرب تا سود به دست بیاید
و در کوتاه مدت یک فیلد به نام پرداخت سود دارید
وقتی کاربری پرداخت را می زند در view باید این عدد را منهای سود کنید که مانده حساب آخر صفر شود

sirvan-me
دوشنبه 29 خرداد 1391, 09:36 صبح
مرسی از جوابتون ... اما میشه مرجعی رو برای یادگیری View ها تو sql معرفی کنید . من راجع به View ها چیزی نمیدونم .... باز هم ممنون