PDA

View Full Version : شرط command برای کریستال ریپورت رو چه طوری بنویسم



shocraneh
دوشنبه 06 مهر 1388, 10:49 صبح
برای ارسال داده به کریستال ریپورت من دیتاست رو تو کد نویسی fill می کنم و ازcommandاستفاده می کنم خوب مثلا چند تا جدولو اینر جوین کردم و همه چیز درسته ولی اگه بخام یه رکورد خاص رو نشون بده چه طوری شرطی رو که تو دیتاست قید می کنم تو command لحاظ کنم . من نمی خام از یه جدول واسط استفاده کنم
vb.net2008 sql2005

mn_zandy63
دوشنبه 06 مهر 1388, 22:53 عصر
شما منظورت از یک رکورد خاص رو نشون دادن چیه؟ اینکه گفتی چه شرطی رو قرار بدی توی Command؟
خب توی where اون command بنویس مقدار کلید مساوی با مقدار مورد نظرت باشه. منظورت اینه؟
یک مثال بزن.

shocraneh
سه شنبه 07 مهر 1388, 09:47 صبح
مثلا من این دیتاست رو پر می کنم و می خام تو command پیاده کنم


cmd. commandtext="select * from student hnner join tb1 where student.id='"+textbox1,text+"' d"


خوب تو command کریستال textbox رو چه جوری استفاده کنم . البته از ارسال پارامتر هم استفاده کردم اما خالی نشون می ده . لطفا کامل تو ضیح بدین . تکس رو کاربر وارد می کنه و همیشه تغییر می کنه

mn_zandy63
سه شنبه 07 مهر 1388, 23:28 عصر
من که متوجه نشدم میخوای چیکار کنی.
خب دیتاست رو که پر کردی بفرستش برای کریستال.

اگه داری به صورت مستقیم با کریستال وصل میشی به دیتابیس، و منظورت اینه که چه شکلی فیلتر کنی دیتای دریافتی از دیتابیس رو.میتونی از Select Expert استفاده کنی. فکر میکنم بتونی خودت متوجه بشی که باید چیکار کنی، اما اگه نتونستی پیدا کنی، بگو تا برات توضیح بدم.

موفق باشی.

shocraneh
چهارشنبه 08 مهر 1388, 09:21 صبح
دوست من شما متوجه سوال من نشدی
من به صورت ویزارد دیتاست درست نمی کنم بلکه از طریق کد نویسی یه دیتاست تعریف و اونو پر می کنم .خوب حالا که دیتاست پر شد می گم گزارشم لود بشه .
حالا تو صفحه کریستال با database expert و از قسمت oledb پایگاهمو معرفی می کنم اما مستقیما از اون استفاده نمی کنم و از addcommand استفاده می کنم حالا اینجا باید دقیقا همون دستوری که تو دیتاست نوشتی رو اینجا کپی بگیری اگه select نیاز به where نداشته باشه مشکلی نیست اما اکه شرط داشته باشی
علاوه بر دیتاست باید تو command هم معرفی بشه وگرنه کل جدولتو نشون می ده . حالا چه طوری مقداری رو که کاربر تو textbox نوشته تو صفحه command ارسال کنی ؟؟؟؟ من از متغیر استفاده کردم جواب نداد

لطفا برنامه نویسا کمک کنن

mn_zandy63
چهارشنبه 08 مهر 1388, 21:12 عصر
سلام دوست عزیز
فکر میکنم متوجه شدم میخوای چیکار کنی، اما بازم نباید مشکلی باشه،
شما مراحلی رو که انجام میدی بنویس اینجا شاید بتونیم کمکت کنیم.

به عنوان مثال من این کوئری رو نوشتم:
SELECT ID, ProvinceID, Name, RegisterStartDate, RegisterEndDate,
FROM Exam
where Name like '{?Name}'
و پارامتر Name رو به لیست پارامتر ها اضافه کردم.
مشکلی وجود نداره.

مگه اینکه شما باز منظورت چیز دیگه ای باشه.

موفق باشی

