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