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

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

Ошибка при сохранении в blob [D7]


Geo ©   (2011-06-03 16:01:00) 

Добрый день друзья. Не могу никак понять, в чем ошибка

вот код

procedure TDiary_form.BitBtn1Click(Sender: TObject);
var
 bs: TStream;
 table1memo: TBlobField;
begin
 CreateUn('SELECT * FROM DIARY_SURVEY');
 bs := nil;
 with Login_form.ADOQuery1 do
   try
     open;
     //first;
     edit;     //stream:= ibquery1.CreateBlobStream(ibquery1.FieldByName('messagebody') as TBlobField, bmRead);
     bs := Login_form.ADOQuery1.CreateBlobStream(Login_form.ADOQuery1.FieldByName('MORE') as TBlobField, bmwrite);
     Richedit1.plaintext := false;
     Richedit1.Lines.Savetostream(bs);
     edit;
     post;
   finally
     bs.free;
     close;
   end;
end;


Ошибка на  post;

DataSet not edit or inset mode

Пробовал по-разному эту процедуру реализовать, все никак


Johnmen   (2011-06-03 23:24:00) [1]

Озорник, однако
http://www.sql.ru/forum/actualthread.aspx?tid=856341


sniknik   (2011-06-03 22:29:00) [2]

> надеюсь этот пост поможет еще кому-то)
надеюсь что нет...

насколько же все проще с датасетом... не нужно днями рыть ради элементарного... просто в хелп заглянуть и все, и где хочешь(/логичнее) там и post

var
 ms: TMemoryStream;
begin
 ms:= TMemoryStream.Create;
 try
   Image1.Picture.Bitmap.SaveToStream(ms);
   ADODataSet1.Edit;
   TBlobField(ADODataSet1.FieldByName('ImField')).LoadFromStream(ms);
   ADODataSet1.Post;
 finally
   ms.Free;
 end;
end;


Geo   (2011-06-03 21:21:00) [3]

Спасибо всем, кто пытался помочь, надеюсь этот пост поможет еще кому-то)
В начале очищаем переменные-а потом уже post


Geo   (2011-06-03 21:17:00) [4]

Потратил целый день, но нашел решение
procedure TDiary_form.Button2Click(Sender: TObject);

var
 blob: TStream;
 ms: TMemoryStream;
 begin
  AdoTable1.Edit;
 blob := AdoTable1.CreateBlobStream(AdoTable1.FieldByName('MORE'), bmWrite);
 try
   blob.Seek(0, soFromBeginning);
     ms:= TMemoryStream.Create;
     Richedit1.Lines.Savetostream(ms);
     ms.Position := 0;
   try
     blob.CopyFrom(ms, ms.Size);

   finally
     ms.Free
   end;
 finally
   blob.Free
 end;
  AdoTable1.Post;
end;


Перерыл кучу неработающих исходников


Geo   (2011-06-03 20:41:00) [5]

Но глобальная проблема также осталась..


Geo   (2011-06-03 20:22:00) [6]

ага, уже понял в чем была эта ошибка... спасибо


sniknik   (2011-06-03 20:09:00) [7]

позиция в конце?


Geo   (2011-06-03 19:31:00) [8]

Никто не подскажет, почему

ms:= TMemoryStream.Create;
Richedit1.Lines.SaveToStream(ms);
Richedit1.Lines.LoadFromStream(ms);


дает пустой Richedit1?


Geo   (2011-06-03 18:27:00) [9]

да, редактируется, но на всякий случай пробовал и режим AdoTable1.Insert. безразультатно.


clickmaker   (2011-06-03 18:10:00) [10]

Запись именно редактируется, а не Insert?


clickmaker   (2011-06-03 18:06:00) [11]

> одна из функций меняет режим доступа

так бессмысленно менять режим доступа уже после этого самого доступа


Geo   (2011-06-03 18:03:00) [12]

Это я думал, может быть одна из функций меняет режим доступа. Но в любом случае возникает эта ошибка.


clickmaker   (2011-06-03 17:54:00) [13]

а смысл 2-й раз AdoTable1.Edit вызывать?


Geo   (2011-06-03 17:45:00) [14]

Также если делать

begin

ms:= TMemoryStream.Create;
Richedit1.Lines.SaveToStream(ms);

AdoTable1.Edit;
bs:= AdoTable1.CreateBlobStream(AdoTable1.FieldByName('MORE') as TBlobField, bmwrite);
Richedit1.Lines.Savetostream(ms);
TBlobField(AdoTable1.FieldByName('MORE')).LoadFromStream(ms);
AdoTable1.Edit;
AdoTable1.Post;
bs.Free;
ms.Free;


та же ошибка AdoTable1: DataSet not edit or insert mode


Geo   (2011-06-03 16:42:00) [15]

Хм... нет, так не пойдет, нужно сохранить с форматированием, не подскажите как?


Geo   (2011-06-03 16:17:00) [16]

решил проблему сам, все оказалось проще, чем я думал
with Login_form.ADOQuery1 do
 begin
 edit;
 FieldByName('MORE').Value:=RichEdit1.Lines.Text;
 post;
 end

и все) а почему та ошибка появлялась, все равно интересно, при разработке пользовался вот этой статьей http://www.kansoftware.ru/?tid=3789

где исходный код (без моих изменений):
procedure TForm1.BtnPutClick(Sender: TObject);
var
 bs: TBlobStream;
begin
 bs := nil;
 with Table1 do
   try
     open;
     first;
     edit;
     bs := TBlobStream.Create(table1memo, bmwrite);
     Richedit1.plaintext := false;
     Richedit1.Lines.Savetostream(bs);
     post;
   finally
     bs.free;
     close;
   end;
end;


Наверх

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