# مباحث متفرقه برنامه نویسی > گزارش سازی با Crystal Report >  کار با کریستال در شبکه

## tdodangeh

برنامه ای را با VB6 و Accessو گزارشات با کریستال ریپورت 9 نوشته ام، برنامه بدون مشکل روی سیستم خودم کار می کند  اما زمانی که برنامه به سیستم دیگری که قرار است هم به عنوان Server  باشد و هم کاربر، نصب میشود و دو کاربر دیگر نیز از این سیستم قرار است استفاده کنند و گزارشات را ببینند با کلیک روی هر یک از گزارشات برنامه پیغام خطای Failed to open Document و TLV Record Error را می دهد و برنامه را می بندد.لطفا راهنمایی بفرمایید.

----------


## sm

كدتون رو بزارين اينجا
حتما شما مسيرهاتون رو مطلق دادين كه اين مشكل ايجاد شده.
ممكنه از مسير بانكتون هم باشه

موفق باشيد

----------


## tdodangeh

برنامه را به همراه DataBase و کد برنامه و گزارشات ضمیمه کرده ام ، در صورت مشکل بفرمایید صرفا کد مورد نیاز را به همراه توضیحات ارسال کنم، برنامه با نام کاربری و رمز عبور a شروع به کار خواهد کرد، بانک اطلاعاتی و پوشه Report باید در مسیر برنامه قرار بگیرد. البته من Pakege برنامه و برنامه نصبی را با Pakege&Development خود VB ساخته ام و من Merge Module ها را نیز روی سیستم خودم Download کرده ام، و 5 تا فایل آن را نیز در زمان ساختن Setup به آن Add کرده ام.رمز Database برابر Adonis  می باشد.باز هم از راهنمایی های شما ممنونم.

----------


## sm

خوب نيازي به نگاه كردن برنامه نيست از توضيحات شما مشخصه كه اشتباه از كجاست!
شما بايد گزارشتون رو به عنوان يه متغير توي برنامه اضافه كنين.
من قبلا در اين مورد مفصل توي همين بخش توضيح دادم اگه اونا رو مطالعه كنين فكر كنم مشكل حل بشه.
ضمن اينكه بايد مسير بانك رو هم درست رد كنين كه بهترين گزينه براي شما استفاده از ODBC Connection هست كه در مورد اون هم قبلا توضيح دادم.
اونا رو مطالعه كنين اگه مشكلي بود در خدمتم.

موفق باشيد

----------


## tdodangeh

البته من توضیحات و راهنمایی های شما در این سایت را مطالعه کرده ام ، و اصلاً شروع به کار با کریستال و بالاخره تا به اینجا رسیدن صرفاً بخاطر کمکهای شما بوده، باز هم ممنون.
من در زمان login یعنی در اولین فرم یک متغیر cn از نوع Connectionstring تعریف کردم با این کد
()Private Sub Form_Load
cn.ConnectionString = "Provider=Microsoft.jet.oledb.4.0;Data Source=" + App.Path + "\person.mdb;Persist Security Info=False;Jet OLEDB:DataBase Password=Adonis"
cn.Open
End Subو در فرم های مربوط به گزارشاتم هم کد های زیر را قرار داده ام()Private Sub Form_Load
Calendar = vbCalHijri
Dim crAPP As New CRAXDDRT.Application
Dim crRept As New CRAXDDRT.Report
Dim dbPath As String, ServerName As String
Dim crxTables As CRAXDDRT.DatabaseTables
Dim crxTable As CRAXDDRT.DatabaseTable
Dim rs As New Recordset, sql As String
Set crAPP = New CRAXDDRT.Application
Set crRept = crAPP.OpenReport(App.Path & "\Reports\BazresiKolVahed.Rpt") 'Report File
crRept.ReportComments = FDate(Date)
Initialize
 ";sql = "select * from Bazsrecikolvahed 
 rs.Open sql, cn, adOpenStatic, adLockOptimistic
 crRept.Database.SetDataSource rs
     CR1.Refresh
    crRept.DiscardSavedData
    crRept.ReadRecords
    CR1.ReportSource = crRept
