Почему это вызывает несоответствие типов? - PullRequest
0 голосов
/ 28 декабря 2011

У меня есть приложение VB6, которое вызывает отчет Crystal Report XI. Однако, когда я пытаюсь изменить информацию о соединении, я получаю несоответствие типов. Любая помощь будет оценена.

Dim Report As craxddrt.Report ' This is how Report is defined

ChangeReportTblLocation Report ' This is the function where the mismatch occurs

Это определение ChangeReportTblLocation:

Private Function ChangeReportTblLocation(ByRef pReport As craxddrt.Report) As Boolean

    Dim ConnectionInfo  As craxddrt.ConnectionProperties
    Dim crxTables       As craxddrt.DatabaseTables
    Dim crxTable        As craxddrt.DatabaseTable
    Dim crxSections     As craxddrt.Sections
    Dim crxSection      As craxddrt.section
    Dim crxSubreportObj As craxddrt.SubreportObject
    Dim crxReportObjects As craxddrt.ReportObjects
    Dim crxSubreport    As craxddrt.Report
    Dim ReportObject    As Object
    Dim Y               As Integer
    Dim lsDatabase      As String

    On Error GoTo errHandle_CRTL


    lsDatabase = GetCurrentUserRoot("SOFTWARE\COTTSYSTEMS\APP", "Database")

    If lsDatabase = "" Then
        lsDatabase = gConn.DefaultDatabase
    End If

    If lsDatabase = "" Then
        lsDatabase = "frasys"
    End If

    With pReport

        For Y = 1 To .Database.Tables.Count
            Set ConnectionInfo = .Database.Tables(Y).ConnectionProperties

            ConnectionInfo.DeleteAll
            ConnectionInfo.Add "DSN", frasysdsn
            ConnectionInfo.Add "Database", lsDatabase

           'This is the Line that causes the type mismatch
            .Database.Tables(Y).Location = lsDatabase & ".dbo." & Database.Tables(Y).Location

        Next Y

        Set crxSections = .Sections

        For Each crxSection In crxSections

            Set crxReportObjects = crxSection.ReportObjects

            For Each ReportObject In crxReportObjects

                If ReportObject.Kind = crSubreportObject Then
                    Set crxSubreportObj = ReportObject
                    Set crxSubreport = crxSubreportObj.OpenSubreport
                    Set crxTables = crxSubreport.Database.Tables

                    For Y = 1 To crxTables.Count
                        Set crxTable = crxTables.Item(Y)
                        crxTable.Location = lsDatabase & ".dbo." & crxTable.Location

                    Next Y

                 End If
            Next ReportObject
        Next crxSection

    End With

    Set ConnectionInfo = Nothing
    Set crxTables = Nothing
    Set crxTable = Nothing
    Set crxSections = Nothing
    Set crxSection = Nothing
    Set crxSubreportObj = Nothing
    Set crxReportObjects = Nothing
    Set crxSubreport = Nothing
    Set ReportObject = Nothing

    ChangeReportTblLocation = True

    Exit Function
errHandle_CRTL:
    Screen.MousePointer = vbDefault
    MsgBox err.Number, err.Description, "ChangeReportTblLocation", err.Source
End Function

Ответы [ 2 ]

3 голосов
/ 28 декабря 2011

Я думаю, это просто опечатка:

.Database.Tables(Y).Location = lsDatabase & ".dbo." & .Database.Tables(Y).Location

Я добавил . перед вторым Database.Tables(Y).Location в этой строке.

Это говорит о том, что вы не используете Option Explicit в своем коде. Я не могу особо подчеркнуть, насколько важно использовать это. Это сэкономит вам много времени в поисках нечетных опечаток (вроде этого) и избавит ваш код от всяких странных вещей.

0 голосов
/ 28 декабря 2011

попробуйте использовать call ChangeReportTblLocation(Report)

...