Delphi的TQuery之SQL语句问题

时间:2022-06-08 17:35:45
TQuery的SQL语句中查询视图(Oracle数据库),在视图里有一个字段是利用oracle方法取值,如下:
create or replace view v_abc as
select ...., fun_xxx(p1) as field_1 from table_name;
视图本身访问无问题。
然后定义变量qry:TQuery;
qry.sql := 'select field_1 from v_abc ';

结果在执行到:qry.Open;
代码时报错:
 faulted with message: 'access violation at 0x7c94a916: write of address 0x00040ffc'. Process Stopped. 


是不是Delphi的sql语句中,不允许调用方法函数(function)?

5 个解决方案

#1


  qry.sql := 'select field_1 from v_abc ';


你SQL应该这样赋值額~

ADOQuery1.SQL.Text :=  'select field_1 from v_abc ';


或者
ADOQuery1.SQL.clear;
ADOQuery1.SQL.Add('select field_1 from v_abc ');


如果语句  select field_1 from v_abc   本身运行无问题,那就说明可以调用方法函数了。

#2


引用 1 楼 yangb0803 的回复:
  qry.sql := 'select field_1 from v_abc ';


你SQL应该这样赋值額~

ADOQuery1.SQL.Text :=  'select field_1 from v_abc ';


或者
ADOQuery1.SQL.clear;
ADOQuery1.SQL.Add('select field_1 from v_abc ');


如果语句  select field_1 from v_abc   本身运行无问题,那就说明可以调用方法函数了。

视图v_abc字段field_1是通过oracle方法 fun_xxx(p1)获取后得到的,如果只是表格额某一字段就没有问题,但是通过方法二次查询获取就不行了。

#3


先把'select field_1 from v_abc '; 这个showmessage一下 看看语句是否错误

#4


首先,你必需保证你的语句
select  *  from v_abc
在 sql plus 或 PL/SQL Developer  等工具里面调试通过…


TQuery只是一个获取数据的载体,如果你语句本身都调试不过去,肯定会报错了……


#5


谢谢各位,先把'select field_1 from v_abc '; 这个showmessage一下 看看语句是否错误
SQL本身没有问题,视图也可以编译通过,就是在用TQuery打开数据集时报错。
最后判断是视图的查询字段里用到的外函数个数太多所致(超过4个),引用外函数的字段减少到4个以下就可以了。
再次谢谢各位!

#1


  qry.sql := 'select field_1 from v_abc ';


你SQL应该这样赋值額~

ADOQuery1.SQL.Text :=  'select field_1 from v_abc ';


或者
ADOQuery1.SQL.clear;
ADOQuery1.SQL.Add('select field_1 from v_abc ');


如果语句  select field_1 from v_abc   本身运行无问题,那就说明可以调用方法函数了。

#2


引用 1 楼 yangb0803 的回复:
  qry.sql := 'select field_1 from v_abc ';


你SQL应该这样赋值額~

ADOQuery1.SQL.Text :=  'select field_1 from v_abc ';


或者
ADOQuery1.SQL.clear;
ADOQuery1.SQL.Add('select field_1 from v_abc ');


如果语句  select field_1 from v_abc   本身运行无问题,那就说明可以调用方法函数了。

视图v_abc字段field_1是通过oracle方法 fun_xxx(p1)获取后得到的,如果只是表格额某一字段就没有问题,但是通过方法二次查询获取就不行了。

#3


先把'select field_1 from v_abc '; 这个showmessage一下 看看语句是否错误

#4


首先,你必需保证你的语句
select  *  from v_abc
在 sql plus 或 PL/SQL Developer  等工具里面调试通过…


TQuery只是一个获取数据的载体,如果你语句本身都调试不过去,肯定会报错了……


#5


谢谢各位,先把'select field_1 from v_abc '; 这个showmessage一下 看看语句是否错误
SQL本身没有问题,视图也可以编译通过,就是在用TQuery打开数据集时报错。
最后判断是视图的查询字段里用到的外函数个数太多所致(超过4个),引用外函数的字段减少到4个以下就可以了。
再次谢谢各位!