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

Проблема сохранения информации в Blob

Добавлено: 17 Июль 2008, 10:54
Stalker
Привет всем!
Народ отзовись, необходима помощь. Поиск по форуму не дал необходимых результатов.
Имеется:
С 63 Tx text контрол 13
При редактировании формы в поле Блоб (OLE объект)различными способами заводится информация (через загрузку doc, RTF файлов в основном). При первом добавлении записи информация сохраняется и просматривается коректно. Но после редактирования ее иногда вылетает серое окно. То есть информация исчезает и вместо нее в Тx Text контроле ничего не остается, хотя информация в других полях , в том числе и ID записи сохраняется. Окно имеет серый цвет. Причем данное окно может появится после однократного редактирования, а может проявится после 3-4 редактирований информации в поле, либо просто при открытии формы и закрытии ее без редактирования при нажатии на кнопку Ок.
При нажатии на кнопку Ок прописано стандартное сохранение записи в поле Блоб контрола Тх Техт типа
класcSafe(поле блоб)
Если кто сталкивался с подобным помогите. Тх Техт только осваиваю опыта пока нет.
С уважением Stalker

Re: Проблема сохранения информации в Blob

Добавлено: 17 Июль 2008, 11:42
Yufil
Ты пользуешься классом или ручками делаешь?

Правильно делать так
Сохранение:
Blob{Prop:Size}=0
Blob{Prop:Handle}=TextControl{Prop:Blob}

Восстановление
TextControl{Prop:Blob}=Loc:Blob{Prop:Handle}

Вроде выкладывал на файлохранилище класс и шаблон... Если нет - пиши на yufil@mail.ru

Re: Проблема сохранения информации в Blob

Добавлено: 17 Июль 2008, 18:43
Igor
Может быть при сохранении формы на рабочей станции не установлен TX Control?
(P.S. У меня такое бывает. Это полная ... )

Re: Проблема сохранения информации в Blob

Добавлено: 18 Июль 2008, 1:03
Igor Vesnin
Igor писал(а):Может быть при сохранении формы на рабочей станции не установлен TX Control?
(P.S. У меня такое бывает. Это полная ... )
Есть простой способ обхождение этого.
При открытии ставить флажок в 0, скажем FlagChange=0
По событию Change устанавливаешь 1, FlagChange=1
Ну сохраняешься только когда 1.
В этом случае, и если не установлен контрол, и если пользователь только посмотрел ничего не сохраняется.

Re: Проблема сохранения информации в Blob

Добавлено: 19 Июль 2008, 13:31
Yufil
Я обычно в начале работы программы регистрю контрол заново

UnlockThread()
Call('TX4OLE12.OCX','DllUnRegisterServer')
Call('TX4OLE12.OCX','DllRegisterServer')
LockThread()

Занимает 2-3 секунды, зато гарантирует ( ну, скажем так, слегка повышает) уверенность в том, что контрол заренистрирован....

Re: Проблема сохранения информации в Blob

Добавлено: 25 Июль 2008, 21:48
Stalker
Всем, кто ответил большое спасибо. Просто был в диких джунглях, где нетом и не пахнет.

Первое .
Ты пользуешься классом или ручками делаешь?

ответ:
Дописываю по событию Ок (Accepted) сохранение формы такую строку
if поле1 = 1 !условие на сохранение в блоб
TxClass.SaveBlob(поле блоб)
end

поле1 заполняется при первом добавлении значением 1 (short)
в дальнейшем оно не редактируется имеет значение 1 , а частично редактируется блоб поле

Второе!
Правильно делать так
Сохранение:
Blob{Prop:Size}=0
Blob{Prop:Handle}=TextControl{Prop:Blob}

Восстановление
TextControl{Prop:Blob}=Loc:Blob{Prop:Handle}