mn_zandy63
چهارشنبه 08 مهر 1388, 21:21 عصر
من به صورت ویزارد دیتاست درست نمی کنم بلکه از طریق کد نویسی یه دیتاست تعریف و اونو پر می کنم .خوب حالا که دیتاست پر شد می گم گزارشم لود بشه .


خب شما اصلا دیتاست رو برای چی پر میکنی؟ :متفکر:
راستی با ویزارد درست کردن یا نکردن دیتاست یادم نمیاد برای فرستادن برای گزارش تفاوتی داشته باشه :متفکر:

shocraneh
پنج شنبه 09 مهر 1388, 22:55 عصر
با تشکر . عذر می خام خیلی سرتونو درد آوردم
من قبلا یه datatable معادل با همون فیلد هایی که تو query داشتم به صورت ویزارد درست می کردم و اونو expert کرده و الی اخر ... نکته مهم این که اسم سرور پویا معرفی می شد و همهچیز درست بود . کدزیر:

Dim ds As New DataSet
query = "select lastname from ostad where codeostad='" + TextBox1.Text.Trim + "'"
da = New SqlClient.SqlDataAdapter(query, cn)
da.Fill(ds, "std")


Dim mytbl As DataTable
mytbl = New DataTable
da.Fill(mytbl)
Dim strReportPath As String = GetCurrentDirectory()
If strReportPath.Substring(strReportPath.Length - 9) = "bin\Debug" Then
strReportPath = strReportPath.Substring(0, strReportPath.Length - 10)
End If
strReportPath &= "\CrystalReport1.rpt"
Dim rpt As New CrystalDecisions.CrystalReports.Engine.ReportDocum ent
rpt.Load(strReportPath)
rpt.SetDataSource(mytbl)
Form1.CrystalReportViewer1.ReportSource = rpt
Form1.ShowDialog()

اما با خودم فکر کردم کاش اون دیتاتیبل رو که اول کار به صورت ویزارد درست می کردم رو از قضیه حذف کنم برای همین به فکر command افتادم ( مشکل ارسال پارامتر با کمک دوستان حل شد ). من این کدها رو به شکل زیر استفاده کردم

Dim re As Form1 = New Form1
re.CrystalReportViewer1.ReportSource = re.crystalReport81
re.crystalReport81.SetParameterValue("a", TextBox1.Text)

Dim ds As New DataSet
query = "select * from ostad where codeostad='" + TextBox1.Text.Trim + "'"
da = New SqlClient.SqlDataAdapter(query, cn)
da.Fill(ds, "std")
Dim rpt As New CrystalReport8
rpt.SetDataSource(ds.Tables("std"))
Form1.CrystalReportViewer1.ReportSource = rpt
Form1.Show()
برنامه جواب می ده اما یه مشکل اساسی داره و اون اینکه برای استفاده از command باید سرور رو معرفی کنم و نمی شه پویا باشه . آیا شما راه حلی برای این قضیه داری ؟؟


نکته بعدی راجع به ویزارد و پر کردن دیتاست : من شنیدم بهتره از ویزارد استفاده نشه .
دیتاست رو اگه پر نکنم چی کار کنم ؟ لطفا توضیح بدین .اگه منظورتون اینه که استفاده از command دیگه دیتاست نمی خاد من به شکل زیرم کد نوشتم ولی اخه صفحه گزارش که لود میشه یه فرم باز می کنه که مقدار متغیر رو درخواست می کنه و مقدار ارسالی تو کدنویسی رو نادیده می گیره

Dim re As Form1 = New Form1
re.CrystalReportViewer1.ReportSource = re.crystalReport81
re.crystalReport81.SetParameterValue("a", TextBox1.Text)

Dim rpt As New CrystalReport8
Form1.CrystalReportViewer1.ReportSource = rpt
Form1.Show()

