Rambler's Top100

 

 

Главная

Деловая страница

Полезные советы

Скачать

Прайс-лист

Ссылки

Игры

Увлечения


GISMETEO.RU: погода в г. Воронеж

  Рейтинг@Mail.ru Rambler's Top100

 

Полезные советы

Персональный сайт Вячеслава и Оксаны

 

Некоторые полезные настройки при работе с УРИБ

Как перевести периферийную базу в независимую?

Ключи для запуска приложений 1С

Пакетный режим Конфигуратора

Запрет ввода новых документов в архивную базу

Недокументированные возможности функции Шаблон

Служебные поля в файлах 1С:Предприятия (в новом окне)

Структура файлов УРИБ (в новом окне)

Создание внешних компонент (в новом окне)


Цвета проводников при обжиме (заделке) кабеля UTP

Если программа не устанавливается (Win2000, WinXP)

Пользователь и пароль для анонима на FTP-серверах

Лицензирование сервера терминала

Ошибка подключения к серверу терминалов "У вас отсутствует доступ на вход в этот сеанс"

Глоссарий некоторых сетевых терминов, используемых при подключении к Internet (в новом окне)

Как убрать надпись "Windows 2000 Professional, только для тестов"


MS SQL Как переиндексировать все пользовательские таблицы

MS SQL Как подключить базу обратно к MS SQL Server 2000 после того, как она подключалась к MS SQL Server 2005?

MS SQL Как перевести 36-ричное число в десятичное (для 1С:7.7)

MS SQL Как сравнить похожие строки (неполное совпадение строк)?

MS SQL Как сохранить поле BLOB ( image ) как файл на диск?

MS SQL Почему не создается объект по sp_OACreate ?

 

 

 

 

Некоторые полезные настройки при работе с УРИБ

Настройки в системном реестре:

Путь к 1С:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\1Cv7s.exe
Заголовки ИБ:
HKEY_LOCAL_MACHINE\Software\1C\1Cv7\7.7\Titles
Пути к каталогам загрузки/выгрузки:
HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\Заголовок ИБ\Config\Upload/Download directories
Чтобы нормально работало по почте:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows Messaging Subsystem\MAPI = '1'
Если по умолчанию OutlookExpress:
HKEY_LOCAL_MACHINE\Software\Clients\Mail\Outlook Express\DLLPath = sysRoot+'\OUTLOOK EXPRESS\MSOE.DLL'
Если по умолчанию TheBat!:
HKEY_LOCAL_MACHINE\Software\Clients\Mail\The Bat!\DLLPath = sysRoot+'\THE BAT!\TBMapi.DLL'


Информация в файле 1SDBSET.DBF
DBSIGN - Код базы (как он отображается в настройках ЦБ/ПБ)
DBDESCR - Наименование базы
DBSTATUS - "M" - Текущая, "P" - Центральная, "C" - Перифирийная, "N" - никакая :) или неинициализированная (т.е. не было первой выгрузки, статус при создании новой)
DBFNCP - имя файла загрузки из ЦБ в ПБ
DBFNPC - имя файла загрузки из ПБ в ЦБ
DBFAUTO - признак автообмена
EMAILFLGS - признак использования почты
EMAIL - почтовый адрес
 

Наверх

Как перевести периферийную базу в независимую?

Изменить информацию в файле 1SSYSTEM.DBF
DBSETUUID = "00000000-0000-0000-0000-000000000000"

Можно, для надежности сменить и остальные поля на:

EVENTIDTA = "0"
DBSIGN = ""
SNAPSHPER = "C"

 

Затем удалить файлы 1SDBSET.DBF, 1SDWNLDS.DBF, 1SUPDTS.DBF и соответствующие индексные файлы (.CDX) .

 

Наверх

Ключи для запуска приложений 1С

CONFIG - конфигуратор

DEBUG - отладчик

ENTERPRISE - предприятие

/D<Путь> - каталог информационной базы данных

/U<Путь> - каталог пользователя

