Проблема сохранения информации в Blob
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
-
- Активист
- Сообщения: 128
- Зарегистрирован: 01 Декабрь 2005, 20:47
- Откуда: Минск
- Поблагодарили: 1 раз
- Контактная информация:
Проблема сохранения информации в Blob
Привет всем!
Народ отзовись, необходима помощь. Поиск по форуму не дал необходимых результатов.
Имеется:
С 63 Tx text контрол 13
При редактировании формы в поле Блоб (OLE объект)различными способами заводится информация (через загрузку doc, RTF файлов в основном). При первом добавлении записи информация сохраняется и просматривается коректно. Но после редактирования ее иногда вылетает серое окно. То есть информация исчезает и вместо нее в Тx Text контроле ничего не остается, хотя информация в других полях , в том числе и ID записи сохраняется. Окно имеет серый цвет. Причем данное окно может появится после однократного редактирования, а может проявится после 3-4 редактирований информации в поле, либо просто при открытии формы и закрытии ее без редактирования при нажатии на кнопку Ок.
При нажатии на кнопку Ок прописано стандартное сохранение записи в поле Блоб контрола Тх Техт типа
класcSafe(поле блоб)
Если кто сталкивался с подобным помогите. Тх Техт только осваиваю опыта пока нет.
С уважением Stalker
Народ отзовись, необходима помощь. Поиск по форуму не дал необходимых результатов.
Имеется:
С 63 Tx text контрол 13
При редактировании формы в поле Блоб (OLE объект)различными способами заводится информация (через загрузку doc, RTF файлов в основном). При первом добавлении записи информация сохраняется и просматривается коректно. Но после редактирования ее иногда вылетает серое окно. То есть информация исчезает и вместо нее в Тx Text контроле ничего не остается, хотя информация в других полях , в том числе и ID записи сохраняется. Окно имеет серый цвет. Причем данное окно может появится после однократного редактирования, а может проявится после 3-4 редактирований информации в поле, либо просто при открытии формы и закрытии ее без редактирования при нажатии на кнопку Ок.
При нажатии на кнопку Ок прописано стандартное сохранение записи в поле Блоб контрола Тх Техт типа
класcSafe(поле блоб)
Если кто сталкивался с подобным помогите. Тх Техт только осваиваю опыта пока нет.
С уважением Stalker
Re: Проблема сохранения информации в Blob
Ты пользуешься классом или ручками делаешь?
Правильно делать так
Сохранение:
Blob{Prop:Size}=0
Blob{Prop:Handle}=TextControl{Prop:Blob}
Восстановление
TextControl{Prop:Blob}=Loc:Blob{Prop:Handle}
Вроде выкладывал на файлохранилище класс и шаблон... Если нет - пиши на yufil@mail.ru
Правильно делать так
Сохранение:
Blob{Prop:Size}=0
Blob{Prop:Handle}=TextControl{Prop:Blob}
Восстановление
TextControl{Prop:Blob}=Loc:Blob{Prop:Handle}
Вроде выкладывал на файлохранилище класс и шаблон... Если нет - пиши на yufil@mail.ru
Re: Проблема сохранения информации в Blob
Может быть при сохранении формы на рабочей станции не установлен TX Control?
(P.S. У меня такое бывает. Это полная ... )
(P.S. У меня такое бывает. Это полная ... )
-
- Посетитель
- Сообщения: 49
- Зарегистрирован: 30 Декабрь 2005, 0:06
Re: Проблема сохранения информации в Blob
Есть простой способ обхождение этого.Igor писал(а):Может быть при сохранении формы на рабочей станции не установлен TX Control?
(P.S. У меня такое бывает. Это полная ... )
При открытии ставить флажок в 0, скажем FlagChange=0
По событию Change устанавливаешь 1, FlagChange=1
Ну сохраняешься только когда 1.
В этом случае, и если не установлен контрол, и если пользователь только посмотрел ничего не сохраняется.
Re: Проблема сохранения информации в Blob
Я обычно в начале работы программы регистрю контрол заново
UnlockThread()
Call('TX4OLE12.OCX','DllUnRegisterServer')
Call('TX4OLE12.OCX','DllRegisterServer')
LockThread()
Занимает 2-3 секунды, зато гарантирует ( ну, скажем так, слегка повышает) уверенность в том, что контрол заренистрирован....
UnlockThread()
Call('TX4OLE12.OCX','DllUnRegisterServer')
Call('TX4OLE12.OCX','DllRegisterServer')
LockThread()
Занимает 2-3 секунды, зато гарантирует ( ну, скажем так, слегка повышает) уверенность в том, что контрол заренистрирован....
-
- Активист
- Сообщения: 128
- Зарегистрирован: 01 Декабрь 2005, 20:47
- Откуда: Минск
- Поблагодарили: 1 раз
- Контактная информация:
Re: Проблема сохранения информации в Blob
Всем, кто ответил большое спасибо. Просто был в диких джунглях, где нетом и не пахнет.
Первое .
Ты пользуешься классом или ручками делаешь?
ответ:
Дописываю по событию Ок (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.
Первое .
Ты пользуешься классом или ручками делаешь?
ответ:
Дописываю по событию Ок (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
В Кларионе есть одна неприятная вещь. Дело в том, что при обновлении записи шаблон ABC проверяет - вдруг эта запись не изменялась и её не стоит перезаписывать. Причём блобы в эту проверку не входят. Поэтому если мы должны перезаписывать только блобполя, надо обновить что-то ещё. Обычно приходится добавлять в список полей дату-время последнего обновления...
-
- Активист
- Сообщения: 128
- Зарегистрирован: 01 Декабрь 2005, 20:47
- Откуда: Минск
- Поблагодарили: 1 раз
- Контактная информация:
Re: Проблема сохранения информации в Blob
Спасибо Бальшой Гуру за помощь!
В Кларионе есть одна неприятная вещь. Дело в том, что при обновлении записи шаблон ABC проверяет - вдруг эта запись не изменялась и её не стоит перезаписывать. Причём блобы в эту проверку не входят. Поэтому если мы должны перезаписывать только блобполя, надо обновить что-то ещё. Обычно приходится добавлять в список полей дату-время последнего обновления...
В форму ввел поле , которое заполняется через датчик случайных чисел и меняется при открытии формы. В файле где было одно поле Блоб глюки прекратились.
В другом файле в записи имеется четыре поля Блоб, которые заполняются и редактируются .
Глюки уменьшились , но все же остались. Такое впечатление, что где-то имеется недоработка (может в классе) при сохранении и сжатии Блоб, если этих Блоб в записи несколько.
Stalker.
В Кларионе есть одна неприятная вещь. Дело в том, что при обновлении записи шаблон ABC проверяет - вдруг эта запись не изменялась и её не стоит перезаписывать. Причём блобы в эту проверку не входят. Поэтому если мы должны перезаписывать только блобполя, надо обновить что-то ещё. Обычно приходится добавлять в список полей дату-время последнего обновления...
В форму ввел поле , которое заполняется через датчик случайных чисел и меняется при открытии формы. В файле где было одно поле Блоб глюки прекратились.
В другом файле в записи имеется четыре поля Блоб, которые заполняются и редактируются .
Глюки уменьшились , но все же остались. Такое впечатление, что где-то имеется недоработка (может в классе) при сохранении и сжатии Блоб, если этих Блоб в записи несколько.
Stalker.
Специализация - программы для образования, делопроизводство, складской учет
Re: Проблема сохранения информации в Blob
1. Ну, я неоднократно сталкивался с неверной передачей в процедуру параметров *Blob. И с разрушением Blob-полей при выполнении Access:File.Open() - Access:File.Close() притом, что буфер записи не менялся.
2. Недавно натолкнулся на проблему (раньше всё работало) - при нулевой длине блоба конструкция
BlobField[0 : BlobField{Prop:Size}-1] начала давать сбои
3. Иметь 4 блоба в одной записи - я бы не рискнул, пожалуй, для TPS-файла это чересчур...
4. Класс и шаблоны в исходниках, всегда можно посмотреть, что там и где.
2. Недавно натолкнулся на проблему (раньше всё работало) - при нулевой длине блоба конструкция
BlobField[0 : BlobField{Prop:Size}-1] начала давать сбои

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