2013-04-04 2 views
1

Я делаю макрос и беру дату и db от пользователя. и на этой основе я получаю данные из db. вот мой код, пожалуйста, взгляните и поделитесь, если у вас есть какое-нибудь решение.копирование данных из Sql Db в excel на основе даты и db, взятых у пользователя

Dim cn As New ADODB.Connection 
Dim rs As New ADODB.Recordset 
Function GetConnectionString() As String 
Dim strCn As String 
strCn = "Provider=sqloledb;" 
strCn = strCn & "Data Source=" & Range("Server") & ";" 
strCn = strCn & "Initial Catalog=" & Range("Database") & ";" 
If (Range("UserID") <> "") Then 
strCn = strCn & "User ID=" & Range("UserID") & ";" 
strCn = strCn & "password=" & Range("Pass") 
Else 
    strCn = strCn & "Integrated Security = SSPI" 
End If 
    GetConnectionString = strCn 
End Function 
    Sub Test() 
    ActiveWorkbook.Sheets("Sheet1").Activate 
Dim ws As Worksheet 
Dim Sql As String 
Dim d As String 
d = Range("A2").Value 
d = Format(d, "yyyy-mm-dd") 
    cn.ConnectionTimeout = 100 
    cn.Open GetConnectionString() 
    Sql = "select * from config where convert(date,logadate,103)='"& d &"'" 
    ExecInsert (Sql) 
     Set rs.ActiveConnection = cn 
     rs.Open Sql 
     ActiveWorkbook.Sheets("Sheet2").Activate 
     Dim ws1 As Worksheet 
     **Range("A2").CopyFromRecordset (rs)** 
     cn.Close 

End Sub 

Sub ExecInsert(selectquery As String) 
'End Sub 

    Dim cmd As New ADODB.Command 
    cmd.CommandText = selectquery 
    cmd.CommandType = adCmdText 
    cmd.ActiveConnection = cn 
    cmd.Execute 

End Sub 

Range ("A2"). CopyFromRecordset (RS) это где я получаю ошибку

'430' Класс ошибки Тип запуска не поддерживает автоматизацию или не поддерживает ожидаемый интерфейс У меня есть все DLL и зарегистрировано. и даже никакой ссылки не хватает с моего конца.

, если какой-либо орган имеют лицу этот вопрос, пожалуйста, помогите ...

+0

это синтаксическая ошибка? проверьте свои белые пробелы, потому что кажется, что слишком много – 2013-04-04 11:26:35

+0

следуют за этим: «SELECT * FROM [tblName] WHERE [Field] = Format (#" & dealdate & "#,'yyyy \/mm \/dd ');" – 2013-04-04 11:31:56

+0

спасибо за реагирование, – honey

ответ

0

SQL Server не имеет функцию под названием Format (MS Access и VB делает).

В SQL Server вы должны использовать Convert (сначала убедитесь, что тип данных SQL Server является DateTime, а не VARCHAR или символов)

Или, если ваши данные Datepicker возвращает в правильном формате, вы можете просто добавить его прямо в:

q = q & " where logdate='" & d & "'" 

Следует иметь в виду, что если у вас есть компонент времени, вам необходимо его разбить.

Итак ...

  1. Попробуйте код выше
  2. Убедитесь, что база данных SQL Server и тип данных DATETIME
  3. Проверьте содержимое DatePicker в виде строки и проверить это формат
+0

строка d = диапазон ("A2"). Значение – honey

+0

huh? Вы делали то, что я предлагал? –

+0

да, который сработал. в совершенстве. когда я помещаю строку соединения в код, я имею в виду con.ConnectionString = «Provider = SQLOLEDB; Источник данных = hou150w8ahc5v1 \ sql01; Начальный каталог = sqlsss; Идентификатор пользователя = CT \ hmox; Пароль = abcd; Integrated Security = SSPI", тогда он работал.но в вышеупомянутой проблеме я беру имя db от пользователя, чтобы он мог работать на всех db, которые пользователь хочет выполнить. – honey

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