View Full Version : ساخت گزارش در کریستال ریپورت با بانک و جداول sqls
علی کاکرودی
دوشنبه 10 اردیبهشت 1386, 00:26 صبح
باسلام ، من برنامه ای نوشتم که تمام جداول و بانک ان با sql می باشد حالا می خواهم با کریستال ریپورت گزارشات ان رابنویسم ولی و ارتباط آن را نتوانستم برای ایجاد گزارش برقرار کنم ، لطفا مرا در این زمینه راهنمائی کنید .ضمناً در تایپیک های موجود مطلبی پیدا نکردم . باتشکر
reza_rad
دوشنبه 10 اردیبهشت 1386, 07:15 صبح
از مقالات آموزشی اینجا استفاده کنید:
http://barnamenevis.org/forum/showthread.php?t=64328
اگر مشکلتان حل نشد دقیقا توضیح بدید مشکل کجاست.
علی کاکرودی
چهارشنبه 12 اردیبهشت 1386, 01:49 صبح
برنامه ای که نوشته شده با vb6 و sql 2000 می باشد ونیاز به چند گزارش دارد که می خواهم با کریستال ریپورت ایجاد شود ، حال وقتی در زمان ایجاد وانتخاب بانک در کریستال ریپورت گزینه sql/odbc را انتخاب می کنم مابقی مراحل را نمی دانم که چگونه با بانک sql ارتباط برقرار شود و بتوان از جداول موجود در بانک استفاده نمود .
sm
چهارشنبه 12 اردیبهشت 1386, 08:05 صبح
شما باید از مسیر زیر یک کانکشن ODBC توی محیط ویندوز ایجاد کنید و بعد توی گزارش از اون استفاده کنید.
Control Panel--->administrativ Tools--->ODBC
توی این قسمت میتوانید کانکشنی از هر نوع بانک اطلاعاتی ایجاد کنید.
موفق باشید.
علی کاکرودی
پنج شنبه 13 اردیبهشت 1386, 23:56 عصر
مشکل من هم ساخت کانکشن در همین مسیر است که روال کار را به اون شکلی که انجام می دهم قبول نمی کند .
sm
جمعه 14 اردیبهشت 1386, 13:37 عصر
چطور ؟ بیشتر مشکلتون رو توضیح بدید.
علی کاکرودی
سه شنبه 18 اردیبهشت 1386, 00:36 صبح
من از کریستال ریپورت نسخه 8.5 استفاده می کنم که در خود vb6 بصورت یک designer قرار میگیره ، منتها وقتی دیتا اینوایرومنت را به آن وصل میکنم و فیلدها را روی گزارش قرار میدهم پیغام خطا می دهد .
sm
سه شنبه 18 اردیبهشت 1386, 07:57 صبح
پیغام خطا ؟
علی کاکرودی
سه شنبه 18 اردیبهشت 1386, 23:19 عصر
بعد از ساخت گزارش زمانیکه برنامه را اجرا می کنم و فرم مربوط به گزارش را نمایش می ده پیغام server has not yet been opened را نمایش می ده .
sm
چهارشنبه 19 اردیبهشت 1386, 07:05 صبح
فکر کنم باید این خط رو برای گزارشتون اضافه کنید:
Report.database.tables(1).setlogoninfo "", "", "UserName", "Password"
موفق باشید
sm
چهارشنبه 19 اردیبهشت 1386, 07:08 صبح
این هم یه راه حل برای اینکه کلا از داخل محیط VB بتونید مشکل رو برطرف نمایید:
How many tables does your report use? You should call SetLogonInfo for each table.
Does your report use subreports? You will need to go through them as well.
Here is a VB routine I recently wrote to set the report datasources. Note that the code is going through the testing phase but so far so good. It is written for Crystal 8.0 and SQL Server stored procedures. It might give you some ideas.
'************************************************* ************************************************** ***************
'Procedure: SetReportDataSources
'Description: ' Crystal saves the Login Information and Location as part of the report. This procedure
' overrides the login information and location for all the report's DatabaseTables including any
' Subreports. It assumes all tables use the same login criteria (ie all data is from the same database).
' It also assumes that all reports are created from stored procedures(System standard).
' In order to override the Location we need to parse the DatabaseTable.Location property.
' This allows us to easily support several "environments" but we need to tell the Crystal engine
' which Login information to use and which stored procedure to use.
' For example - An application has three environments. Production, QA and Dev. The QA and Dev
' databases are called Pubs_Dev and Pubs_QA on server Handel. Bob, a developer, creates a report
' using the Pubs_Dev database and a stored procedure called selAuthorsbyState. Crystal will save the
' Location as pubs_dev.dbo.Proc(selAuthorsByState). When a user named TestUser runs an application,
' selects the QA environment at login and then tries to print the report - the data is retrieved from the
' Pubs_Dev database(even if we tell Crystal to login to the QA database).
' By changing the Location to selAuthorsByState(ie remove Pubs_Dev.dbo.Proc) we are assured the
' data is retrieved from the QA database tables.
'************************************************* ************************************************** ***************
Private Sub SetReportDataSources(CrystalReport As CRPEAuto.Report, ServerName As String, DatabaseName As String, UserName As String, Password As String)
On Error GoTo ErrorHandler
Dim lngStartPos As Long
Dim lngEndPos As Long
Dim objSubReport As CRPEAuto.Report
Dim objDB As CRPEAuto.Database
Dim objTables As CRPEAuto.DatabaseTables
Dim objTable As CRPEAuto.DatabaseTable
Dim objSections As CRPEAuto.Sections
Dim objSection As CRPEAuto.Section
Dim objReportObjects As CRPEAuto.ReportObjects
Dim objSubReports As CRPEAuto.SubreportObject
Dim lngIdx As Long
Set objDB = CrystalReport.Database
Set objTables = objDB.Tables
'set the login information
For Each objTable In objTables
lngStartPos = InStr(1, objTable.Location, "(", vbTextCompare) + 1
lngEndPos = InStr(lngStartPos, objTable.Location, ")", vbTextCompare)
If lngEndPos = 0 Then
lngEndPos = Len(objTable.Location) + 1
End If
lngEndPos = lngEndPos - lngStartPos
objTable.Location = Mid$(objTable.Location, lngStartPos, lngEndPos)
objTable.SetLogOnInfo ServerName, DatabaseName, UserName, Password
Next
'Access to the sub reports is through the Sections collection
Set objSections = CrystalReport.Sections
For Each objSection In objSections
Set objReportObjects = objSection.ReportObjects
If objReportObjects.Count > 0 Then
For lngIdx = 1 To objReportObjects.Count
'make sure the report object is a subreport.
If objReportObjects(lngIdx).Kind = crSubreportObject Then
'open the subreport and set the login information
Set objSubReports = objReportObjects(lngIdx)
Set objSubReport = CrystalReport.OpenSubreport(objSubReports.Name)
Set objDB = objSubReport.Database
Set objTables = objDB.Tables
For Each objTable In objTables
lngStartPos = InStr(1, objTable.Location, "(", vbTextCompare) + 1
lngEndPos = InStr(lngStartPos, objTable.Location, ")", vbTextCompare)
If lngEndPos = 0 Then
lngEndPos = Len(objTable.Location) + 1
End If
lngEndPos = lngEndPos - lngStartPos
objTable.Location = Mid$(objTable.Location, lngStartPos, lngEndPos)
objTable.SetLogOnInfo ServerName, DatabaseName, UserName, Password
Next
End If
Next
End If
Next
Exit Sub
ErrorHandler:
Err.Raise Err.Number, "SetReportDataSources", Err.Source, Err.Description
End Sub
reza_rad
چهارشنبه 19 اردیبهشت 1386, 07:22 صبح
این ارور ممکنه به دلایل مختلفی بوجود بیاد.
این فایل کلا برای حل چنین مشکلی توی BusinessObjects گذاشته شده:
http://support.businessobjects.com/communitycs/technicalpapers/cr_server_not_yet_been_opened.pdf
علی کاکرودی
جمعه 21 اردیبهشت 1386, 00:16 صبح
جواب نداد ، باز همان خطا رو می ده ، دیگه موندم باید چه کار کنم . کد بالا را باید در کجا بنویسم .
sm
جمعه 21 اردیبهشت 1386, 11:20 صبح
از لحاظ کدنویسی توی VB6 بهتره که مشکلتون رو با دوستان بخش مربوطه مطرح کنید.... چونکه اینجا تخصصی زیاد با VB6 کار نمیشه و مخصوص خود کریستال ریپورت هست
موفق باشید
علی کاکرودی
شنبه 22 اردیبهشت 1386, 23:34 عصر
ممنون دوست من ، از طریق خود کریستال ریپورت پیدا کردم ، فقط کافی بود در قسمت سرور بجای عبارت root یک نقطه می گذاشتم . بالاخره بعداز کلی ور رفتن با کانکشن ساخته شد .
بازهم بخاطر تمام راهنمایی های جنابعالی تشکر می کنم .
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.