Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > проблема с ADO и BLOB


Автор: kross 23.1.2004, 07:37
Господа, вот у меня такая же ошибка выскакивает при попытке записать
через поток содержимое RichEdit в базу(MSSQL2000) в поле типа Image.

procedure TForm1.SpeedButton3Click(Sender: TObject);
var
bs: TADOBlobStream;
begin
bs:= Nil;
with ADOQuery1 Do
try
close;
open;
edit;
bs:= TADOBlobStream.Create( TBlobField(FieldByName('wordText')), bmwrite );
Richedit1.plaintext := false;
Richedit1.Lines.Savetostream(bs);
post;
finally
bs.free;
close;
end;
end;
на post выдает выдается сообщение ADOQuery:DataSet not in edit or insert mode.
Перерыл весь интернет, но... с ADO это первое знакомство и понемного приходит разочарование.
не дайте пропасть.
С уважением...



Автор: Cashey 23.1.2004, 11:28
Код
if Modified then
  Post;

Автор: Unregistered 23.1.2004, 11:43
Cashey
Это решает проблему ошибку(т.е. она не выскакивает) но записи в базу не происходит т.к.
база не в режиме редактирования и естественно IF есть false и команда post обходится.
Может где надо в настройках самого MSSQL пошариться?

Автор: Cashey 23.1.2004, 12:52
если база не буферизированная, то сохранение может происходить автоматически, поэтому метод пост применяется к уже сохраненой базе и генерится ошибка.

Автор: Serggggg 23.1.2004, 14:35
Знакомая проблема, только у меня не записывалось текстовое поле + я работал с Oracle. Как поведёт себя DataSet через ADO с MSSQL - точно сказать не могу.
Я делал так:
1. Переход на нужную запись (типа FindKey или GotoKey).
2. Table1.Edit
3. Table1.FieldByName('Field1').As....... :=#########;
4. Table1.Post
Или же после Edit внеси ВСЕ изменения. А потом, как и было отмечено, используй
if Modified then Post.
Попробуй, однако за слаженную работу такого метода через ADO с MSSQL я не могу отвечать.

Автор: Medved 26.1.2004, 23:24
Набор даных возвращаемый TADOQuery нельзя редактировать напрямую (на самом деле можно, но при соблюдении определенных условий).
Если хотите чтобы Ваш пример заработал, используйте TADOTable.
Вот и весь ответ.

(Кстати ADO здесь ни при чем. Если бы Вы использовали и BDEшные компоненты, выскочила такая же ошибка)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)