Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема SQL_LONGVARBINARY и ДобПараметр(1,19,... (число прочтений - 2930 )
Kapet
Senior Member
****
Отсутствует


Ламер - вансист

Сообщений: 262
Местоположение: Ukraine, Kyiv
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
SQL_LONGVARBINARY и ДобПараметр(1,19,...
26. Февраля 2007 :: 08:51
Печать  
Хочу загнать файлы изображений товара (jpg) в отдельную SQL базу. По молодости делаю так как ниже, и ессно прёт ошибка работы с типом данных image.
Подскажите, плз, как сделать правильно?
Код
Выбрать все
Var _rs;
//*******************************************
Процедура Сформировать()
	Перем ИмяФайла,а,б,в,г,д,е;
	ТекстЗапроса="
	|declare @souz char(8)
	|declare @ima image
	|set @souz = ?
	|set @ima  = ?
	|INSERT INTO dbpictures.dbo.tImages (souzcode, imagetov)
	|VALUES (@souz, @ima)";
	_rs.Prepare(ТекстЗапроса);
	_rs.AddParam(1,14,8,0);
	_rs.AddParam(1,19,0,0);
	ФС.УстТекКаталог(глКаталогКартинок);
	ТекФайл=ФС.НайтиПервыйФайл("*.jpg");
	Пока ТекФайл<>"" Цикл
		ФС.АтрибутыФайла(ТекФайл,а,б,в,г,д,е);
		ИмяФайла=Лев(е,8);
		Сообщить(ИмяФайла);
		_rs.SetParam(1,ИмяФайла);
		_rs.SetParam(2,ТекФайл);
		if _rs.execute()=0 Тогда
			message(_rs.GetLastError());
			Прервать;
		endif;
		ТекФайл=ФС.НайтиСледующийФайл();
	КонецЦикла;
КонецПроцедуры
//-----
_rs=createobject("ODBCRecordset");
_rs.Отладка(1); 


где скуль-база dbpictures состоит из единственной таблицы tImages и всё создается так:
Код
Выбрать все
Var _rs;
//*******************************************
Процедура Сформировать()
	NameOfDB="dbpictures";
	BeginTransaction();
	//****************************************
	if _rs.execute("
	|create database "+NameOfDB+" on primary
	|(name = "+NameOfDB+"_Data,
	|filename = '"+ibdir()+NameOfDB+".mdf',
	|size = 1MB,
	|maxsize = 200MB,
	|filegrowth = 10%)
	|
	|log on
	|(name = "+NameOfDB+"_Log,
	|filename = '"+ibdir()+NameOfDB+".ldf',
	|size = 512KB,
	|maxsize = 200MB,
	|filegrowth = 10%)
	|")=0 then
		message("Ошибка создания базы данных рисунков "+NameOfDB+"!","!!!");
		message(_rs.GetLastError());
		RollBackTransaction();
		Return;
	endif;
	//***************************************
	NameOfTable="tImages";
	if _rs.execute("
	|if exists (select * from "+NameOfDB+".dbo.sysobjects
	|   where  name = '"+NameOfTable+"' and type = 'U')
    |begin drop table "+NameOfDB+".dbo."+NameOfTable+" end
	|")=0 then
		message("Ошибка удаления таблицы "+NameOfTable+"!","!!!");
		message(_rs.GetLastError());
		RollBackTransaction();
		Return;
	endif;
	if _rs.execute("
	|create table "+NameOfDB+".dbo."+NameOfTable+" (
	|id int not null identity(1,1),
	|souzcode char(8) not null,
	|imagetov image not null)
	|")=0 then
		message("Ошибка создания таблицы данных рисунков "+NameOfDB+"!","!!!");
		message(_rs.GetLastError());
		RollBackTransaction();
		Return;
	endif;
	if _rs.execute("
	|CREATE UNIQUE CLUSTERED INDEX souzcode_index
	|ON "+NameOfDB+".dbo."+NameOfTable+"
	|(souzcode)
	|")=0 then
		message("Ошибка создания индекса таблицы данных рисунков "+NameOfDB+"!","!!!");
		message(_rs.GetLastError());
		RollBackTransaction();
		Return;
	endif;
	CommitTransaction();
	Message("Создание базы данных рисунков "+NameOfDB+"завершено !",".");
КонецПроцедуры
//-----
_rs=createobject("ODBCRecordset"); 

  
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: SQL_LONGVARBINARY и ДобПараметр(1,19,...
Ответ #1 - 26. Февраля 2007 :: 09:15
Печать  
  

1&&2&&3
Наверх
 
IP записан
 
Kapet
Senior Member
****
Отсутствует


Ламер - вансист

Сообщений: 262
Местоположение: Ukraine, Kyiv
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: SQL_LONGVARBINARY и ДобПараметр(1,19,...
Ответ #2 - 26. Февраля 2007 :: 09:45
Печать  
Спасибо!

Подскажите еще:
Конечно, размещение SQL-базы в каталоге базы 1С - это было не серьезно. Хотелось бы запросом получить расположение каталога по умолчанию для новых баз, переназначенное в "SQL Server properties - Database settings - Default data directory, Default log directory". Перелопатил как мог хелп по скулю и два талмуда, - не нашел. Может окажите любезность и подскажите ламеру?
  
Наверх
ICQ  
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: SQL_LONGVARBINARY и ДобПараметр(1,19,...
Ответ #3 - 26. Февраля 2007 :: 10:11
Печать  
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Kapet
Senior Member
****
Отсутствует


Ламер - вансист

Сообщений: 262
Местоположение: Ukraine, Kyiv
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: SQL_LONGVARBINARY и ДобПараметр(1,19,...
Ответ #4 - 26. Февраля 2007 :: 10:57
Печать  
berezdetsky писал(а) 26. Февраля 2007 :: 10:11:


Спасибо большое! Действительно всё просто решилось польз. функциями (рабочий черновой вариант):
Код
Выбрать все
Procedure GetSQLDataLogDir()
	if _rs.execute("if object_id('[dbo].[fn_sqlserverdatadir]') is not null
		|begin drop function [dbo].[fn_sqlserverdatadir] end")=0 then
		message(_rs.GetLastError());
	endif;
	if _rs.execute("if object_id('[dbo].[fn_sqlserverlogdir]') is not null
		|begin drop function [dbo].[fn_sqlserverlogdir] end")=0 then
		message(_rs.GetLastError());
	endif;
	if _rs.execute("create function dbo.fn_sqlserverdatadir()
		|returns nvarchar(4000)
		|as
		|begin
		|declare @rc  int,
		|@dir nvarchar(4000)
		|exec @rc = master.dbo.xp_instance_regread a', @dir output, 'no_output'
		|
		|if (@dir is null)
		|begin
		|exec @rc = master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE',N'Software\Microsoft\MSSQLServer\Setup',N'SQLDataRoot', @dir output, 'no_output'
		|select @dir = @dir + N'\Data'
		|end
		|return @dir
		|end
		|")=0 then
		message(_rs.GetLastError());
	endif;
	if _rs.execute("create function dbo.fn_sqlserverlogdir()
		|returns nvarchar(4000)
		|as
		|begin
		|declare @rc  int,
		|@dir nvarchar(4000)
		|exec @rc = master.dbo.xp_instance_regread ', @dir output, 'no_output'
		|
		|if (@dir is null)
		|begin
		|exec @rc = master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE',N'Software\Microsoft\MSSQLServer\Setup',N'SQLDataRoot', @dir output, 'no_output'
		|select @dir = @dir + N'\Data'
		|end
		|return @dir
		|end
		|")=0 then
		message(_rs.GetLastError());
	endif;
	PathOfSQLServerDataDir=_rs.executescalar("select rtrim(dbo.fn_sqlserverdatadir())");
	PathOfSQLServerLogDir =_rs.executescalar("select rtrim(dbo.fn_sqlserverlogdir())");
	message(PathOfSQLServerDataDir);
	message(PathOfSQLServerLogDir);
EndProcedure 

  
Наверх
ICQ  
IP записан
 
Kapet
Senior Member
****
Отсутствует


Ламер - вансист

Сообщений: 262
Местоположение: Ukraine, Kyiv
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: SQL_LONGVARBINARY и ДобПараметр(1,19,...
Ответ #5 - 26. Февраля 2007 :: 12:41
Печать  
Можно и без польз. функций, с помощью встроенного в 1С++ класса РаботаСРегистромWin / WorkAsRegisterWin:
Код
Выбрать все
var a;
	_sqlserver="";
	Regwin=CreateObject("WorkAsRegisterWin");
	If Regwin.ConnectRegistry(_sqlserver,"HKEY_LOCAL_MACHINE")=0 Then
		Message("Не удалось подключение к реестру "+_sqlserver);
		Return;
	EndIf;
	If ","KEY_QUERY_VALUE")=0 then
		Message("SQL сервер на станции "+_sqlserver+" не обнаружен!");
		Return;
	Else
		If Regwin.QueryValue("DefaultData",a)=1 then
			Message("Path of data dir: "+a);
		Else
			_QUERY_VALUE");
			Regwin.QueryValue("SQLDataRoot",a);
			Message("Path of data dir: "+a);
		EndIf;
		If Regwin.QueryValue("DefaultLog",a)=1 then
			Message("Path of log dir: "+a);
		Else
			_QUERY_VALUE");
			Regwin.QueryValue("SQLDataRoot",a);
			Message("Path of log dir: "+a);
		EndIf;
	Endif; 


К сожалению мне не удалось таким образом подключиться к реестру моего сервера в домене, хотя интерактивно в regedit с локальной машины к реестру сервера я подключаюсь без проблем, - админ однако. Это глюк, или тогда какая форма записи адреса сервера в домене для ConnectRegistry()?
  
Наверх
ICQ  
IP записан
 
Kapet
Senior Member
****
Отсутствует


Ламер - вансист

Сообщений: 262
Местоположение: Ukraine, Kyiv
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: SQL_LONGVARBINARY и ДобПараметр(1,19,...
Ответ #6 - 26. Февраля 2007 :: 17:35
Печать  
К сожалению мне не удалось таким образом подключиться к реестру моего сервера в домене, хотя интерактивно в regedit с локальной машины к реестру сервера я подключаюсь без проблем, - админ однако. Это глюк 1С++ 2.5, или тогда какая форма записи адреса сервера в домене для ConnectRegistry()?
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать