RichEdit1的连格式保存问题 (100分)

  • 主题发起人 主题发起人 kifo
  • 开始时间 开始时间
K

kifo

Unregistered / Unconfirmed
GUEST, unregistred user!
我在RichEdit中设置了文本格式,希望能将文本各格式存入Access数据库的一字段中中,但好像只能存入文本而不能存入格式。

我的读数据语句:
while not adoquery2.eof do
begin
RichEdit1.Lines.Add(ADOQuery2.fields[3].AsString);
写数据语句

sql.Add('Update issue set content="'+RichEdit1.Lines.text+'" where subtitle='+'"'+CURRsubtitle+'"');
ExecSQL ;

RichEdit1的设置,Plain.text:=false
另,我希望编辑完RichEdit后程序自动保存,如何做呢?看上去最接近的OnselectionChange经测试是在每次进入下行时动作,
这样保存太夸张了吧。

大家帮我想想办法呢。
 
1、你看看已答问题吧,有大把的答案;
2、如何确认你已经编辑完呢?可能只有判断一定时间没有编辑动作,好象也不好。
 
前面的答案我也看了,不过还是没明白。
第二个问题回答不正确。
 
存入的是什么字段?不能是文本,应是备注字段。
你编辑完RichEdit如何让计算机知道?如一个标志符的出现。
 
为什么不用DBRichEdit控件?什么事儿你也不用管啊。
 
To Kingron,程序中已用了ADO,如果因为这个原因解决不了而转用DBRichEdit不是显得不够专业吗?
其实,我是在练习ADO,Access和RichEdit的连接。
To Linsb,存入的是备注字段。编辑完后在RichEdit中已有显示,计算机就算是知道了吧,只是我不知
道计算机把它放哪儿了。

想到一个解决方法,把Access中的字段设成OLE,用流来做存取。但我不会用ADO和Access做,有做过的
哥们支支招吗?
 
RichEdit1.Lines.text该语句只能导入纯文本,格式将损失。如要带格式用剪切板。
不要把Access中的字段设成OLE,没必要。
》》编辑完后在RichEdit中已有显示,计算机就算是知道了吧
计算机怎么知道你编辑完了?
 
>>计算机怎么知道你编辑完了?
是啊是啊,我也想过这个问题。但完成后动作会很多,不知如何做。只好做过按钮?好像这样又不好玩。
>>如要带格式用剪切板。
哥们,具体些呢?
我还是第一次玩RichEdit呢。
 
你好像在“玩程序”,而不是从实际出发怎样做更好。
我认为最好用RxDBRichEdit,两个问题全解决。
可完成更复杂格式的文档录入,包括图表、公式等。
 
用OLE字段,用流来解决
 
To linsb,
RxDBRichEdit我用过,是能做到。不过,就RichEdit如何解决呢?
其实,玩是把玩的意思,就是我们通常所说的研究。帮我想想招吧您。
 
我的方法好像很笨,也无实际意义。
RichEdit的内容copy到剪切板,然后到DBRichEdit(不可见)。
 
先保存到文件,再从文件中加载到字段,我以前这么做过。不用OLE。
 
但后来我都是用IP3000的DBRICHEDIT,或其它类似控件,更方便,你也可以先看看这些控件的代码,就知道了。
 
>>RichEdit的内容copy到剪切板,然后到DBRichEdit(不可见)。
这样做啊?我可不想让delphi受这种委屈。
RichEdit的内容能直接保存到数据库的,我想。只是我不知道方法,你想想怎么做?
 
试试流的办法:
procedure TForm1.Button4Click(Sender: TObject);
var
Rtf: TMemoryStream;
begin
Rtf := TMemoryStream.Create;
try
with RichEdit1 do
begin
SelStart := 0;
SelLength := Length(Text);
SelAttributes.Protected := FALSE;
Lines.SaveToStream(Rtf);
end;
Rtf.Position := 0;
ADOTable1.Edit;
TBlobField(ADOTable1.FieldByName('tg')).LoadFromStream(Rtf);
ADOTable1.Post;
finally
rtf.Free;
end;
end;
 
谢谢,用流,字段类型为备注,用ADOQuery,很好。解决了。
 
这么多人说了,还要我来干什啊
 
才看到你的留言,这些对你有用,就贴出来吧

Tabl1中有三个字段,其中Col3是文本字段或者Ole字段,当然,如果是备注字段,就不能保存二进制文件了.
代码实验通过。
function DBToDisk(Query_String, Column_Name, Target_Name: string): Boolean;
function DiskToDB(Query_String, Column_Name,Target_Name: string): Boolean;


function TForm1.DBToDisk(Query_String, Column_Name, Target_Name: string): Boolean;
var
l_FileStream: TFileStream;
begin
{从数据库中取出数据}
with Query1 do
begin
Close;
SQL.Text := Query_String;
Open;
end;

{将数据库中Image字段保存到硬盘下,存为文件}
l_FileStream := TFileStream.Create(Target_Name, fmOpenWrite or fmCreate);
l_FileStream.Position := 0;
TBlobField(Query1.FieldByName(Column_Name)).SaveToStream(l_FileStream);
l_FileStream.Free;

Query1.Close;
Result := True; //所有任务彻底完成,Function返回True
end;

function TForm1.DiskToDB(Query_String, Column_Name,Target_Name: string): Boolean;
var
l_FileStream: TFileStream;
begin
with Query1 do
begin
Close;
SQL.Clear;
SQL.Text := Query_String;
Open;
end;
Query1.Edit;

l_FileStream := TFileStream.Create(Target_Name, fmShareDenyNone);
l_FileStream.Position := 0;

TBlobField(Query1.FieldByName(Column_Name)).loadfromStream(l_FileStream);
Query1.Post;
l_FileStream.Free;

Result := True; //一切任务完成,返回True
end;
 
后退
顶部