CR1.ViewReport
Screen.MousePointer = vbDefault
Set crAPP = Nothing
Set crRept = Nothing
End Sub

----------


## tdodangeh

و اگر در سیستم دیگر نصب شود و قرار باشد با دو کاربر دیگر نیز Share گردد آیا باید کدهای زیر در فرم های گزارشات قرار گیرد؟
ServerName = App.Path + "\person.mdb"
dbPath = App.Path + "\person.mdb"
crRept.DiscardSavedData
crRept.Database.LogOnServer "dao.dll", ServerName, dbPath, "", "Adonis"
crRept.Database.Tables(1).SetLogOnInfo servarname, dbPath, "", "Adonis"
Set crxTables = crRept.Database.Tables
For Each crxTable In crxTables
    With crxTable
       .SetLogOnInfo ServerName, dbPath, "", "Adonis"
    End With
Next
 و آیا با وجود این کارها باید ODBC انجام شود؟

----------


## tdodangeh

در سیستمی که VB6 نصب بود وقتی اجرا گرفتم Error: cannot creat activex objet را می داد!!!

----------


## Moslemu

سلام.
احتمالاً توي اون سيستم كريستال ريپورت نصب نيست.
يا اگه از Merge Module استفاده مي‌كنيد، به درستي توي كامپيوتر قرار نگرفتن.

----------


## tdodangeh

آیا کدهای بالا برای تعریف متغییر گزارش در برنامه کافی است؟و یا اطلاً کدها درست است؟
حتی در یکی از سیستم ها من کریستال را نیز نصب کردم باز هم همان Error ها را داد!!
خواهشاً در صورت امکان سریعتر من را راهنمایی کنید

----------


## Moslemu

Public crApp As New CRAXDRT.Application
Public crRpt As New CRAXDRT.Report
Public crDBTab As CRAXDRT.DatabaseTable

    Set crRpt = crApp.OpenReport("ReportPath")
    crRpt.DiscardSavedData
    crRpt.Database.LogOnServer "dao.dll", "ServerName", "dbPath","UserName" , "Password"
    crRpt.Database.AddOLEDBSource "ConnectionString", "Table"
    
    For Each crDBTab In crRpt.Database.Tables
        crDBTab.SetLogOnInfo "ServerName", "dbPath","UserName" , "Password"
    Next
    
    FrmRpt1.CrystalActiveXReportViewer1.Refresh
    FrmRpt1.Show 

من از اين كد جواب گرفتم.
اميداورم كه شما رو هم به جواب برسونه.

----------


## tdodangeh

ممنون از جوابتون اما من کدهای شما را نوشتم ، متاسفانه همان Error:ActiveX control cannot creat object  را میدهد.واقعاً نمی دانم ایراد از کجاست؟

----------


## tdodangeh

من برای تست روی یک سیستم دیگر کریستال ریپورت و VB6 را نصب کردم و می خواستم یک پروژه جدید ایجاد کنم، اما در زمان اضافه کردن َActiveX کریستال ریپورت پیغام خطای Error in dll Loaded را می دهد چگونه رفع عیب کنم؟

----------


## tdodangeh

در برنامه، در قسمت Referencen   تیک مربوط به crystal Report Activex designer design and runtime librery 10.2 را برداشتم و تیک مربوط به  crystal Report 9 Activex designer design and runtime librery را زدم و در برنامه بجای craxddrt از craxdrt استفاده کردم و  بروی سیستم های دیگر جواب داد

----------


## حسین علوی

سلام دوست عزیز
اگر از طریق Map network  یک درایو Z که مربوط به مثلا پوشه Newfolder1 در سرورباشد رو در تمام کلاینت ها بسازی و تمام فایلهای گزارشگیری رو اونجا قرار بدی و مسیرهای گزارش رو همون مسیر Z قرار بدی  آیا  به این  صورت هم  مشکل  حل  میشه ؟

----------