mn_zandy63
جمعه 10 مهر 1388, 00:54 صبح
سلام دوست عزیز
بله همینطوره،
اگه از Command استفاده کنید، (حالت سوم) نیاز به کوئری زدن و SetDataSource دیگه نیست.
در واقع شما با این کار کل قضیه Command رو بیخیال شدی. چون دیگه گزارشت مستقیم به دیتابیس وصل نمیشه و از dataset ی که براش فرستادی استفاده میکنه.
در حالت دوم، شما اصلا نیازی به استفاده از Command نداری، گزارشت بدون Command هم درست کار میکنه.
و البته برای کریستال ریپورت، ارسال این دیتاست که در زمان اجرا ساخته شده و پر شده، تقریبا تفاوتی با دیتاستی که در زمان طراحی و با ویزارد پر شده نداره.
و حتی در زمان طراحی به مراتب سخت تره، طراحی گزارش با این روش.

در مورد حالت سوم هم که گفتی وقتی گزارشت باز شده ازت پارامتر خواسته
احتمالا با این کد حل میشه:
re.CrystalReportViewer1.ParameterFieldInfo = re.crystalReport81.ParameterFields;

نمیدونم مشکلت با طراحی دیتاست در زمان طراحی چیه؟ در حلی که به نظر من کلی از امکاناتی که برای ارتباط با دیتابیس برات طراحی شده رو بیخیال شدی و استفاده نکردی، در واقع با این دید، اصولا کاربرد LINQ در .net 3.5 رو هم میبری زیر سوال.
به نظر من در حالت عادی، ساده ترین و بهترین روش طراحی گزارش با Crystal Report اینه که یک دیتاست در زمان طراحی و به قول شما با Wizard بسازی و در زمان اجرا دیتاست پر شده رو بفرستی برای report.
من تنها دلیلی که از این روش استفاده نمیکنم اینه که بخوام گزارش رو به صورت داینامیک و در زمان اجرا به سیستم اضافه کنم.

موفق باشید

shocraneh
جمعه 10 مهر 1388, 09:19 صبح
یه سوال تو پرانتز : یادم می یاد سری قبل که msdn رو نصب کرده بودم اطلاعات crystall رو هم داشت اما الان انگار می گی اصلا کریستال رو سرچ نمی کنه ؟1 اشتباه از منه یا .. ؟؟

واما حالت دوم وقتی از command استفاده نکنم یا باید از حالت اول (استفاده از دیتاتیبلی با ستون های همنام با quert)استفاده کنم یا یه روش دیگه که قبولش ندارم add->tabel Adapter اشکالات این روش : نمی شه سرور رو پویا معرفی کرد و بعضی مواقع این ویزارد با مشکل مواجه می شه و اطلاعات رو تو گزارش نشون نمی ده برای خودم پیش اومده دوستان هم تو سایت زیاد اینو مطرح کردن .در کل روشش رد شده است

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

من برای استفاده از روش اول دوتا مشکل دارم
1: کوئری من یک اینر جوین است اما جدای از اون یه جدول دیگه دارم که شماره گزارش رو تو اون
آپدیت و نشون می دم . این جدول رو نمی تونم اینرجوین کنم چه طوری نشونش بدم ؟؟؟؟
2:من متوجه شدم وقتی از command استفاده میشه تو ارسال پارامتر مشکلی نیست اما وقتی از دیتاتیبل استفاده می کنم اون فرمه مییاد ومقدار می خاد و کدی که داده بودید هم مشکل رو برطرف نکرد
لطفا راهنمایی کنید

mn_zandy63
جمعه 10 مهر 1388, 23:58 عصر
سالها پیش، در دوران دانشجویی وقتی روی پروژه هایی که خیلی با حافظه سر و کار داشتند (مثل پیاده سازی ساختار B+Tree) کار میکردیم و زمان اجرا، اون جوری که انتظار داشتیم کار نمیکرد، یا هنگ میکرد، یا کمبود حافظه پیدا میکرد، پیش خودم میگفتم اه ه ه زبون C ِ مسخره. درست کار نمیکنه.
غافل از اینکه مشکل از C نیست، مشکل از من ِ که اشراف کاملی به اتفاقاتی که میافتاده نداشتم و این زبون رو درست بلد نبودم، وگرنه C طبق اون چیزی که باید، کار میکرده.
خیلی وقتها مشکل ما موقع برنامه نویسی از همین ناشی میشه، اشراف کاملی به اون چیزی که جلومونه نداریم فکر میکنیم مشکل از اونه.

سلام دوست عزیز

