Главная страница
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.044 c
11-1116963540
sormy
2005-05-24 23:39
2006.01.22
Сохранить все позиции ListBox a, а затем их вернуть как?


14-1135494365
Mozart
2005-12-25 10:06
2006.01.22
Лунный цикл


14-1135706486
Serg1981
2005-12-27 21:01
2006.01.22
Ограничения БД Access


2-1136477090
dera
2006-01-05 19:04
2006.01.22
Как поменять дату создания файла?


2-1136478903
Luk
2006-01-05 19:35
2006.01.22
Как перевест String в PanciChar