如何对ClientDataSet传递参数给oracle ? 200分(200分)

  • 主题发起人 主题发起人 benson_yang
  • 开始时间 开始时间
B

benson_yang

Unregistered / Unconfirmed
GUEST, unregistred user!
代码如下:
s_sql := ' select mxbm, mxmc, mxjg, mxsl, bxbl from tb_jsmx where pcode ='''+s_pcode+''' ' ;
s_sql := s_sql + ' and czsj=to_date('''+s_czsj+''',''yyyy-mm-dd'') ' ;
DM.ClientDataSet5.Close ;
DM.ClientDataSet5.CommandText := S_SQL ;
DM.ClientDataSet5.OPEN ;
delphi6+oracle8 运行后说 Capability not supported
测试情况如下?
1、我在本地query1中试过可以使用的。
2、但是在去掉' and czsj=to_date('''+s_czsj+''',''yyyy-mm-dd'') '就可以运行。检索出数据
是不是ClientDataSet5后面对应的com服务器上query5不能使用oracle的函数?
难道必须为这种情况建立一个新的通道?
 
应该是to_date的问题
你用FormatDatetime试试了!
 
s_sql := ' select mxbm, mxmc, mxjg, mxsl, bxbl from tb_jsmx where pcode ='''+s_pcode+''' ' ;
s_sql := s_sql + ' and czsj=to_char('+s_czsj+',''yyyy-mm-dd'') ' ;

s_sql := ' select mxbm, mxmc, mxjg, mxsl, bxbl from tb_jsmx where pcode ='''+s_pcode+''' ' ;
s_sql := s_sql + ' and czsj=to_char('+s_czsj+',''YYYY.MM.DD'') ' ;
试一下
 
对于时间已经格式处理过。
这是我拚结出来的sql 贴到pl/sql中运行正常。表现数据。
'select mxbm, mxmc, mxjg, mxsl, bxbl from tb_jsmx
where pcode ='6500010000001510' and
czsj= to_date('2003-3-20 10:49:10','yyyy-mm-dd hh24:mi:ss') '
运行就会Capability not supported 发生。
tb_jsmx 是oracle表。有主键(pcode、czsj)。
 
两种办法:
1、
ClientDataSet1.CommandText := 'select * from mytable where thedate < :aDate';
ClientDataSet1.Params.Items[0] := Now;
ClientDataSet1.Open;
2、
SQLStr := Format('select * from mytable where thedate < to_date(%s, %s)',
['''2002-01-01 00:00:00''', '''yyyy-mm-dd hh24:mi:ss''']);
ClientDataSet1.CommandText := SQLStr;
ClientDataSet1.Open;
 
hyhy
s_sql := s_sql + ' and czsj=to_char('+s_czsj+',''yyyy-mm-dd'') ' ;
你为什么使用to_char函数呢?s_czsj就是string的表示时间的变量。
我使用'select mxbm, mxmc, mxjg, mxsl, bxbl from tb_jsmx
where pcode ='6500010000001510' and
to_char(czsj,'yyyy-mm-dd hh24:mi:ss')= '2003-3-20 10:49:10'
使用以上sql在oracle的pl/sql中通过,但是在ClientDataSet上不支持。
Capability not supported
 
>>>是不是ClientDataSet5后面对应的com服务器上query5不能使用oracle的函数
服务器上query5是不是连接一个DataProvider?
如果是,请将DataProvider的Options中的poAllowCommandText属性设为True。
试试。
或者,不使用ClientDataSet,
直接将SQL语句当做字符串传递给服务器(如用存储过程的话只需传递参数),然后在服务器执行SQL操作。
 
sachow
方法1正确,方法2不支持。分数给你。
jrq
在对ClientDataSet5以往操作中正确,所以DataProvider没有问题。谢谢
 
接受答案了.
 
[:(] 分数发错了吧? 我该怎么还给你?
 
To benson_yang:
忘了告诉你,第2种方法只能用于Oracle数据库。
To jrq:
你开个贴发200分给我就行了嘛,省得我再和benson_yang费劲。告诉我贴子ID哦。
 
对不起!!给各位添麻烦了!
 
无奈啊。
在这里 : http://www.delphibbs.com/delphibbs/dispq.asp?lid=1701315
 
后退
顶部