我这里有个mysql表
id  int(11) NOT NULL auto_increment,
name varchar(20) default NULL,ClientDataSet怎样向这个表插入记录???
我想这个id的值不应该由ClientDataSet添加才是啊.
可是,ClientDataSet.applyupdate(-1);时,报错不能把id字段更新为空值.

解决方案 »

  1.   

    //看看这个函数可以不?NotUpField为你不需要更新到数据库的字段名
    FNotUpdateField: array of string;function UpdateDataSet(SQLCommand:string;TableName:String; 
                DataSet:TClientDataSet;NotUpField:Array of string): Integer; 
                stdcall;////////////////////////
    function TDBAccessADO.UpdateDataSet(SQLCommand:string;TableName:String;
            DataSet:TClientDataSet;NotUpField:Array of string): Integer;
    var
      ErrorCount:integer;
      int1,int2:integer;
    begin
      if DataSet=nil then
      begin
        result:=S_False;
        exit;
      end;
      if DataSet.ChangeCount=0 then
      begin
        result:=0;
        exit;
      end;
      try
        adoconnection1.Connected:=false;
        adoconnection1.Connected:=true;
      except
        result:=S_False;
        exit;
      end;  //FNotUpdateField
      int1:=length(NotUpField);
      if int1<>0 then
      begin
        setlength(FNotUpDateField,int1);
        int2:=0;
        for int1:=low(NotUpField) to high(notUpField) do
        begin
          FNotUpdateField[int2]:=NotUpField[int1];
          inc(int2);
        end;
      end;  try
        adodataset1.CommandText:=SQLCommand;
        clientDataset1.Data:=dataset.Delta;
        DataSetProvider1.ApplyUpdates(clientdataset1.Data,0,errorcount);
        if errorcount=0 then
          dataset.MergeChangeLog;
        result:=errorcount;
      except
        result:=S_False;
      end;
    end;