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

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

Ошибка при вызове CreateBlobStream [D7, XP]


Страницы:   1 2

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 должен Пушкин?


Страницы:   1 2

Наверх

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