L liuyj Unregistered / Unconfirmed GUEST, unregistred user! 2001-03-01 #1 在DELPHI中用TQUERY操作ORACLE,直接用语句执行正常(不带参数),如果带参数(用 params)就会报错,系统提示错误为:opration not applicable,这是怎么回事?
L liuyj Unregistered / Unconfirmed GUEST, unregistred user! 2001-03-01 #3 我有一个表名字为course,表中有字段cno,cname,都是字符串。代码如下: query2.sql.text:='insert into course (cno,cname) values(''1011'',''zzx'')' 上面这句执行正确。 query2.sql.text:='insert into course (cno,cname) valuesc1,:c2)' query2.params[0].asstring:='2000'; query2.params[1].asstring:='xxxx'; query2.execsql; 这样写执行就出错
我有一个表名字为course,表中有字段cno,cname,都是字符串。代码如下: query2.sql.text:='insert into course (cno,cname) values(''1011'',''zzx'')' 上面这句执行正确。 query2.sql.text:='insert into course (cno,cname) valuesc1,:c2)' query2.params[0].asstring:='2000'; query2.params[1].asstring:='xxxx'; query2.execsql; 这样写执行就出错
S sonie Unregistered / Unconfirmed GUEST, unregistred user! 2001-03-01 #4 1.原理上是没错的,因为参数的传递是由delphi来编译执行的,发给后台的 应该是一条确定的不带参数的insert语句,跟踪一下sql的执行,看看生成的语句? 2.换一下试试? query2.parambyname('c1').asstring:='2000'; query2.parambyname('c2').asstring:='xxxx'; query2.prepare;//是不是一定要加这句? query2.execsql;
1.原理上是没错的,因为参数的传递是由delphi来编译执行的,发给后台的 应该是一条确定的不带参数的insert语句,跟踪一下sql的执行,看看生成的语句? 2.换一下试试? query2.parambyname('c1').asstring:='2000'; query2.parambyname('c2').asstring:='xxxx'; query2.prepare;//是不是一定要加这句? query2.execsql;
左 左右手 Unregistered / Unconfirmed GUEST, unregistred user! 2001-03-02 #6 你query2.params[0].asstring:='2000';中的数据类型对吗? 你可以单步执行,然后看到底是那句错了
L liuyj Unregistered / Unconfirmed GUEST, unregistred user! 2001-03-02 #7 我数据库中定义的字段类型为varchar,运行其他语句都没错,执行query2.execsql时出错。 sonie说的增加prepare方法也不行。
L liuyj Unregistered / Unconfirmed GUEST, unregistred user! 2001-03-02 #9 问题到底出在什么地方,用跟踪怎么能看到参数赋值后的SQL串?如果用table的append、 post方法,可以增加记录,是tquery的问题还是我程序问题?
C cutechap Unregistered / Unconfirmed GUEST, unregistred user! 2001-03-02 #10 Tquery跟Oracel的结合有一定问题,特别是当Tquery的sql语句中引用了Oracle的函数以后, 那么它返回的结果集只能是只读,如果选择了requestlive=true,会出现跟你所说的同样的 错误,我只能认为这是Borland公司跟Oracle公司之间的问题
Tquery跟Oracel的结合有一定问题,特别是当Tquery的sql语句中引用了Oracle的函数以后, 那么它返回的结果集只能是只读,如果选择了requestlive=true,会出现跟你所说的同样的 错误,我只能认为这是Borland公司跟Oracle公司之间的问题
L liuyj Unregistered / Unconfirmed GUEST, unregistred user! 2001-03-02 #11 那就是说,要和ORACLE连接,不能用TQUERY了?今天我尝试用ADOQUERY操作,可以正确操作 ORACLE。ADOQUERY和Tquery区别在那里,能讲解以下吗?
I Iknow Unregistered / Unconfirmed GUEST, unregistred user! 2001-03-02 #12 以下代码是我在以前程序中用过的(修改了一下字段和表名),保证没问题的。 其中key是blob类型的,关键是要先对param设datatype,否则缺省是variant类型的。 sqlstr:='insert into Tablename (key) values deskey)'; qrySubmit.Close; qrySubmit.SQL.clear; qrySubmit.SQL.add(sqlStr); qrySubmit.ParamByName('deskey').datatype:=ftBlob; qrySubmit.ParamByName('deskey').setBlobdata(p, keylen); // qrySubmit.prepare; qrySubmit.ExecSQL; strdispose(p); 此外,prepare并不是必须的,只是用耗资源省时间的做法罢了。
以下代码是我在以前程序中用过的(修改了一下字段和表名),保证没问题的。 其中key是blob类型的,关键是要先对param设datatype,否则缺省是variant类型的。 sqlstr:='insert into Tablename (key) values deskey)'; qrySubmit.Close; qrySubmit.SQL.clear; qrySubmit.SQL.add(sqlStr); qrySubmit.ParamByName('deskey').datatype:=ftBlob; qrySubmit.ParamByName('deskey').setBlobdata(p, keylen); // qrySubmit.prepare; qrySubmit.ExecSQL; strdispose(p); 此外,prepare并不是必须的,只是用耗资源省时间的做法罢了。
L liuyj Unregistered / Unconfirmed GUEST, unregistred user! 2001-03-02 #13 参数类型设置了,还是不行,怎么回事?如果类型不同,会提示类型不支持。
S sonie Unregistered / Unconfirmed GUEST, unregistred user! 2001-03-03 #15 没玩过oracle完成只是猜测,不当之处请原谅 1.我想说一句的就是如果他用到了AsString,AsInteger等函数的话,就等于已指定类型为string 或integer,不定再显示的用datatype去指定了。就有用value时再要指定。 2.原语句原理上没错,一条条语句的跟踪不会有结果,只有到open时才会出错. 3.参数的分配是由delphi来完成的,所以你用SQL Monitor跟踪一下看生成的SQL语句有没有问题, 是不是ORACLE支持的语句.比如说我注意到你的静态语句是...values(''1011'',''zzx''),而 参数是='1011'和'zzzz',是不是改成''1011''和''zzzz''试一下(也就是说oracle要字符串带'')
没玩过oracle完成只是猜测,不当之处请原谅 1.我想说一句的就是如果他用到了AsString,AsInteger等函数的话,就等于已指定类型为string 或integer,不定再显示的用datatype去指定了。就有用value时再要指定。 2.原语句原理上没错,一条条语句的跟踪不会有结果,只有到open时才会出错. 3.参数的分配是由delphi来完成的,所以你用SQL Monitor跟踪一下看生成的SQL语句有没有问题, 是不是ORACLE支持的语句.比如说我注意到你的静态语句是...values(''1011'',''zzx''),而 参数是='1011'和'zzzz',是不是改成''1011''和''zzzz''试一下(也就是说oracle要字符串带'')
M mingke Unregistered / Unconfirmed GUEST, unregistred user! 2001-03-03 #16 我认为这不是TQuery和oracel结合的问题。因为我使用tquery对oracel进行插入操作, 并没有出现什么问题。改成''1011''是不对的,AsString已经告诉Tquery接受的参数 将是一个字符串。 你试一试在query2.sql.add(...)之前,加入: query2.close; query2.sql.clear. 看看行不行。 我看你用的是query2.sql.text:=...;我没有这样使用的经历。 一般都是用query2.sql.add()过程。
我认为这不是TQuery和oracel结合的问题。因为我使用tquery对oracel进行插入操作, 并没有出现什么问题。改成''1011''是不对的,AsString已经告诉Tquery接受的参数 将是一个字符串。 你试一试在query2.sql.add(...)之前,加入: query2.close; query2.sql.clear. 看看行不行。 我看你用的是query2.sql.text:=...;我没有这样使用的经历。 一般都是用query2.sql.add()过程。
B booboo Unregistered / Unconfirmed GUEST, unregistred user! 2001-03-03 #17 1. "sql.text"这种写法不太好,最好用"sql.add" 2. 你可以用Format函数拼一条带参数的SQL语句
L liuyj Unregistered / Unconfirmed GUEST, unregistred user! 2001-03-05 #19 用Format函数拼一条带参数的SQL语句,用text或者add方法都可以,这个问题解决了。 很感谢大家的帮忙。