Query的params问题(50分)

  • 主题发起人 主题发起人 左轻侯
  • 开始时间 开始时间

左轻侯

Unregistered / Unconfirmed
GUEST, unregistred user!
Win98单机,D4,通过BDE连接Access97数据库。
有一个名为CONTENT的MEMO字段:

Query1.close;
Query1.SQL.Clear;
Query1.SQL.Add('INSERT INTO articles (TITLE, AUTHOR_NAME, CONTENT,POST_TIME,BELONG_TO,ID) VALUES (:TITLE, :NAME, :CONTENT, :TIME, :BELONG_TO, :ID)');

Query1.Params[0].AsString := edtTitle.Text;
Query1.Params[1].AsString := edtAuthor.Text;
Query1.Params[2].Asstring := memContent.Lines.Text;
Query1.Params[3].AsDatetime := now;
Query1.Params[4].AsInteger := 15;
Query1.Params[5].Asinteger := Lastid;
Query1.ExecSQL;

其他的字段都成功更新,只有CONTENT字段总是只能添加头1、2个字节,
中文还会出现乱码。奇怪的是,有时候又正常。
如果改成
Query1.Params[2].Asmemo := memContent.Lines.Text;
则报错。

使用以下代码:

Query1.Insert;
Query1.FieldByName('title').AsString := edtTitle.Text;
Query1.FieldByName('AUTHOR_NAME').AsString := edtAuthor.Text;
Query1.FieldByName('CONTENT').Asstring := tmpstr;
Query1.FieldByName('POST_TIME').AsDatetime := now;
Query1.FieldByName('BELONG_TO').AsInteger := 15;
Query1.FieldByName('ID').Asinteger := Lastid;
Query1.Post;

则又一切正常。但这样做,首先必须不必要地open一次,很麻烦。
真是很奇怪的事,难道access对SQL的支持有问题?
 
用TIMER控件做刷新!
 
嘻嘻,左兄作数据库了?
open 和execSql都是用一次么,何必计较?
 
虽然用post也能成功,但我想知道问题出在哪呀
 
天,没人知道吗?
 
我遇到过memo字段用asstring不能成功,而只能用asmemo的情况.
你有没有试过:
Query1.Parambyname('content').Asmemo := memContent.Lines.Text;
?

另外,操作数据库,我向来只使用sql语句,从来不用edit/insert...post等.
 
Asmemo我也试过,运行时竟然报错?
想不通啊想不通……
 
将你的close,open去掉,对于insert,update,delete语句来说close,open根本不
起任何作用,有的时候还起反作用。
对以上的数据更新语句用ExeSQL行了。如
with query1 do
begin
sql.clear;
sql.add('insert into......');
ExecSQL;
end;
 
>>Asmemo我也试过,运行时竟然报错?
出错信息?
 
不用AS什么的,就使用VALUE试试看
用Params[2].value说不定可以。
不过,我在D4中访问Access数据库一般用DiamondAccess,
这个构件处理MEMO类型无论是用AsString或者Value都可以。
 
only you:多谢你的指点!
CAkk:出错信息是 External exception EEFFACE,不知道什么意思……外部出错?
Dick:用value也不行,一样的被截掉。你用Diamond时,也是用Query加Sql来
处理memo的吗?
 
to 左轻侯:
如果你是用Memo控件向数据库输送数据,为什么非用Memo的lines属性呢,为什么不
直接用memContent.text?
 
改为
Query1.ParamByName('CONTENT').AsMemo := memContent.Text;
试试。
我也试过AsMemo改为AsString时,或被截一部份,或错误提示。
但改为如上,就OK了。

千中元:老兄,我挂着的问题,您老就答了那么一句就不理啦?
 
上述方法全试了,全部无效!
然后在D5+ado下彻底解决了。
看来……
 
多人接受答案了。
 
后退
顶部