2015-06-09 5 views
0

У меня есть база данных в Microsoft SQL с 3 столбцами. Последний столбец - это дата, которая имеет формат: dd-mm-yyyy hh: mm-ss (ex: 20-May-15 22:31:38). Мне удалось экспортировать два других столбца в Excel, но когда я пытаюсь импортировать последний столбец, он дает следующую ошибку: «Ошибка времени выполнения 3265»: ошибка, определяемая приложением или объектная ошибка ».Как преобразовать дату Microsoft SQL в строку vba?

Мой VBA скрипт:

Private Sub CommandButton1_Click() 
    Dim con As ADODB.Connection 
    Dim rs As ADODB.Recordset 
    Dim r As Integer 
    Set con = New ADODB.Connection 
    Dim s As String 
    con.ConnectionString = "Provider=SQLOLEDB;Data Source=AEG-PC\WINCC; Initial Catalog=DBRapPlopeni; User ID=AEGRap; Password=1qaz2wsx; Trusted_Connection=yes" 
    con.Open 
    Set rs = New ADODB.Recordset 
    rs.ActiveConnection = con 
    rs.Open "EXEC SotoredProcedure 20,05,2015" 
    r = 5 
    Do While Not rs.EOF 
     Cells(r, 2) = rs.Fields(0) 
     Cells(r, 3) = rs.Fields(1) 
     Cells(r, 4) = rs.Fields(2) ' this field of date which cannot be imported 
rs.MoveNext 
r = r + 1 
Loop 
End Sub 

Я попытался преобразовать поле даты в формате строки, но он не работает для меня. Кто-нибудь знает, как решить эту проблему?

Большое спасибо заранее!

+0

попытаться преобразовать в строку с помощью CStr? Имеются ли значения null? – Jeremy

+0

также удалите реальные имена пользователей и пароли из вопроса, действительно ли они реальны ... – Jeremy

ответ

0

Имел аналогичную проблему, и я использовал метод GetRows для хранения данных в массиве и манипулирования ими оттуда.

Нечто подобное ниже:

Заменить:

Do While Not rs.EOF 
    Cells(r, 2) = rs.Fields(0) 
    Cells(r, 3) = rs.Fields(1) 
    Cells(r, 4) = rs.Fields(2) ' this field of date which cannot be imported 
    rs.MoveNext 
    r = r + 1 
Loop 

с

dim ar() as variant 
ar = rs.GetRows 

, а затем сделать цикл для хранения данных массива в требуемых клеток.

for r =0 to ubound(ar,2) 'your array has 0 to ubound(ar,2) rows 
     cells(r,2) = ar(1,r) 
     cells(r,3) = ar(2,r) 
     cells(r,4) = ar(3,r) 
next r 

Надеюсь, это поможет.

+0

Ok. Но что я должен использовать для цикла? Я имею в виду, как он знает, куда помещать данные в Excel? Я попытался: дим ар() As Variant Аr = rs.GetRows окра = от 2 до 4 клеток (г, кол) = ар() ' клетки (г + 1, Col) = ар() Next col – Ionut

+0

Я отредактировал свой ответ, чтобы включить массив для цикла. Это работает? – TylerDurden

+0

Спасибо! Я попробую завтра ваше решение, и я дам вам знать, если это сработает. – Ionut

Смежные вопросы