Динамическое изменение подключения Crystal Reports 8.5 к SQL Server 2005 в VB6
Нам нужно подключить некоторые Crystal Reports 8.5 к базе данных SQL Server под MS Windows 7, 64-битной. Запрос не обрабатывается кодом VB6 нашего приложения, но включен в Отчеты, и к тому времени мы хотели бы избежать передачи в Отчеты данных, извлеченных из кода, потому что мы должны глубоко изменить все Отчеты. Поскольку приложение будет установлено в разных местах, где данные о соединении будут различаться, нам нужно изменить эту информацию во время выполнения с помощью кода vb6, чтобы в отчетах указывались соответствующие данные. Это тестовый код, который мы используем:
Dim nTables As Integer
Dim iCount As Integer
Dim iRitCW As Integer
'-----> Ritorno msgBox
Dim RitMsg As Integer
Dim sRitCW As String * 255
jobnum = 0
If PEOpenEngine() = False Then
MsgBox "Errore Engine"
End If
jobnum = PEOpenPrintJob("c:\test\report1.rpt")
'Declarations
Dim logonInfo As PELogOnInfo
logonInfo.StructSize = PE_SIZEOF_LOGON_INFO
logonInfo.ServerName = "dellone\sqlexpress2005" + Chr(0)
logonInfo.DatabaseName = "TEST" + Chr(0)
logonInfo.UserID = "sa" + Chr(0)
logonInfo.Password = "sasasa_2005" + Chr(0)
If (PELogOnServer("p2smon.dll", logonInfo) = False) Then
MsgBox "Connessione fallita", vbExclamation, NomeApplicazione
iRitCW = PEGetErrorCode(jobnum)
RitMsg = MsgBox("Errore n. : " + Str(iRitCW), vbExclamation, NomeApplicazione)
End
End If
nTables = PEGetNTables(jobnum)
For iCount = 0 To nTables - 1
If PESetNthTableLogOnInfo(jobnum, iCount, logonInfo, True) = False Then
MsgBox "Errore : PESetNthTableLogOn", vbExclamation, NomeApplicazione
Screen.MousePointer = 0
Exit Sub
End If
If (PETestNthTableConnectivity(jobnum, iCount) = False) Then
MsgBox ("Errore nella connessione per la tabella:" & iCount)
End If
Next iCount
If PEOutputToPrinter(jobnum, 1) = False Then
MsgBox "Stampa del documento fallita", vbExclamation, NomeApplicazione
Screen.MousePointer = 0
Exit Sub
End If
If PEStartPrintJob(jobnum, True) = False Then
MsgBox "Stampa in anteprima fallita", vbExclamation, NomeApplicazione
iRitCW = PEGetErrorCode(jobnum)
RitMsg = MsgBox("Errore di stampa n. : " + Str(iRitCW), vbExclamation, NomeApplicazione)
Exit Sub
End If
Screen.MousePointer = 0
Обычно сообщается об ошибке 536 на PELogonServer и 599 после PEStartPrintJob. Поэтому мы спрашиваем, синтаксически ли правильны данные, которые мы используем для инициализации структуры данных logoninfo. Если строка ServerName должна быть экранирована каким-либо особым образом. Мы запрашиваем подтверждение о dll, который мы используем ("p2smon.dll") в функции PELogOnServer, тогда как мы безуспешно пытались с "p2ssql.dll", и любые дальнейшие объяснения, которые могут помочь нам решить проблему.
заранее спасибо