环境:
win7,delphi2010,mssql2005好像没有参数的,一个窗体,一个数据感知控件(DBEdit1)
NewRecord的时候,赋值
DBEdit1.Field.Value := 'DTED10-';
字段属性
[DjID] [nvarchar](20) NOT NULL
----------
就是这样啊,打开窗体后,在控件 DBEdit1 中输入什么或者更改什么,都出现这样的错误提示:
参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突。
----------
也试过不用数据感知控件(DBEdit1),改用使用Edit1(TEdit),当 Post 的时候还是出现这样的错误提示。
但是很郁闷,提示之后,再 post ,却又可以 post 进去了。字段属性应该没有什么问题啊?为什么呢?还有哪儿没有注意的问题?谢谢大家了。

解决方案 »

  1.   

    补充说明一下:
    使用的是adotable
      

  2.   

    只有这一个字段?
    把你所有字段类型和用edit控件的post代码贴出来看看
      

  3.   

    Zb: TADOTable;
    Mx: TADOTable;
    在 Zb.State in [DsEdit,DsInsert] 下,以下任何一个字段的更改(还没有Post),都是这个错误提示。
    delphi字段----mssql2005字段类型:
    DBEdit1:TDBEditEh----[DjID] [nvarchar](20) NOT NULL,
    DBEdit4:TDBDateTimeEditEh----[kdDateTime] [smalldatetime] NULL CONSTRAINT [DF_ExpOrders_kdDateTime]  DEFAULT (getdate()),
    DBEdit6:TDBDateTimeEditEh----[iDate] [smalldatetime] NULL,
    DBEdit8:TDBEdit----[Nation] [nvarchar](50) NULL,
    OrdersMemo1:TDBMemo----[More] [ntext] NULL,
    OrdersMemo2:TDBMemo----[reMark] [ntext] NULL,
      

  4.   

    错误提示后,再更改时可以的了。可是,Post不会成功了。
      

  5.   


    //-我把代码贴出来吧。很乱的,不够勇气面对。其实真的没有什么参数,就只有一个“DjNo”
    //-以上是前面一个窗体DBgridEh的OnDblClick事件
    procedure Tfrm_ExpKdZb.ac_EditExecute(Sender: TObject);
    begin
       if zbRcd<>0 then
       begin
       frm_ExpKdEdit:=Tfrm_ExpKdEdit.Create(Application);
       frm_ExpKdEdit.Tag :=1;
       frm_ExpKdEdit.DjNo := OrdersGrid.Fields[0].Value;
       frm_ExpKdEdit.ShowModal;
       frm_ExpKdEdit.Free;
       OpenDataSet;
       end
       else
         application.MessageBox('没有单据可以操作','提示',MB_OK);
    end;
    //-以上是前面一个窗体DBgridEh的OnDblClick事件//-以下是出错窗体的主要代码。F8跟踪过,出错的时候也没有停留在一个固定的地方
    //-反正是DBEdit或者DBEditEh或者DBMemo的任何一个更改,就弹出参数类型不正确的错误提示
      public
           DjNo:string;
    //-这个 DjNo 是本窗口的定义。procedure Tfrm_ExpKdEdit.FormShow(Sender: TObject);
    begin
      self.Cursor := crHourGlass;
      OpenDataSet; JiansuoNO.Text:=Zb.FieldByName('JiansuoNO').AsString;
     NeiBuNO.Text:=Zb.FieldByName('NeiBuNO').AsString;
     ShengChanNO.Text:=Zb.FieldByName('ShengChanNO').AsString;
     case tag of
     0:
     begin
       Zb.insert;
     end;
     1:
     begin
       Zb.Edit;
     end;
     2:
     begin
       Zb.ReadOnly;
       if zb.FieldByName('SysUserName').AsString<>dm.SysUserName then
       begin
         ToolButton7.Enabled:=False;
         ToolButton8.Enabled:=False;
         ToolButton9.Enabled:=False;
         ToolButton10.Enabled:=False;
         DBEdit1.ReadOnly:=True;
         DBEdit6.ReadOnly:=True;
         DBEdit8.ReadOnly:=True;
         DBEdit7.ReadOnly:=True;
         DBGridEh1.ReadOnly:=True;
         OrdersMemo2.ReadOnly:=True;
         OrdersMemo1.ReadOnly:=True;
       end; end; end;  self.Cursor := crDefault;
    end;procedure Tfrm_ExpKdEdit.ShowControl;
    begin;
    {}
        if (Zb.State in [DsEdit,DsInsert]) then
        begin       self.ac_Add.Enabled:=false;
           self.ac_Edit.Enabled:=false;
           self.ac_Del.Enabled :=false;
           self.ac_Print.Enabled:=false;
           self.ac_RepSet.Enabled :=false;
           self.ac_Save.Enabled :=true;
           self.ac_Cancel.Enabled :=true;    end
        else
        begin       self.ac_Edit.Enabled:=true;
           self.ac_Del.Enabled :=true;
           self.ac_Print.Enabled:=false;
           self.ac_RepSet.Enabled :=false;
           self.ac_Save.Enabled :=false;
           self.ac_Cancel.Enabled :=false;
        end;
    end;procedure Tfrm_ExpKdEdit.sZbDataChange(Sender: TObject; Field: TField);
    begin
        setControlValue;
        if mx.Active then
           Mx.Close;
        Mx.Open;
        MxRcd:=Mx.RecordCount;end;procedure Tfrm_ExpKdEdit.OpenDataSet;
    begin
      if tag=0 then
         sqlStr_zb := ' kdDateTime >= '+''''+FormatDateTime('yyyy-mm-dd',now())+'''' +
      ' and kdDateTime <=' +''''+FormatDateTime('yyyy-mm-dd',now()+1)+''''+''
      else
         sqlStr_zb := ' DjID='+''''+DjNo+'''';
      if Zb.Active then
         Zb.Close;
      Zb.Filter:='';
      Zb.Filtered:=False;
      Zb.Filter:=sqlStr_zb;
      Zb.Filtered:=true;
      Zb.Open;
      zbRcd := Zb.RecordCount;
      if Zb.FieldByName('iState').AsInteger<>0 then
      begin
         self.Panel5.Visible:=true;
         self.Panel5.Caption :='此单作废';
      end
      else
        self.Panel5.Visible :=false;
    end;
    procedure Tfrm_ExpKdEdit.dsAdoZbStateChange(Sender: TObject);
    begin
       ShowControl;
    end;procedure Tfrm_ExpKdEdit.ac_AddExecute(Sender: TObject);
    begin
       Zb.insert;
    end;procedure Tfrm_ExpKdEdit.ac_SaveExecute(Sender: TObject);
    begin
      Zb.Post;
    end;procedure Tfrm_ExpKdEdit.ac_EditExecute(Sender: TObject);
    begin
       if Zb.FieldByName('SysUserName').AsString<>dm.SysUserName then
         begin
          showmessage('抱歉,您似乎不是本单的订货人,不能编辑。');
         end
       else
       begin   if zbRcd<>0 then
          Zb.Edit
       else
         Application.MessageBox('当前子表中没有数据可以操作!','提示',MB_OK);
       end;
    end;procedure Tfrm_ExpKdEdit.ac_CancelExecute(Sender: TObject);
    begin
      Zb.Cancel;
    end;procedure Tfrm_ExpKdEdit.ac_DelExecute(Sender: TObject);
    begin
       if Zb.FieldByName('SysUserName').AsString<>dm.SysUserName then
         begin
          showmessage('抱歉,您似乎不是本单的订货人,不能删除。');
         end
       else
       begin   if ((zbRcd<>0) and (Audit.RecordCount=0)) then
        begin
         if Application.MessageBox('你真的要删除本订单吗?','提示',MB_YESNO)=IDNO then
            abort;
            Zb.Delete;
         end
         else
         Application.MessageBox('当前没有单据可以删除,或者已经添加了评审人。','提示',MB_OK);   end;
    end;
    procedure Tfrm_ExpKdEdit.ZbNewRecord(DataSet: TDataSet);
    var Sql:string;
    begin
         dbedit1.Field.AsString := 'DTED' + Formatdatetime('yy',now())+'-';
         dbedit4.Field.AsDateTime:=now();
         DBEdit6.Field.AsDateTime:=now()+14;
    end;procedure Tfrm_ExpKdEdit.N1Click(Sender: TObject);
    begin
       if Zb.FieldByName('SysUserName').AsString<>dm.SysUserName then
         begin
          showmessage('抱歉,您似乎不是本单的订货人,不能编辑。');
         end
       else
       begin
         mx.insert;
       end;
    end;procedure Tfrm_ExpKdEdit.N2Click(Sender: TObject);
    begin
       if Zb.FieldByName('SysUserName').AsString<>dm.SysUserName then
         begin
           showmessage('抱歉,您似乎不是本单的订货人,不能编辑。');
         end
       else
       begin
       if mxRcd<>0 then
          begin
            mx.Edit;
          end
       else
         Application.MessageBox('当前子表中没有数据可以操作!','提示',MB_OK);
       end;
    end;procedure Tfrm_ExpKdEdit.N3Click(Sender: TObject);
    begin
       if Zb.FieldByName('SysUserName').AsString<>dm.SysUserName then
       begin
         showmessage('抱歉,您似乎不是本单的订货人,不能删除。');
       end
       else
       begin
       if mxRcd<>0 then
          mx.Delete
       else
          Application.MessageBox('当前子表中没有数据可以删除!','提示',MB_OK);
       end;
    end;procedure Tfrm_ExpKdEdit.N4Click(Sender: TObject);
    begin
       mx.Post;
    end;procedure Tfrm_ExpKdEdit.N5Click(Sender: TObject);
    begin
       mx.Cancel;
    end;procedure Tfrm_ExpKdEdit.ZbBeforePost(DataSet: TDataSet);
    begin
      Zb.FieldByName('DeptName').AsString:=dm.DeptName;
      Zb.FieldByName('SysUserName').AsString:=dm.SysUserName;
      Zb.FieldByName('DeptID').AsInteger:=dm.DeptID;
    end;procedure Tfrm_ExpKdEdit.ZbBeforeDelete(DataSet: TDataSet);
    var rs:TADODataSet;
    begin
       dm.AdoConn.Execute('delete from ExpordersItems where DjID='''+Trim(DBEdit1.Field.Value)+'''');
    end;
      

  6.   

    会不会有其它字段不能为空,post了空进去啊?
      

  7.   

    DBGridEH 的 BUG 是不是你的 DBGrideh 开始的Visible = False 后面才代码显示出来的?
    或者你的 DBGrideh 的原始状态是被其他控件覆盖 (在其他控件下面) 后面才显示出来的?
    这个问题困扰了俺好久........目前还没有完全解决.
    改了部分 DBGrideh 的代码.问题是解决了.但是感觉还是不完美....
    很少来这. QQ149220741
      

  8.   

    DBgrideh 改为 DBGrid 试一下就知道了