Рейтинг:
17
Andy Lanng
но вы никогда не закрываете связь.
это должно произойти на втором горячем коде. Область вашего подключения является глобальной, поэтому каждый раз, когда ваш код попадает в нее, вы используете один и тот же ее экземпляр. При первом запуске вы устанавливаете строку подключения и открываете соединение. Во второй раз, когда он запускается, соединение все еще открыто (очень плохо).
Ваше соединение должно быть на самом низком уровне. Вот почему вы обычно видите его в блоке "использование". Это делает область соединения еще ниже, чем сама функция.
Всегда тесные связи
Всегда утилизируйте соединения
Это не просто рекомендации, это закон! :Þ
Надеюсь, это поможет ^_^
Энди
Редактировать: обновлен код
Option Explicit
Public Report As New CrystalReport1
Public Function printReport()
Dim strConnectionString As String
Dim rs As ADODB.Recordset
Dim strScript As String
strConnectionString = "Provider=SQLOLEDB............"
Using mvCn As New ADODB.Connection
'mvCn does not exist outside of this block!
mvCn.ConnectionString = strConnectionString
mvCn.CommandTimeout = 0
mvCn.CursorLocation = adUseClient
mvCn.Open
strScript = strScript & "SELECT * FROM employee" & vbCrLf
Set rs = mvCn.Execute(strScript)
mvCn.Close()
'Always close before leaving scope. This should happen anyway but it's always good to be sure
End Using
'That's it. mvCn no longer exists. When the code runs again mvCn will be a new instance
Report.Database.SetDataSource rs
Report.AutoSetUnboundFieldSource crBMTNameAndValue
CRViewer1.ReportSource = Report
CRViewer1.ViewReport
Set Report = Nothing
End Function
jhovyn
Спасибо за ваш ответ @Andi...Я уже сделал это, но все еще существует ошибка...У вас есть какие-нибудь идеи, куда мне положить эту замыкающую связь?
jhovyn
@Andy Lanng
Благодарю вас, сэр, за помощь.Я следовал вашему коду выше, но когда я нажимаю кнопку, мой отчет crystal не отображается и не появляется...
Andy Lanng
Похоже, проблема может быть в другом. Напишите новый вопрос, чтобы привлечь внимание. Я не очень хорошо разбираюсь в Кристалле, поэтому могу предложить очень ограниченную помощь :S
Рейтинг:
1
Maciej Los
Сообщение об ошибке вполне понятно. mvCn
уже открыт, потому что он не был закрыт. Вы не можете открыть его снова!
Вы должны проверить, открыто ли соединение:
'check connection state
If mvCn.State = ConnectionState.Open Then mvCn.Close()
'open connection
mvCn.Open()
jhovyn
Спасибо за ваш ответ @Maciej Los..
Не могли бы вы показать мне, где я помещу этот код в свою текущую программу: (..я все еще новичок в программировании
jhovyn
Я добавил этот код, но все равно произошла ошибка :(
If mvCn.State = 1 Then
Public Function printReport()
Dim strConnectionString As String
Dim rs As ADODB.Recordset
Dim strScript As String
strConnectionString = "Provider=SQLOLEDB...." 'Don't show off your connection details
mvCn.ConnectionString = strConnectionString
mvCn.CursorLocation = adUseClient
mvCn.Open
strScript = strScript & "SELECT * FROM employee" & vbCrLf
Set rs = mvCn.Execute(strScript)
Report.Database.SetDataSource rs
Report.AutoSetUnboundFieldSource crBMTNameAndValue
CRViewer1.ReportSource = Report
CRViewer1.ViewReport
Set Report = Nothing
If mvCn.State = 1 Then
mvCn.Close
End If
End Function