Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

получение BLOBField в Потоке. [D7, MSSQL]


Страницы:   1 2

ShiFT ©   (2005-11-22 12:56:00) 

работаю с 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;
...


С уважением.


Johnmen   (2005-11-24 16:39:00) [1]

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


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

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


clickmaker   (2005-11-22 15:33:00) [3]


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

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


ANB   (2005-11-22 15:28:00) [4]


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

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


Digitman   (2005-11-22 15:26:00) [5]


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


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

см. TComponet.Owner


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


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


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

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


Digitman   (2005-11-22 14:56:00) [7]


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


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


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


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

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


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

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

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

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

непонимаю.

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


clickmaker   (2005-11-22 14:35:00) [10]


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

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


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

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

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

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

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


evvcom   (2005-11-22 14:29:00) [12]


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

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


clickmaker   (2005-11-22 14:25:00) [13]


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

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


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

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

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


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


> ShiFT   (22.11.05 13:37) [6]

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


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


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

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


clickmaker   (2005-11-22 13:35:00) [17]


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

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


Ega23   (2005-11-22 13:34:00) [18]


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


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

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


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

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

2sniknik

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


sniknik   (2005-11-22 13:22:00) [20]

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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо