AXForum  
Вернуться   AXForum > Microsoft Dynamics NAV > NAV: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 01.09.2006, 21:04   #1  
grif is offline
grif
Участник
Аватар для grif
 
236 / 10 (1) +
Регистрация: 31.08.2006
Работаю с Navision на SQL Server 2000, но в целях ускорения работы возникла необходимость работать напрямую с SQL Server`ом через Automation Microsoft ActiveX Data Objects 2.8 Library. Проблема в следующем - забитые гвоздями в хранимой процедуре имена таблиц в виде

<Companyname>$<Tablename> не позволят универсально функционировать на всех фирмах. Хочется иметь возможность передавать имя фирмы в виде текстового параметра и в зависимости от его значения копаться в разных таблицах. Каким образом можно реализовать подобное?
з.ы. формирование и запись запроса в строковую переменую для последующего вызова как на уровне Navision, так и на уровне SQL Server не подходит из-за большого объёма запроса. Максимальная строка в Navision ведь 1024, а в SQL кажется 8000.
Старый 04.09.2006, 03:58   #2  
gennady is offline
gennady
Участник
 
92 / 11 (1) +
Регистрация: 27.09.2004
Адрес: Иркутск
Ну, может попробовать написать свою хранимую процедуру.
Старый 04.09.2006, 06:56   #3  
Dolter_imported is offline
Dolter_imported
Участник
 
47 / 10 (1) +
Регистрация: 23.09.2004
однозначно свои ХП и функции... на каждую из компаний :-)
т.е. создаем табличку с текстами этих ХП и функций и на таблицу Company вешаем триггер: при создании новой компании запуск скриптов по созданию нужных объектов на каждую новую компанию.
во как! :-)
__________________
YEP! тел. (905) 561-94-00
Старый 04.09.2006, 10:49   #4  
grif is offline
grif
Участник
Аватар для grif
 
236 / 10 (1) +
Регистрация: 31.08.2006
Цитата:
Сообщение от Gennady Antropov Посмотреть сообщение
Ну, может попробовать написать свою хранимую процедуру.
бугага. прочитай вопрос ещё раз

Цитата:
Сообщение от Dolter Посмотреть сообщение
однозначно свои ХП и функции... на каждую из компаний :-)
т.е. создаем табличку с текстами этих ХП и функций и на таблицу Company вешаем триггер: при создании новой компании запуск скриптов по созданию нужных объектов на каждую новую компанию.
во как! :-)
всё верно, но тебе не кажется что это изврат?
Старый 04.09.2006, 18:19   #5  
Dolter_imported is offline
Dolter_imported
Участник
 
47 / 10 (1) +
Регистрация: 23.09.2004
Цитата:
всё верно, но тебе не кажется что это изврат?
Кажется, конечно... но с динамическим скулем вечно какие-то проблемы...
__________________
YEP! тел. (905) 561-94-00
Старый 08.09.2006, 23:16   #6  
Likefire is offline
Likefire
Заноза в заднице
Аватар для Likefire
MCBMSS
Лучший по профессии 2009
 
547 / 50 (3) ++++
Регистрация: 22.10.2007
Адрес: Москва
Записей в блоге: 1
Изврат однозначно. К тому же не обойтись без хардкода.
Тема: подумай, как запрос разбить на подзапросы. Ну к примеру: там, где нужно обращаться к таблицам разных фирм - формируй строку запроса в Navi, а там, где данные в привязке к фирме уже не имеют значения - ваяй ХП (если это конечно возможно) и дёргай их в нужные моменты, передавая значения, полученые запросом, сгенеренным в Navi. Короче, тут совет может быть такого рода: пробуй комбинировать. Хотя, конечно, можно слабать внешнюю компоненту, в которую текст запроса передавать блоками по 1024 символа, а после того, как набор блоков передан - запускать метод компоненты, который вызовет исполнение собранного из блоков запроса. Это тоже изврат, но менее прибацаный.
__________________
Лень мудрого человека - это необходимое средство нейтрализации кипучей активности руководящих им дураков!
Старый 14.09.2006, 10:53   #7  
sergeypp is offline
sergeypp
Ищу людей. Дорого.
Аватар для sergeypp
 
433 / 174 (6) ++++++
Регистрация: 08.11.2003
Адрес: Казань
Я делал следующим образом. Для каждой фирмы была написана процедура, с названием фирмы в названии процедуры. (Фирмы были названы англ буквами, если у вас Русские буквы используйте [...])


CREATE proc sp_xxx
( @firm varchar(10),
@param varchar(10)
)
as
DECLARE @SQLString NVARCHAR(500),@ParmDefinition NVARCHAR(500)

SET @SQLString = N' exec sp_xxx_'+@firm +' @param'
SET @ParmDefinition = N'@param varchar(10)'

EXECUTE sp_executesql @SQLString, @ParmDefinition, @param=@param

а каждая процедура работала уже с таблицами конкретной фирмы

Все понятно?? вместо @param можно передавать сколь угодно переменных, главное, что бы размер строки не был превышен..
Или можно извратиться и написать универсальную процедуру. и подставлять в вызовах уже названия таблиц.
А если вызовы происходят редко, можно вначале создать вьюхи на нужную фирму с универсальными названиями (т.е. без назв фирмы вначале). а потом процедурой работать с таблицами через вьюхи..
Грохаешь созданные вьюхи. Создаешь для другой фирмы и т.д.
Версий много.. Копайте господа ))
__________________
Внедрение, развитие и поддержка DAX и RPA
spp16rus | sergeypp@gmail.com
 


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 05:09.