Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2016.02.28;
Скачать: CL | DM;

Вниз

Ошибка при сохранении в blob   Найти похожие ветки 

 
Geo   (2011-06-03 16:01) [0]

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

вот код

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

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


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

решил проблему сам, все оказалось проще, чем я думал
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;


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

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


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

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

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


 
clickmaker ©   (2011-06-03 17:54) [4]

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


 
Geo   (2011-06-03 18:03) [5]

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


 
clickmaker ©   (2011-06-03 18:06) [6]

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

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


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

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


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

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


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

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

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


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


 
sniknik ©   (2011-06-03 20:09) [10]

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


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

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


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

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


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

Потратил целый день, но нашел решение
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 21:21) [14]

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


 
sniknik ©   (2011-06-03 22:29) [15]

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

насколько же все проще с датасетом... не нужно днями рыть ради элементарного... просто в хелп заглянуть и все, и где хочешь(/логичнее) там и 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;


 
Johnmen ©   (2011-06-03 23:24) [16]

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



Страницы: 1 вся ветка

Текущий архив: 2016.02.28;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.006 c
15-1434032074
Дмитрий С
2015-06-11 17:14
2016.02.28
Функция для продления жизни EEPROM


2-1408044492
Я__
2014-08-14 23:28
2016.02.28
Несколько окон WinAPI


15-1434293756
кгшзх
2015-06-14 17:55
2016.02.28
перепрошивка ресивера триколор


3-1307248399
nalapko
2011-06-05 08:33
2016.02.28
Запрос на поиск повторяющихся записей


2-1408100312
lewka_s
2014-08-15 14:58
2016.02.28
Изменение иконки (значка)