مشاهده نسخه کامل
: شروع به کار با کریستال ریپورت
سلام. برای اولین باره که میخوام یه کریستال ریپورت به پروژم اضافه کنم. C# 2008 کار می کنم. بهم گفتن برای شروع کنترل Crystal report application رو به برنامه ات اضافه کن. اما من تو کنترل هام در ارتباط با کریستال ریپورت فقط این سه تا رو دارم:
microsoft report viewer
crystal report veiwer
crystal report document
کدومشو باید استفاده کنم؟ اولی رو گذاشتم رو فرمم. اما مراحل ساخت گزارش خیلی متفاوت با آموزش هایی بود که دارم.
سلام
مطمئن شوید یک TypedDataSet در پروژتان دارید (کریستال همه منابع دیگر را هم به DataSet تبدیل میکند!)
سپس با فرمان Project->Add New Item->Reporting->Crystal Report ویزارد مربوطه آغاز میشود و میتوانید گزارش را طراحی کنید.
یک سمپل خیلی ساده از کریستا را هم میتوانید از زیر دانلود کنید:
support.h02.ir/fwlink/?LinkId=1003769457
ممنون. اون لینک دانلود که ظاهرا مشکل داشت. از اون طریق که گفتین گزارش رو ساختم. حالا چطور به پروپه ام اضافه اش کنم؟ یعنی چطور فراخوانیش کنم؟ مثلا رو یه دکمه که کلیک می کنم چه دستوری بنویسم که گزارشم اجرا شه. هر چی سعی کردم با کد زیر ازش یه شی بسازم که نشد!
CrystalReport1 objc = new CrystalReport1();
objc.Load();
سلام
لینکمشکلی ندارد مجدد تست کنید، نمونه کدها در همان لینک موجود است:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
(لینک مستقیم است و میتوانید یکراست در IDM ان را Copy و Paste کنید و فرمان دانلود بدهید)
- برای نمایش گذارش روی فرم خود برنامه تان میتوانید از کنترلر CrystalReportViewer استفاده کنید.
- برای چاپ گزارش و ارسال به چاپگر نمونه نمونه را New و متد PrintToPrinter را فراخوانی میکنید.
- برای دادن منبع اطلاعات دستی و دیتاست نمونه پر شده و پردازش شده و دلخواه و...
(که خود کریستال همینطوری با ConnectionString به دیتابیس وصل نشود و شما خودتان DataSet را ساخته و Fill کنید)
از متد SetDataSource استفاده میکنید
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
موفق باشید.
با راهنماییتون گزارشم رو ساختم . طبیعتا در حالت فعلی وقتی گزارشم اجرا میشه تمام فیلدهای بانک رو نشون میده. حالا میخوام بگم فقط یک رکورد رو نشون بده. اونم رکوردی که id اون برابر با مقدار متغیری هست که بین فرم هام مقدارش تبادل میشه و اینه : common.sh
در توضیحات کریستال ریپورت خوندم که میتونم در صفحه گزارشم از پنجره ی Field Explorer روی گزینه ی Sql Expression Fields کلیک کنید و در این پنجره دستور رو تایپ کنید.
این راه منو به هدف مورد نظرم میرسونه؟ اگه درسته چطور دستور sql رو اینجا بنویسم؟ دقیقا مشابه داخل کدهامو کپی کنم به اینجا؟ نمیدونم نحوه ی نوشتن دستور زیر در این پنجره چطوره:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
اون تعاریف اولیه ی connection چی؟
سلام
این راه منو به هدف مورد نظرم میرسونه؟
اگر حدفتان ف-ی-ل-ت-ر کردن یک سری مورد است، گمان نکنم کمکتان کند.
حالا میخوام بگم فقط یک رکورد رو نشون بده. اونم رکوردی که id اون برابر با مقدار متغیری هست
شخصاً وقتی از کریستال استفاده میکردم همیشه DataSet را خودم Fill میکردم و به کریستال میدادم.
به نظرم این روش ساده تر و انعطاف پذیری بیشتری دارد. و برای کارهای مختلف چاره ساز است و نیاز نیست برای هر کار خاصی تابع امکانات خاصی استفاده شود !
مثلاً کد ساده شده ای شبیه این:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
اون تعاریف اولیه ی connection چی؟
منظورتان را واضح تر بفرمائید ...
انشا ا... مشکلتان حل شود.
سلام
اگر حدفتان ف-ی-ل-ت-ر کردن یک سری مورد است، گمان نکنم کمکتان کند.
شخصاً وقتی از کریستال استفاده میکردم همیشه DataSet را خودم Fill میکردم و به کریستال میدادم.
به نظرم این روش ساده تر و انعطاف پذیری بیشتری دارد. و برای کارهای مختلف چاره ساز است و نیاز نیست برای هر کار خاصی تابع امکانات خاصی استفاده شود !
مثلاً کد ساده شده ای شبیه این:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
منظورتان را واضح تر بفرمائید ...
انشا ا... مشکلتان حل شود.
از لطفتون خیلی ممنونم.
خیلی ببخشید که من همچین زیادی مبتدی ام! چندتا اصطلاح کدتون رو نفهمیدم:
var و using رو برا چی استفاده کردین؟ چیکار میکنن؟
TypedDataSetName1(); چیه؟ نام دیتاستی هست که از قبل تعریف کردیم؟ من دیتاستی به این نام ایجاد کردم اما بازم نشد.
سلام
و using رو برا چی استفاده کردین؟ چیکار میکنن؟
توضیحات کلمه کلیدی Using در VB.Net (در C#.Net هم دقیقاً همین است ولی با سینتکس نوشتاری خود #C)
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
توضیحات کلمه کلیدی var در C#.Net و لینک مرتبط VB.Net:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
تاپیک امکانات کامپایلی جدید در Vs2008 نصبت به Vs2005 ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
TypedDataSetName1(); چیه؟ نام دیتاستی هست که از قبل تعریف کردیم؟
بله یک TypeddataSet که شامل جدول یا جدولهایتان است و معمولاً در VS-Solution با پسوند xsd نشان داده میشوند.
گزارش کریستال رپورت شما هم باید دقیقاً به همین دیتاستی وصل باشد که اینجا پرش میکنید.
یعنی اول TypedDataSet را میسازید و بعد صفحه گزارش را و در صفحه گزارش نوع DataSource را همین TypedDataSet قرار میدهید و گزارش را طراحی میکنید.
(
همان لینک معرفی شده در پست 2 و 4 از این مکانیزم استفاده میکند
support.h02.ir/fwlink/?LinkId=1003769457
)
=====
موفق باشید.
عذر میخوام من با این حالت تعریف شما نمیدونم چطور باید TypedDataTableName1 رو تعریف و مقداردهی کنم!
سلام
الآن دقیقاً نمیدانم مشکل شما در کجا است!
بحرحال یک توضیح اجمالی از اول میدهم ...
میتوانید TypedDataSet ای با پسوند دیزاین xsd.* در پروژه ایجاد کنید؟
Project->Add New Item->Data->DataSet
سپس با درگ از ServerExplorer یا با راست کلیک در نمایه طراحی و انتخاب گزینه Add->TableAdapter جدولی جدیدی در TypedDataSet تان ایجاد کنید.
سپس پروزه را یک کامپایل کنید.
Build->Rebuild Solution
بعد گزارش کریستال را اضافه کنید
Project->Add New Item->Report->Crystal Report
در ویزاردی که باز میشود همین TypedDataSet و جدولش داخلش را DataSource گزارش اعلام کنید.
گزارش را طراحی کنید و از کدهایی مشابه آن سمپل استفاده کنید.
موفق باشید.
میتوانید TypedDataSet ای با پسوند دیزاین xsd.* در پروژه ایجاد کنید؟
Project->Add New Item->Data->DataSet
بله. با نام dsfactor ایجاد کردم.
سپس با درگ از ServerExplorer یا با راست کلیک در نمایه طراحی و انتخاب گزینه Add->TableAdapter جدولی جدیدی در TypedDataSet تان ایجاد کنید.
اینکار رو کردم و در اون مرحله ی choose a command type گزینه ی use sql statement رو انتخاب کردم. در پنجره ی بعد دکمه ی query builder رو زدم. در پنجره ی add table جدولی که قراره بعضی از فیلدهاش رو در گزارش نشون بدم رو انتخاب کردم. مثلا جدول TB_customer . بعد هم add رو زدم و پنجره رو بستم. حالا در پنجره ی query builder گزینه ی all columns رو انتخاب کردم و نهایتا ok رو زدم.(شرطی که طبق اون باید رکوردها در گزارش نشون داده بشن رو مشخص نکردم دیگه. درسته؟ باشه برا بعد؟!!) نهایتا هم finish رو کلیک کردم و یه جدول به نام TB_customerTableAdabtor ایجاد شد.
سپس پروزه را یک کامپایل کنید.
Build->Rebuild Solution
اینکار رو هم انجام دادم.
بعد گزارش کریستال را اضافه کنید
Project->Add New Item->Report->Crystal Report
در ویزاردی که باز میشود همین TypedDataSet و جدولش داخلش را DataSource گزارش اعلام کنید.
در کدوم مرحله ی ویزارد؟ پنجره ی data که available data source ها رو در ساختارهای درختی نشون میده؟
قبلا create new connection رو انتخاب می کردم. حالا کدومو انتخاب کنم و کجاش این دو تا رو بهش معرفی کنم؟
من ADO .NET dataset رو انتخاب کردم و بعد ادامه ی مراحل . اما وقتی گزارش رو اجرا کردم صفحه ی ریپورتم خالی بود! کدهایی هم که داخل فرم فراخوانی کننده ی کریستال ریپورتم نوشتم اینا بود:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
ضمنا زیر اون خط using... خط سبز کشید و اجراش کرد! (ببخشید که اینطور با جزئیات میگم. راستش از بس این تیکه کد اذیتم کرد درمونده شدم و میخوام حل شه دیگه)
سلام
در کدوم مرحله ی ویزارد؟ پنجره ی data که available data source ها رو در ساختارهای درختی نشون میده؟
قبلا create new connection رو انتخاب می کردم. حالا کدومو انتخاب کنم و کجاش این دو تا رو بهش معرفی کنم؟
من ADO .NET dataset رو انتخاب کردم و بعد ادامه ی مراحل . اما وقتی گزارش رو اجرا کردم صفحه ی ریپورتم خالی بود! کدهایی هم که داخل فرم فراخوانی کننده ی
مراحل قبلیتان برای دیتاست صحیح بوده و ادامه اش ...
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
اگر مرحله داخل [...] را هم انجام دهید و پیگیری کنید خود کریستال یک گزارش پیشفرض (کاملاً بی ریخت!) هم برایتان درتس میکند و فرم گذارشتان خالی نخواهد بود.
ولی چه فیلدها روی گزارش باشد و چه نباشد اگر DataTable تان را درست اضافه کرده باشید باید در سمت (معمولاً) چپ VS ابزار Field Explorer (در زمان باز بودن طراح گزارش) امده باشد.
در این ابزار و در شاخه Database Fields میتوانید فیلدها را یافته و روی گزارش و در محل مناسب رها کنید و گزارش را طراحی کنید.
طراحی گزارشتان که تمام شد میرسیم به کد.
=====
میخواهید همان لحظه چاپ کنید یا پیش پرینت (Preview) به کاربر نشان دهید.
برای Preview باید فرمی و کنترلری محیا کنید تا به کاربر نشان دهد.
برای چاپ مستقیم هم همین کد کافی است:
(دستور آخر فرمان چاپ را میدهد و الزامی است)
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
ولی من نمیدانم ماهیت، فیلد sh شما چیست؟
یعنی عددی است یا متنی؟ یا ...
شما در دستورات خودتان ToString داده اید، یعنی فیلد sh متنی است؟
==============
از مطالب فوق که بگذریم و بعد از انکه انشاا... مشکل قبلیتان رفع شد، چند مطلب دیگر هم مطرح میشود.
مثلاً ...
- شما میتوانید DataAdapter (همان TB_customerTableAdabtor) را یا اصلاً ایجادش نکنید!!! یا حداقل به SELECT آن هم پارامتر بدهید و از همان استفاده کنید.
- شما میتوانید از ابزار گزارش سازی لذت بخش تر Stimul هم استفاده کنید.
- اگر فکر میکنید، کمکتان میکند...
دیتابیس sql تان را برایم آپلود کنید من یک نمونه گزارش ساده برایتان درست میکنم.
=====
موفق باشید.
الان سر كار هستم و پروژ رو همراهم ندارم تا كدها رو چك كنم. ولي همين سوالاتي كه فعلا به ذهنم رسيد:
ولی من نمیدانم ماهیت، فیلد sh شما چیست؟
یعنی عددی است یا متنی؟ یا ...
شما در دستورات خودتان ToString داده اید، یعنی فیلد sh متنی است؟
يه متغير از نوع int هست كه تو يه كلاس به نام common تعريفش كردم و ازش براي مبادله ي يه مقدار بين فرم ها و گزارش هام استفاده ميكنم.
از مطالب فوق که بگذریم و بعد از انکه انشاا... مشکل قبلیتان رفع شد، چند مطلب دیگر هم مطرح میشود.
مثلاً ...
- شما میتوانید DataAdapter (همان TB_customerTableAdabtor) را یا اصلاً ایجادش نکنید!!! یا حداقل به SELECT آن هم پارامتر بدهید و از همان استفاده کنید.
اخه تو querybuilder به select نميتونم شرط بدم. چون حالت تايپ دستور اونجا جوريه كه متغير نوع دستور يعني مثلا cmd رو نداره تا بعدش بتونم مثلا common.sh رو بهش اضافه كنم. واضح تر ميگم. من بايد تو شرطم بگم where sh=@id . ولي بعدش بايد با دستور cmd...addwithvalue مقدار common.sh رو بهش اضافه كنم ديگه. درسته؟ خب همين رو نميدونم تو querybuilder چطور بايد تعريف كنم.
- شما میتوانید از ابزار گزارش سازی لذت بخش تر Stimul هم استفاده کنید.
اين ديگه چيه؟:43:
- اگر فکر میکنید، کمکتان میکند...
دیتابیس sql تان را برایم آپلود کنید من یک نمونه گزارش ساده برایتان درست میکنم.
كمك كه حتما ميكنه . بخدا من همينجوريشم هروقت ميام اينجا يه سوال ديگه مطرح كنم شرمنده ام. چشم. الان كه بانك هام اينجا نيستند. عصر براتون آپلود ميكنم.
موفق باشید با اينهمه بزرگواري شما مگه ميشه موفق نشم؟
سلام. ین مراحل که شما فرمودید رو دیشب هم انجام دادم اما بازم این crystal report viewer هیچی نشون نمیده.
ببینید منطق برنامه ی من اینه:
در فرمی به نام frmsearch یه گراید ویو دارم که کاربر نتیجه ی جستجوش رو در اون می بینه . بعد سطر مورد نظرش رو انتخاب میکنه و دکمه ی "نمایش فاکتور" رو میزنه. با زدن این دکمه id سطر انتخاب شده به متغیر sh در کلاس common میره. و بعد فرم frmfactor راخوانی میشه که در این فرم یه crystal report viewer گذاشتم و دستورات زیر رو تایپ کردم:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
با اینهمه بازم موقع اجرا مقداری داخل crystal report viewer نمیبینم.
یه سوال جدید. اگه بخوام قبل از نمایش در کریستال ریپورت محاسباتی روی بعضی از فیلدهای بانکم انجام بدم و بعد اونها رو روی گزارش نشون بدم میشه. درسته؟
راستی اینم دیتابیسم(اگه توش نکات غیرحرفه ای دیدین ببخشید!)
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
سلام
يه متغير از نوع int هست كه تو يه كلاس به نام common تعريفش كردم و ازش براي مبادله ي يه مقدار بين فرم ها و گزارش هام استفاده ميكنم.
پس عددی است و مقدارش را هم دارید و از Textbox نمیگیرید.
با این شرایط استفاده از ToString اشتباه بوده است.
اخه تو querybuilder به select نميتونم شرط بدم. چون حالت تايپ دستور اونجا جوريه كه متغير نوع دستور يعني مثلا cmd رو نداره تا بعدش بتونم مثلا common.sh رو بهش اضافه كنم. واضح تر ميگم. من بايد تو شرطم بگم where sh=@id . ولي بعدش بايد با دستور cmd...addwithvalue مقدار common.sh رو بهش اضافه كنم ديگه. درسته؟ خب همين رو نميدونم تو querybuilder چطور بايد تعريف كنم.
شما در فرم ویزاردی QueryBuilder دستور SQL ای با شرط میدهید مثلاً ;(SELECT * FROM [TB_customer] WHERE ([sh]=@sh بعد خود ویزاررد پارامتر و ورودیهای لازم را تولید میکند در نهایت کد Fill شما چیزی شبیه این میشود:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
شما نیاز به اصلاح ConnectionString بسته به شرایط دارید که البته این میتواند راه های متنوعی داشته باشد.
ولی در TypedDataAdapter متد Fill سفارشی برای شما ایجاد میشود که لیست پارامترها را میگیرد و به نوعی کار کدنویسی دستی را کمتر میکند.
اين ديگه چيه؟
یک برنامه مشابه Crystal .
اصول کار و طراحی ارتباط و... تقریباً مشابه است.
ولی امکانات و محیط بهتری دارد.
اگر دقت کرده باشید چیدمان فیلدها در کریستال کاری بشدت حوسله سر بر و رنج آور است، مخصوصاً که مقیاس فاصله و ابعاد استانداری ندارد و...
ميام اينجا يه سوال ديگه مطرح كنم شرمنده ام
دوست عزیز کسی که در تالار سوالی را جواب میدهد که تفنگ پشت کلش نگذاشتند که سوال جواب بدهد. :31:
هر کس بخواهد سوال میپرسد هرکس هم بخواهد جواب میدهد.
اصولاً اگر قرار باشد افراد سوال نپرسند که اصلاً تالار گفتگو بی معنی میشود!!! :31:
شما سوالتان را نپرسید، کسی هم نخواهد جواب دهد! پس چی؟ آقا نظرتان چیست که تعطیل کنیم بریم بخوابیم؟؟؟ :31:
یعنی اصلاً این تالارهای گفتگو (حداقل در حیطه انجمن های علمی) برای سوال و جواب و رفع اشکال است.
با اینهمه بازم موقع اجرا مقداری داخل crystal report viewer نمیبینم
باید report را به viewer بدهید و من نمیدانم داده اید یا نه ...
اجازه دهید بانکتان را دانلود کنم و گزارش ساده ای برایتان طراحی کنم، ادامه میدهیم.
فقط شاید کمی طول بکشد! :11::11::11:
انشاا... سعی میکنم پنجشنبه و جمعه وقتی رویش بگذارم.
موفق باشید.
ببینید کد من اینطور شده :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
خسته شدم دیگه از دستش!!
گزارش من قراره یه فاکتور برای یه مشتری خاص باشه. یعنی با اعمال اون شرطی که میبینید میخواد فقط مشخصات یه مشتری رو نشون بده. اما الان گزارش رو با کد بالا نشون میده ولی توش فقط عناوین فیلدهای بانک هست و رکورد مورد نظرمو نشون نداده
سلام
خوب من چیزی برایتان حاضر کردم.
خیلی دلم میخواست بقیه فیلدها را را تغییر دهم ولی جلوی خودم را گرفتم :31:
با اجازه تان دیگر date را تحمل نکردم، یک جورهایی تاریخ string ای میبینم هنگ میکنم!
نتیجتاً نوع date تان را smalldatetime کردم و فیلد اول را هم Autonumber کردم.
=====
چون از برخی جهات کریستال کمی عقب افتاده است ناچاراً فقط به TypedDataSet به صورت کاملاً مجازی یک فیلد PersianDate اضافه شده که string شده شمسی date را نگاه میدارد. (که با تغییر Culture انجام میشود)
گزینه چاپ و پیش چاپ و ویرایش را برایتان درست کردم.
کدها بسیار ساده هستند و به نظرم قابل فهم.
روی همین کدها سوالی بود بفرمائید
لینک دانلود:
mediafire.com/?mjghfdznijm
=====
انشاا... مشکلتان حل شود.
سلام
خوب من چیزی برایتان حاضر کردم.
خیلی دلم میخواست بقیه فیلدها را را تغییر دهم ولی جلوی خودم را گرفتم :31:
با اجازه تان دیگر date را تحمل نکردم، یک جورهایی تاریخ string ای میبینم هنگ میکنم!
نتیجتاً نوع date تان را smalldatetime کردم و فیلد اول را هم Autonumber کردم.
=====
چون از برخی جهات کریستال کمی عقب افتاده است ناچاراً فقط به TypedDataSet به صورت کاملاً مجازی یک فیلد PersianDate اضافه شده که string شده شمسی date را نگاه میدارد. (که با تغییر Culture انجام میشود)
گزینه چاپ و پیش چاپ و ویرایش را برایتان درست کردم.
کدها بسیار ساده هستند و به نظرم قابل فهم.
روی همین کدها سوالی بود بفرمائید
لینک دانلود:
mediafire.com/?mjghfdznijm
=====
.
ببینید کاربر قراره با این نرم افزار یه سری پرونده هایی که از قبل داره رو هم ثبت کنه. بنابراین فیلد sh رو نمیتونم Autonumber بگیرم. چون اینجوری نمیتونه شماره پرونده های قبلیشو ثبت کنه. در مورد date هم این date تاریخ ثبت نیست. تاریخ بستن قرارداده . بنابراین میبینید که بازم نمیتونم از نوع smalldate بذارم. چون اینجوری نمیتونه دقیقا تاریخی که قرار داد در اون تاریخ بسته شده رو بذاره.
دارم روی گزارش کار میکنم. واقعا از لطفتون ممنونم...
انشاا... مشکلتان حل شود
سلام
کاربر قراره با این نرم افزار یه سری پرونده هایی که از قبل داره رو هم ثبت کنه. بنابراین فیلد sh رو نمیتونم Autonumber بگیرم.
خوب یک فیلد AutoNumber برای کلید داشته باشید فیلد sh خودتان را هم داشته باشید.
فیلد Autonumber بسیار بسیار کارکرد شبکه ای برا را مستحکم میکند و از خطاهای هم زمانی از چند رایانه خیلی زیاد جلوگیری میکند.
در مورد date هم این date تاریخ ثبت نیست
من هم همچین فکری نکرده بودم!
بنابراین میبینید که بازم نمیتونم از نوع smalldate بذارم. چون اینجوری نمیتونه دقیقا تاریخی که قرار داد در اون تاریخ بسته شده رو بذاره
چرا؟؟؟!!!
شما در فرم Persian Editor میتوانید تاریخ را هم کاملاً دقیق اصلاح کنید.
تاریخ های غیر مجاز هم نمیتوانید وارد کنید، (سعی کنید چیز اشتباهی وارد کنید و ببینید چه میشود!)
فیلد smalldatetime هم مقادیر را مجاز میکند و هم عملیات Sort کردن معنی واقعی تری پیدا میکند و با سایر نرمافزارها هم برای import و export و وب سرویسها هماهنگی خوبی دارد.
ورودی شمسی و چاپ هم که شمسی است! ولی فقط ذخیره با نوع استاندارد میلادی است
موفق باشید.
انگاری درست شد!!!:11: البته باید روی یه مورد دیگه اش کار کنم. ولی میشه ترتیب کارتون رو بگید. مثلا ترتیب ایجاد فرم ها و گزارش ها و دیتاست و... (راه حل نه. فقط ترتیب)
یه مقدار روی جینگولک کاری های گزارش کار کردم. حالا وقتی دکم ی نمایش گزارش رو میزنم این خطای exception ظاهر میشه. ضمنا فقط وقتی شماره در بانک وجود داره این خطا رو میده. اگه نباشه که راحت پیغام میده "وجود ندارد"
Failed to enable constraints . one or more rows contain values violating non-null , unique , or foreign-key constraints
سلام
تقدم و تاخر فرم ها که زیاد مهم نیست.
فقط ...
- اول دیتابیس را باید طراحی کنید !
- بعد TypedDataSet تان را از روی دیتابیس اصلی بسازید.
- در نهایت گزارش را از روی TypedDataSet بسازید.
این خطا رو میده
این خطای قیود TypedDataSet است.
مثلاً فیلدی در TypedDataSet تایین شده که null نمیتواند باشد ولی در دیتابیس null است!
یا فیلدی در TypedDataSet تعریف شده عددی باشد ولی در دیتابیس متن باشد!
یا حتی شاید فیلد تاریخ را مجدد متن کرده اید و TypedDataSet را اصلاح نکردید!
و...
سعی کنید مشکل TypeddataSet تان را نسب به دیتابیس اصلی پیدا کنید.
اگر به نتیجه نرسیدید، کد فعلی را آپلود کنید.
=====
البته اصولاً ابن را هم بدانید که همیشه نمیتوان روی سرعت و بازدهی DataSet و Crystal حساب باز کرد.
موفق باشید.
آره فكر كنم جريان همين باشه. نوع چندتا از فيلدهامو از int به money تغيير دادم. حالا بايد ديتاست رو حذف كنم و از اول بسازم؟ چندبار rebuild كه انجام دادم اما فايده نداشت. اگه ديتاست رو حذف كنم گزارشم مشكل دار نميشه؟ خيلي دردسر داره بخوام گزارش رو از اول طراحي كنم. كلي روي جينگولك كاري هاش كار كردم اخه:41:
راستي يه سوال تقريبا نامرتبط همينجا بپرسم تا ديگه براش تاپيك نزنم. تو اس كيو ال براي فيلدهايي كه قراره واحد پول در اونها ذخيره بشه از چه نوعي استفاده كنم بهتره؟ همین money خوبه؟
سلام
حالا بايد ديتاست رو حذف كنم و از اول بسازم؟
اگر بتوانید تغییرات را دستی بدهید نیازی نیست.
اول باید نوع فیلدهای جدول را اصلاح کنید و سپس باید نوع پارامترهای فرامین InsertCommand و UpdateCommand را اصلاح کنید.
اگه ديتاست رو حذف كنم گزارشم مشكل دار نميشه؟
اگر دیتاست و دیتاتیپل مجدد با همان نام ها داشته باشید و نام فیلدها هم تغییر نکرده باشد، گزارشتان زیاد مشکل پیدا نمیکند.
اگر خواستید و آپلود کنید میتوان برایتان تصحیحش کنم.
تو اس كيو ال براي فيلدهايي كه قراره واحد پول در اونها ذخيره بشه از چه نوعي استفاده كنم بهتره؟
اگر برنامه تان ایرانی است چون در ایران واحد پول اعشار معنی ندارد پیشنهاد میکنم حتماً شما و سایر دوستان از نوع int یا bigint استفاده کنند.
از جمله محاسن bigint میتوان به موارد زیر اشاره کرد.
- نوع bigint معادل Long در دات نت است و تا بیش از 18 رقم (نزدیک 19 رقم) میتواند داشته باشد.
این نوع از نظر بایتی برابر money فضا میگیرد ولی حدود 10000 برابر گنجایشش بیشتر است!!! (چون اعشار ندارد)
- bigint عدد صحیح است که در اغلب CPU های امروزی با یک تک آپ کد در CPU عملیات هایش انجام میشود و از نظر سرعت بیشتر از money بازدهی دارد
- همچنین bigint عدد صحیح و صریح 64bit ای است که در زبانهای برنامه نویسی گونان و برنامه های مختلف به خوبی ساپورت میشود و نوع دقیقاً معادل و کاملاً برابر و مچ شده دارد و نتیجنتاً اگر بخواهید برنامه ای در بستر وب سرویس هم عرضه شود و نوعی ارتباط چند نرم افزارگوناکون هم برقرار شود، این نوع هیچ مشکلی نخواهد داشت.
در حالیکه فیلدهای float و double که مثل bigint استاندارد هستند به علت تبدیلات مبنای دو ممیز شناور برای مقادیر پولی قابل اعتماد نیستند! فیلدهایی مثل money و decimal هم که برای مقادیر پولی قابل اعتماد هستند، استاندارد و همگانی برای همه پلتفرمها نیستند.
و...
اگر با مبالغ کم سروکار دارید int (تا 2 میلیار ریال یا تومان) و اگر بابت مبالغ تردید دارید و میخواهید محدودیتی نباشد bigint که 10000 برابر بیشتر از money گنجایش دارد.
(9,223,372,036,854,775,808)
موفق باشید.
سلام
اگر بتوانید تغییرات را دستی بدهید نیازی نیست.
اول باید نوع فیلدهای جدول را اصلاح کنید و سپس باید نوع پارامترهای فرامین InsertCommand و UpdateCommand را اصلاح کنید.
موفق باشید.
من اصلا از اين دو فرمان استفاده نكردم. فقط يه select تو querybuilder قسمت ايجاد datatable نوشتم كه اونم جايي براي نوع پارامترها نداره
بالاخره گزارشم رو ساختم. باکمک شما یه گزارش کامل و خوب هم دراومد . نمیدونم با چه زبونی میتونم ازتون تشکر کنم...
برای رازقی های پشت پنجره تان دعای باران میکنم...
سلام
یعنی دیگر مشکل پست 25 تان حل شده....
برای رازقی های پشت پنجره تان دعای باران میکنم...
رازقی مان کجا بود!
والا پشت پنجره ای که من می بینم فقط ساختمان و دود است! :31:
به جای این دکمه های تشکر بی خاصیت یا دعا برای رازقی، یک صلوات بر جمال محمد(ص) و ظهور مهدی(عج) بفرستید مفیدتر خواهد بود :31:
ممنون و انشاا... مشکلاتتان سریع حل شود و موفق باشید.
دوباره اومدم با یه سوال دیگه! من از با کمک اون کدی که شما دادین کریستال ریپورتمو ساختم و جواب هم داد. منتها اونموقع فقط یه جدول رو میخواستم به کریستال ریپورتم اضافه کنم. حالا اگه بخوام دو تا جدول که هر دو یه فیلد مشترک دارن رو به گزارش اضافه کنم و شرط رکوردهای مورد نظر هم روی همون فیلد مشترک هست باید چیکار کنم؟
Farshadd
20-08-2010, 15:46
شما چند راه دارید.
یکی اینکه یه ویو توی بانک درست کنید و کریستال رو به اون ارتباط بدید.
یکی اینکه یه دیتا تیبل رو با کد بنویسید و اونو ارسال کنید به کریستال ریپورت.
یکی اینکه یه دیتا ست رو با دیتا آداپتری که دستور select و join داره پر کنید و بعد دیتاست مورد نظر رو بفرستید برای کریستال ریپورت. (برای شما این بهتره)
میشه خواهش کنم این دستورselect , join رو برام بنویسید؟
سلام
برای Join به صورت عادی میتوانید در SQL-Select همچین کدی بنویسید:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
=====
احتمال دارد مسئله شما با یک جدول واحد در Dataset و یک دستور SQL-SELECT-JOIN حل شود که اینطوری معمولاً ساده تر خواهد بود.
ولی امکان داشتن چند جدول در خود Dataset هم وجود دارد تا گزارش ساز خودش اطلاعات درست را واکشی کند.
it.it.it
03-07-2011, 02:49
سلام
من به كدي كه در اين لينك گذاشتيد نياز دارم
لینک دانلود:
mediafire.com/?mjghfdznijm
اما ميگه كه حذف شده اگه امكان داره دوباره upload كنيد
با تشكر
سلام
اما ميگه كه حذف شده اگه امكان داره دوباره upload كنيد
متاسفانه بعید میدانم این مورد را داشته باشم و بتوانم مجدد آپلود کنم.
دقیقاً مشکل شما (که با این سمپل حل میشده) در چه ضمینه ای است؟
سلام
من برنامه ای به زبان vb.net 2008 نوشته ام که در آن، به منظور گزارش گیری از بانک sql ،از برنامه ی crystal report استفاده کرده و این برنامه در سیستم خودم جواب می دهد....
زمانی که برنامه را به سیستم دیگری انتقال می دهم قسمت گزارش گیری آن به بانک متصل نمی شود، زیرا کانکشن استرینگ آن برای سیستم قبلی تعریف شده و از طرفی در فایل app.config این کانکشن را تغییر داده ام، تمامی مراحل برنامه در سیستم مقصد اجرا می شود به جز گزارش گیری ...
عاجزانه مرا کمک کنید. با سپاس!
این هم کد اتصال به گزارش:
(این گزارش از رویه ذخیره شده در sql گزارش گرفته و دارای پارامترهای ورودی نیز است.)
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
vBulletin , Copyright ©2000-2025, Jelsoft Enterprises Ltd.