:: Visual Foxpro, Foxpro for DOS
xml из хранимки в vfp
s_gsm
Автор

Сообщений: 6
Дата регистрации: 28.06.2019
Товарищи, помогите, пожалуйста. Есть хранимка на mssql 11. Возвращает набор данных (одна строка в том числе с полем типа xml), и OUTPUT параметры, один из которых тот же xml. Как мне в VFP 9 с использованием sqlexec получить эту xml?? Memo-поле в наборе данных возвращается пустым (( Хранимка для изменений не доступна. Спасибо заранее
Ratings: 0 negative/0 positive
Re: xml из хранимки в vfp
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Какой драйвер используется? С новыми типами надо бы драйвер из состава Native Client использовать.
Ну и простейший пример для воспроизведения проблемы был бы уместен (в т.ч. текст хранимки возвращающей хотя бы просто сгенерированные в ней же данные).


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: xml из хранимки в vfp
PaulWist

Сообщений: 14601
Дата регистрации: 01.04.2004
Использовать сурворадаптер, либо cast(xml as varchar(8000)


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: xml из хранимки в vfp
s_gsm
Автор

Сообщений: 6
Дата регистрации: 28.06.2019
SQL Server Native 11.0 и используется ((

Это в management studio:
DECLARE @return_value int,
@RESULT int,
@COUNT int,
@XML_REPLY xml

EXEC @return_value = [dbo].[API_EXPORT_SPD]
@BANK_NUMBER = N'1111/2222',
@SPD_DATE_FROM = '2019-05-22',
@SPD_DATE_TO = '2019-05-22',
@RESULT = @RESULT OUTPUT,
@COUNT = @COUNT OUTPUT,
@XML_REPLY = @XML_REPLY OUTPUT

SELECT @RESULT as N'@RESULT',
@COUNT as N'@COUNT',
@XML_REPLY as N'@XML_REPLY'

SELECT 'Return Value' = @return_value

GO

Это в фоксе:
m._v_return_value = 0
m._v_result = 0
m._v_count = 0
m._v_xml_reply = SPACE(100000) && уж не знаю что тут задавать

m._v_bank_number = m.Our_Regn && "1111/2222"
m._v_spd_date_from = DTOS(m._v_date) && "20190522"
m._v_spd_date_to = DTOS(m._v_date) && "20190522"

m._v_cmd = "Execute dbo.API_EXPORT_SPD @BANK_NUMBER=?m._v_bank_number,@SPD_DATE_FROM=?m._v_spd_date_from,@SPD_DATE_TO=?m._v_spd_date_to"
*//m._v_cmd = "Execute dbo.API_EXPORT_SPD @BANK_NUMBER=?m._v_bank_number,@SPD_DATE_FROM=?m._v_spd_date_from,@SPD_DATE_TO=?m._v_spd_date_to,@RESULT=?@m._v_result,@COUNT=?@m._v_count,@XML_REPLY=?@m._v_xml_reply"

m._v_ret = SQLEXEC(m._v_h_srv2, m._v_cmd, "_c_1")
Ratings: 0 negative/0 positive
Re: xml из хранимки в vfp
s_gsm
Автор

Сообщений: 6
Дата регистрации: 28.06.2019
Извините, а где и как использовать cast() ?
Ratings: 0 negative/0 positive
Re: xml из хранимки в vfp
s_gsm
Автор

Сообщений: 6
Дата регистрации: 28.06.2019
И вот текст ошибки если я вызываю хранимку с OUTPUT параметром:
Connectivity error: [Microsoft][SQL Server Native Client 11.0][SQL Server]Implicit conversion from data type xml to varchar is not allowed. Use the CONVERT function to run this query.
Извините, а где этот CONVERT вставлять??
Ratings: 0 negative/0 positive
Re: xml из хранимки в vfp
PaulWist

Сообщений: 14601
Дата регистрации: 01.04.2004
SELECT @RESULT as N'@RESULT',
@COUNT as N'@COUNT',
Cast(@XML_REPLY as varchar(8000)) as N'@XML_REPLY'

Только надо учесть, что xml может быть больше 8000, тогда его надо на стороне сервера порезать на порции и передать в фокс, где его надо склеить


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: xml из хранимки в vfp
s_gsm
Автор

Сообщений: 6
Дата регистрации: 28.06.2019
Это на стороне сервера, да? У меня нет возможности лезть в базу (( я могу только вызвать хранимку из фокса и все. Это база с апи к ней от разработчика коробочного софта. И когда я вызываю хранимку, то она просто возвращает вышеприведенную ошибку или пустое memo (
Ratings: 0 negative/0 positive
Re: xml из хранимки в vfp
PaulWist

Сообщений: 14601
Дата регистрации: 01.04.2004
Используй курсорадаптер для вызова ХП


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: xml из хранимки в vfp
PaulWist

Сообщений: 14601
Дата регистрации: 01.04.2004
s_gsm
Это на стороне сервера, да? У меня нет возможности лезть в базу (( я могу только вызвать хранимку из фокса и все. Это база с апи к ней от разработчика коробочного софта. И когда я вызываю хранимку, то она просто возвращает вышеприведенную ошибку или пустое memo (

Эээ, как бы некоторое несоотвествие в словах, если можешь выполнить этот код:

DECLARE @return_value int,
@RESULT int,
@COUNT int,
@XML_REPLY xml
as
EXEC @return_value = [dbo].[API_EXPORT_SPD]
@BANK_NUMBER = N'1111/2222',
@SPD_DATE_FROM = '2019-05-22',
@SPD_DATE_TO = '2019-05-22',
@RESULT = @RESULT OUTPUT,
@COUNT = @COUNT OUTPUT,
@XML_REPLY = @XML_REPLY OUTPUT

значит доступ к БД есть. Осталось выяснить есть ли права на create procedure, если они есть, то проблема решается как 2 пальца.

Пишешь обертку надо исходной ХП

create procedure dbo.Someproc
@BANK_NUMBER nvarchar(100),
@SPD_DATE_FROM date,
@SPD_DATE_TO date,
as
BEGIN
DECLARE @return_value int,
@RESULT int,
@COUNT int,
@XML_REPLY xml
EXEC @return_value = [dbo].[API_EXPORT_SPD]
@BANK_NUMBER ,
@SPD_DATE_FROM ,
@SPD_DATE_TO ,
@RESULT = @RESULT OUTPUT,
@COUNT = @COUNT OUTPUT,
@XML_REPLY = @XML_REPLY OUTPUT
-- вот тут "режешь" @XML_REPLY по 8000 символов
-- и передаешь клиенту фокса, типа
select cast(@XML_REPLY as varchar(8000)) as @XML_8000
END

На стороне фокса выpываешь свою обёртку:
SQLEXEC(hnd, 'exec dbo.Someproc тут параметры')


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: xml из хранимки в vfp
s_gsm
Автор

Сообщений: 6
Дата регистрации: 28.06.2019
О! Спасибо большое ) Мысль понял. А я вчера помудрил-поискал и решил-таки так:
m._v_cmd = ;
"DECLARE @return_value int,@RESULT int,@COUNT int,@XML_REPLY xml;" + ;
"EXEC @return_value = [dbo].[API_EXPORT_SPD] " + ;
"@BANK_NUMBER = N'1111/2222', " + ;
"@SPD_DATE_FROM = '2019-05-22', " + ;
"@SPD_DATE_TO = '2019-05-22', " + ;
"@RESULT = @RESULT OUTPUT, " + ;
"@COUNT = @COUNT OUTPUT, " + ;
"@XML_REPLY = @XML_REPLY OUTPUT;" + ;
"SELECT CAST( cast(@XML_REPLY as varchar(max)) as text) as XML_REPLY_T;"
m._v_ret = SQLEXEC(m._v_h_srv2, m._v_cmd, "_c_0")
и в _с_01.XML_REPLY_T получил текст

Ваш код попробую конечно, только я вот еще не знаю какие права у пользователей моих..
Спасибо !!
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 16 PuMa  (Гостей: 15)

© 2000-2024 Fox Club 
Яндекс.Метрика