تبلیغات :
ماهان سرور
آکوستیک ، فوم شانه تخم مرغی ، پنل صداگیر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




صفحه 2 از 2 اولاول 12
نمايش نتايج 11 به 20 از 20

نام تاپيک: یک جدول با اطلاعاتی به شکل زیر چگونه می توان در CrystalReport ساخت؟

  1. #11
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    متاسفانه تازه امروز وقت کردم و نگاهی به کدتان انداختم...
    این جواب شما یعنی من برای هر فیلد باید که باید نمایش داده شود باید این دستورات را بنویسم؟
    اگر تعداد این سطر ها و ستون ها به 1000 یا 10000 برسد آنوقت باید چکار کرد؟
    حالا متوجه شدم مشکلتان کجا است.
    مشکل شما از آنجا ناشی میشود که چیزی که میخواهید نیاز به یک View دارد که مخالف قوانین نرمال سازی است.

    شما ستونهایی دارید که احتمال دارد تعدادشان زیاد شود! درست است؟
    این تفکر اشتباه است، تفکر شما باید طوری باشد که همواره تعداد ستون ها را ثابت نگاه دارد...
    به فرض با یک دستور ساده SQL توانستید این اطلاعات را استخراج کنید، خوب اگر به قول خودتان این ستون ها تعدادشان به 1000 تا برسد، در چه کاغذی میخواهید آن را چاپ کنید؟؟؟

    به سه طرح زیر دقت کنید:


    شما الآن مورد اول را انتخاب کرده اید که مشکل دارد ولی به راحتی میتوان مورد دوم و سوم و... را پیاده سازی کرد که هم دستور ثابتی در SQL خواهد داشت و هم مشکل کاغذی با عرض چند متر را حل میکند!

    ==============

    اما در مورد بانکتان:
    من اول فیلدهای غیر منطقی nvarchar شما را تبدیل به tinyint کردم و یک سوال:
    شما rank را در جدول Customer مشخص کرده اید ولی مشخص نکرده اید حدول Customer با چه فیلیدی به جدول Disorder وصل است و ارتباط دارد؟
    بالاخره باید یک فیلدی در Customer مشخص کننده سطر مرجع Disorder باشد؟

    این را بگویید من میتوانم نمونه ای از گزارش خودتان (طرح اول تصویر) یا طرح دوم یا ... برایتان بسازم.

  2. #12
    اگه نباشه جاش خالی می مونه M-B-M's Avatar
    تاريخ عضويت
    Mar 2006
    محل سكونت
    ایران - مشهد
    پست ها
    371

    12

    سلام
    من الان شهرستان هستم و تا جایی که یادم می آید من جدول DoGeneral را در دیتا بیس برای شما ارسال کردم که این جدول حاوی فیلد CuId برای ارتباط با جدول Customer و فیلد DiId برای ارتباط با جدول Disorder است که به ازای هر دانشجو یک DiId ذخیره می شود

    در مورد نوع گزارش هم باید بگم که همانطوری که در فایل Doc مشاهده کردید گزارش من هم همانند آن در برگه A4 چاپ می شود و که تمام سطرهای آن در عرض برگه جا می شود و ستونهای آن در چند برگه ادامه می یابد (شکل گزارش دقیقا همانند شکل فایل Doc)

    باز هم از اینکه وقت گزاشتید ممنون هستم

  3. #13
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    من یک نمونه برایتان حاضر کردم ولی متاسفانه جداول و روابط و فیلدهای شما را درست درک نکردم (شرمنده!).
    برای همین خودم دو جدول با حداقل فیلدهای مورد نیاز درست کردم و برای گزارش از آنها استفاده کردم.

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

    با توجه به اینکه طبق شکلهایی که در پست قبلیم گذاشتم، شما همچنان بر مدل اول تاکید داشتید، دستورات SQL کمی زیاد شد (چون برای هر بلوک ستون باید تکرار میشد.) در نتیجه در جهت سرعت و وضوح و کاهش کد SQL من یک function با نام ReportByID_Study__ و یک view به نام Report__ درست کردم که خروجی این view دقیقاً همان دیتاهایی است که شما میخواهید نمایش دهید (میتوانید در VS یا یک DataGridView مشاهده کنید) و در اصل کریستال فقط وظیفه این نمایش ساده را بر عهده دارد.

    دستورات هر دو function و view را هم میتوانید در فایل sql.txt در کنار دیتابیس پیدا کنید.

    1) البته لازم به ذکر است که میشد بدون function هم کار را تمام کرد ولی کدهای SQL داخل view خیلی زیادتر و سردرگم تر میشد.
    2) کد SQL هر view را میتوانید یک راست در برنامه وارد کنید تا دیگر نیاز به وجود آن view نباشد ولی وجود view میتواند خوانایی و سرعت را افزایش دهد.

    در نهایت هم پیشنهاد میکنم اگر قرار است تعداد ستونهایتان زیاد شود، حتماً به یکی از مدلهای دوم و سوم تصویری پست قبلی ام فکر کنید... !


    (
    البته وقت زیادی برای قشنگ کردن گزارش کریستال صرف نکرده ام،
    یعنی خروجی صحیح است و همان است که خواسته اید ولی به صورت یکم نا مرتب.
    این کریستال خیلی نفهمه و اعصاب آدم را خرد خاکشیر میکند تا یک چیز منظم و شکیل درست کند ...
    )


    rapidshare.com/files/155023585/WindowsFormsApplication_SqlReport.rar
    همچنان اگر سوالی بود در حد وقت و سوادم میتوانم کمک کنم.
    موفق باشید.

  4. #14
    اگه نباشه جاش خالی می مونه M-B-M's Avatar
    تاريخ عضويت
    Mar 2006
    محل سكونت
    ایران - مشهد
    پست ها
    371

    14

    سلام
    موقع Attach کردن دیتابیس به Sql این خطا را می دهد
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    من از SqlServer2005 استفاده می کنم؛ آیا شما نیز از این ورژن استفاده میکنید یا ورژن 2008؟

  5. #15
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    این لینک جدید را تست کنید... SQLServer2005+VS2005
    rapidshare.com/files/155257282/WindowsFormsApplication_SqlReport.rar

  6. #16
    اگه نباشه جاش خالی می مونه M-B-M's Avatar
    تاريخ عضويت
    Mar 2006
    محل سكونت
    ایران - مشهد
    پست ها
    371

    پيش فرض

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

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    فایلZip حاوی دیتابیس و فایل Doc شامل توضیحات کامل جدول ها و ارتباط آنها

  7. #17
    اگه نباشه جاش خالی می مونه M-B-M's Avatar
    تاريخ عضويت
    Mar 2006
    محل سكونت
    ایران - مشهد
    پست ها
    371

    13

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

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    فایلZip حاوی دیتابیس و فایل Doc شامل توضیحات کامل جدول ها و ارتباط آنها

  8. #18
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    - این جدول Period اصلاً برای چه است؟ مبالغ دریافتی؟
    - بالاخره این معلولیت هر فرد کجای جدول Customer ذخیره میشود؟
    - یعنی معلوبیت فرد در Period ذخیره میشود؟ هر فرد میتواند چندین معلولیت داشته باشد؟ اگر فردی دو معلولیت دارد باید دوبار در آمار معلولیتهای (مرتبط) ذکر شود؟ یعنی در نهایت جمع کل نشان گر تعداد افراد نخواهد بود، بلکه عدد تعداد افراد*معلولیت را نشان میدهد؟

  9. #19
    اگه نباشه جاش خالی می مونه M-B-M's Avatar
    تاريخ عضويت
    Mar 2006
    محل سكونت
    ایران - مشهد
    پست ها
    371

    پيش فرض

    سلام
    بله درست متوجه شدید!

    توضیحات بیشتر:
    هر فرد که در سیستم ثبت نام می شود (فقط یک بار در جدول Customer) می تواند به تعداد n بار مراجعه کند و وقت بگیرد که به ازای هر بار مراجعه یک رکورد در جدول Period به ازای این فرد ایجاد می شود (که اطلاعات این جدول حاوی شماره ایندکس مشتری، شماره معلولیت، مبلغ پرداختی، ... ) که در گزارش باید معلولیتهایی که در دیتابیس وجود دارد دسته بندی شوند (بدون توجه به اینکه این (مثلا 3) معلولیت از آن یک نفر است یا از آن 3 نفر جداگانه)

    باز هم ممنون از اینکه وقت گذاشتید

  10. #20
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    همانطور که قبلاً گفتم، باید اول مشکل را در سطح دستور SELECT در SQL رفع کرد و سپس به سراغ ابزار گزارش گیری رفت.

    ==============

    من در اولین قدم نوع برخی فیلدهای دیتابیس شما را ویرایش کردم، چون متاسفانه از نوع منطقی استفاده نکرده بودید.
    الآن در رایانه من...
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    لطفاً در صورت تفاوت، فیلدهای خود را چنین اصلاح کنید، وگرنه ممکن است دستورات بعدی ...


    (
    فیلدهای شما به نظر بزرگتر از حد لازم می آید...
    مثلاً ...
    اگر موسسه شما روزی 1000 ثبت نام جدید داشته باشد، میشود ماهی 30000 و سالی 365000 !
    که بیشتر از 5883 سال (پنج هزار سال معادل 50 قرن!) طول خواهد کشید تا محدوده int را برای جدول Customer پر کند!!!
    پس از نظر منطق و اثبات ریاضی هیچ دلیلی وجود ندارد که CuId از نوع bigint باشد.
    ضمن اینکه من بعید میدانم موسسه شما روزی 1000 و ماهی 30000 ثبت نام داشته باشد!

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

    بهحرحال اینها فقط یک پیشنهاد هستند و صلاح برنامه خود را شما بهتر میدانید.
    )
    ==============

    یک تابع با کد زیر ایجاد کنید:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    این تابع وظیفه استخراج اطلاعات در یک محدوده Customer.Rank مشخص را دارد.

    (
    ضمناً نمیدانم برای چه و به چه معنا یکسری از فیلدهای Period.DiId شما NULL هستند؟
    فردی بدون بیماری مشخص؟
    این میتواند یک وضعیف غیر نرمال در سطح دیتابیس باشد که در صورت بررسی و صحت باید جلوی آن گرفته شود.
    ناچاراً دستوری برای نادیده گرفتن این مقادیر اضافه کرده!
    )
    ==============

    یک View نهایی با کد زیر ایجاد کنید:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    خروجی این View مشابه همان جدولی است که در فایل doc توصیفش کرده بودید.
    (نباید ایرادی داشته باشد، من هم چک نکردم، شاید بد نباشد یکبار صحت اعداد و ارقام خروجی را چک کنید.)

    ==============

    حالا خروجی آمده اطلاعات را دارید.
    مابقی کار میشود ساخت گزارش (کسل کننده!) مورد نظر از GetStatistic در برنامه گزارش سازتان.

    موفق باشید.
    Last edited by _H2_; 03-03-2009 at 01:57.

صفحه 2 از 2 اولاول 12

Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •