如下代码:
  sql := 'SELECT s_id,rq,pf,dspf,bdid,zcid,bb,sl,bz FROM tpData';
  sql := sql + ' WHERE rq BETWEEN''' + DyStart + '''AND ''' + DyEnd + '''';
  sql := sql + ' AND (bdid<100)';
  try
    OpenADOQuery(adq, sql);
  except
    ErrorDlg('表打开错误!', '打开表错误');
  end;这段代码写在FormCreate事件中,编译后直接打开窗体提示未知错误,要是编译后不直接打开窗体,编译后先关闭窗体,然后打开exe文件运行,再打开form1就可以正常运行。我想问下为什么编译后直接打开form1报错。

解决方案 »

  1.   

    OpenADOQuery,可能是你几个窗体打开顺序问题吧。没有连接成功数据库
      

  2.   

    OpenADOQuery:我放在公共模块里,下面是代码:procedure OpenADOQuery(ADOQry: TADOQuery; SQLtxt: string);
    begin
      with ADOQry do
      begin
        Close;
        SQL.Clear;
        SQL.Add(SQLtxt);
        Open;
      end;
    end;
      

  3.   

    sql := sql + ' WHERE rq BETWEEN''' + DyStart + '''AND ''' + DyEnd + '''';between后面好像少个空格,and前也是
      

  4.   

    首先确定 SQL 语句有没有问题,单独拿出来测试一下;或者再执行的时候,把SQLtxt 打出来,放数据库里试试;如果没有问题,那就是你调用的时候位置不对
      

  5.   


    对,就用这个思路来解决问题。。有时候我为了判断程序中的动态sql的正确性,会在query.open之前,先showmessage出来query.sql.text的。
    这样子就知道程序到底运行了什么sql代码了如果不知道怎么样拼接sql,则可以在查询分析器中先试试。然再再复制到delphi中修改。