در مورد MSDN حقیقتش نمیدونم.
آیا Crystal Reports رو با Visual Studio نصب کردید؟ درست تو ذهنم نیست، اما شاید موقع نصب MSDN، نصبش نکردید.نصب MSDN رو اجرا کنید، شاید دلیلش رو بتونید پیدا کنید.


واما حالت دوم وقتی از command استفاده نکنم یا باید از حالت اول (استفاده از دیتاتیبلی با ستون های همنام با quert)استفاده کنم
متوجه منظورتون نمیشم از دیتاتیبلی با ستون های همنام با Query. در کدی که نوشتید یک datatable جدید ایجاد کردید و اون رو فرستادید برای Crystal reports. ستونهای همنام چیه قضیه اش؟


یا یه روش دیگه که قبولش ندارم add->tabel Adapter اشکالات این روش : نمی شه سرور رو پویا معرفی کرد و بعضی مواقع این ویزارد با مشکل مواجه می شه و اطلاعات رو تو گزارش نشون نمی ده برای خودم پیش اومده دوستان هم تو سایت زیاد اینو مطرح کردن .در کل روشش رد شده است
جالبه، چرا این روش رد شده است؟
خیر شما با این امکان مشکل تعریف داینامیک سرور رو ندارد.
خیلی ساده اگه بخوام حرف شما رو رد کنم، شما به راحتی میتونید برای TableAdapter درست مثل یک DataAdapter که اینجا استفاده کردید، یک ConnectionString به صورت دستی set کنید.


بله به نظر من، ساده ترین روش ساختن یک گزارش استفاده از Typed Dataset هاست که با استفاده از DataSources در Visual Studio ساخته شده. چون به این ترتیب Crystal Reprot هم موقع طراحی به راحتی فیلد ها و جداول مورد نیاز شما رو شناسایی میکنه و میتونید گزارشتون رو طراحی کنید.

در مورد گزارش داینامیک، خب هر کسی ممکنه منظور خاصی داشته باشه از این عبارت.
من منظورم این بود که در زمان اجرا، و بدون نیاز به کامپایل مجدد، بشه به منوی گزارشات سیستم یک گزارش جدید اضافه کرد.
برای این کار کلاسی رو استفاده میکنم که از یک فایل Config لیست گزارشات و فایل rpt مربوطه و پارامتر های گزارش، و کوئری که باید زده بشه و پارامترهای اون رو میخونه.
بنابراین نمیتونم از TypedDataset استفاده کنم، و باید از روشی مشابه روش دوم شما استفاده کنم.

البته هیچ کدام از کدهایی که در پست قبل نوشتید به نظر درست نیست، و هر کدوم ایراداتی دارند.

برای Innerjoin که گفتید، ببینید شما لازم نیست حتما Innerjoin کنید بعد برای گزارش بفرستید، شما میتونید در یک Dataset دو تا datatable رو پر کنید با اطلاعات لازم، و در زمان طراحی گزارش، ارتباط بین اونها (relation) رو در Crystal Reports مشخص کنید، میشه همون Innerjoin.
و یا اینکه مثلا یک TableAdapter جدید اضافه کنید و اونجا که باید کوئری مربوطه رو مشخص کنید که تابع Fill اون TableAdapter نوشته بشه، میتونید از کوئری مورد نظرتون که شامل Innerjoin هم هست استفاده کنید.
و راههای دیگه..
این دو تا رو مثال زدم که ببینید در این موارد ساده استفاده از TypedDataset ها مشکل خاصی نداره.

در مورد اون فرمه که باید مقدار پارامتر رو set کنید، اولا اگه از Command که قبلا استفاده میکردید، استفاده نکنید، پارامتر مربوطه رو هم باید حذف کند از گزارش تا دیگه ازتون مقدار پارامتر رو نخواد.
اما اگه به جز اون، گزارشتون پارامتر های دیگه هم داشته باشه، من به این شکل عمل میکنم و مشکل ندارم: (بر اساس کدهایی که در پست های قبلی نوشتید:)
re.CrystalReportViewer1.ReportSource = re.crystalReport81
re.crystalReport81.SetParameterValue("a", TextBox1.Text)
re.CrystalReportViewer1.ParameterFieldInfo = re.crystalReport81.ParameterFields

