powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Запуск хранимой процедуры из Excel
20 сообщений из 45, страница 2 из 2
Запуск хранимой процедуры из Excel
    #39611032
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сделайте параметр @Density числовым
...
Рейтинг: 0 / 0
Запуск хранимой процедуры из Excel
    #39611179
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kovaxShocker Pro, может быть, подскажете, в чём дело?
Обычно я ввожу число, где разделителем служит точка - тогда ХП пишет "Успешно". Если поставить разделителем запятую и попытаться запустить ХП через QA, то анализер будет ругаться, а число не запишется - проверено. Если так же сделать, используя ексель, он выдаст сообщение "Успешно", хотя ХП ведь не выполнит запись! Даже если перезагрузить комп (чтобы исключить сохранение Recordset'ов), открыть книгу и сразу попытаться записать число с "неправильным"разделителем- всё равно пишет, что успешно. Меня вот это напрягает!

Почему Вы решили, что "ХП ведь не выполнит запись"
Если Вам вернулось "Успешно", то ХП отработала на "ура"

Вы не путайте запуск ХП в QA и из других мест. В QA разделитель целой и дробной части всегда точка. Он упадет на этапе компиляции запроса.
В Экселе, если Вы создали парамер типа число, то туда и будет передаваться число (по-возможности конвертица)
...
Рейтинг: 0 / 0
Запуск хранимой процедуры из Excel
    #39611203
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HandKotВ Экселе, если Вы создали парамер типа число, то туда и будет передаваться число (по-возможности конвертица)В том-то и дело, косяк тут
Код: vbnet
1.
cmd.Parameters.Append cmd.CreateParameter("@Density", adVarChar, adParamInput, 5, TextBox1.Value)
...
Рейтинг: 0 / 0
Запуск хранимой процедуры из Excel
    #39611235
kovax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
HandKot,
прежде чем писать сюда, я проверяю всегда результат, чтобы ни самому, ни других участников не запутать.
Ещё вот раз попытался значение с запятой из экселя отправить - не записалось, я это прямо в приборе (газовый счётчик, СПТ-761) смотрю.
Shocker Pro,
QA "согласна работать" только с varchar. Ни с real, ни c float не хочет никак, самому странно!
...
Рейтинг: 0 / 0
Запуск хранимой процедуры из Excel
    #39611238
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kovaxQA "согласна работать" только с varchar. Ни с real, ни c float не хочет никак, самому странно!а) ерунду говорите
б) решение я сказал - меняйте varchar на число и ADO сам разберется, как туда корректно передать число, независимо от локализации винды
...
Рейтинг: 0 / 0
Запуск хранимой процедуры из Excel
    #39611239
kovax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Или Вы имеете в виду, что в ХП оставить @Dencity как есть, то есть varchar, а adVarChar заменить другим типом (числовым)?
...
Рейтинг: 0 / 0
Запуск хранимой процедуры из Excel
    #39611241
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kovaxв ХП оставить @Dencity как естьнет, менять в обоих местах, да и в xp_SPNet_set_array тоже
...
Рейтинг: 0 / 0
Запуск хранимой процедуры из Excel
    #39611248
kovax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не, в тот файл я не полезу, это файл типа *dll, выполняет роль драйвера счётчика для SQL. С этим пока всё.
Ломаю голову теперь над другой ХП, которая бы эту плотность теперь из памяти счётчика получала, а в перспективе - на лист екселя (в качестве обратной связи).
...
Рейтинг: 0 / 0
Запуск хранимой процедуры из Excel
    #39611281
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kovaxНе, в тот файл я не полезуну хотя бы на входе в свою ХП надо поставить число, а при вызове xp_SPNet_set_array конвертировать в строку
...
Рейтинг: 0 / 0
Запуск хранимой процедуры из Excel
    #39611283
kovax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Понял, попробую!
...
Рейтинг: 0 / 0
Запуск хранимой процедуры из Excel
    #39611610
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kovaxПонял, попробую!
Мне кажется поменять будет бесполезно, проблема видать в вызове ХП master..xp_SPNet_set_array внутри ХП SPNetWriteGasDensity

