ورود

View Full Version : یک Bug در کریستال 2005 در ارتباط با Store Procedure



ir_programmer
دوشنبه 02 بهمن 1385, 13:05 عصر
یک برنامه نوشتم که در اون از کریستال موجود در دات نت 2005 استفاده کردم
تا زمانی که 2003 بود مشکلی نداشت
اما وقتی اونو به 2005 بروز کردم به یک مشکل برخوردم که خیلی عجیب هست!
مشکل من در نمایش پارامترهاست.
چون از ارتباط مستقیم Store Procedure و Crystal استفاده کردم
وقتی با کد نام سرور رو عوض میکنم (از رجیستری می خونم)
همه چیز درست کار میده ولی پارامتر های استفاده شده در کریستال نشون داده نمی شن.
یعنی کار میکنن ولی نمایش داده نمیشن!

Amir Taghavi
سه شنبه 03 بهمن 1385, 11:57 صبح
اگه می خوای Parameter ها رو نشون بدی باید در SP اونا رو SELECT کنی.

ir_programmer
سه شنبه 03 بهمن 1385, 16:33 عصر
منظورت از Select رو نفهمیدم. من پارامتر ارسال میکنم. چیکار به Select دارم :متفکر:

کد SP من اینه:



CREATE PROCEDURE st_trans
@prm_ProtocolNo nvarchar(8),
@prm_GroupNo nvarchar(8),
@prm_BijakNo nvarchar(20),
@prm_StartDate nvarchar(10),
@prm_EndDate nvarchar(10),
@prm_DraftFrom numeric,
@prm_DraftTo numeric

AS
SELECT T_Companies.CompanyNo, T_Companies.CompanyName, T_Protocols.ProtocolNo, T_Protocols.Sender, T_Bijaks.BijakNo, T_Bijaks.BijakTonnage, T_Drafts.DraftNo,
T_Protocols.ShipName, T_LadePlaces.LadePlace, T_Drivers.FirstName, T_Drivers.LastName, T_BillOfLadings.Qty, T_BillOfLadings.BillDate,
T_BillOfLadings.BillTime, T_BillOfLadings.PaidFare, T_BillOfLadings.Tare, T_BillOfLadings.TransportAssure, T_Goods.GoodName, T_Bijaks.Receiver,
q_Cities.CityNo, q_Cities.CityName, q_Cities.ProvinceName, T_BillOfLadings.BranchCount, T_Bijaks.SizeValue, T_BillOfLadings.BillOfLadingNo,
T_BillOfLadings.SerialNo, T_PelakCities.PelakCityName, T_Camions.PelakNum, T_Camions.MachinNo, T_Trucks.TruckNo, T_Trucks.TruckName,
T_Trucks.TruckGroupName,
CASE t_protocols.assuretype WHEN 'بیمه بر حسب نسبتی از ارزش بار' THEN CASE WHEN (T_Protocols.FardelCostB * T_BillOfLadings.Tare <= 50000000)
THEN T_Protocols.FardelCostB * T_BillOfLadings.Tare * 5000 / 10000000 WHEN (T_Protocols.FardelCostB * T_BillOfLadings.Tare > 50000000 AND
T_Protocols.FardelCostB * T_BillOfLadings.Tare <= 200000000) THEN (T_Protocols.FardelCostB * T_BillOfLadings.Tare - 50000000)
* 2 / 10000 + 25000 WHEN (T_Protocols.FardelCostB * T_BillOfLadings.Tare > 200000000)
THEN T_Protocols.FardelCostB * T_BillOfLadings.Tare * 1 / 1000 END WHEN 'بیمه بر اساس تفکیک نوع کامیون' THEN (CASE truckGroupName WHEN 'کفی' THEN T_Protocols.VolarAssureB
WHEN 'جفت' THEN T_Protocols.JoinAssureB WHEN 'لبه دار' THEN T_Protocols.EdgyAssureB WHEN 'تک' THEN T_Protocols.OneAssureB WHEN 'آزاد' THEN
T_Protocols.OtherAssureB END) END AS TransportAssureA, T_Protocols.KiloPrice, T_Groups.GroupNo, T_Groups.GroupName, T_Drivers.BookletNo,
T_Camions.FleetNo, T_Protocols.ShipPart, T_Protocols.ParvanehNo, T_BillOfLadings.Fare, T_BillOfLadings.Description, T_BillOfLadings.State,
CASE t_protocols.assuretype WHEN 'بیمه بر حسب نسبتی از ارزش بار' THEN (t_protocols.fardelcostB) WHEN 'بیمه بر اساس تفکیک نوع کامیون' THEN (0)
END AS FardelCostB0, T_Bijaks.DraftNoCust, T_Bijaks.DraftNoCustCode
FROM T_Goods RIGHT OUTER JOIN
T_Companies INNER JOIN
T_Protocols ON T_Companies.CompanyNo = T_Protocols.CompanyNo INNER JOIN
T_Bijaks ON T_Protocols.ProtocolNo = T_Bijaks.ProtocolNo INNER JOIN
T_Drafts ON T_Bijaks.ProtocolNo = T_Drafts.ProtocolNo AND T_Bijaks.BijakNo = T_Drafts.BijakNo INNER JOIN
T_LadePlaces ON T_Protocols.ProtocolNo = T_LadePlaces.ProtocolNo AND T_Drafts.ProtocolNo = T_LadePlaces.ProtocolNo AND
T_Drafts.LadePlaceNo = T_LadePlaces.LadePlaceNo INNER JOIN
T_BillOfLadings ON T_Drafts.DraftNo = T_BillOfLadings.DraftNo LEFT OUTER JOIN
T_Groups ON T_Bijaks.GroupNo = T_Groups.GroupNo LEFT OUTER JOIN
q_Cities ON T_Bijaks.DestCity = q_Cities.CityNo ON T_Goods.GoodNo = T_Protocols.GoodNo LEFT OUTER JOIN
T_PelakCities RIGHT OUTER JOIN
T_Trucks RIGHT OUTER JOIN
T_Camions ON T_Trucks.TruckNo = T_Camions.TruckNo ON T_PelakCities.PelakCityNo = T_Camions.PelakCityNo ON
T_Drafts.FleetNo = T_Camions.FleetNo LEFT OUTER JOIN
T_Drivers ON T_Drafts.BookletNo = T_Drivers.BookletNo
WHERE (T_BillOfLadings.Abrogate = 0) AND (T_BillOfLadings.State <> N'D')
and ( t_Protocols.ProtocolNo like @prm_ProtocolNo) and (T_BillOfLadings.BillDate>=@prm_StartDate) and (T_BillOfLadings.BillDate<=@prm_EndDate)
and ( t_Groups.GroupNo like @prm_GroupNo) and ( t_Bijaks.BijakNo like @prm_BijakNo) and ( t_Drafts.DraftNo>= @prm_DraftFrom) and ( t_Drafts.DraftNo<= @prm_DraftTo)

