PDA

View Full Version : سوال: بایگانی اطلاعات در دلفی



farzadkamali
جمعه 08 دی 1391, 13:10 عصر
با سلام خدمت دوستان

چه طوری می شه اطلاعات رو در دلفی بایگانی کرد؟

به طور مثال یه جدول داریم به نام جدول هزینه ها و یه جدول پرداختی.

حالا می خوایم با شروع هر سال جدید این دو جدول خالی بشه. اما داده های سال قبل رو هم می خوایم داشته باشیم. ولی یه جای دیگه بایگانی کنیم.حالا چه توی یه جدول دیگه باشه یا به هر شکل دیگه. و با نوشتن سال، به بایگانی اون سال دسترسی داشته باشیم.

دوستان راه حلی ندارن؟ لطفاً توضیح بدید.

ممنون

mohsen24000
جمعه 08 دی 1391, 13:13 عصر
بهتره که شما موقع واکشی اطلاعات از جداول، بیایی فقط سطرهایی که تاریخ اونها مربوط به امسال هست رو فیلتر کنی.

farzadkamali
جمعه 08 دی 1391, 13:34 عصر
بهتره که شما موقع واکشی اطلاعات از جداول، بیایی فقط سطرهایی که تاریخ اونها مربوط به امسال هست رو فیلتر کنی.

یعنی چی موقع واکشی؟

شدنی نیست.

با فیلتر، داده ها در جدول می مونه فقط نشونش نمی ده. ولی من می خوام جدول کاملا پاک بشه و داده هایی که توی جدول هست مال امسال باشه.

درضمن من توی جاهای مختلف نرم افزارم دستور فیلتر خیلی دارم. و خیلی از جاها نیاز هست که فیلتر true یا false بشه یا اینکه کل داده ها رو نشون بده یا داده های خاص رو.

Felony
جمعه 08 دی 1391, 14:57 عصر
اصولا در اين مواقع بانك اطلاعاتي رو كلا يك جا كپي و براي سال جديد بانك جديد ميسازن .

farzadkamali
جمعه 08 دی 1391, 16:02 عصر
اصولا در اين مواقع بانك اطلاعاتي رو كلا يك جا كپي و براي سال جديد بانك جديد ميسازن .

یعنی کل بانک اطلاعاتی به همراه کل جدول هاش رو کپی کنیم یه جا؟
بک آپ گیری از پایگاه اکسس رو بلدم. ولی
چه طوری توی دلفی یه پایگاه داده اکسس دیگه با همین جدول ها و همین نام ها بسازیم؟
در ضمن رکورد های جدول اعضاء تغییر نمیکنه. پس باید جدول اعضاء کاملاً رکوردهاش توی جدول جدید کپی بشه. چه طوری؟

خیلی سخت شد یه توضیح می دید؟

mojtaba0912433
جمعه 08 دی 1391, 19:09 عصر
مي توني ديتابيس سال مالي قبل را براي سال جديد كپي كني.بعد جداولي را كه نياز نداري يا اطلاعاتي كه در جداول نياز نداري حذف كني

farzadkamali
جمعه 08 دی 1391, 19:43 عصر
درسته فهمیدم . اصلاً نیازی نیست یکی دیگه بسازیم.

کافیه از کل پایگاه داده یه بک آپ بگیریم و یه جای دیگه ذخیره کنیم برای بایگانی. سپس پایگاه داده فعلی رو کلاً پاک کنیم. میشه یه پایگاه داده تازه با همون جداول. فقط جدول اعضا رو نیاید حذف کرد چون عضو ها همونان.

برای پاک کردن کلی داده های جدول به تایپیک زیر مراجعه کنید.
http://barnamenevis.org/showthread.php?215665-%D8%AD%D8%B0%D9%81-%D8%B1%DA%A9%D9%88%D8%B1%D8%AF%D9%87%D8%A7%DB%8C-%D8%AF%D8%B1%D9%88%D9%86-%D8%AA%DB%8C%D8%A8%D9%84&highlight=%D8%AD%D8%B0%D9%81+%DA%A9%D9%84+%D8%AF%D 8%A7%D8%AF%D9%87+%D9%87%D8%A7+%D8%AF%D8%B1+%D8%AF% D9%84%D9%81%DB%8C

hossein_h62
یک شنبه 10 دی 1391, 11:33 صبح
درسته فهمیدم . اصلاً نیازی نیست یکی دیگه بسازیم.

کافیه از کل پایگاه داده یه بک آپ بگیریم و یه جای دیگه ذخیره کنیم برای بایگانی. سپس پایگاه داده فعلی رو کلاً پاک کنیم. میشه یه پایگاه داده تازه با همون جداول. فقط جدول اعضا رو نیاید حذف کرد چون عضو ها همونان.

