Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.01.22;
Скачать: [xml.tar.bz2];

Вниз

получение 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.042 c
1-1134651632
DN
2005-12-15 16:00
2006.01.22
Как загрузить картинку в Image из некоего URL


14-1135645270
Profi
2005-12-27 04:01
2006.01.22
Прошу оценить


2-1135830717
Yerlan Dossanov
2005-12-29 07:31
2006.01.22
Сокеты


1-1134722112
scorpio_md
2005-12-16 11:35
2006.01.22
Как закрыть EXCEL без запроса на сохранение


2-1136447864
Zhekson
2006-01-05 10:57
2006.01.22
Как сделать добавление недостающей части слова на подобие IE?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский