powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Исполнение скрипта из АDODB (может и офф)
16 сообщений из 16, страница 1 из 1
Исполнение скрипта из АDODB (может и офф)
    #32011877
Sharov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не могу исполнить конструкцию типа:

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[get_price]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[get_price]
GO

CREATE FUNCTION get_price (@tv varchar(9),@sh varchar(9))
RETURNS money
AS
begin
Return
(select top 1 sp69 from S_DAT.dbo.RA65 where sp66=@tv and sp67=@sh order by DATE_TIME_IDDOC desc)
end


GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

Работаю в 1С, использую OLEDB провайдера:
Cmd=CreateObject("ADODB.Command");
Ошибка:
Microsoft OLE DB Provider for SQL Server: Line 3: Incorrect syntax near 'GO'.
Помогите...
...
Рейтинг: 0 / 0
Исполнение скрипта из АDODB (может и офф)
    #32011887
Slava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А в QA скрипт работает?
...
Рейтинг: 0 / 0
Исполнение скрипта из АDODB (может и офф)
    #32011889
Павел
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Правильно ругается. Если тебе действительно из 1С нужно создавать функцию (в чем я сомневаюсь, для этого есть более удобные инструменты ), то выкини все GO. Они используются только в QA для указания конца batch'a. Чтобы добится того же результата через ADO, нужно просто разбить скрипт на несколько отдельных ADODB.Command's. Но в данном случае это не обязательно - функция то пока не используется. А если не секрет, чего ты вообще хочешь добиться?
...
Рейтинг: 0 / 0
Исполнение скрипта из АDODB (может и офф)
    #32011897
JINX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если я не ошибаюсь в ADO Command может быть и несколько SQL фраз разделенных точкой с запятой - ;

Пример команды
SELECT * FROM table1; SELECT * FROM table2

Эта команда вернет два рекордсета - для того чтоб получить второй нужно вызвать NextRecordset
...
Рейтинг: 0 / 0
Исполнение скрипта из АDODB (может и офф)
    #32011907
Sharov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2Павел
Добиться хочу вот чего: скрипт принудительно вызывается при НачалеРаботыСистемы().
При этом поддерживается единство SQL процедур/функций, необходимых для работы 1С
(через УРБД).
Если скрипт не выполнен или выполнен с ошибкой -> ЗавершитьРаботуСистемы().

Я вот думаю, может ограничение на batch'ам в CommandText только у OLEDB?
Ведь QA реботает через ODBC-провайдера и у него все прокатывает.

В общем, придется скриптовать все в отдельные файлы, потом из резать на выполняемые
кусочки...

2JINX:
Задача другая. Мне нужно... было... проверить, существует ли процедура/функция в системе,
если да то удалить и создать новую, измененную.
Связка if exists + create в одном Execute OLEDB-провайдером (или ADO вообще)
не поддерживется.
...а селекты можно и последовательно исполнять, и жоинами объединять, и т. д.
...
Рейтинг: 0 / 0
Исполнение скрипта из АDODB (может и офф)
    #32011910
JINX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не проще ли поместить этот скрипт в хранимую процедуру на серверной стороне - и выполнять эту процедуру при старте системы?

Плюс ко всему - вы получите возможность легко модифицировать эту процедуру в дальнейшем "не трогая" клиент.
...
Рейтинг: 0 / 0
Исполнение скрипта из АDODB (может и офф)
    #32011912
Павел
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня под ADO с клиента спокойно работают такие команды:
"If object_ID('tempdb..#PropertiesLinesTmp') Is Null Create Table tempdb..#PropertiesLinesTmp (Property_id Int Primary Key Not Null, Property_value_id Int Not Null, ok Bit) Else Truncate Table tempdb..#PropertiesLinesTmp"

Так что еще раз говорю - просто выкини GO.
...
Рейтинг: 0 / 0
Исполнение скрипта из АDODB (может и офф)
    #32011915