С этим проверю, примерно так делаю когда копирую информацию в промежуточный файл для копиррования учебников, там информация вся сохраняется коректно.
примерно так
if поле1 =1
Get(kat_bak,Kat1:Key_katalog)
blob1{PROP:HANDLE}=blob2{PROP:HANDLE}
if errorcode()=80
MESSAGE('ОШИБКА БЛОБ')
BREAK
END
blob1{PROP:SIZE}=blob2{PROP:SIZE}
END !if поле1 =1

ТРЕТЬЕ:
Может быть при сохранении формы на рабочей станции не установлен TX Control?
(P.S. У меня такое бывает. Это полная ... )

Вероятность почти нулевая , так как другие записи просматриваются, и работаю на одном компе.Хотя некоректное сохранение может и что то на определенное время и выбивает в Тх контроле, пока и не перейду к другой записи где ОСХ объкт (tx4ole13.ocx)как бы восстанавливается.Для просмотра используется MultiReltree объект, записи выводятся в виде дерева.

ЧЕТВЕРТОЕ:

Есть простой способ обхождение этого.
При открытии ставить флажок в 0, скажем FlagChange=0
По событию Change устанавливаешь 1, FlagChange=1
Ну сохраняешься только когда 1.
В этом случае, и если не установлен контрол, и если пользователь только посмотрел ничего не сохраняется.

Нужно проверить.


ПЯТОЕ:
Я обычно в начале работы программы регистрю контрол заново

UnlockThread()
Call('TX4OLE12.OCX','DllUnRegisterServer')
Call('TX4OLE12.OCX','DllRegisterServer')
LockThread()

Занимает 2-3 секунды, зато гарантирует ( ну, скажем так, слегка повышает) уверенность в том, что контрол заренистрирован....


Тоже надо поэкперементировать

ШЕСТОЕ.
Большое спасибо всем кто откликнулся. С уважением Stalker.

Re: Проблема сохранения информации в Blob

Добавлено: 28 Июль 2008, 10:51
Yufil
В Кларионе есть одна неприятная вещь. Дело в том, что при обновлении записи шаблон ABC проверяет - вдруг эта запись не изменялась и её не стоит перезаписывать. Причём блобы в эту проверку не входят. Поэтому если мы должны перезаписывать только блобполя, надо обновить что-то ещё. Обычно приходится добавлять в список полей дату-время последнего обновления...

Re: Проблема сохранения информации в Blob

Добавлено: 02 Август 2008, 11:55
Stalker
Спасибо Бальшой Гуру за помощь!

В Кларионе есть одна неприятная вещь. Дело в том, что при обновлении записи шаблон ABC проверяет - вдруг эта запись не изменялась и её не стоит перезаписывать. Причём блобы в эту проверку не входят. Поэтому если мы должны перезаписывать только блобполя, надо обновить что-то ещё. Обычно приходится добавлять в список полей дату-время последнего обновления...

В форму ввел поле , которое заполняется через датчик случайных чисел и меняется при открытии формы. В файле где было одно поле Блоб глюки прекратились.

В другом файле в записи имеется четыре поля Блоб, которые заполняются и редактируются .
Глюки уменьшились , но все же остались. Такое впечатление, что где-то имеется недоработка (может в классе) при сохранении и сжатии Блоб, если этих Блоб в записи несколько.

Stalker.

Re: Проблема сохранения информации в Blob

Добавлено: 06 Август 2008, 9:51
Yufil
1. Ну, я неоднократно сталкивался с неверной передачей в процедуру параметров *Blob. И с разрушением Blob-полей при выполнении Access:File.Open() - Access:File.Close() притом, что буфер записи не менялся.

2. Недавно натолкнулся на проблему (раньше всё работало) - при нулевой длине блоба конструкция
BlobField[0 : BlobField{Prop:Size}-1] начала давать сбои :(

3. Иметь 4 блоба в одной записи - я бы не рискнул, пожалуй, для TPS-файла это чересчур...

4. Класс и шаблоны в исходниках, всегда можно посмотреть, что там и где.