query1.Close ;
query1.SQL.Clear ;
query1.SQL.Add('CREATE TABLE dev.dev_per_statistic1 AS ');
query1.SQL.Add('SELECT a.department, b.station_name, c.devtype_name, d.run_nbr, d.run_date, d.device_model, d.pro_nbr');
query1.SQL.Add('FROM com.tc_pub_n_dept_code a, dev.td_dev_fm_station b, dev.tc_dev_def_facilitytype');
query1.SQL.Add('c, dev.td_dev_fm1_document d ');
query1.SQL.Add('WHERE TRIM(a.department_code) = SUBSTR(b.run_department_nbr, 1, 10)');
query1.SQL.Add('AND b.device_nbr = d.deptstation');
query1.SQL.Add('AND TRIM(c.devtype_nbr) = TRIM(d.device_type)');
query1.SQL.Add('AND b.dept_id =:DeptId' );
query1.SQL.Add('AND d.device_run_state_nbr = ''24''');
query1.SQL.Add('ORDER BY a.department, b.station_name, c.devtype_name');//add search parameter
//query1.Params.ParamValues('DeptId'):=edit1.Text;
query1.params[0].asString:=edit1.Text; if not query1.Prepared then
query1.Prepare ;
query1.ExecSQL ;就是通过给SQL传递参数
调试的时候出错:ORA_01036:非法的变量名/编号直接把sql写成  query1.SQL.Add('AND b.dept_id =''010001'' ' );都能正确执行。对应的字段类型:b.dept_id  char(15)

解决方案 »

  1.   

    这样试一下!
    query1.params[0].asString:=QuoteStr(edit1.Text);
      

  2.   

    写错了!:)
    query1.params[0].asString:=QuotedStr(edit1.Text);
      

  3.   

    Query1.Params.ParamByName('DeptId').AsString:=edit1.Text; 
      

  4.   

    直接把sql写成  query1.SQL.Add('AND b.dept_id =''010001'' ' );都能正确执行。--------------------------------------
    这样试试:
    query1.SQL.Add('AND b.dept_id = :a ' );
    query1.Params.ParamByName('a').Value := edit1.Text;
      

  5.   

    query1.SQL.Add('AND b.dept_id =:DeptId' );:DeptId是个什么?是cstring类的变量吗?如果不是,那就把它变成 cstring类的变量,然后query1.SQL.Add('AND b.dept_id ='''+DeptId+''');
      

  6.   

    query1.SQL.Add('AND b.dept_id = :a ' );
    query1.Params.ParamByName('a').Value := edit1.Text;
      

  7.   

    query1.SQL.Add('AND b.dept_id = :a ' );
    query1.params[0].asString:=edit1.Text;
      

  8.   

    前几天忙,一时没有来得及看,这么多美女,帅哥给了我巨大的帮助。
    我解决了,不过用的是:where dept_id='''+DepartID+'''',和 longfeih()美女给的方法一致。query1.SQL.Add('AND b.dept_id =:DeptId' );DeptId是单位部门,通过选择来过滤数据。
    其它的试试都不行。