ورود

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 یک نقطه می گذاشتم . بالاخره بعداز کلی ور رفتن با کانکشن ساخته شد .
بازهم بخاطر تمام راهنمایی های جنابعالی تشکر می کنم .