|
Прямой доступ к файлам в БД (УТ 11)
|
|||
---|---|---|---|
#18+
Возникла казуальная задача - необходимо извлекать хранимые в БД 1С файлы (напрямую, без ком), определённым образом обрабатывать их и записывать обратно. Обратботка остаётся за скобками, проблема в извлечении-записи файлов. Хранятся они в блобе предположительно то ли со сжатием, то ли ещё как (шифрование и подписи отключено, проверял), потому что тупо из блоба в файл оно сохраняется некорректно. Предположительно какое-то примитивное сжатие, так как размер сохраняемого файла почти всегда меньше оригинала, но какой алгоритм? Или где в самой 1с копать как она сохраняет файл в свой "регистрсведений.присоединенныефайлы"? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2013, 11:20 |
|
Прямой доступ к файлам в БД (УТ 11)
|
|||
---|---|---|---|
#18+
Доставай в 1С, зачем напрямую то лезть? читай про объект "ДвоичныеДанные" в справке ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2013, 11:24 |
|
Прямой доступ к файлам в БД (УТ 11)
|
|||
---|---|---|---|
#18+
badboychikДоставай в 1С, зачем напрямую то лезть? читай про объект "ДвоичныеДанные" в справке Спасибо конечно за совет, но задача состоит _именно_ в прямом обращении к БД MS SQL и чтении-записи файлов оттуда-туда. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2013, 11:37 |
|
Прямой доступ к файлам в БД (УТ 11)
|
|||
---|---|---|---|
#18+
footballer, в Sql пишите запрос и достаете из базы данные которые вам нужны! ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2013, 11:50 |
|
Прямой доступ к файлам в БД (УТ 11)
|
|||
---|---|---|---|
#18+
этож нарушение лицензии, на минуточку ) Чем обосновано прямое обращение к скулю? Обычно задачу ставят - решить такую то проблему. А каким способом решить, не должно быть принципиальным, главное быстро и не через Ж А вообще 1Сный тип "ХранилищеЗначения" в скуле соответствует типу IMAGE ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2013, 11:50 |
|
Прямой доступ к файлам в БД (УТ 11)
|
|||
---|---|---|---|
#18+
Титовfootballer, в Sql пишите запрос и достаете из базы данные которые вам нужны! Внезапно, но именно так и делаю. Проблема в том, что данные в файл сохраняются некорректно. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2013, 11:56 |
|
Прямой доступ к файлам в БД (УТ 11)
|
|||
---|---|---|---|
#18+
footballerТитовfootballer, в Sql пишите запрос и достаете из базы данные которые вам нужны! Внезапно, но именно так и делаю. Проблема в том, что данные в файл сохраняются некорректно. извлекаете не правильно ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2013, 11:57 |
|
Прямой доступ к файлам в БД (УТ 11)
|
|||
---|---|---|---|
#18+
footballerТитовfootballer, в Sql пишите запрос и достаете из базы данные которые вам нужны! Внезапно, но именно так и делаю. Проблема в том, что данные в файл сохраняются некорректно. Это отдельные два вопроса) badboychikА вообще 1Сный тип "ХранилищеЗначения" в скуле соответствует типу IMAGE покурю в этом направлении. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2013, 11:59 |
|
Прямой доступ к файлам в БД (УТ 11)
|
|||
---|---|---|---|
#18+
Титовfootballerпропущено... Внезапно, но именно так и делаю. Проблема в том, что данные в файл сохраняются некорректно. извлекаете не правильно И как же извлекать правильно? Только можно без общих слов, а с конкретикой? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2013, 12:00 |
|
Прямой доступ к файлам в БД (УТ 11)
|
|||
---|---|---|---|
#18+
footballer, при извлечении должно быть все просто примерно так я делал в Оракле Код: sql 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2013, 12:04 |
|
Прямой доступ к файлам в БД (УТ 11)
|
|||
---|---|---|---|
#18+
footballer, а обрабатываете вы как и где? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2013, 12:05 |
|
Прямой доступ к файлам в БД (УТ 11)
|
|||
---|---|---|---|
#18+
Титовfootballer, а обрабатываете вы как и где? в дельфи (хотя это и не принципиально) через ado запрос. Стандартный TBlobField().SaveToFile(), как и прочие варианты через стримы выдают совершенно идентичные друг-другу результаты, отличающиеся от исходника (откуда, собственно, мысль про сжатие и родилась, к тому же из dbo.files, к примеру, таким образом всё прекрасно извлекается). ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2013, 12:39 |
|
Прямой доступ к файлам в БД (УТ 11)
|
|||
---|---|---|---|
#18+
Да, во всех выгруженных файлах совершенно идентичный заголовок, возможно это не сжатие, а 1С при сохранении подставляет какую-то служебную информацию. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2013, 12:45 |
|
Прямой доступ к файлам в БД (УТ 11)
|
|||
---|---|---|---|
#18+
Я все равно не понимаю, зачем такой гемор, если в 1С можно вытащить и записать в файл одной строкой Код: vbnet 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2013, 13:42 |
|
Прямой доступ к файлам в БД (УТ 11)
|
|||
---|---|---|---|
#18+
badboychikЯ все равно не понимаю, зачем такой гемор, если в 1С можно вытащить и записать в файл одной строкой Код: vbnet 1. 2.
Мне видимо ещё не один раз придётся повторить, что это. требуется. сделать. без. участия. 1С. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2013, 13:52 |
|
Прямой доступ к файлам в БД (УТ 11)
|
|||
---|---|---|---|
#18+
footballer, Что платформа дописывает в blob при формировании ХранилищаЗначений - кто его знает, это надо исходники платформы, или человека из головной конторы из отдела разработки платформы, но поэкспериментировать можно, попробуй для записи подпихнуть пустой файл, либо файл в котором будет только 1-2 байта и посмотри что прочитаешь. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2013, 15:31 |
|
Прямой доступ к файлам в БД (УТ 11)
|
|||
---|---|---|---|
#18+
(в браузере отключена ява, не работают теги, админы поправьте плз) файлик в хранилище сохраняется в base64 ничего не добавялется пример рабочего кода: USE [DataExchange] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[getFileFromStorage] @_SimpleKey binary(16) --ID файлика ,@OutputDirectory varchar(1024) --каталог для временного сохранения файлов из SQL AS Begin print 'getFileFromStorage переданы параметры:' print @_SimpleKey print @OutputDirectory declare @Stream integer, @Buffer varbinary(4096), @Size integer, @Pos integer, @BufSize integer, @HR varbinary(4096), @FileName varchar(1024) SET @BufSize = 4096 --проверять инициализацию объекта Stream не будем --полагаем что объект ADODB.Stream работает безошибочно --:) иначе бы Windows не работала EXEC @HR = sp_OACreate 'ADODB.Stream',@Stream OUT 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(_Fld194), @FileName =@OutputDirectory+'\'+_Fld193 from _InfoReg191 where _SimpleKey = @_SimpleKey print 'размер создаваемого файла:' --режим тестирования print @Size --режим тестирования print 'имя файла:' --режим тестирования print @FileName --режим тестирования Set @Pos=0 WHILE @Pos < @Size BEGIN SET @BufSize = CASE WHEN @Size - @Pos < 4096 THEN @Size - @Pos ELSE 4096 END select @Buffer = substring(_Fld194 ,@Pos+1, @BufSize) from _InfoReg191 where _SimpleKey = @_SimpleKey EXEC @HR = sp_OAMethod @Stream, 'Write', NULL, @Buffer SET @Pos = @Pos + @BufSize END EXEC @HR = sp_OAMethod @Stream,'SaveToFile',null,@FileName,2 EXEC @HR = sp_OAMethod @Stream,'Close' EXEC @HR = sp_OADestroy @Stream --метод SaveToFile возвращает НЕ одназначно ответ - создали мы файл или нет --чтобы понять это, попробуем получить размер созданного нами файлика declare @hr_ int, @FSO int, @file int, @Size_Сreated int exec @hr_ = sp_oacreate 'Scripting.FileSystemObject', @FSO output exec @hr_ = sp_oamethod @FSO , 'GetFile', @file output, @FileName exec @hr_ = sp_oagetproperty @file, 'Size', @Size_Сreated output --exec @hr = sp_oadestroy @FSO print 'Размер созданного файла:' print @Size_Сreated --режим тестирования If isNull(@Size_Сreated,0) <> @Size Begin print 'ERROR: ошибка при создании файла: ' print @FileName Return 1 End print 'файл создан' --режим тестирования Return 0 END ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2013, 16:56 |
|
Прямой доступ к файлам в БД (УТ 11)
|
|||
---|---|---|---|
#18+
footballer, Файлы 1С-ка хранит в сжатом виде, вроде использует zlib, вытащенный из базы файл нужно будет разжимать. Мы файлы из 1С-ки получаем через веб-сервисы - даже на диск писать ничего не надо :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2013, 18:05 |
|
Прямой доступ к файлам в БД (УТ 11)
|
|||
---|---|---|---|
#18+
1с использует алгоритм сжатия DEFLATE System.IO.Compression.DeflateStream Вас спасет. например в виде clr сборки сдля скл сервер 2005 и выше ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2013, 10:49 |
|
Прямой доступ к файлам в БД (УТ 11)
|
|||
---|---|---|---|
#18+
"footballer" <nospam@sql.ru> сообщил(а) в новостях следующее:14486294@sql.ru... > Автор: footballer > badboychik > Я все равно не понимаю, зачем такой гемор, если в 1С можно > вытащить и записать в файл одной строкой > > //запросом отбираем нужную запись и потом.. > ЗаписьРегистраСведенийПрисоединенныеФайлы.ХранимыйФайл.Получить().Записать(ИмяФайлаНаДиске); > > > Мне видимо ещё не один раз придётся повторить, что это. требуется. > сделать. без. участия. 1С. > Тема Ответить Сообщение Тебе дельно говорят. Используй com из дельфи - это несколько строк - 5-6 от силы на дельфи. 1С при чем тут? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2013, 20:07 |
|
Прямой доступ к файлам в БД (УТ 11)
|
|||
---|---|---|---|
#18+
"footballer" <nospam@sql.ru> сообщил(а) в новостях следующее:14485521@sql.ru... > Автор: footballer > Да, во всех выгруженных файлах совершенно идентичный заголовок, > возможно это не сжатие, а 1С при сохранении подставляет какую-то служебную > информацию. > Тема Ответить Сообщение А зачем гадать? И как это будет изменяться от версии к версии платформы? Не беспокоят такие дела? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2013, 20:10 |
|
|
start [/forum/topic.php?fid=28&msg=38311631&tid=1519777]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
32ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 351ms |
total: | 483ms |
0 / 0 |