Slava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
JINX а можно по подробнее про NextRecordset. Я вроде все так и делаю, но второго recordseta в упор не вижу.
cm.CommandText = "insert into SQLObjects values (something, 1); select scope_identity() as 'newid'"
rs.ActiveConnection = DataEnvironment1.Connection1
Set rs = cm.Execute
rs.NextRecordset
MsgBox rs!newid
может я что не то делаю. Помогите пожалуйста а тоя уже устал с этим любовь иметь.
...
Рейтинг: 0 / 0
Исполнение скрипта из АDODB (может и офф)
    #32011931
Sharov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2Павел:

These rules apply to batches:
Books Online.
CREATE DEFAULT, CREATE PROCEDURE, CREATE RULE, CREATE TRIGGER, and CREATE VIEW statements cannot be combined with other statements in a batch. The CREATE statement must begin the batch. All other statements that follow in that batch will be interpreted as part of the definition of the first CREATE statement.

2(All):
Всем спасибо, вопрос снят, тема закрыта.
...
Рейтинг: 0 / 0
Исполнение скрипта из АDODB (может и офф)
    #32011946
Игорь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может кто подскажет, почему при выполнении запроса через ADODB.Connection более 30 сек. возникает ошибка "Поставщик Microsoft OLE DB для SQL Server: Время ожидания истекло"
...
Рейтинг: 0 / 0
Исполнение скрипта из АDODB (может и офф)
    #32011950
Sharov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SQLCon=CreateObject("ADODB.Connection");
SQLCom=CreateObject("ADODB.Command");
SQLRes=CreateObject("ADODB.Recordset");
SQLCon.Provider="SQLOLEDB";
SQLCon.ConnectionTimeout=3000;
SQLCon.Open(.......);
SQLCom.Activeconnection=SQLCon;
SQLCom.CommandTimeout=3000;
...
Рейтинг: 0 / 0
Исполнение скрипта из АDODB (может и офф)
    #32011956
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>JINX а можно по подробнее про NextRecordset. Я вроде все так и делаю, но второго recordseta в упор не вижу.
cm.CommandText = "insert into SQLObjects values (something, 1); select scope_identity() as 'newid'"

Для того, чтобы увидеть второй рекордсет, нужно чтобы в Command было более одной команды Select, возвращающей набор записей.

>Может кто подскажет, почему при выполнении запроса через ADODB.Connection более 30 сек. возникает ошибка "Поставщик Microsoft OLE DB для SQL Server: Время ожидания истекло"

Потому что время ожидания истекло . Выстави таймаут побольше. И сделай запрос таким, чтобы его выполнения не приходилось ждать неделю.
...
Рейтинг: 0 / 0
Исполнение скрипта из АDODB (может и офф)
    #32011971
Slava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А вот и нет Garya просто надо было так
set rs = rs.NextRecordset
из чего напрашивается вывод что insert тоже возвращает recordset просто он пустой, а вот если бы в триггере на insert был бы select какой-нибудь, то он не был бы пустым.
...
Рейтинг: 0 / 0
Исполнение скрипта из АDODB (может и офф)
    #32011977
Slava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ко мне сейчас пришла мысль что в предыдущем высказывании я ошибся. Но я так решил потому что мог код работает и соблюдает логическую целостность.
...
Рейтинг: 0 / 0
Исполнение скрипта из АDODB (может и офф)
    #32011978
Игорь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потому что время ожидания истекло . Выстави таймаут побольше. И сделай запрос таким, чтобы его выполнения не приходилось ждать неделю.

SQLCon.ConnectionTimeout=0 !!!!! Это должно было решить проблему.
Или я ошибаюсь?
...
Рейтинг: 0 / 0
Исполнение скрипта из АDODB (может и офф)
    #32013297
Фотография Leonid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В ADO Insert возвращает recordset если set nocount off
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Исполнение скрипта из АDODB (может и офф)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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