客户端的代码
Memo1.Lines.text为select * from Customers;
procedure TForm1.Button4Click(Sender: TObject);
begin
  cdsCustomer.Edit;
  cdsCustomer.FieldValues['CustomerID']:=edit1.Text;
  cdsCustomer.Post;
  cdsCustomer.ApplyUpdates(0);//此处提交了后,数据并未写入数据库 为什么呢??
end;应用服务器端的设置情况
unit Unit2;{$WARN SYMBOL_PLATFORM OFF}interfaceuses
  Windows, Messages, SysUtils, Classes, ComServ, ComObj, VCLCom, DataBkr,
  DBClient, Project1_TLB, StdVcl, Provider, DB, ADODB;type
  Tpc121 = class(TRemoteDataModule, Ipc121)
    ADOTable1: TADOTable;
    DataSetProvider1: TDataSetProvider;
    ADOConnection1: TADOConnection;
    ADOQuery1: TADOQuery;
  private
    { Private declarations }
  protected
    class procedure UpdateRegistry(Register: Boolean; const ClassID, ProgID: string); override;
  public
    { Public declarations }
  end;implementation{$R *.DFM}class procedure Tpc121.UpdateRegistry(Register: Boolean; const ClassID, ProgID: string);
begin
  if Register then
  begin
    inherited UpdateRegistry(Register, ClassID, ProgID);
    EnableSocketTransport(ClassID);
    EnableWebTransport(ClassID);
  end else
  begin
    DisableSocketTransport(ClassID);
    DisableWebTransport(ClassID);
    inherited UpdateRegistry(Register, ClassID, ProgID);
  end;
end;initialization
  TComponentFactory.Create(ComServer, Tpc121,
    Class_pc121, ciMultiInstance, tmApartment);
end.

解决方案 »

  1.   

    把cdsCustomer.ApplyUpdates(0);的参数改为-1,然后在客户端检测更新错误类型,一般可能是主键重复或为空,或者不能为空的数据没填写数据,或者有什么外键违法等等。
      

  2.   

    cdsCustomer.ApplyUpdates(0);
    并没有异常
    在dbgrid中都已经反映出来了
    但是就是sqlserver那个数据库确没有改变我用的是sqlserver2000数据库
      

  3.   

    如果改用Access数据库就没问题
    我不知道问题出在哪儿了
      

  4.   

    问题已经找到了
    delphi
    在调试的时候并没有报告异常
    但是
    sqlserver数据库中该表是有约束条件的
    所以修改不成功
      

  5.   

    cdsCustomer.ApplyUpdates(0); 
    并没有异常 
    在dbgrid中都已经反映出来了 
    但是就是sqlserver那个数据库确没有改变 
    ==================================================
    delphi 
    在调试的时候并没有报告异常 
    但是 
    sqlserver数据库中该表是有约束条件的 
    所以修改不成功
    ==================================================
    因为cdsCustomer.ApplyUpdates(0); 的参数为0,所以客户端不能接收到错误,而DBGrid显示的是本地的数据,要想在客户端捕获错误,必须设置ApplyUpdates的最大错误参数,-1是出现错误后服务器立即停止操作,返回错误。至于客户端捕获错误的具体办法,Delphi例子中有,可以参考。表的约束条件错误就是我前面所说的外键约束违法了
      

  6.   

    补充:数据库更新错误Delphi程序是不能检测出来的,因为这与代码无关,所以也不会出现运行异常,如数据库连接错误倒是能够检测出来的。采用Delphi例子的办法检测更新错误。
      

  7.   

    像这种情况建议在调试时打开 sql server 的事件 查看器,这样比较容易跟踪sql 语句出现的问题