![]() |
![]() |
|
Сохранение файла из сторонней SQL базы | ☑ | ||
---|---|---|---|---|
0
peal
07.06.17
✎
11:19
|
Доброго дня, подскажите кто сталкивался.
В базе SQL хранятся файлы, тип колонки varbinary(max) пробую выгрузить из 1С в файл: Команда.CommandText = "select CuratorDB.dbo.FileData.FileName,CuratorDB.dbo.FileData.Content from CuratorDB.dbo.FileData where Oid='"+ФайлМассив+"'"; RecordSet = Команда.Execute(); Stream=Новый COMОбъект("ADODB.Stream"); Stream.Type=1; Stream.Mode=3; RecordSet.MoveFirst(); Пока Не RecordSet.EOF() Цикл Stream.Open(); Stream.Position = 0; НаименованиеФайла = RecordSet.Fields.Item("FileName").Value; Контент = RecordSet.Fields.Item("Content").Value; ИмяФайла = Каталог+"1.pdf"; Сообщить(ИмяФайла); Stream.Write(Контент); Stream.SaveToFile(ИмяФайла,2); Stream.Close(); RecordSet.MoveNext(); КонецЦикла; в контент попадают данные типа comsafearray, а при Stream.SaveToFile(ИмяФайла,2); появляется ошибка Ошибка при вызове метода контекста (SaveToFile): Произошла исключительная ситуация (ADODB.Stream): Не удается записать файл. |
|||
1
Неверный Параметр И
07.06.17
✎
11:21
|
ИмяФайла куда указывает?
|
|||
2
peal
07.06.17
✎
11:27
|
C:\Users\petrunin_av\Desktop\1.pdf
|
|||
3
Неверный Параметр И
07.06.17
✎
11:29
|
Доступ туда у пользователя ОС, который выполняет код, есть? Например, у сервера, на котором все работает.
|
|||
4
Serg_1960
07.06.17
✎
11:30
|
(0) А если сделать так:
ИмяФайла = ПолучитьИмяВременногоФайла(); |
|||
5
peal
07.06.17
✎
11:32
|
(4) так тоже пробовал
C:\Users\USR1CV83\AppData\Local\Temp\1.pdf но, у меня такого каталога нет |
|||
6
peal
07.06.17
✎
11:32
|
(3) у пользователя USR1CV83 ?
|
|||
7
Неверный Параметр И
07.06.17
✎
11:33
|
(5) Ну вот. А у сервера нет C:\Users\petrunin_av\Desktop
Смекаешь? |
|||
8
Адинэснег
07.06.17
✎
11:34
|
(5) :-D
|
|||
9
peal
07.06.17
✎
11:35
|
(7) тоже закрались такие подозрения, спасип
|
|||
10
Адинэснег
07.06.17
✎
11:35
|
#Если Сервер Тогда
Сообщить("Сервер, ты где?"); #КонецЕсли |
|||
11
Serg_1960
07.06.17
✎
11:36
|
Хнык, хнык... я тоже хочу "Спасибо!" :(
:) |
|||
12
peal
07.06.17
✎
11:38
|
(11) И тебе Спасип
|
|||
13
Serg_1960
07.06.17
✎
11:39
|
Мне, так кажется, что нужно писать во временный файл и копировать его "к себе" по сети. Так, по крайней мере, будешь всегда знать где именно проблема.
|
|||
14
peal
07.06.17
✎
11:40
|
(13) пробовал, он вроде так пишет, но потом не понятно, где файл. Такой папки нет
|
|||
15
Serg_1960
07.06.17
✎
11:42
|
А не всё ли равно где она есть? В смысле видна/доступна юзверу. Сервер пишет ну и ладно :)
|
|||
16
peal
07.06.17
✎
11:50
|
(15) в принципе все равно, да, проверил, пишет на серваке во временную папку... а дальше сервака доступа нивкуда нет
|
|||
17
Serg_1960
07.06.17
✎
12:11
|
Что совсем нет каталогов с общим доступом у сервера и клиента? Хмм... бывает, не повезло. Может быть тогда серверный файл есть смысл "с сервера" передать "на клиента" внутри программы через хранилище, например?
|
|||
18
peal
07.06.17
✎
12:25
|
Другая теперь проблема, файлы получаются битые
|
|||
19
Адинэснег
07.06.17
✎
12:27
|
а одинэс же с ДД работает сейчас, ADODB.Stream может лишний?
|
|||
20
peal
07.06.17
✎
13:27
|
(19) ДД есть, но вот из SQL идет массив байтов
|
|||
21
peal
07.06.17
✎
17:05
|
Апну, кто-нить сталкивался?
глазками пробежался по файлу, сравнил в блокноте, вроде одинаковые, но если из SQL выгружаю, то они нормальные, открываются, если я программно выгружаю, они не открываются, пишет поврежденный файл |
|||
22
peal
08.06.17
✎
09:45
|
Сверил 2 файла, получаются разные сделал Контент.Выгрузить().Количество() получилось 98801.
Выгрузил из софта файл, загрузил в поток, проверил, получилось 100 238. Кто - нить сталкивался? Не представляю куда теперь копать. |
|||
23
МихаилМ
08.06.17
✎
09:51
|
(22)
либо сравните файлы и отрезайте лишнее либо либо найдите рабочий код раз не умеет работать с документацией |
|||
24
peal
08.06.17
✎
09:55
|
(23) Из запроса получается меньше файл. Была бы документация
|
|||
25
МихаилМ
08.06.17
✎
09:58
|
это понятно что файл меньше и к нему что-то дописано
кстати почему Stream.Mode=3; ? |
|||
26
peal
08.06.17
✎
10:05
|
чтение и запись
|
|||
27
peal
08.06.17
✎
10:19
|
(25) Убрал Mode Вообще, ничего не изменилось, Запрос возвращает так.
|
|||
28
Неверный Параметр И
08.06.17
✎
10:20
|
(22) Выбери ещё DATALENGTH(Content)
Если получишь 98801, то поздравляю, разработчики софта, в котором ты ковыряется, люди грамотные и сжимают файлы при хранении. |
|||
29
vde69
модератор
08.06.17
✎
10:23
|
||||
30
Неверный Параметр И
08.06.17
✎
10:23
|
(23) Отрезать лишнее, чтобы файл увеличился... Батенька, да вы философ. Что вы там писали про чтение?
|
|||
31
peal
08.06.17
✎
10:29
|
(28) и что теперь делать? да, получилось 98801
|
|||
32
Неверный Параметр И
08.06.17
✎
10:34
|
(31)
- Обратиться к разработчикам софта - Попытаться угадать метод сжатия (там скорей всего какой-нибудь zip без заголовка) - Смириться (: |
|||
33
peal
08.06.17
✎
10:36
|
(29) разовая работа, выгрузка документов из стороннего софта в документооборот
|
|||
34
peal
08.06.17
✎
10:39
|
(32)
Спасибо, попробую поискать 2 вариант. Первый - разругались с разработчиками... просто проигнорируют Третий , это если первый откажет |
|||
35
Неверный Параметр И
08.06.17
✎
10:45
|
(34) Попробуй ещё понять на чем написан софт. Скорей всего использованы типовые библиотеки и можно набросать консольную утилиту которая распакует один файл в другой.
|
|||
36
peal
08.06.17
✎
11:16
|
zlib1 походу оно
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |