Добрый день Уважаемые гуру экселя , есть такой код который производит поиск по данным указанным в таблице (такое чувство что касательно сделал) и есть запрос в SQL я не могу понять как запрос составить так чтобы искало именно по моим параметрам [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, sex, issued As String Dim BDAT, 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=134.17.2.23;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) 'Отчество BDAT = iCell.Offset(0, 4) 'Датарождения sex = iCell.Offset(0, 6) 'Пол dat = iCell.Offset(0, 10) 'Дата регистрации issued = iCell.Offset(0, 11) 'Место регистрации MsgBox FAM & " " & IM & " " & OT & " " & BDAT & " " & sex & " " & dat & " " & issued & " " & Number Set cmd = New ADODB.Command With cmd
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]
Код
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, sex, issued As String Dim BDAT, 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=134.17.2.23;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) 'Отчество BDAT = iCell.Offset(0, 4) 'Датарождения sex = iCell.Offset(0, 6) 'Пол dat = iCell.Offset(0, 10) 'Дата регистрации issued = iCell.Offset(0, 11) 'Место регистрации MsgBox FAM & " " & IM & " " & OT & " " & BDAT & " " & sex & " " & dat & " " & issued & " " & Number Set cmd = New ADODB.Command With cmd
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
-- Создание запроса ;WITH XMLNAMESPACES (DEFAULT 'http://mbtc.ru/afs/')
SELECT @URL = 'http://sas-afs.lan.ubrr.ru:8080/afs/ws/ubrrService' ,@Body = ( SELECT 'LoyaltyWS' as [auth/login], 'LoyaltyWS1!' as [auth/password], 'match' as [action], 'STOP_LIST_1' as [ruleSetId], @BPID as [Application/id], '1' as [Application/version], @date as [Application/date], @OTDNUM as [Application/app/bank], @BPIDID as [Application/app/formId], @BP_ID as [Application/app/applicant/id], @lastName as [Application/app/applicant/person/lastName], @firstName as [Application/app/applicant/person/firstName], @secondName as [Application/app/applicant/person/secondName], @oldFIO as [Application/app/applicant/person/prevFullName], @birthDate as [Application/app/applicant/person/birthDate], @birthPlace as [Application/app/applicant/person/birthPlace], @sex as [Application/app/applicant/person/sex], ----------------------------------------DOC-------------------------------------------------------------- (SELECT f.* FROM ( values (@TipPass21,@seriesNumber21,@docdate21,@whopass21), (@TipPass22,@seriesNumber22,@docdate22,@whopass22), (@TipPass7,@seriesNumber7,@docdate7,@whopass7), (@TipPass31,@seriesNumber31,@docdate31,@whopass31), (@TipPass4,@seriesNumber4,@docdate4,''), (@TipPass32,@seriesNumber32,'',''), (@TipPass81,@seriesNumber81,'','') ) f([type], seriesNumber, date, issued)for xml path('doc'), type) as [Application/app/applicant], ---------------------------------------ADDRES------------------------------------------------------------ (SELECT a.* FROM ( values (1, @regionReg, @indexReg,@regarea, @cityReg,@regplace, @streetReg, @houseReg, @corpReg, @flatReg), (2, @regionLife, @indexLife,@lifearea, @cityLife,@lifeplace, @streetLife, @houseLife, @corpLife, @flatLife) ) a([type], region, postalCode,area, city,place, street, house, corp, flat)for xml path('address'), type) as [Application/app/applicant/addresses], @residenceChange as [Application/app/applicant/addresses/residenceChange], @buildingType as [Application/app/applicant/addresses/buildingType], @owner as [Application/app/applicant/addresses/owner], ----------------------------------------PHONE------------------------------------------------------------ (SELECT s.* FROM ( values (1,@housetel ), (2,@worktel ), (3,@mobiltel) ) s([type],number)for xml path('phone'), type) as [Application/app/applicant] --------------------------------------------------------------------------------------------------------- FOR XML Path('afsRequest'),Type) EXEC dbo.sp_SOAPMethodCall @URL ,NULL ,@Body OUT ; SET @AfsMessage=ISNULL(@Body.value('declare namespace p1="http://mbtc.ru/afs"; (/p1:afsResponse/p1:matchResult/p1:match/p1:description)[1]','nvarchar(1000)'),N'По клиенту ничего не найдено.'); with xmlnamespaces(default 'http://mbtc.ru/afs') select @AfsMessage=ISNULL(stuff(t.n.query('for $d in (match/description) return concat("; ", $d/text()[1])').value('.', 'nvarchar(max)'), 1, 2, ''),N'По клиенту ничего не найдено.') from @Body.nodes('/afsResponse/matchResult') t(n); SELECT @AfsMessage
[/vba]
точно знаю что дату указал не верно, но по моей логике если эти переменные присвоили значения из экселя то должно работать
-- Создание запроса ;WITH XMLNAMESPACES (DEFAULT 'http://mbtc.ru/afs/')
SELECT @URL = 'http://sas-afs.lan.ubrr.ru:8080/afs/ws/ubrrService' ,@Body = ( SELECT 'LoyaltyWS' as [auth/login], 'LoyaltyWS1!' as [auth/password], 'match' as [action], 'STOP_LIST_1' as [ruleSetId], @BPID as [Application/id], '1' as [Application/version], @date as [Application/date], @OTDNUM as [Application/app/bank], @BPIDID as [Application/app/formId], @BP_ID as [Application/app/applicant/id], @lastName as [Application/app/applicant/person/lastName], @firstName as [Application/app/applicant/person/firstName], @secondName as [Application/app/applicant/person/secondName], @oldFIO as [Application/app/applicant/person/prevFullName], @birthDate as [Application/app/applicant/person/birthDate], @birthPlace as [Application/app/applicant/person/birthPlace], @sex as [Application/app/applicant/person/sex], ----------------------------------------DOC-------------------------------------------------------------- (SELECT f.* FROM ( values (@TipPass21,@seriesNumber21,@docdate21,@whopass21), (@TipPass22,@seriesNumber22,@docdate22,@whopass22), (@TipPass7,@seriesNumber7,@docdate7,@whopass7), (@TipPass31,@seriesNumber31,@docdate31,@whopass31), (@TipPass4,@seriesNumber4,@docdate4,''), (@TipPass32,@seriesNumber32,'',''), (@TipPass81,@seriesNumber81,'','') ) f([type], seriesNumber, date, issued)for xml path('doc'), type) as [Application/app/applicant], ---------------------------------------ADDRES------------------------------------------------------------ (SELECT a.* FROM ( values (1, @regionReg, @indexReg,@regarea, @cityReg,@regplace, @streetReg, @houseReg, @corpReg, @flatReg), (2, @regionLife, @indexLife,@lifearea, @cityLife,@lifeplace, @streetLife, @houseLife, @corpLife, @flatLife) ) a([type], region, postalCode,area, city,place, street, house, corp, flat)for xml path('address'), type) as [Application/app/applicant/addresses], @residenceChange as [Application/app/applicant/addresses/residenceChange], @buildingType as [Application/app/applicant/addresses/buildingType], @owner as [Application/app/applicant/addresses/owner], ----------------------------------------PHONE------------------------------------------------------------ (SELECT s.* FROM ( values (1,@housetel ), (2,@worktel ), (3,@mobiltel) ) s([type],number)for xml path('phone'), type) as [Application/app/applicant] --------------------------------------------------------------------------------------------------------- FOR XML Path('afsRequest'),Type) EXEC dbo.sp_SOAPMethodCall @URL ,NULL ,@Body OUT ; SET @AfsMessage=ISNULL(@Body.value('declare namespace p1="http://mbtc.ru/afs"; (/p1:afsResponse/p1:matchResult/p1:match/p1:description)[1]','nvarchar(1000)'),N'По клиенту ничего не найдено.'); with xmlnamespaces(default 'http://mbtc.ru/afs') select @AfsMessage=ISNULL(stuff(t.n.query('for $d in (match/description) return concat("; ", $d/text()[1])').value('.', 'nvarchar(max)'), 1, 2, ''),N'По клиенту ничего не найдено.') from @Body.nodes('/afsResponse/matchResult') t(n); SELECT @AfsMessage
Доброе время суток. ADODB.Command использует именованные параметры только если вы используете хранимые процедуры ADODB.Command.CommandType = adCmdStoredProc Для модели ADODB.Command.CommandType = adCmdText (что собственно используете вы) поддерживаются только подстановка в виде символа ? Можно иммитировать, важно только учитывать, что создаваемые параметры (имя создаваемого параметра может быть любым) должны добавляться в том же порядке по смыслу что и последовательность символов ? [vba]
Код
Public Sub CommandTextWithParameters() Const strConn = "Driver={SQL Server Native Client 11.0};Server= (localdb)\MSSQLLocalDB=database_name;Trusted_Connection=yes;" Dim pConn As New ADODB.Connection Dim pCom As New ADODB.Command Dim pParam As ADODB.Parameter Dim pRSet As ADODB.Recordset
pConn.CursorLocation = adUseClient pConn.Open strConn Set pCom.ActiveConnection = pConn pCom.CommandType = adCmdText pCom.CommandText = "Declare @myparam As smallint = ?; Select * From dbo.Entity Where [Type] = @myparam;" Set pParam = pCom.CreateParameter("@order1", adSmallInt, adParamInput) pCom.Parameters.Append pParam
pCom.Parameters("@order1").Value = 181
Set pRSet = pCom.Execute ‘……… End Sub
[/vba] Успехов.
Доброе время суток. ADODB.Command использует именованные параметры только если вы используете хранимые процедуры ADODB.Command.CommandType = adCmdStoredProc Для модели ADODB.Command.CommandType = adCmdText (что собственно используете вы) поддерживаются только подстановка в виде символа ? Можно иммитировать, важно только учитывать, что создаваемые параметры (имя создаваемого параметра может быть любым) должны добавляться в том же порядке по смыслу что и последовательность символов ? [vba]
Код
Public Sub CommandTextWithParameters() Const strConn = "Driver={SQL Server Native Client 11.0};Server= (localdb)\MSSQLLocalDB=database_name;Trusted_Connection=yes;" Dim pConn As New ADODB.Connection Dim pCom As New ADODB.Command Dim pParam As ADODB.Parameter Dim pRSet As ADODB.Recordset
pConn.CursorLocation = adUseClient pConn.Open strConn Set pCom.ActiveConnection = pConn pCom.CommandType = adCmdText pCom.CommandText = "Declare @myparam As smallint = ?; Select * From dbo.Entity Where [Type] = @myparam;" Set pParam = pCom.CreateParameter("@order1", adSmallInt, adParamInput) pCom.Parameters.Append pParam
благодарю тему можно закрыть разобрался а ответ был прост надо было просто сразу в XML данные кинуть через переменные которые я указываю в Excel'e
благодарю тему можно закрыть разобрался а ответ был прост надо было просто сразу в XML данные кинуть через переменные которые я указываю в Excel'eElhust