function TDataModule1.PipeNameExists(PName: string; var ID: Integer): Boolean;
var
    RC: Integer;
begin
    ADOQuery1.SQL.Text := 'select Pipe_ID from Comp_Pipe_Name where Pipe_Name=:Pn';
    ADOQuery1.Parameters.ParamByName('Pn').Value := PName;
    ADOQuery1.Open;
    RC := ADOQuery1.RecordCount;
    if RC>0 then
      ID := ADOQuery1.FieldByName('Pipe_ID').AsInteger;
    //Result := (RC>0);
end;
PS:这段程序是在Datamodual下编的
我想判断一下,当我在ComboBox1里输入字符时,是否有重复;
----------------------------------------------------------------------------------
 Pn := InputDlg.ComboBox1.Text;
      with DataModule1.ADOQuery1 do
      begin
        Close;
        SQL.Clear;
        if not DataModule1.PipeNameExists(Pn, PipeID) then
        begin
          SQL.Add('Insert Comp_Pipe_Name(Pipe_Name) Values(:a) select @@IDentity as ID');
          Parameters.ParamByName('a').value:= InputDlg.ComboBox1.Text;
          Open;
          PipeID := FieldByName('ID').AsInteger;
          ShowMessage(Format('最近插入的是%d',[PipeID]));
        end;
这段是主程序的代码,如果没输入重复,则执行下面操作,运行后,可以编译,但操作报错,"'ADOQuery1:Field 'ID' not found'"
请问是什么原因?

解决方案 »

  1.   

    'select Pipe_ID from Comp_Pipe_Name where Pipe_Name=:Pn'  没有ID阿
      

  2.   

    function TDataModule1.PipeNameExists(PName: string; var ID: Integer): Boolean; 
    var 
        RC: Integer; 
    begin 
        ADOQuery1.SQL.Text := 'select Pipe_ID from Comp_Pipe_Name where Pipe_Name=:Pn'; 
        ADOQuery1.Parameters.ParamByName('Pn').Value := PName; 
        ADOQuery1.Open; 
        RC := ADOQuery1.RecordCount; 
        if RC>0 then 
          ID := ADOQuery1.FieldByName('Pipe_ID').AsInteger; 
        //Result := (RC>0); 
        ADOQuery1.Close;
    end; 
    PS:这段程序是在Datamodual下编的 
    我想判断一下,当我在ComboBox1里输入字符时,是否有重复; 
    ---------------------------------------------------------------------------------- 
    Pn := InputDlg.ComboBox1.Text; 
          with DataModule1.ADOQuery1 do 
          begin 
            Close; 
            SQL.Clear; 
            if not DataModule1.PipeNameExists(Pn, PipeID) then 
            begin 
              //SQL.Add('Insert Comp_Pipe_Name(Pipe_Name) Values(:a) select @@IDentity as ID'); 
              SQL.Add('Insert Comp_Pipe_Name(Pipe_Name) Values(:a) select @@IDentity as ID');
              Parameters.ParamByName('a').value:= InputDlg.ComboBox1.Text; 
              Open; 
              PipeID := FieldByName('ID').AsInteger; 
              ShowMessage(Format('最近插入的是%d',[PipeID])); 
            end; 
    这段是主程序的代码,如果没输入重复,则执行下面操作,运行后,可以编译,但操作报错,"'ADOQuery1:Field 'ID' not found'" 
    请问是什么原因?
      

  3.   

    function TDataModule1.PipeNameExists(PName: string; var ID: Integer): Boolean; 
    var 
        RC: Integer; 
    begin 
        ADOQuery1.SQL.Text := 'select Pipe_ID from Comp_Pipe_Name where Pipe_Name=:Pn'; 
        ADOQuery1.Parameters.ParamByName('Pn').Value := PName; 
        ADOQuery1.Open; 
        RC := ADOQuery1.RecordCount; 
        if RC>0 then 
          ID := ADOQuery1.FieldByName('Pipe_ID').AsInteger; 
        //Result := (RC>0); 
        ADOQuery1.Close; 
    end; 
    PS:这段程序是在Datamodual下编的 
    我想判断一下,当我在ComboBox1里输入字符时,是否有重复; 
    ---------------------------------------------------------------------------------- 
    Pn := InputDlg.ComboBox1.Text; 
          with DataModule1.ADOQuery1 do 
          begin 
            Close; 
            SQL.Clear; 
            if not DataModule1.PipeNameExists(Pn, PipeID) then 
            begin 
              //SQL.Add('Insert Comp_Pipe_Name(Pipe_Name) Values(:a) select @@IDentity as ID'); 
              SQL.Text := 'Insert Comp_Pipe_Name(Pipe_Name) Values(:a) select @@IDentity as ID'; 
              Parameters.ParamByName('a').value:= InputDlg.ComboBox1.Text; 
              Open; 
              PipeID := FieldByName('ID').AsInteger; 
              ShowMessage(Format('最近插入的是%d',[PipeID])); 
            end; 
    这段是主程序的代码,如果没输入重复,则执行下面操作,运行后,可以编译,但操作报错,"'ADOQuery1:Field 'ID' not found'" 
    请问是什么原因?
      

  4.   

    首先谢谢您,想请教下为什么换成你那句就对了呢,我觉得这两句是一个意思啊,希望不吝赐教!
    SQL.Add('Insert Comp_Pipe_Name(Pipe_Name) Values(:a) select @@IDentity as ID'); 
    --------------------------------------------------------------------------------------------
    SQL.Text := 'Insert Comp_Pipe_Name(Pipe_Name) Values(:a) select @@IDentity as ID'; 
           
      

  5.   

    可以把结果存入数据库,但是为什么弹出提示:list index out of bounds
      

  6.   

    可以把结果存入数据库,但是为什么弹出提示:list index out of bounds
    ======================================================================
    怎么改呢?
      

  7.   

    你都用一个ADOQuery1 ,你换成两个估计就没有问题了
    你可以把Clear,写在PipeNameExists判断之后.试试!!
      

  8.   

    SQL.Add('Insert Comp_Pipe_Name(Pipe_Name) Values(:a) select @@IDentity as ID'); 
    -------------------------------------------------------------------------------------------- 
    SQL.Text := 'Insert Comp_Pipe_Name(Pipe_Name) Values(:a) select @@IDentity as ID'; 这两句是可以通用的,但如果SQL已经赋值过,用SQL.Add前,先调用SQL.Clear。上面有人说过。