![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ошибка при вызове CreateBlobStream [D7, XP]
prodex © (2011-04-17 20:35:00)Здравствуйте уважаемые Мастера. Проблема в следующем:
БД IB:
CREATE DOMAIN "NUM_TYPE" AS INTEGER;
CREATE DOMAIN "PACK_TYPE" AS BLOB SUB_TYPE 0 SEGMENT SIZE 80;
CREATE DOMAIN "WORD_TYPE" AS CHAR(2) CHARACTER SET WIN1251;
CREATE TABLE "TMP_PACK"
(
"NUM" "NUM_TYPE",
"MARK" "WORD_TYPE",
"PACK" "PACK_TYPE"
);
при записи BLOB-поля:
var
s : TStream;
DataBuf : TMemoryStream;
begin
IBTable1.Edit;
s:=IBTable1.CreateBlobStream(IBTable1.FieldByName('PACK'),bmWrite);
DataBuf.Position:=0;
s.CopyFrom(DataBuf,DataBuf.Size);
IBTable1.Post;
IBTable1.Transaction.Commit;
IBTable1.Open;
end;
после вызова CreateBlobStream выдает ошибку:
Access violation at address 004906C0 in module 'Project1.exe'. Read of address 04660000.
В чем может быть причина ошибки?
Медвежонок Пятачок (2011-04-17 21:15:00) [21]нету экземпляра поля pack.
Медвежонок Пятачок (2011-04-17 21:14:00) [22]строки перепутаны местами
prodex (2011-04-17 21:13:00) [23]Хорошо, вот:
procedure TForm1.Button1Click(Sender: TObject);
var
s : TStream;
begin
s:=IBTable1.CreateBlobStream(IBTable1.FieldByName('PACK'),bmWrite);
IBTable1.Edit;
DataBuf.Position:=0;
s.CopyFrom(DataBuf,DataBuf.Size);
IBTable1.Post;
IBTable1.Transaction.Commit;
IBTable1.Open;
end;
sniknik (2011-04-17 21:06:00) [24]> DataBuf создается и заполняется в FormCreate. Здесь написал его для того ...
а попробуй написать так, чтобы не нужно было объяснять где, что, откуда и зачем написал... вот так чтобы обсуждать именно НАПИСАННЫЙ здесь, а не ПРЕДПОЛАГАЕМЫЙ у тебя в голове код.
глядиш и ошибки понятнее будут.
sniknik (2011-04-17 21:03:00) [25]> А теперь еще раз, но по-русски.
врет. показывает не то что есть, но предлагает верить, что у него все правильно. откуда тогда ошибка... ну опять наверное Билл Гейтц виноват.
prodex (2011-04-17 21:02:00) [26]DataBuf создается и заполняется в FormCreate. Здесь написал его для того, чтоб Вы видели что это TMemoryStream. В реальности в этой процедуре DataBuf нет, он описан в свойствах формы.
Германн (2011-04-17 20:55:00) [27]
> DataBuf создается не в этой процедуре, я его здесь описал
> для его идентификации, как класса.
А теперь еще раз, но по-русски.
Юрий Зотов (2011-04-17 20:54:00) [28]
> prodex (17.04.11 20:48) [2]
> DataBuf создается не в этой процедуре
А где и когда он уничтожается? Похоже, что при входе в этот код он уже уничтожен.
prodex (2011-04-17 20:48:00) [29]Пушкин вряд ли бы его создал, он из гуманитариев. DataBuf создается не в этой процедуре, я его здесь описал для его идентификации, как класса.
Юрий Зотов (2011-04-17 20:39:00) [30]Создавать DataBuf должен Пушкин?