Kategorie szkoleń | Egzaminy | Kontakt
  • 3
  • 2
  • 342

Próbuję połączyć się z bazą danych MSSQL 2008. Używam VBA. Poniżej zamieszczam kod:

 

Sub PobierzDane()
Dim connADO As ADODB.Connection
Dim recADO As ADODB.Recordset
Dim strSQL As String
Dim connStr As String
Dim BladNumer As Long
Dim BladOpis As String


connStr = "Provider=SQLOLEDB.1;" & _
"Server=***;" & _
"Uid=***;" & _
"Initial Catalog=CDNXL_Refleks_Spzoo;" & _
"Pwd=***;" & _
"Connection Timeout=1200"

strSQL = "select * from [CDN].[REFLEKS_ESKLEP_SprzedazTwr]"
Set connADO = CreateObject("ADODB.Connection")
Set recADO = CreateObject("ADODB.Recordset")

connADO.ConnectionTimeout = 600
connADO.CommandTimeout = 600

connADO.Open connStr ' --- tu pojawia się błąd: -2147217887: Wielokrokowa operacja bazy danych OLE wygenerowała błędy. Sprawdź wszystkie wartości stanu bazy danych OLE. Nie wykonano żadnego działania.
On Error GoTo ZakonczPolaczenie

recADO.Open strSQL, connADO, adOpenStatic, adLockOptimistic
ThisWorkbook.Worksheets(1).Cells(1, 1).CopyFromRecordset recADO

ZakonczPolaczenie:
BladNumer = Err.Number
BladOpis = Err.Description
connADO.Close

Set connADO = Nothing
Set recADO = Nothing
Debug.Print "Połączenie zakończone. Błąd nr " & BladNumer & ". " & BladOpis

On Error GoTo 0

End Sub

 

[REFLEKS_ESKLEP_SprzedazTwr] - jest widokiem

 

Błąd pojawia się zarówno przy użyciu ActiveX Data Objects 6.1 Library jak i ActiveX Data Objects 2.8.

Co oznacza błąd i jak z nim sobie poradzić?

Bartosz Bujanowski.

Bartosz_Bujanowski
  • Zapytał
  • @ Bartosz_Bujanowski | 30.12.2015
    • 1
    • 1
    • 0

Odpowiedzi (3)

  • 0

Pomyłka! Błąd pojawia się w innym wierszu kodu:

recADO.Open strSQL, connADO, adOpenStatic, adLockOptimistic

Bartosz_Bujanowski
  • Odpowiedział
  • @ Bartosz_Bujanowski | 30.12.2015
    • 1
    • 1
    • 0
  • 0

Witam serdecznie.

Tak czy inaczej nie jest to bardzo popularny błąd i jego naprawa nie jest prosta.

Tu można poczytać o prawdopodobnych przyczynach i spróbować nie do końca bezpiecznych rozwiązań.

https://support.microsoft.com/pl-pl/kb/269495

  • Odpowiedział
  • @ | 05.01.2016
  • TRENER ALTKOM AKADEMII
  • 0

Ponadto jeżeli jest to jakiś wielki i złożony widok spróbowałbym ograniczyć liczbę rekordów wynikowych przy użyciu klauzuli TOP lub WHERE.

  • Odpowiedział
  • @ | 05.01.2016
  • TRENER ALTKOM AKADEMII