一个TAdoQuery,SQL是:select * form xxx (可能很复杂,包含多个表的操作)这个TAdoQuery打开了,有没有方法得知这个Sql所用到的表呢?最好是通过AdoQuery或Recordset对象的某个方法或属性直接求得.

解决方案 »

  1.   

    补充一下,如果SQL是:select * from a  ,则可以用此属性返回:'a'
    如果SQL是:SELECT 材料ID, 材料名, 材料类型, 发放定额
    FROM tab材料类型 INNER JOIN tab材料 ON tab材料类型.材料类型ID = tab材料.材料类型ID;则可以求得  'tab材料类型;tab材料'大家明白吗?
      

  2.   

    好象不能吧。
    不过,既然你已经有了SQL,那么也就知道用了哪些TAB了,可以从外围去获取TAB名。
      

  3.   

    单靠分析SQL语句太困难了,如果表名有与字段名相同怎办,而且sql语句可能是复合的select,怎办??
      

  4.   

    如果写的话肯定是麻烦的,关键是你的要求也很特别啊,为什么要表名呢,你要分析sql执行日志?
      

  5.   

    获取SQL语句中from后的字段
    最好你这个sql语句写得严格点
    如 select * from t1,t2,t3 where ....
    就是有空格的地方只用一个空格  没空格的地方不能有空格你可以用这个方法试试
      

  6.   

    var
      i : Integer;
    begin
      for i := 0 to ADODataSet1.Fields.Count - 1 do
        mem.Lines.Add(vartostr(ADODataSet1.Recordset.Fields[i].Properties.Item['BASETABLENAME'].Value));
    end;
      

  7.   

    ysai的方法基本可以解决到问题了。真的不错。我要这种功能是为了制造一种自刷新的框架。使用这种框架,用户在MDI中的一个窗体把数据集更改了,当激活另一个窗体时,就会自刷新另一个窗体中相关连的数据集,做到很方便的MDI交互,免得用户在两个窗体中按“刷新”。很爽~~,再次感谢。
      

  8.   

    不过还是有缺点,如果SQL中的一列使用两个以上表的来计算出,还是找不到,看来只能做个半自动化了.