صفحه 1 از 2 12 آخرآخر
نمایش نتایج 1 تا 40 از 51

نام تاپیک: معرفی دیتابیس به کریستال ریپورت

  1. #1

    معرفی دیتابیس به کریستال ریپورت

    با سلام
    چطور میتونیم یه دیتابیس رو به CrystalReport معرفی کرد بطوریکه با جابجایی مکان دیتابیس مشکلی در گزارش گیری ایجاد نشه آیا دستور مانند App.path وجود دارد؟
    آخرین ویرایش به وسیله riyahiyan : سه شنبه 09 خرداد 1385 در 16:06 عصر

  2. #2
    نقل قول نوشته شده توسط riyahiyan
    با سلام
    چطور میتونیم یه دیتابیس رو به CrystalReport معرفی کرد بطوریکه با جابجایی مکان دیتابیس مشکلی در گزارش گیری ایجاد نشه آیا دستور مانند App.path وجود دارد؟
    با سلام توسط این کد در VB6 میتوانید تمامی Property های یک Connection را ببینید
    حال هر کدام از این Property ها را که بخواهید میتوانید Set کنید
    On Error Resume Next
    Dim props As CRAXDRT.ConnectionProperties
    Dim prop As CRAXDRT.ConnectionProperty
    Dim Report As New CrystalReport1
    Set props = Report.Database.Tables(1).ConnectionProperties
    List1.Clear
    For Each prop In props
    List1.AddItem prop.Name & " : " & prop.Value
    Next

    Set کردن یک Property :
    Report.Database.Tables(1).ConnectionProperties("Da taBase Name")="c:\nwind.mdb"
    یا
    Report.Database.Tables(1).ConnectionProperties("Da taSource")="SQLSERVERDBNAME"
    بسته به نوع روش اتصال به بانک اطلاعاتی مثل
    ADO یا DataBaseFile
    و غیره
    مقادیر مختلفی در
    ConnectionProperties
    دیده خواهد شد

  3. #3
    ممنون دوست عزیز.

  4. #4
    کاربر دائمی آواتار pouriams
    تاریخ عضویت
    بهمن 1384
    محل زندگی
    تهران
    پست
    101
    یک کار خیلی ساده‌تری هم هست. اونم اینه که زمانی که شما connection ات را برقرار کردی. دوباره یک new connection بزن و این سری به جای آدرس کامل فیزیکی فقط نام بانک اطلاعاتی را بده و save کن آنوقت هرجا که reoprt شما باشد باز هم کار می کند البته به شرطی که بانک شما هم بغلش باشد. احتیاجی به کدنویسی هم نیست.






    -------------------
    عشق‌هایی کز پی رنگی بود // عشق نبود عاقبت ننگی بود ـــ حضرت مولانا

  5. #5
    نقل قول نوشته شده توسط vahidhaghani مشاهده تاپیک
    با سلام توسط این کد در VB6 میتوانید تمامی Property های یک Connection را ببینید
    حال هر کدام از این Property ها را که بخواهید میتوانید Set کنید
    On Error Resume Next
    Dim props As CRAXDRT.ConnectionProperties
    Dim prop As CRAXDRT.ConnectionProperty
    Dim Report As New CrystalReport1
    Set props = Report.Database.Tables(1).ConnectionProperties
    List1.Clear
    For Each prop In props
    List1.AddItem prop.Name & " : " & prop.Value
    Next

    Set کردن یک Property :
    Report.Database.Tables(1).ConnectionProperties("Da taBase Name")="c:\nwind.mdb"
    یا
    Report.Database.Tables(1).ConnectionProperties("Da taSource")="SQLSERVERDBNAME"
    بسته به نوع روش اتصال به بانک اطلاعاتی مثل
    ADO یا DataBaseFile
    و غیره
    مقادیر مختلفی در
    ConnectionProperties
    دیده خواهد شد
    من از Database اکسس استفاده کردم و وقتی کانکشن بالا رو نی نویسم error میده و منظور از database name چیه
    متشکرم

  6. #6
    عزیزم من هم مشکل تو را داشتم همین تازه حل کردم.
    برای حل برو به منوی database در کریستال ریپورت و سپس set database location را بزن
    propertise را زده و بروی data sourse راست کلیک کرده و گزینه same as report را انتخاب کن
    تا مسیر پایگاه داده همان مسیر گزارش هایت باشد.

  7. #7
    به جای تمام این دنگ و فنگ ها فقط کافیه به جای معرفی دیتا بیس دیتا ست رو به کریستال ریپورت معرفی کنی و دیگه کریستال ریپورت کاری نداره شما اون رو چطوری و از کجا پر کردی

  8. #8
    از راهنماییتون ممنونم

  9. #9
    نقل قول نوشته شده توسط sh مشاهده تاپیک
    به جای تمام این دنگ و فنگ ها فقط کافیه به جای معرفی دیتا بیس دیتا ست رو به کریستال ریپورت معرفی کنی و دیگه کریستال ریپورت کاری نداره شما اون رو چطوری و از کجا پر کردی
    ممنون میشم اگه واضح تر توضیح بدین

  10. #10
    من راه حل اونو پیدا کردم این کدها در وبی 6 برای ا تصال به بانک اکسس خیلی راحت جواب میده

    Dim strDatabaseLocation As String
    Public strReportLocation As String


    Private Sub Form_Load()
    Dim oCRApp As CRAXDRT.Application
    Dim oCRReport As CRAXDRT.Report


    strReportLocation = "d:\1.rpt"
    strDatabaseLocation = Form2.Text1.Text
    'strDatabaseLocation = "C:\WINDOWS\Desktop\project\xpversion.mdb" the original Location


    Set CrystalApplication = New CRAXDRT.Application
    Set oCRReport = CrystalApplication.OpenReport(strReportLocation)


    Call ResetReportDataSource(oCRReport)


    oCRReport.Database.Verify
    oCRReport.DiscardSavedData
    Set oCREngine = oCRReport.PageEngine
    oCRReport.ReadRecords


    'open the report
    oCRViewer.ReportSource = oCRReport
    oCRViewer.ViewReport
    While oCRViewer.IsBusy
    DoEvents
    Wend
    Me.WindowState = vbMaximized
    Me.Show
    End Sub


    Private Sub Form_Resize()
    oCRViewer.Top = 0
    oCRViewer.Left = 0
    oCRViewer.Height = ScaleHeight
    oCRViewer.Width = ScaleWidth
    End Sub


    '================================================= ========================
    'Subroutine: ResetReportDataSource
    '================================================= ========================
    Sub ResetReportDataSource(ByRef oCRReport As CRAXDRT.Report)
    Dim oCREngine As CRAXDRT.PageEngine
    Dim oCRTables As CRAXDRT.DatabaseTables
    Dim oCRTable As CRAXDRT.DatabaseTable
    Dim oCRSections As CRAXDRT.Sections
    Dim oCRSection As CRAXDRT.Section
    Dim oCRReportObjects As CRAXDRT.ReportObjects
    Dim oCRSubReportObject As CRAXDRT.SubreportObject
    Dim oCRSubReport As CRAXDRT.Report
    Dim I As Integer


    'reset the source for each table in the report
    I = 1
    Set oCRTables = oCRReport.Database.Tables
    While I <= oCRTables.Count
    Set oCRTable = oCRTables.Item(I)
    Call oCRTable.SetLogOnInfo(strDatabaseLocation, "", "", "")
    I = I + 1
    Wend
    Dim strReportName As String


    'reset the source for each sub-report table recursively
    Set oCRSections = oCRReport.Sections
    For Each oCRSection In oCRSections
    'Debug.Print oCRSection.Name
    Set oCRReportObjects = oCRSection.ReportObjects


    For I = 1 To oCRReportObjects.Count
    If oCRReportObjects.Item(I).Kind = crSubreportObject Then
    Set oCRSubReport = oCRReport.OpenSubreport(oCRReportObjects.Item(I).S ubreportName)
    'reset the tables forthe subreport
    oCRSubReport.DiscardSavedData
    oCRSubReport.Database.Verify
    oCRSubReport.DiscardSavedData


    '****recursively change data connections for all sub report tables As well
    Call ResetReportDataSource(oCRSubReport)
    End If
    Next
    Next


    End Sub

  11. #11
    کاربر دائمی آواتار pouriams
    تاریخ عضویت
    بهمن 1384
    محل زندگی
    تهران
    پست
    101
    من واقعا نمی دونم چرا ما همیشه دوست داریم لقمه را دور گردن بچرخانیم بعد در داخال دهانمان قرار دهیم.
    خیلی راحت و بی دردسرتر از این حرفا مشکلات برطرف میشه. شما فکر می کنید کریستال ریپورت با این عظمتش فکری به حال این موضوع نکرده که می خواهید کدهای طولانی و خسته کننده بنویسید.
    من سه تا عکس از کاری که باید انجام دهید برایتان گذاشتم که به راحتی می بینید وقتی دیتابیس خودتان را ایجاد کرده اید و آدرس فیزیکی به آن داده اید چگونه آدرس آن را نسبی بکنید و بسیار راحت هرجا که دلتان خواست آن را ببرید و از آن استفاده کنید. فقط کافی است کانکشن جدید را آدرس دهی نسبی بکنید.
    فایل های ضمیمه فایل های ضمیمه

  12. #12
    با سلام

    دیتابیس من اس کیو ال سرور 2000 و کدهایم با وی بی 6 است. ریپورت را ساخته ام و از طریق کد به دیتابیس وصل می‌شوم و مشکلی از باب اتصال وجود ندارد.
    ولی مشکل اینجاست که اتصال و دیتابیس تعریف شده نمی‌توانم در حین اجرا تغییر دهم.
    این مشکل را با مثال توضیح می‌دهم:
    1 - من دو دیتابیس 1 و 2 دارم که ساختار و طراحی هر دو دیتابیس کاملا شبیه هم است.
    2 - محتویات دیتابیس 1 مربوط به شرکت الف و دیتابیس 2 مربوط به شرکت ب می‌باشد.
    3 - برنامه به شکلی است که کاربر تعیین می‌کند این گزارش برای کدام شرکت باید تهیه شود آنگاه اتصال به همان دیتابیس برقرار و داده‌های همان شرکت به ریپورت ارسال می‌شود.
    4 - مشکل این است که در تمام حالات، اطلاعات شرکت الف نشان داده می‌شود.

    این موضوع را توسط خود کریستال ریپورت هم تست کردم و از طریق set database location اقدام به تغییر آنها کردم ولی در آنجا هم فقط اطلاعات شرکت الف می‌آمد.
    جالب این است که در ‌properties اتصال اسم دیتابیس شرکت ب دیده می‌شود ولی موقع نمایش اطلاعات می‌بینم اطلاعات شرکت الف است.

    اگر دوستان محبت کنند راهنمایی کنند ممنون می‌شوم.
    با تشکر

  13. #13
    کاربر دائمی آواتار pouriams
    تاریخ عضویت
    بهمن 1384
    محل زندگی
    تهران
    پست
    101
    "ولی مشکل اینجاست که اتصال و دیتابیس تعریف شده نمی‌توانم در حین اجرا تغییر دهم"
    متوجه نمی شوم. مگر نه اینکه شما از طریق کد وصل می شوید؟ پس زمانی که نام شرکت را انتخاب می کنید همون موقع هم connection می زنید به دیتابیس مربوطه و همان کانکشن را به ریپورت می فرستید. یا زمانی که انتخاب می کنید که از کدام دیتابیس گزارش بگیرید همان موقع باید connection string ای که به کریستال می فرستید با نام بانک انتخاب شده باشد.
    راستی در کریستال ریپورت تست کنید که تیک save with data را حتما برداشته باشید.

  14. #14
    نقل قول نوشته شده توسط pouriams مشاهده تاپیک
    "راستی در کریستال ریپورت تست کنید که تیک save with data را حتما برداشته باشید.
    اگه این کار رو کنیم برای هر گزارش باید دکمه refresh را بزنیم که تغییرات پایگاه داده در داخل برنامه اعمال شود.

  15. #15
    کاربر دائمی آواتار pouriams
    تاریخ عضویت
    بهمن 1384
    محل زندگی
    تهران
    پست
    101
    من هم که نگفتم تیک آن باشد گفتم باید برداشته شود.

  16. #16

    Unhappy

    نقل قول نوشته شده توسط pouriams مشاهده تاپیک
    من واقعا نمی دونم چرا ما همیشه دوست داریم لقمه را دور گردن بچرخانیم بعد در داخال دهانمان قرار دهیم.
    خیلی راحت و بی دردسرتر از این حرفا مشکلات برطرف میشه. شما فکر می کنید کریستال ریپورت با این عظمتش فکری به حال این موضوع نکرده که می خواهید کدهای طولانی و خسته کننده بنویسید.
    من سه تا عکس از کاری که باید انجام دهید برایتان گذاشتم که به راحتی می بینید وقتی دیتابیس خودتان را ایجاد کرده اید و آدرس فیزیکی به آن داده اید چگونه آدرس آن را نسبی بکنید و بسیار راحت هرجا که دلتان خواست آن را ببرید و از آن استفاده کنید. فقط کافی است کانکشن جدید را آدرس دهی نسبی بکنید.
    دوست عزیز اگه ممکنه بفرمایید با چه دستوری در VB6میتوان آدرس و نام دیتابیس را عوض کرد ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

  17. #17
    کاربر دائمی آواتار pouriams
    تاریخ عضویت
    بهمن 1384
    محل زندگی
    تهران
    پست
    101
    اگر با ado کار کنید به راحتی می توانید آدرسی که به کانکشن می فرستید عوض کنید.

    oConn.CursorLocation = adUseClient

    oConn.ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=" & dbnet

    oConn.Mode = adModeReadWrite

    oConn.Open


    dbnet یک string است که من در فرم هایم نام دیتابیس ام را پاس می کنم.
    من هم برنامه ای دارم که از دو دیتابیس که شبیه هم است و برای دو قسمت مختلف از یک شرکت است کار می کند که کاربر سیستم با توجه به انتخاب هر قسمتی که وارد آن می شود، دیتابیس آن قسمت نمایش داده می شود و در پرینت هم همین آدرس به کریستال ریپورت فرستاده می شود.
    البته این کدی که در بالا است یک کانکشن ایجاد می کند که شما با ایجاد کردن یک recordset‌ تمام برنامه های خود را می توانید پیاده سازی کنید و همچنین برای ریپورت خود آدرس دهی کنید.


    Dim ors As New Recordset
    ors.Open strsql, goConn, adOpenForwardOnly, adLockReadOnly

    strsql دستور sql ای است که به دیتابیس می فرستید مانند دستورات select و ... که برای همه آشنا است.
    goConn هم از نوع همان کانکشنی است که در بالا (oConn) تعریف شده.
    به همین راحتی در برنامه می توانید هم ریپورتتان را صدا کنید و هم query به آن بزنید. (البته query زدن به کریستال ریپورت نوع نوشتن دستورات sql اش کمی فرق می کند.)

  18. #18
    نقل قول نوشته شده توسط A.Farzin مشاهده تاپیک
    با سلام

    دیتابیس من اس کیو ال سرور 2000 و کدهایم با وی بی 6 است. ریپورت را ساخته ام و از طریق کد به دیتابیس وصل می‌شوم و مشکلی از باب اتصال وجود ندارد.
    ولی مشکل اینجاست که اتصال و دیتابیس تعریف شده را نمی‌توانم در حین اجرا تغییر دهم.
    این مشکل را با مثال توضیح می‌دهم:
    1 - من دو دیتابیس 1 و 2 دارم که ساختار و طراحی هر دو دیتابیس کاملا شبیه هم است.
    2 - محتویات دیتابیس 1 مربوط به شرکت الف و دیتابیس 2 مربوط به شرکت ب می‌باشد.
    3 - برنامه به شکلی است که کاربر تعیین می‌کند این گزارش برای کدام شرکت باید تهیه شود آنگاه اتصال به همان دیتابیس برقرار و داده‌های همان شرکت به ریپورت ارسال می‌شود.
    4 - مشکل این است که در تمام حالات، اطلاعات شرکت الف نشان داده می‌شود.

    این موضوع را توسط خود کریستال ریپورت هم تست کردم و از طریق set database location اقدام به تغییر آنها کردم ولی در آنجا هم فقط اطلاعات شرکت الف می‌آمد.
    جالب این است که در ‌properties اتصال اسم دیتابیس شرکت ب دیده می‌شود ولی موقع نمایش اطلاعات می‌بینم اطلاعات شرکت الف است.

    اگر دوستان محبت کنند راهنمایی کنند ممنون می‌شوم.
    با تشکر
    فکر می‌کنم مشکلم از نحوه اتصال با کد نباشد چرا که این موضوع را با خود کریستال ریپورت هم امتحان کردم و به نظر می‌رسد مشکل از جای دیگری باشد.
    1) من گزارش ساخته شده را در کریستال ریپورت باز کردم و از طریق set database location دیتابیس شرکت ب را با Current data source گزارش جایگزین کردم
    2) در درختواره بالایی همین پنجره set database location تمام properties مربوط به Current data source به خصوصیات دیتابیس شرکت ب تغییر کرد.
    3) وقتی گزارش را به نمای پیش‌نمایش چاپ بردم، بازهم دیدم اطلاعات شرکت الف در گزارش آمده است.
    4) از منوی Database فرمان Show SQL Query را اجرا کردم و دیده که در قسمت FROM این دستور اسن دیتابیس شرکت الف آمده است.
    نمی‌دانم این نام را چگونه باید عوض کرد. البته من گزارش را با استفاده از دیتابیس شرکت الف طراحی کرده‌ام.

    جهت تکمیل سئوال، قطعه کدی که دیتابیس را به ریپورت معرفی می‌کند، در زیر آورده می‌شود:
    Dim crApp As New CRAXDRT.Application
    Dim crReport As New CRAXDRT.Report
    Dim crDBTab As CRAXDRT.DatabaseTable

    Set crReport = crApp.OpenReport(App.Path & "\Reports\RepJurnals.Rpt")
    crReport.Database.LogOnServer "p2ssql.dll", DbInstance, DatabaseName, "sa", ""

    For Each crDBTab In crReport.Database.Tables
    crDBTab.SetLogOnInfo DbInstance, DatabaseName, "sa", ""
    Next

  19. #19
    نقل قول نوشته شده توسط pouriams مشاهده تاپیک
    اگر با ado کار کنید به راحتی می توانید آدرسی که به کانکشن می فرستید عوض کنید.

    oConn.CursorLocation = adUseClient

    oConn.ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=" & dbnet

    oConn.Mode = adModeReadWrite

    oConn.Open


    dbnet یک string است که من در فرم هایم نام دیتابیس ام را پاس می کنم.
    من هم برنامه ای دارم که از دو دیتابیس که شبیه هم است و برای دو قسمت مختلف از یک شرکت است کار می کند که کاربر سیستم با توجه به انتخاب هر قسمتی که وارد آن می شود، دیتابیس آن قسمت نمایش داده می شود و در پرینت هم همین آدرس به کریستال ریپورت فرستاده می شود.
    البته این کدی که در بالا است یک کانکشن ایجاد می کند که شما با ایجاد کردن یک recordset‌ تمام برنامه های خود را می توانید پیاده سازی کنید و همچنین برای ریپورت خود آدرس دهی کنید.


    Dim ors As New Recordset
    ors.Open strsql, goConn, adOpenForwardOnly, adLockReadOnly

    strsql دستور sql ای است که به دیتابیس می فرستید مانند دستورات select و ... که برای همه آشنا است.
    goConn هم از نوع همان کانکشنی است که در بالا (oConn) تعریف شده.
    به همین راحتی در برنامه می توانید هم ریپورتتان را صدا کنید و هم query به آن بزنید. (البته query زدن به کریستال ریپورت نوع نوشتن دستورات sql اش کمی فرق می کند.)

    بانک اطلاعاتی من اکسسه

  20. #20
    دوست عزیز کانکشن رو در برنامت ایجاد کن و بعد با روش Oledb 4 در کریستال به بانک کانکت شو و از کد زیر در برنامه استفاده کن



    Dim cn1 As New ADODB.Connection
    Dim rs1 As New ADODB.Recordset

    Dim sql As String

    cn1.Open "provider=microsoft.jet.oledb.4.0;" _
    & "data source=" & App.path & "\db1.mdb;" 'jet oledb:database password=9960984;"

    Set rs1 = New ADODB.Recordset
    rs1.CursorType = adOpenDynamic
    rs1.LockType = adLockOptimistic

    sql = "select * from personel order by famil"

    rs1.Open sql, cn1


    Report.Database.SetDataSource rs1

    FrmCrView.CRViewer91.ReportSource = Report

    FrmCrView.Show

  21. #21
    کاربر دائمی آواتار pouriams
    تاریخ عضویت
    بهمن 1384
    محل زندگی
    تهران
    پست
    101
    نقل قول نوشته شده توسط kmotavali مشاهده تاپیک
    بانک اطلاعاتی من اکسسه
    فرقی نمی کنه فقط کافیه provider اش را بانک اکسس بگذاری:
    Provider=Microsoft.Jet.OLEDB.4.0;Data Source=DATABASE.mdb;Mode=ReadWrite;Persist Security Info=False;Jet OLEDB:Database Password=YOURPASSWORDHERE
    داخل کوتیشن به جای provider‌ قبلی، بالایی را جایگزین کن.

  22. #22
    آقا من اومدم ابرو رو درست کنم، زدم چشو کور کردم

    درست است که گزارش من در هر حال اطلاعات شرکت الف را می‌آورد ولی با این حال اجرا می‌شد. خواستم کاری کنم تا یک جورائی رکوردست به گزارش ارسال شود ولی نمی‌دانم چه شده که در خط قرمزرنگ زیر اجرای گزارش به خطا منجر می‌شود.
    Dim crApp As New CRAXDRT.Application
    Dim crReport As New CRAXDRT.Report
    Set crReport = crApp.OpenReport(App.Path & "\Reports\RepJurnals.Rpt")
    crReport.Database.LogOnServer "p2ssql.dll", DbInstance,
    DatabaseName, "sa", ""
    For Each crDBTab In crReport.Database.Tables
    crDBTab.SetLogOnInfo DbInstance, DatabaseName, "sa", ""
    Next

    خطای زمان اجرای برنامه روی این خط هست:
    invalid TLV record

  23. #23
    کاربر دائمی آواتار sm
    تاریخ عضویت
    اردیبهشت 1383
    محل زندگی
    ایساتیس
    پست
    1,389
    واقعا تعجب میکنم!!!
    مگه شماها همه توی Windows کدنویسی نمی کنین دوستان!؟
    همین ویندوزی که باهاش کار می کنین یه ابزار بسیار عالی داره بنام ِODBC که تمام برنامه های دیگه هم اونو پشتیبانی می کنن از جمله کریستال
    با استفاده از این ابزار تموم مشکلاتتون حل میشه

    Control Panel--->Administrative Tools---> ODBC

    موفق باشین

  24. #24
    کاربر دائمی آواتار pouriams
    تاریخ عضویت
    بهمن 1384
    محل زندگی
    تهران
    پست
    101
    درود
    وقتی oledb هست که odbc چیه.

  25. #25
    آقا من بانکم access هستش
    آقا pouriams آدرس دهی نسبی برا من جواب نمی ده error می ده
    مسیر از اول درایو تست می کنه نه از پوشه برنامه!!!!!
    اون کدی هم که گذاشتی من از دستور sql استفاده نکردم برا من جواب نمی ده

    آخرش من چی کار کنم ؟؟

  26. #26
    کاربر دائمی آواتار pouriams
    تاریخ عضویت
    بهمن 1384
    محل زندگی
    تهران
    پست
    101
    برای آدرس دهی نسبی من گفتم بار اول که شما آدرس دهی مطلق می کنی و کریستال ات را می سازی برای این که نسبی اش بکنی نیازی نیست راه های سخت طی کنی و کدنویسی کنی، راحت ترین راه این است که همون جا دوباره new connection بزنی و همان کاری را که قبلا کردی انجام بدی یعنی دیتابیس ات را دوباره set کنی البته این بار فقط نام دیتابیس. اینطوری آدرس دهی دیتابیس ات نسبی میشه. هر جا که بانکت باشه، کریستال ات هم جواب میده.
    در مورد کدی که گفتی جواب نداد هم اگر لطف کنی کامل تر توضیح بدی ممنون می شم

  27. #27
    سلام من مشکلم فکر کنم حل شده فقط باید رو یه کامپیوتر دیگه امتحانش کنم
    با استفاده از کدی که آقای vb341 داده بودند :
    Dim cn1 As New ADODB.Connection

    cn1.Open "provider=microsoft.jet.oledb.4.0;" _
    & "data source=" & App.path & "\db1.mdb;"

    Report.Database.SetDataSource cn1

    با استفاده از oledb 4 . ازشون تشکر می کنم تنها مشکلی که الان دارم اینکه برای بار اول اطلاعات رو نشون می ده
    ولی برای بار دوم باید حتما رفرش رو بزنی و گرنه نشون نمی ده
    من از این کدها هم استفده کردم ولی جواب نداد!!!!
    CRViewer91.Refresh
    Report.DiscardSavedData
    Report.ReadRecords
    مشکل از کجاست؟؟؟؟

  28. #28
    کاربر دائمی آواتار pouriams
    تاریخ عضویت
    بهمن 1384
    محل زندگی
    تهران
    پست
    101
    در منوی فایل تیک save data with report را بردارید. احتمالا مشکل از همین جاست.

  29. #29
    این کارو کردم ولی مشکل از اونجا هم نبود؟؟؟!!!!!!!

  30. #30
    کاربر دائمی آواتار sm
    تاریخ عضویت
    اردیبهشت 1383
    محل زندگی
    ایساتیس
    پست
    1,389
    فکر کنم یکبار دیگه باید کانکشنش رو Set کنید

  31. #31
    چجوری می تونم این کارو انجام بدم؟

  32. #32
    کاربر دائمی آواتار sm
    تاریخ عضویت
    اردیبهشت 1383
    محل زندگی
    ایساتیس
    پست
    1,389
    شما باید یه متغیر از فایل گزارشتون توی برنامه ایجاد کنید و از اون به بعد با اون متغیر کار کنید و هربار که کاربر برای نمایش اقدام کرد اون متغیر رو دوباره مقداردهی کنید.

  33. #33
    کاربر دائمی آواتار pouriams
    تاریخ عضویت
    بهمن 1384
    محل زندگی
    تهران
    پست
    101
    منظور شما از متغیر از گزارش در برنامه چیه؟؟؟؟؟؟؟

  34. #34
    کاربر دائمی آواتار sm
    تاریخ عضویت
    اردیبهشت 1383
    محل زندگی
    ایساتیس
    پست
    1,389
    با اجازه اساتید فن، من کل مراحلی که خودم همیشه برای گزارشاتم استفاده می کنم رو بیان می کنم...
    من همواره از ODBCاستفاده می کنم
    1- توی کریستال ریپورت گزارشم رو میسازم و برای اینکه به بانک وصل بشوم، از کانکشن ODBC استفاده می کنم.
    2- بعد از آنکه گزارشم رو ساختم اونو توی پروژه ام اضافه می کنم
    حال یه Crystal Report Viewer روی فرم میزارم و بجای اینکه بگم Data Source اون یه فایل هست و مسیر قیزیکی رو بهش بدم اینجوری عمل می کنم :
    Dim R as new ReportName
    3- از این به بعد برای اینکه با گزارش کار کنم همواره با این متغیر سروکار دارم. حتی شما میتونین کانکشن رو هم با این متغیر Set کنید که من باهاش کار نکردم. می تونید بگید R.Database وبه همه پارامترهاش دسترسی داشته باشید
    4- در مرحله بعد وقتی کاربر کلید نمایش گزارش رو فشار داد ابتدا باید متغیر R رو دوباره مقداردهی کنم :
    r=new ReportBName
    5- بعد هم اگر باید مقداری به پارامترهای گزارش رد کنم اینکار رو انجام میدم و درنهایت ReportSource مربوط به CrystalReport Viewer رو بدین ترتیب Set میکنم :
    me.CrystalReportViewer.ReportSource=r

    با این کار گزارش به بانک وصل میشود و مقادیر را به کاربر نمایش می دهد.

    امیدوارم مفید واقع بشود

    موفق باشید

  35. #35
    کاربر دائمی آواتار pouriams
    تاریخ عضویت
    بهمن 1384
    محل زندگی
    تهران
    پست
    101
    کار شما خیلی خوبه منم همین کار را انجام می دهم ولی من بعد از این که گزارشم را در کریستال ریپورت ساختم اونو توی برنامه ام اضافه می کنم و در فرم ام هم CRViewer91 را ReportSource را نسبت دهی می کنم و به راحتی برنامه ام به ریپورتم وصل میشه. اما در مورد خود کریستال بود که بحث بود نه وصل شدن به آن.

  36. #36
    با ODBC آیا دیگه مشکل آدرس دهی نسبی حل می شه؟؟؟

    موقع setup سازی کی باید odbc رو برا کامپیوتر مقصد بسازیم
    و در اون موقع آدرس دهی نسبی می کنه یا نه؟

  37. #37
    کاربر دائمی آواتار sm
    تاریخ عضویت
    اردیبهشت 1383
    محل زندگی
    ایساتیس
    پست
    1,389
    بله تمام این مشکلات حل خواهد شد
    ضمن اینکه شما براحتی میتونید هنگام ساختن Setup برنامه بگید که اون کانکشن ODBC رو هم به Setupتون اضافه کند... البته من همیشه Setupهای برنامه هام رو با Install shield می سازم که اون هم تمام این موارد رو پشتیبانی میکنه

    موفق باشید

  38. #38
    یعنی برای هر پروژه باید یه ODBC تعریف کنیم ؟

  39. #39

    Question

    سلام

    من تو یکی از ریپورتام از دو تا جدول استفاده کردم
    ولی وقتی با دستور Sql اسم این دو جدولو ارجاع می دم و شرط می زارم
    میره 2 3 صفحه ریپورت بمن تحویل می ده
    در صورتی که 4 تا رکورد بیشتر نباید نشون بده
    و مشکل از دستور sql هم نیست چون وقتی خروجی شو داخل DtataGrid می زارم درسته!!!
    و در این مورد میره اطلاعات رو از بانکی که اولین بار با گزارش Set کردم می خونه
    در صورتی که من می خوام از بانکی که داخل کد مسیرشو دادم بخونه!!!!
    اینم کدش ببینید می تونید ایرادشو در بیارین؟؟؟؟؟؟؟؟


    Private Sub Form_Load()
    '********************************
    Dim cn1 As New ADODB.Connection
    Dim rs1 As New ADODB.Recordset
    Dim strsql As String

    Screen.MousePointer = vbHourglass
    Set cn1 = New ADODB.Connection
    Set rs1 = New ADODB.Recordset
    Set Report = New Khadamat

    cn1.Open "provider=microsoft.jet.oledb.4.0;" _
    & "data source=" & App.path & "\files\paygahnew.mdb;" 'jet oledb:database password=9960984;"

    rs1.CursorType = adOpenDynamic
    rs1.LockType = adLockOptimistic
    strsql = F_khb_report.DataCombo1.Text
    sql = "select * from tsabtkh,tpch " 'WHERE [tsabtkh.نوع خدمات]='" & strsql & "' and [tsabtkh.شماره پرونده]=[tpch.شماره پرونده]"

    rs1.Open sql, cn1

    Report.Database.SetDataSource rs1

    '********

    CRViewer91.Refresh
    Report.DiscardSavedData
    Report.ReadRecords

    Report.FormulaFields.GetItemByName("khadamat").Tex t = "'" & Trim(F_khb_report.DataCombo1.Text) & "'"
    Report.FormulaFields.GetItemByName("date").Text = "'" & Trim(Shamsi()) & "'"
    Report.RecordSelectionFormula = "{tsabtkh.نوع خدمات} like '*" & Trim(F_khb_report.DataCombo1.Text) & "*' "

    CRViewer91.ReportSource = Report
    CRViewer91.ViewReport
    Screen.MousePointer = vbDefault

    End Sub


    من یه ریپورت دیگه دارم که اون شرط نداره و میره از همون بانکی که دفعه دوم آدرس دادم می خونه
    تو این مورد درست عمل می کنه ولی تو مورد بالائی نه!!
    اینم کدش:


    Dim Report As New listafrad
    Dim cn1 As New ADODB.Connection
    Dim rs1 As New ADODB.Recordset
    Dim sql As String
    Private Sub Form_Load()

    '********
    Screen.MousePointer = vbHourglass
    Set cn1 = New ADODB.Connection
    Set rs1 = New ADODB.Recordset
    Set Report = New listafrad

    cn1.Open "provider=microsoft.jet.oledb.4.0;" _
    & "data source=" & App.path & "\files\paygahnew.mdb;"

    rs1.CursorType = adOpenDynamic
    rs1.LockType = adLockOptimistic

    sql = "select * from tpch"

    rs1.Open sql, cn1

    Report.Database.SetDataSource rs1

    '********
    Screen.MousePointer = vbHourglass
    CRViewer91.Refresh
    Report.DiscardSavedData
    Report.ReadRecords
    Report.FormulaFields.GetItemByName("date").Text = "'" & Trim(Shamsi()) & "'"
    CRViewer91.ReportSource = Report
    CRViewer91.ViewReport
    Screen.MousePointer = vbDefault
    End Sub


    اشکال از کجاست؟


    در مورد دوستمون که گفته بود ODBC استفاده کن
    چجوری میشه با ODBC مسیر بانک گزارشو عوض کرد یا یه بانک دیگه مثل اون رو به عنوان بانک اصلی بهش داد؟؟
    البته از طریق کدنویسی و در زمان اجرا !!؟

    و مراحل بالا رو که شما گفته بود غیر از دو باره set کردن متغییر ریپورت
    خود ویژوال بیسیک این کد ها رو می زاره !!! فکر کنم البته

  40. #40
    کاربر دائمی آواتار pouriams
    تاریخ عضویت
    بهمن 1384
    محل زندگی
    تهران
    پست
    101
    شاید چون فارسی نوشتید مشکل پیدا کرده و نشان نمیدهد. در حالیکه کد sql هم درست به نظر می رسد.
    در کانکشن هم از راه زیر بد نیست استفاده کنید:
    Database-> set datasource location -> create new connection از اینجا oledb (ado) را انتخاب کنید. ولی چون قبلا دیتابیس تان را ست کرده اید و آدرس مطلق به آن داده اید دیگر لازم نیست که آدرس مطلق به آن بدهید کافی است دیتابیس را انتخاب کنید (فقط نام دیتابیس به عنوان مثال db1.mdb) و آدرس های قبل از آن را پاک کنید. بعد از این که finish‌ را زدید (البته اگر password‌نیز دارد آن را نیز باید ست کنید) آدرس بانک شما آدرس نسبی می شود و هرجایی که بگذارید فقط کافی است بانکتان کنارش باشد یعنی در همان فولدر.
    آخرین ویرایش به وسیله pouriams : یک شنبه 26 فروردین 1386 در 08:22 صبح دلیل: وضوح بیشتر مطلب

صفحه 1 از 2 12 آخرآخر

قوانین ایجاد تاپیک در تالار

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