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;

解决方案 »

  1.   

    已经提示你很清楚了,varchar转money出问题,而且你改为integer就不出问题了,这已经很明显了,就是类型不匹配,你处理一下类型就是了
      

  2.   

    類型不匹配,用數值integer試試
      

  3.   

    如果是单纯写SQL语句UPDATE,是不存在问题,但是我就想做一个通用的保存过程,客户端我的调用过程如下:
    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;
      

  4.   

    无解么?这难道是DELPHI 2010 DBX的BUG?
      

  5.   

    服务端的 Sql 改写一下。
    否则,客户端的类型就用 String。然后在本地使用前转换一下。
      

  6.   

    服务端的 Sql 怎么改写