Order by T_BillOfLadings.BillDate,T_BillOfLadings.BillofLad ingNo
GO

Amir Taghavi
سه شنبه 03 بهمن 1385, 19:08 عصر
مگه نمی خوای Parameter هارو هم نشون بدی؟ پس باید در دستور Select هم قید بشن.

به این آدرس سری بزن:
http://barnamenevis.org/forum/showthread.php?t=45651&page=2

ir_programmer
چهارشنبه 04 بهمن 1385, 13:03 عصر
خیلی تعجب میکنم که منظورم را نگرفتین!
من میگم پارامتر رو ارسال میکنم (مثلا از تاریخ تا تاریخ) و نتیجه گزارش هم درست نشون میده.
در کریستال هم پارامترها موجود هستن و میشه اونا رو در Page Header نشون داد. من حتی تا نشون دادن گزارش درون کامپیوتر خودم هم مشکلی ندارم.
فقط تو Deploy اون برای کاربران مشکل دارم.
یعنی SP من درسته ؛ گزارش من درسته و برنامه هم جواب میده. فقط اجرای اون روی کامپیوترهای دیگه مشکل داره.:متفکر: :متفکر:

reza_rad
چهارشنبه 04 بهمن 1385, 13:16 عصر
یعنی SP من درسته ؛ گزارش من درسته و برنامه هم جواب میده. فقط اجرای اون روی کامپیوترهای دیگه مشکل داره.


تنظیمات دیتابیس چه جوریه؟ با ویزارد کار کردید یا از داخل برنامه و کد ست میشه؟

ir_programmer
چهارشنبه 04 بهمن 1385, 13:21 عصر
تنظیمات دیتابیس چه جوریه؟ با ویزارد کار کردید یا از داخل برنامه و کد ست میشه؟

تنظیمات برنامه از طریق کد هست.

همه چیز درسته! فقط وقتی روی کامپیوتر های غیر از جایی که کامپایل میشه تست میشه هر چه پارامتر داره نامرئی میشن!

ir_programmer
شنبه 07 بهمن 1385, 07:57 صبح
این پست بدون نتیجه فعلا مونده!!!

ir_programmer
شنبه 14 بهمن 1385, 11:29 صبح
تقریبا به راه حل نزدیک شدم:چشمک:
ببینید
من یک برنامه جدید ساختم و باز هم با این روش همین مشکل وجود داشت و پارامتر ها نشون داده نمی شد!
این یک پروژه قدیمی بود و من در پروژه های جدید از DataSet برای گزارشات استفاده می کنم و اگر هم از SP استفاده کنم ، اون رو در یک دیتاست لود میکنم. یعنی همیشه گزارش رو با DataSet لینک می کنم.
اما در این پروژه که مشکل دارم گزارش رو مستقیم به SP وصل کردم.
مشکل من دقیقا اینه:
وقتی که پروژه رو با Server Name ی که کریستال رو با اون آپدیت کردم اجرا میکنم مشکی نداره
اما وقتی که با کد میام و Server Name گزارش رو تغییر میدم. برنامه اجرا میشه و گزارش هم به Server Name مورد نظر وصل میشه و نمایش داده میشه. فقط پارامتر هایی که در SP بودن توی کریستال نشون داده نمیشن!:افسرده:
یعنی من برای اجرا صحیح گزارشات هیچوقت نباید Server Name رو تغییر بدم!
کسی راه حلی داره؟:متفکر:

ir_programmer
پنج شنبه 19 بهمن 1385, 10:15 صبح
مشکل من اینه:
وقتی که گزارشم رو میسازم.
وقتی با کد ServerName و User و Pass رو میدم
همه چیز کار میکنه
فقط اگه سرور عوض بشه، بازم هم کار میکنه . ولی پارامتر ها رو فقط نشون نمیده!

reza_rad
شنبه 21 بهمن 1385, 09:30 صبح
http://barnamenevis.org/forum/showthread.php?p=292810#post292810

قانون شماره 25

ir_programmer
دوشنبه 23 بهمن 1385, 13:21 عصر
فعلا با ثابت نگهداشتن اسم سرور می تونم پارامترها رو رو هر کلاینتی نشون بدم.
اما اگه کسی راهی پیدا کرد خبرم کنه.

ir_programmer
پنج شنبه 26 بهمن 1385, 08:13 صبح
فکر کنم این bug کریستال باشه!