/N<Имя> - имя пользователя, как оно указанно в списке пользователей в конфигураторе

/P<Пароль> - пароль пользователя, имя которого указано в параметре /N

/M - монопольный режим.

 

Наверх

Пакетный режим Конфигуратора

Конфигуратор запускается с определенными ключами, например:

1cv7.exe config /dC:\Db /nUser /pPwd /@C:\backup

где:

 /@ - указание на файл сценария запуска

Если расширение файла не указано, это значит, что используется стандартное для пакетного режима расширение *.prm . Может быть любое расширение, тогда нужно писать имя файла целиком, вместе с расширением.  Например, можно использовать расширение .ini, что очень удобно для обработки файла сценария программами, написанными на других языках, например Delphi, который, начиная с 5 версии имеет класс работы с ini-файлами.

В пакетном режиме можно делать: выгрузку и сохранение данных, тестирование/исправление ИБ (в частности - переиндексацию) и автообмен с РБД.

Более сложные действия (загрузка измененной конфигурации или восстановление данных) пока что автоматизации не подлежат.

Структура *.prm копирует структуру обыкновенного *.ini:

[секция]

величина = значение

 

Перечень секций, параметров и их значений

Имя параметра Значение Описание

[General] Общие параметры

Output file_name имя лог-файла для записи произведенных действий
Quit 1/0 * нужно ли закрывать программу после выполнения сценария
CheckAndRepair 1/0 нужно ли производить тестирование/исправление
UnloadData 1/0 нужно ли делать выгрузку данных
SaveData 1/0 нужно ли делать сохранение данных (т.е. архивацию *.dbf)
AutoExchange 1/0 нужно ли выполнять автообмен с РБД

[CheckAndRepair] Тестирование и исправление

Repair 1/0 делать ли исправление или ограничиться тестированием
PhysicalIntegrity 1/0 проверять физическую целостность таблиц ИБ
LogicalIntegrity 1/0 проверять логическую целостность таблиц ИБ
Reindex 1/0 производить переиндексацию ИБ
RecalcSecondaries 1/0 производить обновление вторичных (служебных) данных ИБ
RecalcTotals 1/0 пересчитывать бухгалтерские и оперативные итоги
Pack 1/0 упаковывать таблицы ИБ (физически стирать удаленные записи)
SkipUnresolved 1/0 пропускать неразрешенные ссылки или исправлять их
CreateForUnresolved 1/0 способ разрешения неразрещенных ссылок, создавать объекты (1) или же очищать такие ссылки (0)
Reconstruct 1/0 способ восстановления частично потерянных данных объектов, создавать объекты (1) или удалять их (0)

[UnloadData] Выгрузка данных

UnloadToFile file_name имя файла переноса данных
IncludeUserDef 1/0 включать список пользователей
Password password пароль на ZIP-архив

[SaveData] Сохранение данных

SaveToFile file_name имя файла архива
FileList mask1,mask2... список масок архивируемых файлов (через запятую или пробел)

* вместо 1/0 можно использовать Y/N

[AutoExchange] Автообмен баз УРБД
SharedMode 1/0 не очень понятно, что это, лучше поставить "1"
WriteTo 01* код базы, куда выгружать
ReadFrom 01* код базы, откуда загружать
* вместо 1/0 можно использовать Y/N

 

Если запуск Конфигуратора в пакетном режиме оформить в виде *.bat или *.cmd (или скрипта *.vbs или *.js, что гораздо удобнее, т.к. WSH имее более продвинутые файловые функции и функции управления процессами), то с помощью любого планировщика можно организовать полностью автоматическое выполнение некоторых рутинных операций в заданное время. С некоторыми примерами пакетного запуска и использованием WSH можно ознакомиться, скачав ПримерыWSH и Набор Инструментов

 

Наверх

Запрет ввода новых документов в архивную базу

Процедура глЗаполнитьШапку(Конт, Скопирован=0) Экспорт

...

//Блокировка ввода новых документов
СтатусВозврата(0);

