为什么TClientDataSet不能将数据提交给数据库呢?
客户端的代码
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}
interface
uses
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.
[解决办法]
cdsCustomer.ApplyUpdates(0);
并没有异常
在dbgrid中都已经反映出来了
但是就是sqlserver那个数据库确没有改变
==================================================
delphi
在调试的时候并没有报告异常
但是
sqlserver数据库中该表是有约束条件的
所以修改不成功
==================================================
因为cdsCustomer.ApplyUpdates(0); 的参数为0,所以客户端不能接收到错误,而DBGrid显示的是本地的数据,要想在客户端捕获错误,必须设置ApplyUpdates的最大错误参数,-1是出现错误后服务器立即停止操作,返回错误。至于客户端捕获错误的具体办法,Delphi例子中有,可以参考。表的约束条件错误就是我前面所说的外键约束违法了
[解决办法]
像这种情况建议在调试时打开 sql server 的事件 查看器,这样比较容易跟踪sql 语句出现的问题
[解决办法]
SQL可能用事件查看器