为什么我动态更新TClientDataSet的CommandText老是出错

腊月三毛 2003-11-21 05:54:32
将某个TClientDataSet的CommandText改为:"select * from a",成功.
紧接着第二次更改其CommandText为:"selec * from b where ..."失败,代码大概如下:
...
with MainDataModule.cdsQueryData do
begin
try
close;
commandtext:='select fieldname1 from tablename where fieldname2='xxx'";
open;
if isempty then
WebApplication.ShowMessage('请输入值!')
else
if fields[0].AsInteger=0 then WebApplication.ShowMessage('输入值无效!')
else ShowForm(TfrmMainForm);
except
WebApplication.ShowMessage(系统远程查询出错!');
end;
end;
...
相关联的TDataSetProvider的Options:=[poAllowCommandText];
错误提示是"对象没有连接到服务器"

百试不得其解,初学写三层,包涵包涵.三层结构为:
MS SQL Server
DCOM ADO
IntraWeb
...全文
102 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
hiflower 2003-11-22
  • 打赏
  • 举报
回复
首先声明,不要给我分。

我想也不一定要解决问题你才给分吧,为你出一点主意的人,毕竟是思考过了你的问题,虽然有时可能并不正确,但你应当会有一点感激吧。(这要比你不回答什么问题要好一些吧)
还有,就算是 UP 的人,可以让你的帖子为更多人所看见,也是一件好事,多一分解决的机会。
如果不能确定是否提问能解决,可以少放一点分,到时候不管有没有答案,都结了,至少可以鼓励大家回答问题的积极性。

如果看了不高兴,把我的贴删了吧
腊月三毛 2003-11-22
  • 打赏
  • 举报
回复
算了,我试了一下我的Win程序的客户端,什么问题都没有,说明问题是出在IntraWeb这一层.也算是明白了问题所在.
我上面说的有我问的第二个问题吗?这个贴子我该怎么办,不要说我小气.其实我来这很久了,只是平时上来只是看看,提问不多也没回答什么问题.可用分有八千多分,但这没回答好的问题总不能给分吧.不然也有倒分之嫌?:)
不要笑话我,我真的不知道.
是不是自己删除了就没事了.我的信誉分可是老是扣,
腊月三毛 2003-11-22
  • 打赏
  • 举报
回复
代码如下:
procedure TfrmLogin.btnExitClick(Sender: TObject);
begin
webapplication.Terminate(系统已退出!');
end;

procedure TfrmLogin.IWAppFormCreate(Sender: TObject);
begin
with DataModule1.cdsQueryData do
begin
close;
commandtext:='select userid,username from users';
open;//此句成功
cmbUserName.Clear;
while not eof do
begin
cmbUserName.Items.Add(fields[0].AsString+'['+fields[1].AsString+']');
next;
end;
end;
end;

procedure TfrmLogin.btnOkClick(Sender: TObject);
begin
if cmbUserName.ItemIndex=-1 then
begin
WebApplication.ShowMessage(请选择用户!');
cmbUserName.SetFocus;
exit;
end
else
with DataModule1.cdsQueryData do
begin
try
close;
commandtext:='select count(*) as usercount from users where userid+''[''+username+'']''='''+cmbUserName.Text+''' and pwdcompare('''+edtPassword.Text+''',userpassword,0)=1';
open;//此句失败,错误提示:对象没有连接到服务器
if fields[0].AsInteger=0 then WebApplication.ShowMessage(无效用户或者错误的密码!')
else ShowForm(TfrmMainForm);
except
WebApplication.ShowMessage('系统查询出错!');
另注:为免有些同志说你应该设置相关的DataSetProvider.Options:=[poAllowCommandText];所以申明DataSetProvider.Options:=[poAllowCommandText];

end;
end;
end;
腊月三毛 2003-11-22
  • 打赏
  • 举报
回复
yzykjh(爱吃子姜的人) :实在是对不起,那句SQL语句只是笔误(只是为了说明两句SQL语句不一样而已).那样子的SQL语句本身就通不过.我只是举个例子而已.我就由"select * from a"改为"select * from b"都不行,还有我中间层用dbExpress的SQLDataSet时,根本就法在客户端改commandtext,不知道是不是不支持(可我想是没可能,改为ADO一试,出错了).
yzykjh 2003-11-22
  • 打赏
  • 举报
回复
commandtext:='select fieldname1 from tablename where fieldname2='xxx'";
应该这样吧!
commandtext:='select fieldname1 from tablename where fieldname2=''xxx''';
腊月三毛 2003-11-22
  • 打赏
  • 举报
回复
TClientDataSet.CommandText不是我这样用还是你那样用?奇怪
腊月三毛 2003-11-22
  • 打赏
  • 举报
回复
昨天下班了,不好意思
我不知 aiirii(ari)什么意思,难道你在表示层还能更改到ClientDataSet连的DataSetProvider连的那个DataSet的CommandText吗?照你这样子我还不用这三方连结,直接写个服务器方法就好了呢?
hiflower 2003-11-22
  • 打赏
  • 举报
回复
呵呵,我气不动了
腊月三毛 2003-11-22
  • 打赏
  • 举报
回复
To hiflower(花) :
我没有这么容易不高兴的,我只是想问一下我应该怎么做才对.分对我自己来说是没用的,如果回答的好或者是有一定的启发性质当然可以给了.至于其它的我不知该不该给分,我这里是想知道万一你觉得不想给分时该怎么办而已.
总不能好也好,歹也好,都一样.那不是大锅饭了吗?:)
只是为了我的信誉,其实我也是觉得对自己有帮助(不一定是帮你解决了)的我都会给分的.为什么还要扣我的信誉,好象我不诚实一样.这和我想不想给分应该不能等同吧.我想论坛的本意并不是UP也算思考或者应该得分的吧!
你说的也有道理,所以我决定将本贴的分全给了你(你可千万不要气愤:)).
aiirii 2003-11-21
  • 打赏
  • 举报
回复
你應該更新 DataSetProvider 聯的那個 可能是Ado 或 dbexpress 的 DataSet, 的CommandText 才對!
腊月三毛 2003-11-21
  • 打赏
  • 举报
回复
信誉值越来越少了,问了几回也没人告诉我一声,看帮助好象也没说不想给分时该如何办.没人回答或者回答不够好的是不是就得自己删除该贴?我怎么一直在被扣信誉值,但我想不出我除了未结贴之外还有什么原因会被扣.但我除了不给分之外我就不知道如何做才对(其实也删除几次自己的贴子,没答好总不能给分吧:().

1,594

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