Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Поиск данных в SQL server через Excel VBA ? - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Поиск данных в SQL server через Excel VBA ? (Макросы/Sub)
Поиск данных в SQL server через Excel VBA ?
Elhust Дата: Вторник, 21.03.2017, 15:02 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 184
Репутация: -1 ±
Замечаний: 0% ±

Excel 2010
Добрый день Уважаемые гуру экселя , есть такой код который производит поиск по данным указанным в таблице (такое чувство что касательно сделал)
и есть запрос в 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
     
          .ActiveConnection = Conn
          
          .Parameters.Append cmd.CreateParameter("@lastName", adBSTR, adParamInput, Value:=FAM)
          .Parameters.Append cmd.CreateParameter("@firstName", adBSTR, adParamInput, Value:=IM)
          .Parameters.Append cmd.CreateParameter("@secondName", adBSTR, adParamInput, Value:=OT)
          .Parameters.Append cmd.CreateParameter("@birthDate", adDBTimeStamp, adParamInput, Value:=BDAT)
          .Parameters.Append cmd.CreateParameter("@docdate21", adDBTimeStamp, adParamInput, Value:=dat)
          .Parameters.Append cmd.CreateParameter("@sex", adBSTR, adParamInput, Value:=sex)
          .Parameters.Append cmd.CreateParameter("@whopass21", adBSTR, adParamInput, Value:=issued)
          .CommandType = adCmdStoredProc
          .CommandText = "port.sp_AfsSOAP_RequestTEST_AL"
     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]
Код

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
     
          .ActiveConnection = Conn
          
          .Parameters.Append cmd.CreateParameter("@lastName", adBSTR, adParamInput, Value:=FAM)
          .Parameters.Append cmd.CreateParameter("@firstName", adBSTR, adParamInput, Value:=IM)
          .Parameters.Append cmd.CreateParameter("@secondName", adBSTR, adParamInput, Value:=OT)
          .Parameters.Append cmd.CreateParameter("@birthDate", adDBTimeStamp, adParamInput, Value:=BDAT)
          .Parameters.Append cmd.CreateParameter("@docdate21", adDBTimeStamp, adParamInput, Value:=dat)
          .Parameters.Append cmd.CreateParameter("@sex", adBSTR, adParamInput, Value:=sex)
          .Parameters.Append cmd.CreateParameter("@whopass21", adBSTR, adParamInput, Value:=issued)
          .CommandType = adCmdStoredProc
          .CommandText = "port.sp_AfsSOAP_RequestTEST_AL"
     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]

Автор - Elhust
Дата добавления - 21.03.2017 в 15:02
Elhust Дата: Вторник, 21.03.2017, 15:10 | Сообщение № 2
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 184
Репутация: -1 ±
Замечаний: 0% ±

Excel 2010
точно знаю что дату указал не верно, но по моей логике если эти переменные присвоили значения из экселя то должно работать
:'(

