K:='SELECT TOP 1 WO FROM V_PRQT WHERE PRQNO='''+Smasterjos+'''' ;        sSQL:='SELECT SORNO,CODE,BDESC,'+
           '(SELECT TOP 1 QTY FROM JOBT WHERE JOBT.JOBNO=HC_SOT.SORNO)PQTY,'+
           '(SELECT TOP 1 PP FROM JOBUDF WHERE JOBUDF.JOBNO=HC_SOT.SORNO)PPP,'+
           '(SELECT TOP 1 CKGJ FROM JOBUDF WHERE JOBUDF.JOBNO=HC_SOT.SORNO)PCKGJ '+
           ' FROM HC_SOT WHERE SORNO='''+K+'''';            sSQL:=sSQL+' and CODE LIKE ''%KJ-%''';            ADODataSet2.CommandText:=sSQL;             ADODataSet2.Active:=true;//运行到这里报错。            wwDBGrid2.Columns[0].DisplayLabel:='工单编号';
            wwDBGrid2.Columns[1].DisplayLabel:='';
            wwDBGrid2.Columns[2].DisplayLabel:='产品名称';
            wwDBGrid2.Columns[3].DisplayLabel:='总数量';
            wwDBGrid2.Columns[4].DisplayLabel:='品牌';
            wwDBGrid2.Columns[5].DisplayLabel:='出口国家';            wwDBGrid2.Columns[0].DisplayWidth:=8;
            wwDBGrid2.Columns[1].DisplayWidth:=20;
            wwDBGrid2.Columns[2].DisplayWidth:=40;
            wwDBGrid2.Columns[3].DisplayWidth:=10;
            wwDBGrid2.Columns[4].DisplayWidth:=10;
            wwDBGrid2.Columns[5].DisplayWidth:=10;错误信息:Incorrtct syntax near ‘’

解决方案 »

  1.   

    你这个K为什么还要加引号啊,把最终的sql显示出了,仔细查一下
      

  2.   

    把“ADODataSet2.Active:=true” 这句换成 ADODataSet2.Open
      

  3.   

    什么数据库,支持这样的嵌套查询吗?分析你的数据库实际执行的查询语句如下:
    SELECT SORNO, CODE, BDESC,
           (SELECT TOP 1 QTY FROM JOBT WHERE JOBT.JOBNO=HC_SOT.SORNO) PQTY,
           (SELECT TOP 1 PP FROM JOBUDF WHERE JOBUDF.JOBNO=HC_SOT.SORNO) PPP,
           (SELECT TOP 1 CKGJ FROM JOBUDF WHERE JOBUDF.JOBNO=HC_SOT.SORNO) PCKGJ 
    FROM HC_SOT WHERE SORNO='SELECT TOP 1 WO FROM V_PRQT WHERE PRQNO='{$Smasterjos}''
     AND CODE LIKE '%KJ-%'注意WHERE SORNO='SELECT TOP 1 WO FROM V_PRQT WHERE PRQNO='{$Smasterjos}'',这个地方任何一个数据库都没有不出错的!
      

  4.   

    K:='(SELECT TOP 1 WO FROM V_PRQT WHERE PRQNO='''+Smasterjos+''')' ;  SqlStr:='SELECT SORNO,CODE,BDESC,'+
         '(SELECT TOP 1 QTY FROM JOBT WHERE JOBT.JOBNO=HC_SOT.SORNO)PQTY,'+
         '(SELECT TOP 1 PP FROM JOBUDF WHERE JOBUDF.JOBNO=HC_SOT.SORNO)PPP,'+
         '(SELECT TOP 1 CKGJ FROM JOBUDF WHERE JOBUDF.JOBNO=HC_SOT.SORNO)PCKGJ '+
         ' FROM HC_SOT WHERE SORNO='+K;
      

  5.   

    mysql
    我在数据库里面查了。。结果是对的
    但是现在没结果
      

  6.   

     K:='SELECT TOP 1 WO FROM V_PRQT WHERE PRQNO='''+Smasterjos+'''';        sSQL:='SELECT SORNO,CODE,BDESC,'+
               '(SELECT TOP 1 QTY FROM JOBT WHERE JOBT.JOBNO=HC_SOT.SORNO)PQTY,'+
               '(SELECT TOP 1 PP FROM JOBUDF WHERE JOBUDF.JOBNO=HC_SOT.SORNO)PPP,'+
               '(SELECT TOP 1 CKGJ FROM JOBUDF WHERE JOBUDF.JOBNO=HC_SOT.SORNO)PCKGJ '+
               ' FROM HC_SOT WHERE SORNO=''+K+''';            sSQL:=sSQL+' and CODE LIKE''%KJ-%''';            ADODataSet2.CommandText:=sSQL;             ADODataSet2.Active:=true;我改成这样了。不报错。但是没结果
      

  7.   

    我把整个代码贴出来把procedure TForm1.Button2Click(Sender: TObject);
    var
    K:String;
    sSQL: String;
    Smasterjos : String;
    begin
    if(trim(Edit2.Text)<>'')or(trim(Edit2.Text)<>'')then
    begin
    Smasterjos:=TRIM(Edit2.Text);
    ADODataSet1.Active:=false;
    ADODataSet2.Active:=false;
    if Smasterjos<>''then begin
            ADODataSet1.CommandText:='SELECT ITEMNO,CODE,CBDESC,QTY,SH,(QTY*(ISNULL(SH,0)))SHS,UNIT,(QTY+(QTY*(ISNULL(SH,0))))DDQS,(QTY)WLXQ,TDATE,VEN ,WO FROM V_PRQT WHERE PRQNO='''+Smasterjos+'''';
            ADODataSet1.Active:=TRUE;
            ADODataSet1.FieldByName('WO').Visible := FALSE;        wwDBGrid1.Columns[0].DisplayLabel:='序号';
            wwDBGrid1.Columns[1].DisplayLabel:='物料编号';
            wwDBGrid1.Columns[2].DisplayLabel:='物料名称';
            wwDBGrid1.Columns[3].DisplayLabel:='请购数量';
            wwDBGrid1.Columns[4].DisplayLabel:='损耗';
            wwDBGrid1.Columns[5].DisplayLabel:='损耗数';
            wwDBGrid1.Columns[6].DisplayLabel:='单位';
            wwDBGrid1.Columns[7].DisplayLabel:='订单欠数';
            wwDBGrid1.Columns[8].DisplayLabel:='物料需求';
            wwDBGrid1.Columns[9].DisplayLabel:='交货日期';
            wwDBGrid1.Columns[10].DisplayLabel:='供应商';        wwDBGrid1.Columns[0].DisplayWidth:=5;
            wwDBGrid1.Columns[1].DisplayWidth:=12;
            wwDBGrid1.Columns[2].DisplayWidth:=40;
            wwDBGrid1.Columns[3].DisplayWidth:=8;
            wwDBGrid1.Columns[4].DisplayWidth:=8;
            wwDBGrid1.Columns[5].DisplayWidth:=8;
            wwDBGrid1.Columns[6].DisplayWidth:=8;
            wwDBGrid1.Columns[7].DisplayWidth:=8;
            wwDBGrid1.Columns[8].DisplayWidth:=8;
            wwDBGrid1.Columns[9].DisplayWidth:=12;
            wwDBGrid1.Columns[10].DisplayWidth:=5;
            end;        K:='SELECT TOP 1 WO FROM V_PRQT WHERE PRQNO='''+Smasterjos+'''';        sSQL:='SELECT SORNO,CODE,BDESC,'+
               '(SELECT TOP 1 QTY FROM JOBT WHERE JOBT.JOBNO=HC_SOT.SORNO)PQTY,'+
               '(SELECT TOP 1 PP FROM JOBUDF WHERE JOBUDF.JOBNO=HC_SOT.SORNO)PPP,'+
               '(SELECT TOP 1 CKGJ FROM JOBUDF WHERE JOBUDF.JOBNO=HC_SOT.SORNO)PCKGJ '+
               ' FROM HC_SOT WHERE SORNO=''+K+''';            sSQL:=sSQL+' and CODE LIKE''%KJ-%''';            ADODataSet2.CommandText:=sSQL;             ADODataSet2.Active:=true;            wwDBGrid2.Columns[0].DisplayLabel:='工单编号';
                wwDBGrid2.Columns[1].DisplayLabel:='';
                wwDBGrid2.Columns[2].DisplayLabel:='产品名称';
                wwDBGrid2.Columns[3].DisplayLabel:='总数量';
                wwDBGrid2.Columns[4].DisplayLabel:='品牌';
                wwDBGrid2.Columns[5].DisplayLabel:='出口国家';            wwDBGrid2.Columns[0].DisplayWidth:=8;
                wwDBGrid2.Columns[1].DisplayWidth:=20;
                wwDBGrid2.Columns[2].DisplayWidth:=40;
                wwDBGrid2.Columns[3].DisplayWidth:=10;
                wwDBGrid2.Columns[4].DisplayWidth:=10;
                wwDBGrid2.Columns[5].DisplayWidth:=10;
        end;    end;
      

  8.   

    假设你的变量Smasterjos的值是ABCDE,那么你的SQL就是:SELECT SORNO, CODE, BDESC,
           (SELECT TOP 1 QTY FROM JOBT WHERE JOBT.JOBNO=HC_SOT.SORNO) PQTY,
           (SELECT TOP 1 PP FROM JOBUDF WHERE JOBUDF.JOBNO=HC_SOT.SORNO) PPP,
           (SELECT TOP 1 CKGJ FROM JOBUDF WHERE JOBUDF.JOBNO=HC_SOT.SORNO) PCKGJ 
    FROM HC_SOT WHERE SORNO='SELECT TOP 1 WO FROM V_PRQT WHERE PRQNO='ABCDE''
     AND CODE LIKE '%KJ-%'注意WHERE部分的引号规则,很奇怪,MySQL竟然能够检索出结果来!
      

  9.   

    对啊
    那么我这样写 K:='SELECT TOP 1 WO FROM V_PRQT WHERE PRQNO='''+Smasterjos+'''';        sSQL:='SELECT SORNO,CODE,BDESC,'+
               '(SELECT TOP 1 QTY FROM JOBT WHERE JOBT.JOBNO=HC_SOT.SORNO)PQTY,'+
               '(SELECT TOP 1 PP FROM JOBUDF WHERE JOBUDF.JOBNO=HC_SOT.SORNO)PPP,'+
               '(SELECT TOP 1 CKGJ FROM JOBUDF WHERE JOBUDF.JOBNO=HC_SOT.SORNO)PCKGJ '+
               ' FROM HC_SOT WHERE SORNO=''+K+''';            sSQL:=sSQL+' and CODE LIKE''%KJ-%''';
    没错啊
      

  10.   

    好想是出错了那应该怎么样写。。SQL?
      

  11.   

    成功了。。我在SQL里面重新写过了一遍
     sSQL:='SELECT SORNO,CODE,BDESC,'+
               '(SELECT TOP 1 QTY FROM JOBT WHERE JOBT.JOBNO=HC_SOT.SORNO)PQTY,'+
               '(SELECT TOP 1 PP FROM JOBUDF WHERE JOBUDF.JOBNO=HC_SOT.SORNO)PPP,'+
               '(SELECT TOP 1 CKGJ FROM JOBUDF WHERE JOBUDF.JOBNO=HC_SOT.SORNO)PCKGJ '+
               ' FROM HC_SOT WHERE SORNO=(SELECT TOP 1 WO FROM V_PRQT WHERE PRQNO='''+Smasterjos+''')';