Форум: "Базы";
Текущий архив: 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.043 c