Dim Conn Sub test_connALL() Dim cmd As ADODB.Command Dim Conn As ADODB.Connection Dim rs As ADODB.Recordset Dim lLastrow, i As Long Dim iCell As Range Dim whereID As Long Dim FAM, IM, OT As String Dim DAT As Date
'On Error GoTo Err iTimer! = Timer Set Conn = New ADODB.Connection '------------------------------------------------------------------------------------------------------------------ If UserForm1.TextBox2.Text = "" And UserForm1.TextBox1.Text = "" Then UserForm1.Show Else End If '------------------------------------------------------------------------------------------------------------------ Application.ScreenUpdating = False 'Range("G2:G65536").Clear lLastrow = Cells(Rows.Count, 5).End(xlUp).Row i = 1 '------------------------------------------------------------------------------------------------------------------ Conn.ConnectionString = "driver={SQL Server};server=197.76.8.177;uid=" & UserForm1.TextBox1.Text & ";pwd=" & UserForm1.TextBox2.Text & ";database=MainDWH" Conn.Open '------------------------------------------------------------------------------------------------------------------ 'On Error Resume Next With ThisWorkbook.Worksheets(2) For Each iCell In .Range("E2", Cells(lLastrow, 5)) i = i + 1 If Cells(i, 68) <> "" Then GoTo Point
'FAM = iCell 'IM = iCell.Offset(0, 1) 'OT = iCell.Offset(0, 2) DAT = iCell.Offset(0, 4) MsgBox DAT 'MsgBox FAM & " " & IM & " " & OT Set cmd = New ADODB.Command With cmd .ActiveConnection = Conn '.Parameters.Append cmd.CreateParameter("@FAM", adBSTR, adParamInput, Value:=FAM) '.Parameters.Append cmd.CreateParameter("@IM", adBSTR, adParamInput, Value:=IM) '.Parameters.Append cmd.CreateParameter("@OT", adBSTR, adParamInput, Value:=OT) .Parameters.Append cmd.CreateParameter("@DAT", adDate, adParamInput, Value:=DAT) .CommandType = adCmdStoredProc .CommandText = "port.sp_AfsSOAP_RequestTEST_ALLL" End With Set rs = cmd.Execute() Cells(i, 68).CopyFromRecordset rs rs.Close Point: Next End With
[/vba] везде стоит тип данных DATE а в SQL принимает значение [vba]
Код
ALTER PROCEDURE [port].[sp_AfsSOAP_RequestTEST_ALLL] ( @DAT date ) AS BEGIN DECLARE @ID nvarchar(20) SELECT @ID= ANKETA_ID FROM port.Ankets WHERE ANKETA_BIRTH_DATE=CONVERT(DATETIME,'@DAT',104) EXEC port.sp_AfsSOAP_RequestTEST_ID @ID END GO
[/vba] ANKETA_BIRTH_DATE в этой колонке дата типа DATETIME пробовал многими способами выдаёт ошибку
-------------------------------------------------- Microsoft Visual Basic for Applications -------------------------------------------------- System Error &H80040E21 (-2147217887). -------------------------------------------------- ОК Справка -------------------------------------------------- Heeeelp, guru VBA
[vba]
Код
Dim Conn Sub test_connALL() Dim cmd As ADODB.Command Dim Conn As ADODB.Connection Dim rs As ADODB.Recordset Dim lLastrow, i As Long Dim iCell As Range Dim whereID As Long Dim FAM, IM, OT As String Dim DAT As Date
'On Error GoTo Err iTimer! = Timer Set Conn = New ADODB.Connection '------------------------------------------------------------------------------------------------------------------ If UserForm1.TextBox2.Text = "" And UserForm1.TextBox1.Text = "" Then UserForm1.Show Else End If '------------------------------------------------------------------------------------------------------------------ Application.ScreenUpdating = False 'Range("G2:G65536").Clear lLastrow = Cells(Rows.Count, 5).End(xlUp).Row i = 1 '------------------------------------------------------------------------------------------------------------------ Conn.ConnectionString = "driver={SQL Server};server=197.76.8.177;uid=" & UserForm1.TextBox1.Text & ";pwd=" & UserForm1.TextBox2.Text & ";database=MainDWH" Conn.Open '------------------------------------------------------------------------------------------------------------------ 'On Error Resume Next With ThisWorkbook.Worksheets(2) For Each iCell In .Range("E2", Cells(lLastrow, 5)) i = i + 1 If Cells(i, 68) <> "" Then GoTo Point
'FAM = iCell 'IM = iCell.Offset(0, 1) 'OT = iCell.Offset(0, 2) DAT = iCell.Offset(0, 4) MsgBox DAT 'MsgBox FAM & " " & IM & " " & OT Set cmd = New ADODB.Command With cmd .ActiveConnection = Conn '.Parameters.Append cmd.CreateParameter("@FAM", adBSTR, adParamInput, Value:=FAM) '.Parameters.Append cmd.CreateParameter("@IM", adBSTR, adParamInput, Value:=IM) '.Parameters.Append cmd.CreateParameter("@OT", adBSTR, adParamInput, Value:=OT) .Parameters.Append cmd.CreateParameter("@DAT", adDate, adParamInput, Value:=DAT) .CommandType = adCmdStoredProc .CommandText = "port.sp_AfsSOAP_RequestTEST_ALLL" End With Set rs = cmd.Execute() Cells(i, 68).CopyFromRecordset rs rs.Close Point: Next End With
[/vba] везде стоит тип данных DATE а в SQL принимает значение [vba]
Код
ALTER PROCEDURE [port].[sp_AfsSOAP_RequestTEST_ALLL] ( @DAT date ) AS BEGIN DECLARE @ID nvarchar(20) SELECT @ID= ANKETA_ID FROM port.Ankets WHERE ANKETA_BIRTH_DATE=CONVERT(DATETIME,'@DAT',104) EXEC port.sp_AfsSOAP_RequestTEST_ID @ID END GO
[/vba] ANKETA_BIRTH_DATE в этой колонке дата типа DATETIME пробовал многими способами выдаёт ошибку
-------------------------------------------------- Microsoft Visual Basic for Applications -------------------------------------------------- System Error &H80040E21 (-2147217887). -------------------------------------------------- ОК Справка -------------------------------------------------- Heeeelp, guru VBAElhust
Каждый сам выбирает правила игры
Сообщение отредактировал Elhust - Среда, 15.03.2017, 13:43
это точно ошибка в соответствии с типом данных в этой цепи, но вот какие типы расставить чтобы приходило к верному ( подскажите оптимальное решение
это точно ошибка в соответствии с типом данных в этой цепи, но вот какие типы расставить чтобы приходило к верному ( подскажите оптимальное решениеElhust
Elhust, В каком виде данные типа datetime в SQL ? Я на в Access сталкивался с тем что в запрос приходилось ложить типа '01/01/2011' (с апострофами) В данном варианте в запрос падает значение типа 01.01.2011 .
[offtop]SQL знаю очень слабо (((
Elhust, В каком виде данные типа datetime в SQL ? Я на в Access сталкивался с тем что в запрос приходилось ложить типа '01/01/2011' (с апострофами) В данном варианте в запрос падает значение типа 01.01.2011 .
devilkurs,дд.мм.гггг на сколько я понимаю так как там стоит тип 104 он отвечает за такую раскладку но точно не помню с минутами или нет у меня пока нет доступа к msdn (
devilkurs,дд.мм.гггг на сколько я понимаю так как там стоит тип 104 он отвечает за такую раскладку но точно не помню с минутами или нет у меня пока нет доступа к msdn (Elhust
Каждый сам выбирает правила игры
Сообщение отредактировал Elhust - Среда, 15.03.2017, 14:47
Тема в том что у меня не доходят данные даже до конвертации описанной в запросе [vba]
Код
ALTER PROCEDURE [port].[sp_AfsSOAP_RequestTEST_ALLL] ( @DAT date ) AS BEGIN DECLARE @ID nvarchar(20) SELECT @ID= ANKETA_ID FROM port.Ankets
WHERE ANKETA_BIRTH_DATE=CONVERT(DATETIME,'@DAT',104)
EXEC port.sp_AfsSOAP_RequestTEST_ID @ID END GO
[/vba]
попробовал с типом данных INT, везде расставил его и в экселе тоже и в параметре , ошибка изменилась как я понял дошло до конвертации так как окно с ошибкой вообще пустое окно !
Тема в том что у меня не доходят данные даже до конвертации описанной в запросе [vba]
Код
ALTER PROCEDURE [port].[sp_AfsSOAP_RequestTEST_ALLL] ( @DAT date ) AS BEGIN DECLARE @ID nvarchar(20) SELECT @ID= ANKETA_ID FROM port.Ankets
WHERE ANKETA_BIRTH_DATE=CONVERT(DATETIME,'@DAT',104)
EXEC port.sp_AfsSOAP_RequestTEST_ID @ID END GO
[/vba]
попробовал с типом данных INT, везде расставил его и в экселе тоже и в параметре , ошибка изменилась как я понял дошло до конвертации так как окно с ошибкой вообще пустое окно !Elhust
Каждый сам выбирает правила игры
Сообщение отредактировал Elhust - Среда, 15.03.2017, 15:22
CREATE PROCEDURE [port].[sp_AfsSOAP_RequestTEST_ALL] ( @FAM nvarchar(15), @IM nvarchar(15), @OT nvarchar(15), @DAT date ) AS BEGIN DECLARE @ID nvarchar(20) SELECT @ID = ANKETA_ID FROM port.Ankets WHERE ANKETA_FAM=@FAM AND ANKETA_IM=@IM AND ANKETA_OT=@OT AND ANKETA_BIRTH_DATE=@DAT EXEC port.sp_AfsSOAP_RequestTEST_ID @ID END GO
[/vba]
[vba]
Код
Dim Conn Sub test_connALL() Dim cmd As ADODB.Command Dim Conn As ADODB.Connection Dim rs As ADODB.Recordset Dim lLastrow, i As Long Dim iCell As Range Dim whereID As Long Dim FAM, IM, OT As String Dim DAT As Date
'On Error GoTo Err iTimer! = Timer Set Conn = New ADODB.Connection '------------------------------------------------------------------------------------------------------------------ If UserForm1.TextBox2.Text = "" And UserForm1.TextBox1.Text = "" Then UserForm1.Show Else End If '------------------------------------------------------------------------------------------------------------------ Application.ScreenUpdating = False 'Range("G2:G65536").Clear lLastrow = Cells(Rows.Count, 5).End(xlUp).Row i = 1 '------------------------------------------------------------------------------------------------------------------ Conn.ConnectionString = "driver={SQL Server};server=197.76.8.177;uid=" & UserForm1.TextBox1.Text & ";pwd=" & UserForm1.TextBox2.Text & ";database=MainDWH" Conn.Open '------------------------------------------------------------------------------------------------------------------ 'On Error Resume Next With ThisWorkbook.Worksheets(2) For Each iCell In .Range("E2", Cells(lLastrow, 5)) i = i + 1 If Cells(i, 68) <> "" Then GoTo Point FAM = iCell IM = iCell.Offset(0, 1) OT = iCell.Offset(0, 2) DAT = iCell.Offset(0, 4) 'MsgBox FAM & " " & IM & " " & OT Set cmd = New ADODB.Command With cmd .ActiveConnection = Conn .Parameters.Append cmd.CreateParameter("@FAM", adBSTR, adParamInput, Value:=FAM) .Parameters.Append cmd.CreateParameter("@IM", adBSTR, adParamInput, Value:=IM) .Parameters.Append cmd.CreateParameter("@OT", adBSTR, adParamInput, Value:=OT) .Parameters.Append cmd.CreateParameter("@DAT", adDBTimeStamp, adParamInput, Value:=DAT) .CommandType = adCmdStoredProc .CommandText = "port.sp_AfsSOAP_RequestTEST_ALL" End With Set rs = cmd.Execute() Cells(i, 68).CopyFromRecordset rs rs.Close Point: Next End With '------------------------------------------------------------------------------------------------------------------ Application.ScreenUpdating = True MsgBox "Время выполнения макроса составило " & _ Timer - iTimer! & " сек.", vbExclamation, "" Conn.Close Set rs = Nothing Set con = Nothing Exit Sub '------------------------------------------------------------------------------------------------------------------ 'Err: 'MsgBox ("Проверьте корректность ввода") End Sub
[/vba]
Нашел решение ) тут у нас SQL [vba]
Код
CREATE PROCEDURE [port].[sp_AfsSOAP_RequestTEST_ALL] ( @FAM nvarchar(15), @IM nvarchar(15), @OT nvarchar(15), @DAT date ) AS BEGIN DECLARE @ID nvarchar(20) SELECT @ID = ANKETA_ID FROM port.Ankets WHERE ANKETA_FAM=@FAM AND ANKETA_IM=@IM AND ANKETA_OT=@OT AND ANKETA_BIRTH_DATE=@DAT EXEC port.sp_AfsSOAP_RequestTEST_ID @ID END GO
[/vba]
[vba]
Код
Dim Conn Sub test_connALL() Dim cmd As ADODB.Command Dim Conn As ADODB.Connection Dim rs As ADODB.Recordset Dim lLastrow, i As Long Dim iCell As Range Dim whereID As Long Dim FAM, IM, OT As String Dim DAT As Date
'On Error GoTo Err iTimer! = Timer Set Conn = New ADODB.Connection '------------------------------------------------------------------------------------------------------------------ If UserForm1.TextBox2.Text = "" And UserForm1.TextBox1.Text = "" Then UserForm1.Show Else End If '------------------------------------------------------------------------------------------------------------------ Application.ScreenUpdating = False 'Range("G2:G65536").Clear lLastrow = Cells(Rows.Count, 5).End(xlUp).Row i = 1 '------------------------------------------------------------------------------------------------------------------ Conn.ConnectionString = "driver={SQL Server};server=197.76.8.177;uid=" & UserForm1.TextBox1.Text & ";pwd=" & UserForm1.TextBox2.Text & ";database=MainDWH" Conn.Open '------------------------------------------------------------------------------------------------------------------ 'On Error Resume Next With ThisWorkbook.Worksheets(2) For Each iCell In .Range("E2", Cells(lLastrow, 5)) i = i + 1 If Cells(i, 68) <> "" Then GoTo Point FAM = iCell IM = iCell.Offset(0, 1) OT = iCell.Offset(0, 2) DAT = iCell.Offset(0, 4) 'MsgBox FAM & " " & IM & " " & OT Set cmd = New ADODB.Command With cmd .ActiveConnection = Conn .Parameters.Append cmd.CreateParameter("@FAM", adBSTR, adParamInput, Value:=FAM) .Parameters.Append cmd.CreateParameter("@IM", adBSTR, adParamInput, Value:=IM) .Parameters.Append cmd.CreateParameter("@OT", adBSTR, adParamInput, Value:=OT) .Parameters.Append cmd.CreateParameter("@DAT", adDBTimeStamp, adParamInput, Value:=DAT) .CommandType = adCmdStoredProc .CommandText = "port.sp_AfsSOAP_RequestTEST_ALL" End With Set rs = cmd.Execute() Cells(i, 68).CopyFromRecordset rs rs.Close Point: Next End With '------------------------------------------------------------------------------------------------------------------ Application.ScreenUpdating = True MsgBox "Время выполнения макроса составило " & _ Timer - iTimer! & " сек.", vbExclamation, "" Conn.Close Set rs = Nothing Set con = Nothing Exit Sub '------------------------------------------------------------------------------------------------------------------ 'Err: 'MsgBox ("Проверьте корректность ввода") End Sub