ورود

View Full Version : ارتباط گزارشات ساخته شده در کریستال 8.5 با vb6



علی کاکرودی
پنج شنبه 27 اردیبهشت 1386, 23:37 عصر
گزارشاتی با کریستال ریپورت 8.5 ساخته ام که با جداول sql ارتباط برقرار میکنه و راط بین انها را هم data envairoment در نظر گرفتم ، حال می خواهم مقداری را مثل دو تاریخ دریافت کنم و گزارش فقط رکوردهایی که در بین این دو تاریخ قرار دارند را نمایش دهد . با کدنویسی sql . چگونه می توانم این کار را انجام دهم . متشکرم

Seivan
پنج شنبه 27 اردیبهشت 1386, 23:52 عصر
اگر از Sql Server استفاده می کنید. می توانید روی Server یک Stored Procedure بسازید و در گزارش به جای اینکه خواندن از جداول از آن Sp بخوانید.
ولی راه حل اصولی تر را اینجا بخوانید:
http://barnamenevis.org/forum/showthread.php?t=68065

sm
جمعه 28 اردیبهشت 1386, 08:39 صبح
بستگی به ذخیره کردن تاریخ هاتون توی دیتابیس داره. اگر آنها رو فرمت کرده باشید و بصورت String ذخیره کرده باشید یا به هر روش استاندارد دیگری، براحتی میتوانید این کار رو انجام دهید.
به فرض، اگر آنها را بصورت String استاندارد ذخیره کنید براحتی میتونید از عملگرهای > < = یا غیره استفاده کنید :
برای این کار باید یه فیلد از نوع (Char(10 توی جدول در نظر بگیرید و هنگام درج تاریخ آنها را فرمت کنید. یعنی هر تاریخی رو که کاربر وارد نمود شما بصورت 10 تایی ذخیره کنید.

مثال : اگر کاربر وارد کرد 86/5/2 شما ذخیره کنید 1386/05/02 یا اگر 86/11/25 شما ذخیره کنید 1386/11/25

موفق باشید

علی کاکرودی
پنج شنبه 03 خرداد 1386, 11:43 صبح
مثل اینکه سئوال را بد طرح کردم ، من گزارش را طراحی کردم و میخوام دو تاریخ را در دو text دریافت کنه و سپس گزارش را براساس آن دو تاریخ نمایش بده . (فقط رکوردهایی که در بین دو تاریخ وارد شده هستند) ، و نمی خوام ازجدول دیگری استفاده کنم .

sm
جمعه 04 خرداد 1386, 17:46 عصر
شما دو کار میتونید انجام بدهید:
1- توی گزارشتون عملیات فیلتر سازی بین دو تاریخ رو انجام بدهید (برای رکوردهای زیاد، غیر اصولی)
2- توی بانک اطلاعاتی فیلتر کنید.(کاملا اصولی)
برای اینکه توی SQL فیلتر کنید کافیست توی Stored Procedure مربوط به گزارشتون دو تا پارامتر درنظر بگیرید و از توی برنامه به این دو، مقدار رد کنید.
برای فیلتر کردن توی کریستال هم میتونید از گزینه ی Select Expert استفاده کنید، اما توی رکوردهای زیاد سرعت افت پیدا می کنه.

موفق باشید

علی کاکرودی
پنج شنبه 10 خرداد 1386, 23:28 عصر
مثالی برای اینکار دارید ، ممنون میشم اگر مثالی نیز در این مورد ضمیمه کنید . متشکر

sm
جمعه 11 خرداد 1386, 11:07 صبح
این کد مربوط به SQL


CREATE PROCEDURE Tarikh @Date1 char(10) , @date2 char(10)
AS
select *
from TableName
where ( tblDate <= @date2 ) and ( tblDate >= @date1)


@date1 , @date2 دو پارامتر ورودی SP هستند که باید به آنها مقدار رد شود

این هم کد کریستال


{RLogFile;1.di_Date}<{?EndDate} and {RLogFile;1.di_Date}>{?StartDate}


موفق باشید

علی کاکرودی
سه شنبه 22 خرداد 1386, 23:52 عصر
ببخشید این کدها را درکدام قسمت واردکنم ، در هرحالت که انجام دادم جواب نداد .
من دریک text مقداری را دریافت کردم و می خواتم گزارش براساس آن کد نشان داده بشه ولی با کد بالا نتوانستم جواب بگیرم
فقط رکورد اول بانک را نشان میدهد.

sm
چهارشنبه 23 خرداد 1386, 07:33 صبح
همونطوری که نوشتم کد اول رو میتونید بعنوان یه Stored Procedure توی بانکتون ذخیره کنید و بعد از همون بعنوان کوئری برای ساخت گزارشتون استفاده کنین... باید دو متغیر رو بهش رد کنید.
کد دوم هم در حالتی استفاده میشه که شما همه ی اطلاعات رو بیارید داخل گزارش در کریستال و بعد بخواهید فیلتر کنید که باید این کدها رو توی قسمت Select Expert بنویسین.

موفق باشید

علی کاکرودی
چهارشنبه 23 خرداد 1386, 22:54 عصر
شرمنده ام ، بازهم نگرفتم نمونه برنامه ای از این حالت داری ضمیمه کنی ، ممنون

sm
پنج شنبه 24 خرداد 1386, 08:50 صبح
این نمونه رد کردن پارامتر به SPی هست که توی کریستال ازش استفاده شده :


'تاریخ
Report.SetParameterValue("Tarikh", DateNow.ToString)
'شهرستان
Report.SetParameterValue("@shahrestan", Me.cmbShahrestan.Text.Trim)
'تاریخ شروع

Report.SetParameterValue("@StartDate", StartDate)
'تاریخ پایان
Report.SetParameterValue("@EndDate", EndDate)


اون پارامترهایی که اولشون علامت @ قرار داره مربوط میشن به SP و بقیه مربوط میشن به داخل گزارش.

بدیهیه SPی که برای این گزارش ساخته شده دارای 3 پارامتر ورودیه :
shahrestan
StartDate
EndDate
و داخل گزارش نیز تنها یه پارامتر ایجاد شده است:
Tarikh
اون مقادیری که به پارامترهای SP رد میشه که مستقیم به بانک ارسال میشه و نتیجه خروجی رو میاره داخل کریستال و بعد هم اون پارامتر مربوط به کریستال روی گزارش اعمال میشه
نمونه گزارش رو هم براتون ضمیمه می کنم.با جدول Northwind خود SQL کار میکنه و نیازی به تغییرات نیست.
اول باید این کد رو توی SPهای جدول اضافه کنید و بعد گزارش رو اجرا کنین:
کد Stored Procedure :


CREATE PROCEDURE SP_Example @Keshvar nvarchar(15)
AS
SELECT CustomerID, CompanyName, ContactName, ContactTitle, PostalCode, Country, Phone
FROM dbo.Customers
where Country=@keshvar
GO

این گزارش ابتدا پارامتر Keshvar رو از کاربر گرفته و براساس آن رکوردهاییکه مقدارشون برابر با مقدار کاربر باشه رو میاره توی کریستال و در اونجا با استفاده از Select expert رکوردهایی رو نمایش میده که مقدار فیلد ContactTitle اونها برابر با مقداری هست که کاربر وارد میکنه... در اینجا کلمه Owner رو وارد کنین.

موفق باشید

**pooneh**
دوشنبه 04 تیر 1386, 12:41 عصر
با سلام ،
میشه نرم افزار کریستال ریپورت را واسم attach کنید و به آدرس pouneh_parand@yahoo.com بفرستید.
ممنون.

sm
دوشنبه 04 تیر 1386, 13:07 عصر
فکر می کنین هیچ کس صرفش میکنه که براتون Upload کنه... یا اصلا خودتون صرفتون میکنه دانلودش کنین
500 تومان بدین در هر بقالی بهتون میده!

موفق باشید

karbar987654321
سه شنبه 28 آبان 1387, 08:36 صبح
من این کار رو انجام دادم،یعنی یه StoreProcedure نوشتم که دوتا پارامتر بنام channel_n@ و group_n@ را به عنوان ورودی می گیرد.
در برنامه هم دقیقا آن ها را به صورت زیر مقدار دهی می کنم.



rpt_tolid.SetParameterValue(

"@channel_n",channelname );




rpt_tolid.SetParameterValue(

"@group_n", groupname);


ولی باز هم در هنگام اجرای برنامه پنجره اب باز می شود و مقدار این دو متغیر را می خواهد.

من با c# و کریستال ریپورت کار می کنم.
کریستال ریپورتم رو به یه view تو sql server وصل کردم تو برنامه هم report source رو براش تنظیم کردم.تا اینجا همه چیز درسته و برنامه ی من اجرا می شه و ریپورت مورد نظر منو از بانک میاره و نمایش میده.
من می خوام یه شرط where برای view ام بذارم که توش دوتا متغیر هست که از توی combo box داخل برنامه تامین می شه.یعنی باید از طریق کد اینو بدم.ولی نمیشه و کریستال ریپورت بازم کل view بدون اعمال شرط رو برام میاره.
در آخر من یه StoreProcedure درست کردم و اونو به کریستال وصل کردم که از اون بخونه و دوتا پارامترو همونجوری که بالا گفتم بهش از داخل برنامه پاس کردم ولی باز هم موقع اجرا یه پنجره باز می شه که می گه مقدار دوتا متغیر رو دستی بهش بدم.شما راهی رو میتونید به من پیشنهاد کنید؟
من تمام پستهای اینجارو خوندم ولی چیزی پیدا نکردم.
خواهش می کنم من را راهنمایی نمایید