Сделайте простой костыль, т.к параметр @Density используется только при вызове ХП master..xp_SPNet_set_array , то просто забейте костыль добавьте строку

Код: sql
1.
2.
3.
4.
-- Счетчик 7, канал 1
Set @Density = Replace(@Density , ',', '.')
exec @rc = master..xp_SPNet_set_array @Handle, 7, 1, 125, 9, @Density
set @WriteResult = @WriteResult + @rc
...
Рейтинг: 0 / 0
Запуск хранимой процедуры из Excel
    #39611663
kovax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
HandKot, работает!
Спасибо!
...
Рейтинг: 0 / 0
Запуск хранимой процедуры из Excel
    #39611815
kovax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нашёл в списке ХП процедуру для чтения плотности из газового счётчика. Кто-то до меня её ещё написал, не знаю даже, рабочая ли - надо проверить, запустив её в кверианализере и указав значения переменных, в том числе и @SPNetHandle. И вот с ней проблема! Что это такое, как узнать её величину - понятия не имею!
Эта же переменная есть в ХП для записи, текст которой я уже приводил, но там она, видимо, сама вычисляется, а здесь её значение нужно указать при попытке запуска в QA.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
CREATE PROCEDURE SPNetGetGasDensity
	@SPNetHandle int,
	@RequestID int,
	@Device int,
	@Channel int,
	@Array int,
	@ArrayIndex int,
	@DateTime datetime
AS

declare @rc as int

-- Временная таблица результатов запросов к СПСети
create table #GetGasDensityResultTMP (
	Device int,
	Channel int,
	Array int,
	ArrayIndex int,
	Value varchar(32),
	Unit varchar(32),
	DateTime varchar(32)
)


insert into #GetGasDensityResultTMP exec @rc = master..xp_SPNet_get_array @SPNetHandle, 7, 1, 125, 9, 1

-- Запрос удачен?
if @rc = 0  and @@rowcount != 0 begin
	-- Данные числовые?
	declare @Value as varchar(32)
	select @Value = Value from #GetGasDensityResultTMP

	if isnumeric(@Value) = 1 begin
		declare @SaveValueResult as int

		-- Помещение результата запроса в архив c избежанием дублирования 
		update SPNetArchive set Value = cast(Value as float), StoredInOracle = 0 where RequestID = @RequestID and [DateTime] = @DateTime
		set @SaveValueResult = @@rowcount

		if @SaveValueResult = 0 begin
			insert SPNetArchive select @RequestID as RequestID, @DateTime, cast(Value as float), Unit, 0 as StoredInOracle from #GetGasDensityResultTMP
			set @SaveValueResult = @@rowcount
		end

		-- Удачная попытка добавиления?
		if @SaveValueResult != 0 begin
			-- Удаление запроса из очереди
			delete from SPNetRequestsQueue where RequestID = @RequestID and DateTime = @DateTime
			set @rc = 0
		end
		else begin
			set @rc = 1
		end
	end
	else begin
		set @rc = 1
	end
end

-- Очистка результата запроса
delete #GetGasDensityResultTMP

return @rc
GO
...
Рейтинг: 0 / 0
Запуск хранимой процедуры из Excel
    #39611821
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kovaxЭта же переменная есть в ХП для записи, текст которой я уже приводилнету
...
Рейтинг: 0 / 0
Запуск хранимой процедуры из Excel
    #39611823
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Впрочем, там есть @Handle, ну так она возвращается из xp_SPNet_connect
kovax
Код: sql
1.
exec @rc = master..xp_SPNet_connect @Port, @Baud, @Timeout, @ConnDevAddr, @Handle OUTPUT
...
Рейтинг: 0 / 0
Запуск хранимой процедуры из Excel
    #39611846
kovax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker Pro, а есть идеи, что это может быть?
У меня единственная версия - SPNetHandle - это номер сети, (приборы объединены в сеть), в данном случае 1. И каждая сеть соединяется со своим СОМ-портом.
Делаю такой запрос в QA
Код: sql
1.
exec SPNetGetGasDensity 1, 226, 7, 1, 125, 9, "20180303"


