Hi,
I am having difficult time to make this run. Can anyone help me please?.
I have test form with 3 command buttons & one Richedit.Im using access database to test. It have just one table with two fields ID (Integer), sMemo (memo). I am trying to save richedit text (rtf format) to table. When I run this code I get an error 'Database is not in insert or edit mode' I cant get pass that error any idea?

Thank you


unit Blobtest;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, JvExStdCtrls, JvRichEdit,Db, ADODB;

type
TForm2 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
JvRichEdit1: TJvRichEdit;
procedure FormCreate(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form2: TForm2;
sConnString: String;
connADO : TADOConnection;
bConnectionSuccesful:Boolean=false;
ADODataSet1 :TADODataSet; //used to select data


implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
begin
//Clear
JvRichEdit1.Clear;
end;

procedure TForm2.Button2Click(Sender: TObject);
var
blobF : TBlobField ;
bs : TStream;
begin
//Save
ADODataSet1 := TADODataSet.Create(ADODataSet1);
ADODataSet1.Connection := connADO;
ADODataSet1.CommandType := cmdText;
ADODataSet1.CursorType := ctKeySet;
ADODataSet1.CommandText :='Select * from table1';
ADODataSet1.Active := True;
ADODataSet1.First;
ADODataSet1.Edit;
blobF := ADODataSet1.FieldByName('sMemo') as TBlobField;
bs := ADODataSet1.CreateBlobStream(blobF, bmWrite) ;
blobF.Clear;
blobF.SetFieldType(ftMemo);
blobF.LoadFromStream(bs);
ADODataSet1.Post;
ADODataSet1.free;
blobF := nil;
blobF.Free;
bs.Free;
end;

procedure TForm2.Button3Click(Sender: TObject);
begin
//Load
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
sConnString :='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\db1.mdb ;Persist Security Info=False;Jet OLEDB: Database Password=''''';
connADO := TADOConnection.Create(connADO);
connADO.ConnectionString := sConnString;
connADO.LoginPrompt := False ;
connADO.Connected := true;
end;

end.

Recommended Answers

All 2 Replies

1)i haven't worked with ADO, so i can not give you an 100% accurate answer. i took a look into your code and in my opinion everything looks ok.
i'm working a lot with IBObjects, and from there i now that if the database object hasn't requestlive property set to true, then nothing isn't saved into your database even your quey return that the posting event has been accomplished. why your database is not in the insert/edit mode i can not figure out.
2) try to debbug your code using watch and see what's happening with your querry and variables
3) here you can find some topics regarding how to code using ADO
http://delphi.about.com/sitesearch.htm?terms=ADO&SUName=delphi&TopNode=3176&type=1

best regards,

Thank you for responding. I appriciate it.
I found it. I get an error on line in Button2Click

bs.Free;

works fine if i comment that code.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.