برای پاک کردن کلی داده های جدول به تایپیک زیر مراجعه کنید.
http://barnamenevis.org/showthread.php?215665-%D8%AD%D8%B0%D9%81-%D8%B1%DA%A9%D9%88%D8%B1%D8%AF%D9%87%D8%A7%DB%8C-%D8%AF%D8%B1%D9%88%D9%86-%D8%AA%DB%8C%D8%A8%D9%84&highlight=%D8%AD%D8%B0%D9%81+%DA%A9%D9%84+%D8%AF%D 8%A7%D8%AF%D9%87+%D9%87%D8%A7+%D8%AF%D8%B1+%D8%AF% D9%84%D9%81%DB%8C
بعد برای دسترسی به اطلاعات سالهای قبل مدام باید دیتابیس های قبلی رو Restore کنید!!!
بنظر من بهترین روش همونی هست که در پست 2 اشاره شد و نهایتا اگه نگران سرعت واکشی و حجم جدولتون هستین، با بستن سالتون یک جدول براش ایجاد کنید و جدول رو برای سال جاری خالی کنید.

Felony
یک شنبه 10 دی 1391, 11:54 صبح
بعد برای دسترسی به اطلاعات سالهای قبل مدام باید دیتابیس های قبلی رو Restore کنید!!!
چرا باید مدام پایگاه رو Restore کنید ؟!

پایگاه سر جای قبلیش هست و در بانک هم Attach شده ، مثلا DB90 , DB91 و ... حالا بسته به سالی که در تاریخ جستجو وارد شده به پایگاه داده ای که سال مورد نظر ما رو داره Connect میشم و اطلاعات رو ازش واکشی میکنیم .

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

hossein_h62
یک شنبه 10 دی 1391, 12:20 عصر
پایگاه سر جای قبلیش هست و در بانک هم Attach شده ، مثلا DB90 , DB91 و ... حالا بسته به سالی که در تاریخ جستجو وارد شده به پایگاه داده ای که سال مورد نظر ما رو داره Connect میشم و اطلاعات رو ازش واکشی میکنیم .
منظورم اتصال بود آقا مجتبی! :لبخند: ؛ ولی روشی که میگید مستلزم اینه که هرسالی رو که کاربر خواست واکشی کنه باید Connect بشه. همین ایده هر سال جدا رو میتونیم توی جداول جداگانه داشته باشیم، دردسر چندبار Connect شدن هم نداره و همه اون مزیت های سرعت جستجو رو هم خواهد داشت. نظرتون چیه ؟

Felony
یک شنبه 10 دی 1391, 12:45 عصر
هرسالی رو که کاربر خواست واکشی کنه باید Connect بشه.
خوب ؟ سربار خاصی نداره ...


همین ایده هر سال جدا رو میتونیم توی جداول جداگانه داشته باشیم، دردسر چندبار Connect شدن هم نداره و همه اون مزیت های سرعت جستجو رو هم خواهد داشت. نظرتون چیه ؟
بله ، ولی اون وقت با یک فایل طرف هستیم ، هم سرعت پشتیبان گیری و Restore میاد پایین ، البته میشه پشتیبان رو به صورت Differential گرفت ولی اون هم مزایا و معایب خاص خودش رو داره ، هم در صورت Damage شدن پایگاه کل اطلاعات به فنا میره ، مگر اینکه بشینی از backup های قبلی اطلاعات رو سرهم کنی ...

در کل اون کاری که شما گفتی هم جواب میده ، باید دید نیازهای سیستم چی هست .

farzadkamali
چهارشنبه 20 دی 1391, 14:51 عصر
پایگاه سر جای قبلیش هست و در بانک هم Attach شده ، مثلا DB90 , DB91 و ... حالا بسته به سالی که در تاریخ جستجو وارد شده به پایگاه داده ای که سال مورد نظر ما رو داره Connect میشم و اطلاعات رو ازش واکشی میکنیم .


چه طوری باید این کار رو انجام داد؟ یعنی از بانک فعلی به بانکی مورد نظر connect بشیم؟ از کد زیر اتفاده کردم نشد.


var
st:string;
begin
st:=module.archives.fieldbyname('aradress').value;
module.ADOConnection1.ConnectionString:='Provider= Mic rosoft.Jet.OLEDB.4.0;Data Source=st;Mode=ReadWrite|Share Deny None;Persist Security Info=False';
module.ADOConnection1.Connected:=True;


آدرس بانک رو از جدول میگیره.
محل ذخیره آرشیو ها در مسیر نصب برنامه و در پوشه archives هست. و بانک اصلی هم در مسیر نصب برنامه و کنار برنامه قرار داره.