Пишет в ответ "1 row affected = 0" - типа, все строки пустые.
...
Рейтинг: 0 / 0
Запуск хранимой процедуры из Excel
    #39611851
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
скажем так, это условный номер некоего объекта соединения, которое создается xp_SPNet_connect и через которое идет обмен со счетчиком. Придумать его нельзя - нужно использовать xp_SPNet_connect для его получения
...
Рейтинг: 0 / 0
Запуск хранимой процедуры из Excel
    #39616873
kovax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Заставил, наконец, работать процедуру
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
CREATE PROCEDURE SPNetGetGasDensity
	--@Handle int,
	--@RequestID int,
	--@Device int,
	--@Channel int,
	--@Array int,
	--@ArrayIndex int,
	--@DateTime datetime
            --set  @DateTime = getdate
AS
--SET NOCOUNT ON
create table #SPNetMain (
	Port varchar(16),
	Baud int,
	Timeout int,
	ConnDevAddr int,
	RequestDelay int
)

insert #SPNetMain select Port, Baud, Timeout, ConnDevAddr, RequestDelay from SPNetworks where id = 1

declare @Port as varchar(16)
declare @Baud as int
declare @Timeout as int
declare @ConnDevAddr as int
declare @RequestDelay as int

select @Port = Port from #SPNetMain
select @Baud = Baud from #SPNetMain
select @Timeout = Timeout from #SPNetMain
select @ConnDevAddr = ConnDevAddr from #SPNetMain
select @RequestDelay = RequestDelay from #SPNetMain

drop table #SPNetMain

declare @Handle int
declare @rc int

exec @rc = master..xp_SPNet_connect @Port, @Baud, @Timeout, @ConnDevAddr, @Handle OUTPUT
--declare @rc as int

-- Временная таблица результатов запросов к СПСети
create table #GetGasDensityResultTMP (
	Device int,
	Channel int,
	Array int,
	ArrayIndex int,
	Value varchar(32),
	Unit varchar(32),
	DateTime varchar(32)
)

--set  @DateTime = GETDATE()
insert into #GetGasDensityResultTMP exec @rc = master..xp_SPNet_get_array @Handle, 7, 1, 125, 9, 1

-- Запрос удачен?
if @rc = 0  and @@rowcount != 0 begin
	-- Данные числовые?
	declare @Value as varchar(32)
	select @Value = Value from #GetGasDensityResultTMP

	if isnumeric(@Value) = 1 begin
		declare @SaveValueResult as int

		-- Помещение результата запроса в архив c избежанием дублирования 
		update SPNetArchive set Value = cast(Value as float), StoredInOracle = 0 where RequestID = 226 and [DateTime] = getdate()
		set @SaveValueResult = @@rowcount

		if @SaveValueResult = 0 begin
			insert SPNetArchive select 226 as RequestID, getdate(), cast(Value as float), Unit, 0 as StoredInOracle from #GetGasDensityResultTMP
			set @SaveValueResult = @@rowcount
		end

		-- Удачная попытка добавления?
		if @SaveValueResult != 0 begin
			-- Удаление запроса из очереди
			delete from SPNetRequestsQueue where RequestID = 226 and DateTime = getdate()
			set @rc = 0
		end
		else begin
			set @rc = 1
		end
	end
	else begin
		set @rc = 1
	end
end
exec master..xp_SPNet_disconnect @Handle
-- Очистка результата запроса
delete #GetGasDensityResultTMP

return @rc
GO


Не знаю только что с getdate делать - она выводит дату-время, а мне нужно только дату. Что нужно дописать?
...
Рейтинг: 0 / 0
Запуск хранимой процедуры из Excel
    #39616879
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Запуск хранимой процедуры из Excel
    #39616901
kovax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, а то всё время забываю про фак
...
Рейтинг: 0 / 0
20 сообщений из 45, страница 2 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Запуск хранимой процедуры из Excel
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]