谁来帮我!我已经尽力!可无回天之力!关于oracle和Tquery的问题?(100分)

  • 主题发起人 主题发起人 fuhaiwen
  • 开始时间 开始时间
F

fuhaiwen

Unregistered / Unconfirmed
GUEST, unregistred user!
我用的数据库是oracle客户端,数据表存放在服务器上,我在调用delhpi中BDE(ODBC已经配好)与服务器连接,问题是我在调用Tquery控件来进行控制时出现错误我的语句如下:(错误类型是:EBDngineError.)
代码:
procedure TForm1.BitBtn1Click(Sender: TObject);

begin
query1.Close;
query1.SQL.Clear;
query1.SQL.Add('select * from Srvtariff');
query1.SQL.Add('where srvcode >=:www');
query1.Params[0].asstring:=edit1.text;
query1.Prepare;
try
query1.ExecSQL;
except
query1.Open;
end;
end;
最搞笑的是一旦把参数去掉,加上常量,运行通过,而数据库改为Access
加上参数运行也能通过,我已经调试好长时间,感觉是BDE没配好,可谁来帮我!!!!!!
 
为什么要动态配呢?可以直接将SQL写死在QUERY中试试,这样的问题好象DFW有,你可以查查
另外就是你的EDIT1。TEXT有没有错误,而且是字符串比较,所以可能会有些BUG,换成INT,TRY
 
去掉prepare
 
问题出在“query1.Params[0].asstring:=edit1.text;”,
如果srvcode是数字,你就应该query1.Params[0].AsInteger:=StrToInt(edit1.text);,
如果srvcode是日期,你就应该query1.Params[0].AsDate:=StrToDate(edit1.text);



 
是啊,不知道你比较字符串想干什么
 
??
try
query1.ExecSQL;
except
query1.Open;
end;
SELECT語句你用EXECSQL?我看你上面的問題很多呢﹐不至這一個。
 
我的问题是这样的即使不是比较字符,等于字符,只要带参数,oracle数据库就不能运行通过,
我希望解决的问题是:如何配置EBD中对oracle的配置。如何配置使oracle能解释SQL。
 
不要用
query1.ExecSQL
因为它本身没有错,但会引出异常
你直接用
query1.Open;
保证一点问题也没有
 
语句太烂了!根据上面的意见先改改再说!
1、别比较字符串。
2、别try execute exception open,这是什么?
 
更本就不是BDE的问题,是程序本身的问题,改成:
query1.SQL.Add('select * from Srvtariff');
query1.SQL.Add(' where srvcode >='+Edit1.text);就行了。
真不明白你在这里用Params有什么意思!
而问题就出在 query1.Params[0].asstring:=edit1.text; 这里,
Params是动态创建的,如果仅仅用上一个句子肯定是要产生错误。还
需要加上一些动态创建时的初始语句。
最起码得加上:
……
var query1ParamWWW: TParams;
……
query1ParamWWW := TParams.Create(query1);
query1ParamWWW.DataType := ftString;
query1ParamWWW.ParamType := ptInput;
query1ParamWWW.Values := Edit1.text;
……
不过我还是不明白为什么不这样: query1.SQL.Add(' where srvcode >='+Edit1.text);
 
如果srvcode在数据库中是整型,你就不会用asstring,所以我判断你的srvcode是字符型
这样的话,你的sql语句就没有任何问题
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部