...

КонецПроцедуры

Хотя наиболее правильно будет изменять права пользователей, т.к. необходимо будет установить запрет и на изменение как документов, так и справочников.

 

Наверх

Недокументированные возможности функции Шаблон

// Присвоить значение переменной по ее имени.
// в глоб.модуль:
Функция Присвоить(Чему,Что) Экспорт
Чему = Что;
Возврат "";
КонецФункции
// варианты вызова:
// Шаблон("[Присвоить("+ИмяПеременной+",ПеременнаяСоЗначением)]");
// Шаблон("[Присвоить("+ИмяПеременной+","+ИмяПеременнойСоЗначением+")]");
// Пример: пусть у нас на форме есть 5 числовых реквизитов К1, К2, ... К5
Для н=1 по 5 Цикл
Шаблон("[Присвоить("+("К"+н)+","+(н)+")]");
КонецЦикла;

 

Если в качестве параметров ф-ии Присвоить() могут передаваться ТаблицаЗначений или СписокЗначений, то нужно её изменить на:


Функция Присвоить(Чему,Что)
Если Найти(ТипЗначенияСтр(Что),"Значений")>0 Тогда
Чему=СоздатьОбъект(ТипЗначенияСтр(Что));
Что.Выгрузить(Чему);
Иначе
Чему = Что;
КонецЕсли;
Возврат "";
КонецФункции


В глобальном модуле доступны все переменные, функции и реквизиты вызывающей формы! При этом даже не требуется передавать Контекст формы!
Пример:
// помещаем в глобальный модуль процедуру
//_____________________________________________________________________________
Процедура глТест() Экспорт
сообщить(Шаблон("[ПеременнаяМодуля]")); // получаем переменную модуля
сообщить(Шаблон("[РеквизитФормы]")); // получаем переменную модуля формы
сообщить(Шаблон("[ФункцияМодуля()]")); // вызываем функцию модуля формы
КонецПроцедуры //глТест()

// создадим внешнюю обработку
// не забудьте добавить на форму реквизит "РеквизитФормы" тип "Строка",30
// текст модуля внешней обработки:
Перем ПеременнаяМодуля;
//_____________________________________________________________________________
Функция ФункцияМодуля()
Сообщить("Сработала функция модуля");
КонецФункции
//_____________________________________________________________________________
Процедура Сформировать()
глТест(); // вызываем глоб процедуру и смотрим ...
КонецПроцедуры
//_____________________________________________________________________________
ПеременнаяМодуля="Это значение ПеременнойМодуля";
РеквизитФормы="Это значение РеквизитаФормы";

 

Наверх

 


Цвета проводников при обжиме (заделке) кабеля

UTP

Существует два распространенных стандарта по разводке цветов по парам: T568A компании Siemon и T568B компании AT&T. Оба этих стандарта абсолютно равнозначны.

Сетевая карта <> Коммутатор по стандарту: T568A

При такой раскладке информацию несут проводники: Бело-зелёный, Зелёный, Бело-оранжевый, Оранжевый.

 

Сетевая карта <> Коммутатор по стандарту: T568B

При такой раскладке информацию несут проводники: Бело-оранжевый, Оранжевый, Бело-зелёный, Зеленый.

 

Сетевая карта <> Сетевая карта (Кроссовер кабель)

Обжатая таким образом, витая пара может вам понадобиться в 2 случаях: а) для соединения 2 компьютеров без коммутатора; б) для соединения 2 или более Hub/Switch

 

Наверх

Если программа не устанавливается (Win2000, XP)

Иногда бывают случаи, когда, по непонятным причинам, инсталляция программного обеспечения либо не получается, либо в процессе выдаются ошибки, типа:

"Точка входа в процедуру бла-бла-бла не найдена в библиотеке DLL ла-ла.dll"

В большинстве случае помогает войти под пользователем с правами админа и английским именем. Ну не любят МелкоМягкие русских! :)

Наверх

Имя пользователя и пароль для анонима на FTP-серверах