پیشنهاد میکنم اگه دوست داشتید یک پروژه و فایل گزارش و دیتابیس مربوطه که باهاش مشکل دارید رو بفرستید تا من یا دیگر دوستان اونو اصلاح کنیم.
قاعدتا به این ترتیب راحتتر دستتون میاد که ایراد کارتون کجاست.

موفق باشید

shocraneh
شنبه 11 مهر 1388, 09:37 صبح
مقدمه ای که فرمودید از درستم درستره . منم قبولش دارم

اگه من تو صفحه dataset یه دیتاتیبل با ستون های همنام درست نکنم خوب چی رو تو کریستال expert کنم وفیلداشو رو صفحم بچینم (برنامه رو گذاشتم .توضیحات داخلش نوشتم . لطف کنید روش درست و کاربردی رو نشونم بدید . من عجله دارم و ممنون از اینکه هر روز به تاپیک سر می زنید )
قضیه استفاده نکردن از inner join رو هم نفهمیدم . ارسال پارامتر هم مشکل داره
ای کاش یه برنامه برام بزارید و شیوه درستو و حسابی کاررو نشونم بدید

دوست من وقتی تو ویزارد از datatable استفاده می کنی موقع expert ازت اسم سرور رو نمی خاد چون هنوز به sql کاری نداریم . اما اگه از dataadapter استفاده کنی .هم این جا باید به sql متصل بشی ونام روبدی هم موقع expert . خوب حالا برنامه رو به سیستم دیگه انتقال می ده اسم کامپیوتر سیستم مقصد متفاوته . حالا مشکل ایجاد میشه . برای این من دیتا آداپتر رو رد کردم . حالا اگه راه حلی هست ممنون می شم بهم بگین
منظورتان را از یک ConnectionString به صورت دستی set کنید رو نفهمیدم (فکر کنم اشکال من همین جاست)

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

بازم تقاضا می کنم یه برنامه برام بزارید و شیوه صحیح کارو نشونم بدید(پرروییه اما من بافرمول نویسی هم مشکل دارم اگه میشه یه فرمول خیلی ساده برام تو گزارش بزنید ممنون :خجالت: )

mn_zandy63
شنبه 11 مهر 1388, 22:47 عصر
سلام دوست عزیز

از لطفت ممنونم
فایلی که فرستادی رو گرفتم، نیگاش کردم، سعی میکنم روی پروژه ای که فرستادی اول یه سری مسائل و ایرادات رو بهت توضیح بدم. البته ان شاء الله فردا.

کدت ایراد زیاد داره، در واقع کد اضافه زیاد داری :چشمک:.
راستی گزارشت کاملا اتفاقی، به خاطر اینکه کریستال ریپورت واقعا سعی میکنه یه چیزی بهت نشون بده، داره نمایش داده میشه. برای اینکه مطمئن شی، مثلا در گزارش دومت، یک فیلد از جدول bb رو به گزارش اضافه کن، دیگه چیزی نمایش داده نمیشه. (بهت توضیح میدم که چرا).
دوستان دیگه هم اگه بتونن کمک کنن خیلی خوبه.

در مورد روش درست و حسابی کار که گفتی، ببین دوست عزیز راههای زیادی هست چه برای طراحی گزارش و چه برای نمایشش در زمان اجرا.
باید ببینی کدومش برای شرایط شما در زمان پیاده سازی بهتره.
سعی میکنم در حین توضیح دادن، روش هایی که به ذهنم میرسه رو با کاربردش بهت توضیح بدم.

البته من expert نیستم در این زمینه، حتما روش های بهتری هم وجود داره، که دوستان ایشالا اگه چیزی به نظرشون اومد حتما توضیح خواهند داد در خلال پست های من.

راستی منظورت رو از کلمه expert که چند بار نوشتی تو پست آخرت نگرفتم.

فردا سعی میکنم برات یک نمونه برنامه بذارم که بدون مشکل از tableAdapter استفاده کنه، بعد هم یه سری توضیحات بهت میدم که کدت رو اصلاح کنی.

