![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
получение BLOBField в Потоке. [D7, MSSQL]
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 в потоках.