Некоторые FTP-клиенты не умеют подставлять автоматически данные для анонимного входа на публичные FTP-сервера. В таком случае можно ввести следующие значения:

Логин:   Anonymous
Пароль: IEUSER@

Так представляется Internet Explorer. Вообще-то, главное, чтобы пароль не был пустым, например, браузер Opera подставляет символ "-"

 

Наверх 

Лицензирование сервера терминала

Официальная процедура активации службы лицензирования терминалов (Terminal Server Licensing) и добавления клиентских лицензий достаточно проста, но требует аккуратного подхода.

  1. Запускаем Terminal Server Licensing (Start -> Control Panel -> Administrative Tools-> Terminal Server Licensing).

  2. Выбираем терминальный сервер, который мы хотим активировать, далее right-click и Properties. На вкладке Installation Method выбираем метод установки Web Browser (в Windows 2000 - WorldWideWeb).

  3. Переходим на вкладку Required Information, заполняем поля различной лабудой и жмем OK

  4. На терминал-сервере, который мы активируем, right-click и Activate Server. Запустится Terminal Server License Server Activation Wizard. Знакомимся с описанием и жмем Next

  5. Выбираем метод активации Web Browser (в Windows 2000 - WorldWideWeb), жмем Next.

  6. На этом шаге нам небходимо обратится на сайт https://activate.microsoft.com/ для получения license server ID.

  7. На веб-сайте Terminal Server Licensing выбираем опцию Activate a license server и жмем Next

  8. На этом шаге нам нужно заполнить поля, помеченные (*). Product ID берем из Terminal Server License Server Activation Wizard (см. шаг 6), остальные поля заполяем той же лабудой, что и на шаге 3. После того жмем Next, далее проверяем введенную информацию и опять жмем Next.

  9. Если все правильно, то мы получим необходимый license server ID. Сайт activate.microsoft.com закрывать не нужно, он нам пригодится в дальнейшем для получения client access licenses (CALs). Вводим полученный license server ID в Terminal Server License Server Activation Wizard (см. шаг 6), а так же желательно распечатать страничку или сохранить где-нибуть license server ID, он может потом потребоваться. Жмем Next. На этом первая часть, активизация сервера лицензирования сервера терминалов, завершена.

  10. Для установки client access licenses (CALs), второй части, нужно проверить, что галочка Start Terminal Server Client Licensing Wizard установлена и нажать Next. Мы увидим приветствие мастера установки клиентских лицензий. Знакомимся с информацией и жмем Next.

  11. Возвращаемся к сайту activate.microsoft.com на ту страницу, которая осталась открытой на шаге 9. На вопрос "Do you wish to install license tokens at this time?" отвечаем Yes.

  12. Заполняем поля, помеченные (*). License Server ID берем из Terminal Server CAL Installation Wizard (см. шаг 10), в качестве License Program выбираем тот вид соглашения, который вы заключили с Microsoft при покупке лицензий. Один мой знакомый в качестве эксперимента выбрал Enterprise agreement. Остальные поля заполяем той же лабудой, что и на шаге 3. После этого жмем Next.

  13. Выбираем:

    Далее жмем Next, проверяем введенную инфу и опять жмем Next.

  14. Если все правильно, то мы получим необходимый license key pack ID (7 групп по 5 символов), который вводим в Terminal Server CAL Installation Wizard (см. шаг 10), жмем Next, а потом Finish.

* "Enrollment Agreement Number": 6565792 5296992 3325596 4965437 4526017 ... или получить по поиску

Оригинал статьи находится здесь

Наверх

Ошибка подключения к серверу терминалов "У вас отсутствует доступ на вход в этот сеанс"

Если Вы активизировали удаленный рабочий стол, то подключаться к вашему серверу могут только члены локальной группы Администраторов. Через Настройку служб Терминалов (из меню Администрирование),  можно разрешить остальным учетным записям и группам подключаться в этом режиме к этой службе.

Наверх

 

Как убрать надпись на рабочем столе внизу справа "Windows 2000 Professional только для тестов"

 

    Такое сообщение может появиться после установки WindowsMediaPlayer Beta.

    1. Чтобы вывести/запретить показ версии Windows 2000/XP на Рабочем столе, надо отредактировать в разделе HKEY_CURRENT_USER\ControlPanel\Desktop параметр PaintDesktopVersion типа DWORD. Если он равен 1, то версия показывается, 0 - нет. Для Win9x этот параметр должен быть строкового типа.

    2. Если п.1 не помог, то в реестре надо убить ключи:

HKLM\SOFTWARE\Microsoft\SystemCertificates\CA\Certificates

\FEE449EE0E3965A5246F000E87FDE2A065FD89D4 HKLM\SOFTWARE\Microsoft\SystemCertificates\ROOT\Certificates \2BD63D28D7BCD0E251195AEB519243C13142EBC3

 

Наверх

 


Как переиндексировать все пользовательские таблицы
 

CREATE PROCEDURE sp_DBReindex AS
SET NOCOUNT ON
DECLARE @TableName char(32)
DECLARE SysCur CURSOR FOR SELECT name FROM sysobjects WHERE type='U'
OPEN SysCur
FETCH NEXT FROM SysCur INTO @TableName
WHILE @@FETCH_STATUS=0
BEGIN
DBCC DBREINDEX(@TableName)
FETCH NEXT FROM SysCur INTO @TableName
END
CLOSE SysCur
DEALLOCATE SysCur

 

Наверх

Как подключить базу обратно к MS SQL Server 2000 после того, как она подключалась к MS SQL Server 2005?

 

К сожалению, никак. При подключении базы 2000-го к 2005-му происходит необратимое преобразование ее внутренней структуры, поэтому обратное подключение невозможно.

 

Наверх

Как перевести 36-ричное число в десятичное (для 1С:7.7)
 

create function base36_to_base10 (@base36 char(6))
returns char(10)
as
begin

if @base36 is null return null
if rtrim(@base36)='0' return ' 0'

declare @base10 char(10)
declare @ch char(1)
declare @int int
declare @bigint bigint
declare @len int
declare @por bigint
declare @c int

set @base36=ltrim(@base36)
set @len=len(@base36)
set @por=1
set @bigint=0
set @c=@len

while @c>0
begin
set @ch=substring(@base36,@c,1)

if (@ch<'A')
set @int=ascii(@ch)-ascii('0')
else
set @int=ascii(@ch)-ascii('A')+10

set @bigint=@bigint+@int*@por
set @c=@c-1
set @por=@por*36
end
 

set @base10=right(' '+rtrim(cast(@bigint as char(10))),10)
return (@base10)
end

 

Наверх

Как сравнить похожие строки (неполное совпадение строк)?
 

Ниже привожу пример функции нечеткого сравнения строк. Возвращаемое значение - от 0 (вообще не совпадает) до 1 (совпадает полностью)
По опыту, результат сравнения можно считать достоверным при совпадении больше 0.8 (80%)

CREATE FUNCTION fn_FuzzyCompareString(
@Stri1 varchar(250),
@Stri2 varchar(250),
@MaxLen int)
RETURNS float
AS
BEGIN

DECLARE @Str1 varchar(250), @Str2 varchar(250), @SCountVar int,
@SCountEq int, @LenStr int, @Res float
DECLARE @NumSymbStr2 int
DECLARE @Cnt1 int, @Cnt2 int
DECLARE @SubStr varchar(250)

SELECT
@LenStr=1,
@SCountVar=0 ,
@SCountEq=0,
@res=0

Set @Str1 = replace(LTRIM(RTRIM(upper(@Stri1))),'.',' ')
Set @Str2 = replace(LTRIM(RTRIM(upper(@Stri2))),'.',' ')

if ((@MaxLen <= 0) or (Len(@Str1)=0) or (Len(@Str2)=0))
Begin
Set @Res=0
End
else
begin
While (@LenStr<=@MaxLen)
BEGIN
Set @NumSymbStr2=1
Set @Cnt2=0