موفق باشی

shocraneh
یک شنبه 12 مهر 1388, 07:50 صبح
سلام و تشکر فراوان
دوست من اولی رو نگاه کن . دومی رو می خاستم ببینم می تونم اینر جوین استفاده کنم که نشد یادم رفته پاکش کنم ...ممنون

وقتی روی فرم کریستال ریپورت می ری(crystall report1 )گوشه فرمروی database field راست کلیک و expert databaseرو می زنی و .......

mn_zandy63
یک شنبه 12 مهر 1388, 23:52 عصر
سلام دوست عزیز
یک نمونه پروژه برات گذاشتم
سعی کردم شبیه روش کار خودت باشه، که بتونی مقایسه کنی.
فرم 1 همون فرم خودته فقط کدش تغییر کرده
فرم 2 هم شامل دو تا گزارش هست، اولی، گزارشی هست که به نوعی داخل گزارش Innerjoin شده ، و دومی هم شامل یک پارامتر هست.

کدش رو ببین.
سوالاتت رو اینجا بپرس تا به نتیجه برسیم.

از اونجایی که Crystal Reports من 2008 هست، مطمئن نیستم بتونی گزارش ها رو باز کنی، چک کن، که اگه نتونستی باز کنی پروژه رو، فکر دیگه ای بکنیم.

موفق باشی

shocraneh
دوشنبه 13 مهر 1388, 09:17 صبح
موقع unzip ارور می ده .عکسشو گذاشتم البته شاید از ورژن winrar باشه که خودم برطرفش می کنم
اما کریستال رو گیر میده احتمالا یه dll هست که من اضافه کنم و ورژن 11 بشم . دنبالش می گردم
اگه لینکشو داری برام بزار چون قبلا دنبالش بودم تو سطح شهر نبود بخرم
. اما قضیه اصلی : قبلا براتون گفته بودم من با table addapter کار می کردم و پروژه ام هم درست
بود اما یه سری که ویندوز مجدد نصب کردم وقتی روفرم دیتاست راست کلیک می کردم
یه اررور برام میامد که عکسشو گذاشتم رفتم سراغ پروزه های درست قبلی .همون پروژه قبلی هم همین مشکل رو داشت
البته تو اجرا مشکل نداشت پرسیدم گفتن شیوه ویزارد این دردسر هارو هم داره :گیج:
گفتم خوب مجدد ویندوز رو نصب می کنم تا مشکلم حل شه
تونستم مثل گذشته کار کنم اما تو اجرا مقدارها رو خالی می داد.البته دقیقا همون کدایی که تو پروژه قبلی
نوشته بودمو کپی کردم تا از کدش مطمئن بشم . قضیه اینکه اصلا دیتاست باز نمی شه تا ببینم داخلش چه خبره:متفکر:

