سلام
اگر میخواین مشکلتون اساسی حل بشه بر اساس تجربه چند ساله این کار رو انجام بدین خیلی بهتره
1 - اگر از بانک اطلاعاتی Jet استفاده میکنید (همونی که میگن اکسس) یک بانک اطلاعاتی، جداگانه بسازید و جداول مورد نیاز رو در اون بسازید و موقع چاپ یک یا چند فاکتور، ابتدا فاکتورها رو از بانک اصلی در اون بانک موقت بریزید و کریستال رو به اون متصل کنید
مزیت این روش اینه که میتونید یکسری فیلدهایی مثل متن فارسی مبلغ فاکتور، عنوان گزارش و ... رو هم بزارید و قبل از پرینت اونها رو پر کنید بدون اینکه لازم باشه خود آبجکتهای کریستال رو کنترل کنید یا داخل بانک اصلی برنامه این اطلاعات نوشته بشه و حجم بیخودی اشغال کنه.
2 - تا جای ممکن از فیلتر در کریستال استفاده نکنید چون سرعت کار رو به شدت پایین میاره، اگر به روش بالا عمل کنید قاعدتا در اون جدول و بانک موقت فقط فاکتور یا فاکتورهای مورد نظر برای چاپ وجود داره و نیاز به فیلتر نیست، نهایتا اینکه اگر هم جایی فیلتر لازم شد، یک کوئری بسازید و فیلتر کردن رو داخل کوئری انجام بدین و کریستال رو به اون کوئری متصل کنید، اینطوری اگر بعدا گزارشگرتون رو هم عوض کنید دیگه نیاز به دستکاری سورس برنامه نیست و سرعت کار هم خیلی بالاتره.
3 - در گزارشگرها معمولا ردیفی تحت عنوان Master و ردیفی تحت عنوان Detail وجود داره که اطلاعات سربرگ فاکتور در ردیف Master و اطلاعات ریز فاکتور در قسمت Detail باید نوشته بشه، اینطوری یک فاکتور کامل چاپ میشه
در مورد بانک اطلاعاتی Sql Server, Oracle و ... نیاز به بانک جداگانه نیست و فقط دو جدول Master و Detail جدا از جدول اصلی برای این کار در نظر بگیرید.
در مورد بانک JET استفاده از فایل بانک اطلاعاتی جداگانه بهتره چون نوشتن و پاک کردن زیاد در یک بانک باعث افزایش حجم اون میشه و تا زمانی که بانک رو Compact نکنید سایزش کوچک نمیشه ولی اینطوری میتونید یک فایل بانک موقتی به نام مثلا tempdbempty.mdb داشته باشید که هر موقع برنامه رو اجرا کردید از روی اون یک کپی به نام tempdb.mdb بگیرید و روی tempdb.mdb کار کنید، با این کار خود بانک موقت هم بزرگ نمیشه
حتما قبل از پر کردن جداول موقت، ابتدا کل محتویات فعلی اونها رو حذف کنید.





پاسخ با نقل قول