procedure TfrmStockSet.EditProTypeKeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then
begin
   with datamodule2.Q_ProType(active已经设置成true) do
   begin
      close;
      parameters[0].Value:=EditProType.Text;
      open;
      try
         if eof then
         begin
            messagebox(self.Handle,'没有此产品类别,请检查后重新输入!','错误提示',mb_ok);
            EditProType.SetFocus;
            EditProType.Clear;
            close;
         end
         else
         begin
            EditStock.Text:=fieldbyname('库存总计').AsVariant;
            dbgrid1.Refresh;
         end;
      except
         close;
      end;
   end;
end;
end;
系统报错是“应用程序在当前操作中使用了错误类型的值”.

解决方案 »

  1.   

    dbgrid1.Refresh;
    改成
    Q_ProType.Close;
    Q_ProType.Open;
      

  2.   

    EditStock.Text:=fieldbyname('库存总计').AsVariant;
    改成
    EditStock.Text:=fieldbyname('库存总计').AsString;
      

  3.   

    错误的地方是open;后之间就到了except这里。
      

  4.   

    parameters[0].Value:=EditProType.Text;
    EditStock.Text:=fieldbyname('库存总计').AsVariant;
    有可能就是着两处出错,检查数据类型是否匹配
      

  5.   

    我已经查出问题的所在了。只是现在又有个奇怪的问题:我的dbgrid连接上了datamodule2.Q_ProType,为什么在我上面那段代码执行后dbgrid却没有任何东西显示呢?(记录也是存在的)
      

  6.   

    dbgrid1.Refresh;
    改成
    Q_ProType.Close;
    Q_ProType.Open;啊!
    要这样刷新的!
      

  7.   

    parameters[0].Value:=EditProType.Text;
    要先为参数确定一个类型同数据库中类型
    如:parameters[0].AsString:=Quotedstr(EditProType.Text);
      

  8.   

    查询条件应该没有问题,因为我在SQL的查询分析器里试过了,是可以查到的。