First chance exception at $75CA9617. Exception class TDBXError with message
'SQL State: 42000, SQL Error Code: 260
不允许从数据类型 varchar 到数据类型 money 的隐性转换(表 'Orders',列 'Amount')。请使用 CONVERT 函数来运行此查询。
'.
Process Server.exe (688)
First chance exception at $75CA9617. Exception class EDatabaseError with message 'Unable to find record. No key specified'. Process Server.exe (688)DataSnap三层,服务端保存代码如下:,如果我将Amount改为Integer类型,则没有问题。我用的是Delphi 2010function TServerMethods1.MyApplyUpdates(TableName: String; Delta: OleVariant;out err: String): Boolean;
const sql='select * from %s where 1=0 ';
var
ErrCount:Integer;
TD:TTransactionDesc;
sqlstr :string;
begin
Result:=False; TD.TransactionID := 1;
TD.IsolationLevel := xilREADCOMMITTED;
SQLConnection1.StartTransaction(TD); try
SQLQuery1.Close; sqlstr:=Format(sql,[TableName]);
SQLQuery1.sql.text:=sqlstr;
SQLQuery1.open;
DataSetProvider1.ApplyUpdates(Delta,-1,ErrCount);
Result:=ErrCount=0;
if Result then
SQLConnection1.Commit(TD)
else
SQLConnection1.Rollback(TD);
//SQLQuery1.Close;
except
on E:Exception do
begin
SQLConnection1.Rollback(TD);
err:=E.Message +' # '+inttostr(ErrCount);
end;
end;
end;
'SQL State: 42000, SQL Error Code: 260
不允许从数据类型 varchar 到数据类型 money 的隐性转换(表 'Orders',列 'Amount')。请使用 CONVERT 函数来运行此查询。
'.
Process Server.exe (688)
First chance exception at $75CA9617. Exception class EDatabaseError with message 'Unable to find record. No key specified'. Process Server.exe (688)DataSnap三层,服务端保存代码如下:,如果我将Amount改为Integer类型,则没有问题。我用的是Delphi 2010function TServerMethods1.MyApplyUpdates(TableName: String; Delta: OleVariant;out err: String): Boolean;
const sql='select * from %s where 1=0 ';
var
ErrCount:Integer;
TD:TTransactionDesc;
sqlstr :string;
begin
Result:=False; TD.TransactionID := 1;
TD.IsolationLevel := xilREADCOMMITTED;
SQLConnection1.StartTransaction(TD); try
SQLQuery1.Close; sqlstr:=Format(sql,[TableName]);
SQLQuery1.sql.text:=sqlstr;
SQLQuery1.open;
DataSetProvider1.ApplyUpdates(Delta,-1,ErrCount);
Result:=ErrCount=0;
if Result then
SQLConnection1.Commit(TD)
else
SQLConnection1.Rollback(TD);
//SQLQuery1.Close;
except
on E:Exception do
begin
SQLConnection1.Rollback(TD);
err:=E.Message +' # '+inttostr(ErrCount);
end;
end;
end;
procedure TFrmWebSalesCheck.SpeedButton3Click(Sender: TObject);
begin
if MessageShow('您是否确认这些数据已收到付款?',2)=6 then
begin
if ClientDataSet1.ChangeCount>0 then //数据没改变就不用提交了
begin
if SaveDBData('Orders',ClientDataSet1.Delta) then//xxx就是表名了
begin
MessageShow('保存成功!');
ClientDataSet1.MergeChangeLog;//合并所有改变的数据
end;
end;
end;
end;////////////////////////function SaveDBData(TableName: string; Delta: OleVariant):Boolean;
var
err:String;
Server: TServerMethods1Client;
begin
Server := TServerMethods1Client.Create(DSSModule.SQLConnection1.DBXConnection);
try
if Server.MyApplyUpdates(TableName,Delta,err) then
Result :=True
else
MessageShow('保存数据出错:'+err);
finally
Server.Free
end;
end;
否则,客户端的类型就用 String。然后在本地使用前转换一下。