shocraneh
دوشنبه 13 مهر 1388, 11:34 صبح
من مشکلم با ارسال پارامتر حل شد
برای adaptor که اصلا نمی تونم به صورت ویزارد بسازمش و اررور داره . اما دوست من
این که همون حرف اول من شد شما احتمالا یه دیتااداپتر با ویزارد ساختی و خوب صد در صد
همون جا به پایگاه اتصالش دادی . خوب وقتی کارتو ببری رو سیستم دیگه چون اسم کامپیوتر ها
متفاوته . بهت اررور می ده ؟؟!!1
من روی اینکه اسم سرور پویا باشه تاکید دارم .
حالا من قصد داشتم همون شیوه اول خودم رو بهینه تر کنم فکر می کنم جوین
شیوه ی درستی نباشه اما نمی دونم چی کار کنم(با یه دیتاست چه جوری دو تا تیبل رو پر کنم

shocraneh
دوشنبه 13 مهر 1388, 12:28 عصر
دیتاستی که با دو تا تیبل پر شده چه طوری به کریستال ارسال کنم
یه چیزی مثل این کد که البته جواب نمی ده
Dim ds As New DataSet
query = "select * from table1 where id='" + TextBox1.Text.Trim + "'"
da = New SqlClient.SqlDataAdapter(query, cn)
da.Fill(ds, "std1")
query = "select * from table2"
da = New SqlClient.SqlDataAdapter(query, cn)
da.Fill(ds, "std2")
Dim strReportPath As String = GetCurrentDirectory()
If strReportPath.Substring(strReportPath.Length - 9) = "bin\Debug" Then
strReportPath = strReportPath.Substring(0, strReportPath.Length - 10)
End If
strReportPath &= "\CrystalReport2.rpt"
Dim rpt As New CrystalDecisions.CrystalReports.Engine.ReportDocum ent
rpt.Load(strReportPath)
rpt.SetDataSource(ds)
Form2.CrystalReportViewer1.ReportSource = rpt
Form2.ShowDialog()

mn_zandy63
دوشنبه 13 مهر 1388, 13:03 عصر
من مشکلم با ارسال پارامتر حل شد
برای adaptor که اصلا نمی تونم به صورت ویزارد بسازمش و اررور داره . اما دوست من
این که همون حرف اول من شد شما احتمالا یه دیتااداپتر با ویزارد ساختی و خوب صد در صد
همون جا به پایگاه اتصالش دادی . خوب وقتی کارتو ببری رو سیستم دیگه چون اسم کامپیوتر ها
متفاوته . بهت اررور می ده ؟؟!!1
من روی اینکه اسم سرور پویا باشه تاکید دارم .
حالا من قصد داشتم همون شیوه اول خودم رو بهینه تر کنم فکر می کنم جوین
شیوه ی درستی نباشه اما نمی دونم چی کار کنم(با یه دیتاست چه جوری دو تا تیبل رو پر کنم

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

در مورد اسم پویای سرور، دوست من، الان همین پروژه که روی سیستم من ساخته شده رو باز کن، ببین مشکل داری با اتصال به پایگاه؟
نباید داشته باشی. پس فرض مسئله اشتباهه.

ببین دوست من، بسته به شرایط پروژه شما راههای متفاوتی هست برای پویا شدن اتصال به دیتابیس. که در هیچ کدوم من مشکلی برای ویزاردی بودن دیتاست نمیبینم.
بله همونطور که بهت توضیح دادم، به عنوان نمونه یک پروژه کوچیک با استفاده از ویزارد ساختم که ببینی ویزارد هیچ مشکلی بوجود نمیاره، و ترست بی مورده.

موفق باشی

پ ن. یادم رفته بود Attach کنم :خجالت: عجله داشتم ببخشید.

shocraneh
دوشنبه 13 مهر 1388, 19:55 عصر
دوست من فایلی که گفتی کجا گذاشتی ؟؟ قبلی رو هم که ویرایش نکردی ؟! البته یه بار دیگه گرفتمش ام بازم از crystal اررور داره و رو اجرا نمی ره و البته این می گم دیتاست مشکل داره در کل رو سیستم من جدیدا این مشکل بوده و خودم هم نمی تونم یه دیتا آداپتور بسازم . نمی دونم از دوباره ویندوز نصب کنم ولی گمون نکنم چون این کار رو کردم . شاید درایو ای دیگم ویروسیه و ..... نظرتون چیه ؟
سایت کریستال نمی دونی چیه یه چیزی تو مایه های crystallreport.net بود . از google خود کریستل 11 رو پیدا نکردم

mn_zandy63
سه شنبه 14 مهر 1388, 00:06 صبح
دوست من فایلی که گفتی کجا گذاشتی ؟؟ قبلی رو هم که ویرایش نکردی ؟! البته یه بار دیگه گرفتمش ام بازم از crystal اررور داره و رو اجرا نمی ره و البته این می گم دیتاست مشکل داره در کل رو سیستم من جدیدا این مشکل بوده و خودم هم نمی تونم یه دیتا آداپتور بسازم . نمی دونم از دوباره ویندوز نصب کنم ولی گمون نکنم چون این کار رو کردم . شاید درایو ای دیگم ویروسیه و ..... نظرتون چیه ؟
سایت کریستال نمی دونی چیه یه چیزی تو مایه های crystallreport.net بود . از google خود کریستل 11 رو پیدا نکردم

سلام دوست من، فایل رو در همون پست قبلی گذاشتم، عذر میخوام، عجله داشتم فراموش کرده بودم بذارم.
در مورد اینکه نمیتونی data Adapter بسازی، تا حالا بر نخوردم، نمیدونم، شاید دوستان بتونن کمک کنن. آیا بهت خطا میده؟ مشکلت چیه؟
در مورد کریستال هم اینجا رو یک نیگاه بنداز.
https://wiki.sdn.sap.com/wiki/pages/viewpage.action?pageId=56787567
کریستال 2008 ورژن 12 ِ.
شاید با نصب لینکهای اینجا مشکلت حل شه، البته من خودم تست نکردم. بنابراین مطمئن نیستم.

mn_zandy63
سه شنبه 14 مهر 1388, 01:56 صبح
من روی اینکه اسم سرور پویا باشه تاکید دارم .
حالا من قصد داشتم همون شیوه اول خودم رو بهینه تر کنم فکر می کنم جوین
شیوه ی درستی نباشه اما نمی دونم چی کار کنم(با یه دیتاست چه جوری دو تا تیبل رو پر کنم

در مورد اسم پویای سرور، کاملا بسته به شرایط پروژه ات داره، مثلا اگه فرض کنیم، شما پروژه ات قراره همیشه به SQL به صورت Local وصل شه، در اینصورت کافیه اسم سرور رو بذاری (local) یا یک نقطه، در اینصورت دیگه مشکل اسم سرور در جابجایی رو نداری و .... که بستگی داره شرایط پروژه ات چی باشه.

در مورد پر کردن 2 تا جدول در یک dataset، کاری نداره، اگه کدی که برات فرستادم رو ببینی، این کار رو انجام دادم؛کافیه با دو تا Select متفاوت، یا دو تا TableAdapter متفاوت، دو بار یک دیتاست رو Fill کنی، و هر بار یک اسم متفاوت برای جدولش بدی. همین.
مثلا:

TableAdapter1.Fill(ds,"table1")
TableAdapter2.Fill(ds,"table2")

موفق باشی.

mn_zandy63
سه شنبه 14 مهر 1388, 02:01 صبح
دیتاستی که با دو تا تیبل پر شده چه طوری به کریستال ارسال کنم
یه چیزی مثل این کد که البته جواب نمی ده
Dim ds As New DataSet
query = "select * from table1 where id='" + TextBox1.Text.Trim + "'"
da = New SqlClient.SqlDataAdapter(query, cn)
da.Fill(ds, "std1")
query = "select * from table2"
da = New SqlClient.SqlDataAdapter(query, cn)
da.Fill(ds, "std2")
Dim strReportPath As String = GetCurrentDirectory()
If strReportPath.Substring(strReportPath.Length - 9) = "bin\Debug" Then
strReportPath = strReportPath.Substring(0, strReportPath.Length - 10)
End If
strReportPath &= "\CrystalReport2.rpt"
Dim rpt As New CrystalDecisions.CrystalReports.Engine.ReportDocum ent
rpt.Load(strReportPath)
rpt.SetDataSource(ds)
Form2.CrystalReportViewer1.ReportSource = rpt
Form2.ShowDialog()


خب اینجا خودت جواب سوال قبلیت رو دادی.
به نظر ایرادی نداره کدت.
مشکلت چیه؟
ممکنه مشکلت مربوط به زمان طراحی باشه. گزارشت رو چه شکلی ساختی، دیتاست گزارشت دقیقا همین دو تا جدول رو داره و با همین فیلدها؟

shocraneh
چهارشنبه 15 مهر 1388, 23:16 عصر
بابت لینک ممنون حتما دانلود می کنم .
کدای شما کاملا درسته به شرطی که سیستم من لجبازی نکنه!!!فکر کنم ویروسیه
کدی که من براتون گذاشتم مشکلش سر ارسال رو کریستاله
rpt.SetDataSource(ds)
حتما باید یکی از تیبل ها رو انتخاب کنی وگرنه جواب نمی ده

در هر صورت بابت توجهتون ممنونم . نتیجه رو خبرتون می دم . خیلی وقتتون رو نگیرم . خداحافظ