Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.01.22;
Скачать: CL | DM;

Вниз

получение BLOBField в Потоке.   Найти похожие ветки 

 
ShiFT   (2005-11-22 12:56) [0]

работаю с BDE.

вылезает ошибка invalid BLOB handle in record buffer.
изза чего такое может быть?

сам код.
type
 pActivitiesData= ^TActivitiesData;
 TActivitiesData= record
   SchemeID: integer;
   ActivityID: integer;
   blobdata: string;
 end;
...
var
 bf: TBlobField;
 p3: pActivitiesData;
...
 Form1.Query.SQL.Clear;
 Form1.Query.SQL.Text := GetActivitiesData;
 Form1.Query.Open;
 while not Form1.Query.Eof do begin
   new( p3);
   p3.SchemeID:= Form1.Query.Fields[0].AsInteger;
   p3.ActivityID:= Form1.Query.Fields[1].AsInteger;
   bf:= Form1.Query.Fields[2] as TBlobField; // после обращения к Form1.Query.Fields[2] вылезает ошибка и завершается приложение.
   p3.blobdata:= bf.Value;
   ActivitiesDataTable.Add( p3);
   Form1.Query.Next;
 end;
 Form1.Query.Close;
...


С уважением.


 
Desdechado ©   (2005-11-22 13:20) [1]

Query.Fields[2] as TBlobField
это преобразование типа, что вполне может привести к ошибке, если поле не то, что ты ожидаешь


 
sniknik ©   (2005-11-22 13:22) [2]

> Form1.Query.SQL.Clear;
> ....
это в потоке? ... переписывать, все, срочно, нафиг. лучше даже выкинуть все и заново начать писать.  а перед этим почитать пропотоки и про VCL в потоках.


 
ShiFT   (2005-11-22 13:29) [3]

2 Desdechado
сам sql запрос выглядит так.
SELECT SchemeID, ActivityID, blobdata FROM ActivitiesDataTable ORDER BY SchemeID, ActivityID
и там действитьльно тип Image в котором записан "многосторчный Текст"

2sniknik

это я знаю и понимаю.
А что ты можешь предложить.
Как мне обращатся к базе из Потока???


 
Ega23 ©   (2005-11-22 13:34) [4]


>  bf:= Form1.Query.Fields[2] as TBlobField;


bf:= TBlobField(Form1.Query.Fields[2]);

А вообще - изврат.


 
clickmaker ©   (2005-11-22 13:35) [5]


> Как мне обращатся к базе из Потока???

создать отдельный коннект


 
ShiFT   (2005-11-22 13:37) [6]


> создать отдельный коннект

тоесть?
поточнее если можно.


 
Плохиш ©   (2005-11-22 13:41) [7]


> ShiFT   (22.11.05 13:37) [6]

Справку по TBlobField читать не пробовал?


 
Johnmen ©   (2005-11-22 14:24) [8]

>там действитьльно тип Image в котором записан "многосторчный Текст"

А зачем в Image писать "многосторчный Текст" ? Для этого существует Text. И блобов никаких не надо...


 
clickmaker ©   (2005-11-22 14:25) [9]


> поточнее если можно

что поточнее? так же как ты в основном потоке коннектишься, так и в отдельном


 
evvcom ©   (2005-11-22 14:29) [10]


> поточнее если можно

есть такое понятие как "сессия"


 
ShiFT   (2005-11-22 14:31) [11]

> А зачем в Image писать "многосторчный Текст" ? Для этого
> существует Text. И блобов никаких не надо...

Это надо не у меня спрашивать. а у создателей программы документа оборота.
Мне приходится делть отчёт для Моего руководства, при том что нормального описания базы нет и приходится всё и вся искать самому и додумывать.

> так же как ты в основном потоке коннектишься, так и в отдельном
в основном потоке у меня компонент.
а все действия с ним идут в дочернем.

интересно будет лучше если я его(TDatabase и TQuery) перенесу в TDataModule?


 
clickmaker ©   (2005-11-22 14:35) [12]


> в основном потоке у меня компонент.
> а все действия с ним идут в дочернем

если так, то и компонент должен создаваться в дочернем. Либо коннект с базой устанавливаться в дочернем.
А TDataModule проблему потока не решит. Все надо руками делать


 
ShiFT   (2005-11-22 14:40) [13]

> А TDataModule проблему потока не решит. Все надо руками делать
тоесть нужно
 Database:= TDatabase.Create( nil); ? так писать.

и ещё вопрос. почемуто проверено несколько раз.
Сабжевая ошибка возникает если Field[x].Size = 0

но иногда она всётаки всё получает и ошибка не происходит.

непонимаю.

может есть какието опции у TDatabase или у TQuery которые могут за это отвечать


 
clickmaker ©   (2005-11-22 14:55) [14]


> Сабжевая ошибка возникает если Field[x].Size = 0

ну а че ты хотел? = 0, значит нет там ничего


 
Digitman ©   (2005-11-22 14:56) [15]


> тоесть нужно
>  Database:= TDatabase.Create( nil); ?


ты вообще понимаешь, что есть Owner компонента и для чего оно нужно ?


 
ShiFT   (2005-11-22 15:03) [16]

> ты вообще понимаешь, что есть Owner компонента и для чего оно нужно ?
видемо сммутно. а где про это можно почитать?
а как тогда создавать эти компоненты в потоке?
или как коннектится к базе из дочернего потока.


 
Digitman ©   (2005-11-22 15:26) [17]


> где про это можно почитать?


в стандартной справке

см. TComponet.Owner


> как тогда создавать эти компоненты в потоке?


если речь идет о TThread, то - в теле Execute()


 
ANB ©   (2005-11-22 15:28) [18]


> видемо сммутно. а где про это можно почитать?

Судя по доп.вопросам лучшем выходом будет все делать в основном потоке. Потом модернизируешь.


 
clickmaker ©   (2005-11-22 15:33) [19]


> а как тогда создавать эти компоненты в потоке?
> или как коннектится к базе из дочернего потока.

ДэйтаМодуль с компонентами. Убрать из Auto-create forms
в TThread.Execute создать экземпляр этого модуля
Дальше - все так же, как обычно


 
ShiFT   (2005-11-23 07:30) [20]

Спасибо всем.
По поводу BDE я плюнул и использую ADO
По поводу VCL использую [19]


 
Johnmen ©   (2005-11-24 16:39) [21]

http://www.ishodniki.ru/art/artshow.php?id=110&cat=1&show=delphi
Глава Причины перехода от BDE к ADO
второй пункт Была найдена интересная особенность поведения...



Страницы: 1 вся ветка

Текущий архив: 2006.01.22;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.037 c
14-1135353240
oldman
2005-12-23 18:54
2006.01.22
сами мы не местные... поможите, чем можете...


3-1132682236
tyo
2005-11-22 20:57
2006.01.22
ProgressBar во время ExecProc


2-1136371371
psa247
2006-01-04 13:42
2006.01.22
ListView !


4-1131921055
zaslavskiy
2005-11-14 01:30
2006.01.22
число записей процеса


14-1135848534
Игорь Шевченко
2005-12-29 12:28
2006.01.22
Как не надо программировать