While ((@Cnt2+@LenStr)<=LEN(@Str2))
BEGIN

Set @SubStr = '%'+SUBSTRING(@Str2,@NumSymbStr2,@LenStr)+'%'
if (PATINDEX(@SubStr, @Str1)<>0)
begin
Set @SCountEq=@SCountEq+1
end

Set @SCountVar=@SCountVar+1
Set @NumSymbStr2=@NumSymbStr2+1
Set @Cnt2 = @Cnt2+1
END


Set @NumSymbStr2=1
Set @Cnt2=0

While ((@Cnt2+@LenStr)<=LEN(@Str1))
BEGIN

Set @SubStr = '%'+SUBSTRING(@Str1,@NumSymbStr2,@LenStr)+'%'
if (PATINDEX(@SubStr, @Str2)<>0)
begin
Set @SCountEq=@SCountEq+1
end

Set @SCountVar=@SCountVar+1
Set @NumSymbStr2=@NumSymbStr2+1
Set @Cnt2 = @Cnt2+1
END

Set @LenStr=@LEnStr+1
END

end
if @SCountVar=0
SET @Res=0
Else
BEGIN
SET @Res=Convert(Numeric (10,5),@SCountEq)/Convert(Numeric (10,5),@SCountVar)
END

RETURN @Res
END


Использование этой функции (на примере прямого запроса к справочнику ФизЛица для 1С:ТиС 7.7): в выборку попадут все физлица, у которых релевантность выше 0.8

DECLARE @FIO varchar(250)

Set @FIO = 'Иванов Петр'

SELECT
Спр.Code as [ФизЛицоКод],
Спр.ID as [ФизЛицо],
Спр.DESCR as [ФИО],
dbo.fn_FuzzyCompareString(dbo.fn_FIO(Спр.DESCR),@FIO,3) As [Релевантность]
FROM
SC503 as Спр (nolock)
where
ISMARK = 0
and
ISFOLDER = 2
and
dbo.fn_FuzzyCompareString(dbo.fn_FIO(Спр.DESCR),@FIO,3)>=0.8
GO

Наверх
 

Как сохранить поле BLOB (image) как файл на диск?
 

Наиболее эффективно это можно сделать с помощью объектов OLE Automation , работа с которыми осуществляется при помощи:
sp_OACreate, sp_OAGetProperty, sp_OASetProperty, sp_OAMethod, sp_OAGetErrorInfo, sp_OADestroy (подробное описание есть в BOL).
Рабочий пример процедуры (была написана для сохранения zip-архивов, хранящихся в базе):

CREATE PROCEDURE dbo.SaveRequestDataAsFile (
@FileName varchar(1024) --имя файла
,@FilePath varchar(1024) --путь файла
,@ReqID --некое условие на таблицу
)
AS
BEGIN

DECLARE
@Stream integer,
@Buffer varbinary(4096),
@Size integer,
@Pos integer,
@BufSize integer,
@FileNameLocal varchar(1024),
@HR integer

if RIGHT(@FilePath, 1)<>'\' begin set @FilePath=@FilePath+'\' end

set @FileNameLocal = @FilePath + @FileName

SET @BufSize = 4096

EXEC @HR = sp_OACreate 'ADODB.Stream',@Stream OUT
if @HR<>0
begin
--обработка ошибки создания объекта
EXEC [dbo].[sp_displayoaerrorinfo] @Stream ,@HR
end

EXEC @HR = sp_OASetProperty @Stream,'Type',1 -- binary
EXEC @HR = sp_OASetProperty @Stream,'Mode',3 -- write|read
EXEC @HR = sp_OAMethod @Stream,'Open'

select
@Size = DATALENGTH(SrvRequests.RequestData)
FROM SrvRequests WHERE SrvRequests.RequestID = @ReqID

Set @Pos=0

