Страница 1 из 2

IMAGE-BLOB-IMAGE...

Добавлено: 25 Апрель 2015, 0:20
Aragorn
Всем большое здравствуйте.
Нержиданно всплыла старая проблема с гонянием блоб-полей из MSSQL в TPS и наоборот. А также запихивание и выгрузка на диск вордовских документов. Поиск по форуму показывает обсуждения пяти-шестилетней давности, а прогресс идет (ну или должен идти) вперед (по теории даже в кларике). Так вот. Кларион 8рка. MSSQL2008. Соединение вроде как через адо. Но не важно, можно наверное файл с любым драйвером обьявить.
Кларион без сторонних библиотек.
Надо:
1. Из скула регулярно выгружать табличку в тпс. В табличке поле Image.
2. Эту же табличку загружать обратно.
3. Офисные документы doc и xls загружать в Image поля на MSSQL и время от времени некоторые выгружать обратно на диск.
По быстрому все эти вопросы решить не удалось. До этого кларик со скулом не пользовали. Прошу отозваться, как дело обстоит с этими вещами в восьмерке, и как это сделать просто и эффективно?
Повторю, Кларик без сторонних библиотек. И не планируется.
Заранее спс.

IMAGE-BLOB-IMAGE...

Добавлено: 25 Апрель 2015, 1:09
Дед Пахом
а чего, prop:handle не работает?

IMAGE-BLOB-IMAGE...

Добавлено: 25 Апрель 2015, 1:20
Aragorn
И {prop:size}? неа, с полпинка не завелось. Скуловская табличка в словаре вообще как-то через ж.у отображена: вместо blob почему-то cstring на 4 мегабайта...

IMAGE-BLOB-IMAGE...

Добавлено: 25 Апрель 2015, 10:52
kreator
А в чём, собственно, затык? Image-Blob-Image гоняются через prop:ImageBlob, prop:ImageBits, prop:Handle. В хелпе раздел - "How to Store and Display a Graphic Image with a Memo or Blob Data Type". По-моему это в Clarion работает. Вот как документ в Image загнать? Такого делать не приходилось.

IMAGE-BLOB-IMAGE...

Добавлено: 25 Апрель 2015, 13:06
Дед Пахом
kreator писал(а): Вот как документ в Image загнать?
С какой-то версии в cwutil появились функции BlobToFile/FileToBlob.

IMAGE-BLOB-IMAGE...

Добавлено: 25 Апрель 2015, 14:09
Yufil
1. Опять свой класс CSTR рекламирую :)

S Cstr
...
S.LoadFromFile('File.doc')
S.SaveToBlob(Table:BlobField)

2. У Blob был флажок Binary. Он включен ?
3. В ABC классы настолько умные, что при изменении в файле ТОЛЬКО Blob-поля запись не считается изменившейся. В силу чего простой Update может быть тихо проигнорирован. Поле DateTime с текущим временем, изменяющимся при каждой перезаписи, вполне уместно...

IMAGE-BLOB-IMAGE...

Добавлено: 26 Апрель 2015, 3:18
Aragorn
Повторю, более детально проблема (если будет, конечно) будет изучена в понедельник. Пока хотелось бы, чтобы время зря не терять получить некий вектор деятельности. То есть, не понятно, почему image в ДСТ трансформировался в cstring. Это как-то связано с вышеупомянутой галочкой? И еще. Отображать задача пока не стоит, задача гонять из скула в тпс и наоборот. И документы тоже! В ТПСе файл читался тупо порциями и писался в блоб. Может и тут так?
Драйвер ADO. Если припрет, конечно, можно локально обьявить в проге нужную табличку с любым другим драйвером, лишь бы все туда-сюда гонялось. Только как коннект получать?

IMAGE-BLOB-IMAGE...

Добавлено: 27 Апрель 2015, 21:46
Aragorn
Как и ожидалось, возникли дебиловатые проблемы. Не исключаю, что из-за тупости автора данного сообщения. Но общие правила написания программы командой никто не отменял. Раз сказали АДО - значит, нАДО АДО.