[vba]
Код
DECLARE @lastName nvarchar(20)=N'ЛОКАЦКАЯ'
DECLARE @firstName nvarchar(20) =N'ТАТЬЯНА'
DECLARE @secondName nvarchar(20)=N'НИКОЛАЕВНА'
DECLARE @sex nvarchar(20)=N'Ж'
DECLARE @birthDate date
set @birthDate ='18-11-1950'
------------------------------------------------------------------------------------------
DECLARE @AfsMessage nvarchar(1000)
------------------------------------------------------------------------------------------
DECLARE @TipPass21 nvarchar(10)=N'21'
DECLARE @seriesNumber21 nvarchar(10) =N'6502938694'
DECLARE @docdate21 date=N'15.05.2002'
DECLARE @whopass21 nvarchar(60)=N'ВЕРХНЕПЫШМИНСКИМ ГОВД СВЕРДЛОВСКОЙ ОБЛАСТИ'
DECLARE @BPID nvarchar(20)
DECLARE @BPIDID nvarchar(20)
DECLARE @BP_ID nvarchar(20)
DECLARE @OTDNUM nvarchar(20)
DECLARE @date date
DECLARE @oldFIO nvarchar(20)
DECLARE @birthPlace nvarchar(60)
DECLARE @worktel nvarchar(20)
DECLARE @mobiltel nvarchar(20)
DECLARE @contacttel nvarchar(20)
DECLARE @TipPass22 nvarchar(10)
DECLARE @seriesNumber22 nvarchar(10)
DECLARE @docdate22 varchar(20)
DECLARE @whopass22 nvarchar(60)
DECLARE @TipPass7 nvarchar(10)
DECLARE @seriesNumber7 nvarchar(10)
DECLARE @docdate7 varchar(20)
DECLARE @whopass7 nvarchar(60)
DECLARE @TipPass31 nvarchar(10)
DECLARE @seriesNumber31 nvarchar(10)
DECLARE @docdate31 varchar(20)
DECLARE @whopass31 nvarchar(60)
DECLARE @TipPass4 nvarchar(10)
DECLARE @seriesNumber4 nvarchar(10)
DECLARE @docdate4 varchar(20)
DECLARE @TipPass32 nvarchar(10)
DECLARE @seriesNumber32 nvarchar(10)
DECLARE @TipPass81 nvarchar(10)
DECLARE @seriesNumber81 nvarchar(10)
SELECT
@BPIDID=ANKETA_ID,
@BPID=ANKETA_ID,
@BP_ID=BP_ID,
@OTDNUM=CASE a.ANKETA_OTDNUM WHEN 90 THEN '2' ELSE '1' END,
@lastName=ANKETA_FAM,
@firstName=ANKETA_IM,
@secondName=ANKETA_OT,
@oldFIO=UBRR_ANKETA_OLDFIO,
@birthDate=ANKETA_BIRTH_DATE,
@birthPlace=ANKETA_BIRTHPLACE,
@sex=CASE ANKETA_SEX WHEN N'Ж' THEN 0 ELSE 1 END,
@date=CONVERT(nvarchar(10),GETDATE(),104),
------------------------------------------------------------------------------------------
@TipPass4='4',
@seriesNumber4=ISNULL(SUBSTRING(ANKETA_SERIESOFFICER,1,2)+SUBSTRING(ANKETA_SERIESOFFICER,4,2)+ANKETA_NUMBEROFFICER,''),
@docdate4=ANKETA_DATEOFFICER,
------------------------------------------------------------------------------------------
@TipPass7='7',
@seriesNumber7=ISNULL(SUBSTRING(ANKETA_SERIESCARD,1,2)+SUBSTRING(ANKETA_SERIESCARD,4,2)+ANKETA_NUMBERCARD,''),
@docdate7=ANKETA_DATECARD,
@whopass7=ANKETA_WHOCARD,
@TipPass31='31',
@seriesNumber31=ISNULL(SUBSTRING(ANKETA_SERIESDRIVER,1,2)+SUBSTRING(ANKETA_SERIESDRIVER,4,2)+ANKETA_NUMBERDRIVER,''),
@docdate31=ANKETA_DATEDRIVER,
@whopass31=ANKETA_WHODRIVER,
@TipPass22='22',
@seriesNumber22=ANKETA_NUMBERZAGR,
@docdate22=ANKETA_DATEZAGR,
@whopass22=ANKETA_WHOZAGR,
------------------------------------------------------------------------------------------
@TipPass21='21',
@seriesNumber21=ISNULL(SUBSTRING(ANKETA_SERIESPASSPORT,1,2)+SUBSTRING(ANKETA_SERIESPASSPORT,4,2)+ANKETA_NUMBERPASSPORT,''),
@docdate21=ANKETA_DATEPASSPORT,
@whopass21=ANKETA_WHOPASSPORT,
------------------------------------------------------------------------------------------
@TipPass32='32',
@seriesNumber32=ANKETA_NUMBERSTATEINC,
------------------------------------------------------------------------------------------
@TipPass81='81',
@seriesNumber81=ANKETA_INN,

FROM port.Ankets a

DECLARE  @URL  SysName
,@Body xml

-- Создание запроса
;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]


Каждый сам выбирает правила игры
 
Ответить
Сообщениеточно знаю что дату указал не верно, но по моей логике если эти переменные присвоили значения из экселя то должно работать
:'(

[vba]
Код
DECLARE @lastName nvarchar(20)=N'ЛОКАЦКАЯ'
DECLARE @firstName nvarchar(20) =N'ТАТЬЯНА'
DECLARE @secondName nvarchar(20)=N'НИКОЛАЕВНА'
DECLARE @sex nvarchar(20)=N'Ж'
DECLARE @birthDate date
set @birthDate ='18-11-1950'
------------------------------------------------------------------------------------------
DECLARE @AfsMessage nvarchar(1000)
------------------------------------------------------------------------------------------
DECLARE @TipPass21 nvarchar(10)=N'21'
DECLARE @seriesNumber21 nvarchar(10) =N'6502938694'
DECLARE @docdate21 date=N'15.05.2002'
DECLARE @whopass21 nvarchar(60)=N'ВЕРХНЕПЫШМИНСКИМ ГОВД СВЕРДЛОВСКОЙ ОБЛАСТИ'
DECLARE @BPID nvarchar(20)
DECLARE @BPIDID nvarchar(20)
DECLARE @BP_ID nvarchar(20)
DECLARE @OTDNUM nvarchar(20)
DECLARE @date date
DECLARE @oldFIO nvarchar(20)
DECLARE @birthPlace nvarchar(60)
DECLARE @worktel nvarchar(20)
DECLARE @mobiltel nvarchar(20)
DECLARE @contacttel nvarchar(20)
DECLARE @TipPass22 nvarchar(10)
DECLARE @seriesNumber22 nvarchar(10)
DECLARE @docdate22 varchar(20)
DECLARE @whopass22 nvarchar(60)
DECLARE @TipPass7 nvarchar(10)
DECLARE @seriesNumber7 nvarchar(10)
DECLARE @docdate7 varchar(20)
DECLARE @whopass7 nvarchar(60)
DECLARE @TipPass31 nvarchar(10)
DECLARE @seriesNumber31 nvarchar(10)
DECLARE @docdate31 varchar(20)
DECLARE @whopass31 nvarchar(60)
DECLARE @TipPass4 nvarchar(10)
DECLARE @seriesNumber4 nvarchar(10)
DECLARE @docdate4 varchar(20)
DECLARE @TipPass32 nvarchar(10)
DECLARE @seriesNumber32 nvarchar(10)
DECLARE @TipPass81 nvarchar(10)
DECLARE @seriesNumber81 nvarchar(10)
SELECT
@BPIDID=ANKETA_ID,
@BPID=ANKETA_ID,
@BP_ID=BP_ID,
@OTDNUM=CASE a.ANKETA_OTDNUM WHEN 90 THEN '2' ELSE '1' END,
@lastName=ANKETA_FAM,
@firstName=ANKETA_IM,
@secondName=ANKETA_OT,
@oldFIO=UBRR_ANKETA_OLDFIO,
@birthDate=ANKETA_BIRTH_DATE,
@birthPlace=ANKETA_BIRTHPLACE,
@sex=CASE ANKETA_SEX WHEN N'Ж' THEN 0 ELSE 1 END,
@date=CONVERT(nvarchar(10),GETDATE(),104),
------------------------------------------------------------------------------------------
@TipPass4='4',
@seriesNumber4=ISNULL(SUBSTRING(ANKETA_SERIESOFFICER,1,2)+SUBSTRING(ANKETA_SERIESOFFICER,4,2)+ANKETA_NUMBEROFFICER,''),
@docdate4=ANKETA_DATEOFFICER,
------------------------------------------------------------------------------------------
@TipPass7='7',
@seriesNumber7=ISNULL(SUBSTRING(ANKETA_SERIESCARD,1,2)+SUBSTRING(ANKETA_SERIESCARD,4,2)+ANKETA_NUMBERCARD,''),
@docdate7=ANKETA_DATECARD,
@whopass7=ANKETA_WHOCARD,
@TipPass31='31',
@seriesNumber31=ISNULL(SUBSTRING(ANKETA_SERIESDRIVER,1,2)+SUBSTRING(ANKETA_SERIESDRIVER,4,2)+ANKETA_NUMBERDRIVER,''),
@docdate31=ANKETA_DATEDRIVER,
@whopass31=ANKETA_WHODRIVER,
@TipPass22='22',
@seriesNumber22=ANKETA_NUMBERZAGR,
@docdate22=ANKETA_DATEZAGR,
@whopass22=ANKETA_WHOZAGR,
------------------------------------------------------------------------------------------
@TipPass21='21',
@seriesNumber21=ISNULL(SUBSTRING(ANKETA_SERIESPASSPORT,1,2)+SUBSTRING(ANKETA_SERIESPASSPORT,4,2)+ANKETA_NUMBERPASSPORT,''),
@docdate21=ANKETA_DATEPASSPORT,
@whopass21=ANKETA_WHOPASSPORT,
------------------------------------------------------------------------------------------
@TipPass32='32',
@seriesNumber32=ANKETA_NUMBERSTATEINC,
------------------------------------------------------------------------------------------
@TipPass81='81',
@seriesNumber81=ANKETA_INN,

FROM port.Ankets a

DECLARE  @URL  SysName
,@Body xml

-- Создание запроса
;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]

Автор - Elhust
Дата добавления - 21.03.2017 в 15:10
bmv98rus Дата: Вторник, 21.03.2017, 15:45 | Сообщение № 3
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4107
Репутация: 768 ±
Замечаний: 0% ±

Excel 2013/2016
Что-то вы запутали совсем.
просто первое что попалось
http://www.timpust.ru/vba/sql.php
оформляете SELECT и WHERE в соотвтевии с вашими праметрами.


Замечательный Временно просто медведь , процентов на 20.
 
Ответить
СообщениеЧто-то вы запутали совсем.
просто первое что попалось
http://www.timpust.ru/vba/sql.php
оформляете SELECT и WHERE в соотвтевии с вашими праметрами.

Автор - bmv98rus
Дата добавления - 21.03.2017 в 15:45
anvg Дата: Среда, 22.03.2017, 10:33 | Сообщение № 4
Группа: Друзья
Ранг: Ветеран
Сообщений: 581
Репутация: 271 ±
Замечаний: 0% ±

2016, 365
Доброе время суток.
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
    
    pCom.Parameters("@order1").Value = 181
    
    Set pRSet = pCom.Execute
    ‘………
End Sub
[/vba]
Успехов.

Автор - anvg
Дата добавления - 22.03.2017 в 10:33
Elhust Дата: Понедельник, 27.03.2017, 11:56 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 184
Репутация: -1 ±
Замечаний: 0% ±

Excel 2010
благодарю тему можно закрыть разобрался а ответ был прост надо было просто сразу в XML данные кинуть через переменные которые я указываю в Excel'e


Каждый сам выбирает правила игры
 
Ответить
Сообщениеблагодарю тему можно закрыть разобрался а ответ был прост надо было просто сразу в XML данные кинуть через переменные которые я указываю в Excel'e

Автор - Elhust
Дата добавления - 27.03.2017 в 11:56
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Поиск данных в SQL server через Excel VBA ? (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!