WHILE @Pos < @Size BEGIN
SET @BufSize = CASE WHEN @Size - @Pos < 4096 THEN @Size - @Pos ELSE 4096 END

select @Buffer = substring(SrvRequests.RequestData ,@Pos+1, @BufSize)
from SrvRequests where SrvRequests.RequestID = @ReqID

EXEC @HR = sp_OAMethod @Stream, 'Write', NULL, @Buffer

SET @Pos = @Pos + @BufSize
END

EXEC @HR = sp_OAMethod @Stream,'SaveToFile',null, @FileNameLocal,2
EXEC @HR = sp_OAMethod @Stream,'Close'
EXEC @HR = sp_OADestroy @Stream
END


Рекомендуется создать еще пару процедур для внятного описания ошибок в случае их возникновения
----------------------------------------------------------------------
CREATE PROCEDURE sp_hexadecimal
@binvalue varbinary(255),
@hexvalue varchar(255) OUTPUT
AS
DECLARE @charvalue varchar(255)
DECLARE @i int
DECLARE @length int
DECLARE @hexstring char(16)
SELECT @charvalue = '0x'
SELECT @i = 1
SELECT @length = DATALENGTH(@binvalue)
SELECT @hexstring = '0123456789abcdef'
WHILE (@i <= @length)
BEGIN
DECLARE @tempint int
DECLARE @firstint int
DECLARE @secondint int
SELECT @tempint = CONVERT(int, SUBSTRING(@binvalue,@i,1))
SELECT @firstint = FLOOR(@tempint/16)
SELECT @secondint = @tempint - (@firstint*16)
SELECT @charvalue = @charvalue +
SUBSTRING(@hexstring, @firstint+1, 1) +
SUBSTRING(@hexstring, @secondint+1, 1)
SELECT @i = @i + 1
END
----------------------------------------------------------------------
CREATE PROCEDURE sp_displayoaerrorinfo
@object int,
@hresult int
AS
DECLARE @output varchar(255)
DECLARE @hrhex char(10)
DECLARE @hr int
DECLARE @source varchar(255)
DECLARE @description varchar(255)
PRINT 'OLE Automation Error Information'
EXEC sp_hexadecimal @hresult, @hrhex OUT
SELECT @output = ' HRESULT: ' + @hrhex
PRINT @output
EXEC @hr = sp_OAGetErrorInfo @object, @source OUT, @description OUT
IF @hr = 0
BEGIN
SELECT @output = ' Source: ' + @source
PRINT @output
SELECT @output = ' Description: ' + @description
PRINT @output
END
ELSE
BEGIN
PRINT ' sp_OAGetErrorInfo failed.'
RETURN
END
 

Наверх
 

Почему не создается объект по sp_OACreate ?
 

Причин может быть несколько:
1) библиотека не зарегистрирована. Для исправлениея проблемы используйте regsvr32
Примеры:
    содержимое bat-файла для регистрации библиотеки:
    regsvr32 "%CD%\MySuperPuperFunc.DLL"
    или
    rundll32 "%CD%\MySuperPuperFunc.DLL", DllRegisterServer
2) достаточно экзотическая проблема, которая все же имеет место быть: библиотека скомпилирована для платформы x86, а вызывается с платформы x64.
В описаниях сказано, что MS SQL Server x64 НЕ УМЕЕТ делать x86 ориентированные вызовы, ТОЛЬКО x64. Решение проблемы может быть следующим:
    а) перекомпилировать DLL под x64 или написать обертку
    б) попытаться сконфигурировать DLL при помощи dcomcnfg.exe в полноценный COM+
    в) попытаться изменить соответствующие ветви реестра, согласующие 32-х и 64-х битные процессы     

    (HKCR\Wow6432Node\AppID\)
Эта тема активно обсуждалась на www.rsdn.ru forum.sources.ru www.sources.ru
(PS Лично мне так и не удалось заставить работать корректно RARUSLIB.DLL под SQL 2005 x64 на Win2003 Server R2)
 

Наверх

Hosted by uCoz