Вопчем, сымпортировал таблицу в словарь. Выставил ей драйвер ADO (вместо MSSQL). Кстати. Возможно тут кроется ошибка, не знаю. Выбирал провайдера Microsoft SQL Server. Дальше порадовался, что Image таки стала BLOB. Хотя, естественно, вне Record. Но об этом позже. Далее скомпилил прогу, выдрал описание таблицы из clw? вставил к себе. Указываю {prop:owner}, {prop:name}. Открываю табличку

Open(Table)
if errorcode() <> 0 then
stop('ec = ' & errorcode())
end
stop(records(table))

Итог - открывает без ошибок, профайлер нифига не регистрит, записей ноль. А записей в таблице дофига, на самом-то деле!!!

Плюнул. Сменил драйвер на MSSQL. Дописал prop:loginprompt = false.
Повторил код с получением числа записей. И - о, чудо! - получил верное число. Но.

1. Через профайлер видно "левый" коннект к базе, помимо "легального" АДОшного;
2. Профайлер ловит какието фетчи, которые я не просил, но это фигня;
3. А надо-то цеплять через АДО!!!

Как быть. что не так? Если бы не Image, все работает на рекордсетах. А blob в рекорд не попадает. Вариант селектить имидж в длиннющий cstring не прокатывает, селектится какаято хрень. Может опять же по причине роста рук из другого места.

Люди, поможите если можете...

IMAGE-BLOB-IMAGE...

Добавлено: 27 Апрель 2015, 21:59
Дед Пахом
подозреваю, что ты один в Clarion через ADO работаешь. Может даже во всём мире...

IMAGE-BLOB-IMAGE...

Добавлено: 27 Апрель 2015, 22:07
Aragorn
Я тоже это подозреваю, но комплексовать по этому поводу не буду, ибо идиотизЬма не моя. Но! возможность есть, и шаблоны есть, и прочая кухня наличествует. С радостью бы не стал такой х.ней заниматься, но...

IMAGE-BLOB-IMAGE...

Добавлено: 27 Апрель 2015, 22:19
Игорь Столяров
Дед Пахом писал(а):подозреваю, что ты один в Clarion через ADO работаешь. Может даже во всём мире...
Тогда как минимум нас двое ... ;) давно делали задачу на еще C63 через ADO.
Нужно было выгребать и записывать данные из/в MS Access Database - до сих пор работает.
Но мы работали без драйвера, через CWADO
Кажется был какой-то пример работы с ADO (Source, без шаблонов), от которого и оттолкнулись ...

IMAGE-BLOB-IMAGE...

Добавлено: 27 Апрель 2015, 22:26
Дед Пахом
Для начала предлагаю в структуре файла ADO блоб описать не как BLOB вне RECORD, а как оч. длинную STRING (не CSTRING конечно) внутри RECORD.

IMAGE-BLOB-IMAGE...

Добавлено: 27 Апрель 2015, 23:38
Aragorn
Так... А дальше? Опять select from?
И я не понимаю, почему АДОшный драйвер не цепляет базу, просто вообще не обращается к ней. Через рекордсеты без вопросов - криэйтим, указываем коннект, связываем с полями или группой и делаем выборку. В этом случае в стринг выбирается какой-то огрызок из блоба, хрен знает что (извините). Поэтому хотелось через file добраться, как говорится, бЛоб в бЛоб. А не выходит!!!

IMAGE-BLOB-IMAGE...

Добавлено: 27 Апрель 2015, 23:52
Дед Пахом
Aragorn писал(а): какой-то огрызок из блоба
ну это понятно, ты ж сам сказал, что
Скуловская табличка в словаре вообще как-то через ж.у отображена: вместо blob почему-то cstring на 4 мегабайта...
вот на первом нуле и обрезает.

IMAGE-BLOB-IMAGE...

Добавлено: 28 Апрель 2015, 0:06
Aragorn
Т.е. имеет смысл обьявить в группе четырехмегабайтную строчку? не cstring, а string? и в блоб ее

blob[0 : len(clip(grp:string))] = grp:string???