ADOQuery_Insert.Parameters.ParamValues['v_id'] := v_excel.workbooks[1].sheets[1].cells[i,1]如果这个单元格的内容为空,就报错:
delphi 参数?_1没有默认值,怎么避免这种错误?

解决方案 »

  1.   

    用VarIsNull判断一下有可能出现空值的字段。不过按道理ParamValues也是一个Variant,不该存在出错的理由,出错应该是错在别的地方。
      

  2.   

    最后自己解决的。用VarIsNull和VarIsEmpty判断结果不知道为什么都是空,下面把我的完整代码贴出来,供大家参考:
    procedure TImportEmployeeForm.btnImportClick(Sender: TObject);
    var
      v_excel :Variant;
      aColumns,aRows : Integer;
      i,j : Integer;
      v_var : variant;
    begin
      if Edit1.Text='' then
      begin
        Application.MessageBox('请选择导入文件及所在路径!','提示框', MB_OK + MB_ICONINFORMATION);
        exit;
      end;  if FileExists(OpenDialog1.FileName)=false then
      begin
        Application.MessageBox('文件路径不正确,请重新输入!','错误框', MB_OK + MB_ICONERROR);
        exit;
      end;  if Application.MessageBox('确定导入员工信息吗?此操作将删除原有员工信息!','确认框', MB_OKCANCEL + MB_ICONINFORMATION)=ID_OK then
      begin
        v_excel := CreateOleObject('Excel.Application');//创建OLE对象
        try
          v_excel.workBooks.Open(OpenDialog1.FileName);
          aColumns:= v_excel.WorkSheets[1].UsedRange.Columns.Count;  // 列数
          aRows   := v_excel.WorkSheets[1].UsedRange.Rows.Count;     // 行数      ProgressBar1.Position := 0;
          ProgressBar1.Max      := aRows;      ADOQuery_Del.Close;
          ADOQuery_Del.ExecSQL;      ADOQuery_Insert.Close;
          for i:=2 to aRows do
          begin
            v_var := VarToStr(v_excel.workbooks[1].sheets[1].cells[i,1]);
            if v_var <> '' then
              ADOQuery_Insert.Parameters.ParamValues['v_id'] := v_excel.workbooks[1].sheets[1].cells[i,1]
            else
              continue;        v_var := VarToStr(v_excel.workbooks[1].sheets[1].cells[i,2]);
            if v_var <> '' then
              ADOQuery_Insert.Parameters.ParamValues['v_name'] := v_var
            else
              ADOQuery_Insert.Parameters.ParamValues['v_name'] := '';
            
            ADOQuery_Insert.ExecSQL;
            ProgressBar1.Position := i;
          end;
          Application.MessageBox(PAnsiChar('导入结束,共导入了'+IntToStr(aRows-1)+'名员工信息!'),'提示框', MB_OK + MB_ICONINFORMATION);
          v_excel.workbooks.close;
        finally
          v_excel.quit;
        end;
      end;