带有布尔参数的Delphi 2009 datasnap服务器方法错误

时间:2014-08-16 11:07:57

标签: delphi delphi-2009 datasnap

花了一天时间调试if语句后,我决定发帖... 是的,你读了一天来调试if语句!

我创建了一个示例数据绑定服务器,其中只有一种方法可以向您显示问题

这是简单的datasnap服务器

unit uModule;

interface

uses
  SysUtils, Classes, DSServer;

type
  TfModule = class(TDSServerModule)
  private
    { Private declarations }
  public
   { Public declarations }
    function Test(Foo : Boolean) : string;
  end;

var
  fModule: TfModule;

implementation

{$R *.dfm}

function TfModule.Test(Foo : Boolean) : string;
begin
  if (Foo = True) then
  begin
    Result := 'True';
  end
  else
  begin
    Result := 'False';
  end;
end;

end.

可能更简单吗?

这是客户

unit uClient;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, WideStrings, DbxDatasnap, FMTBcd, DB, SqlExpr, StdCtrls;

type
  TForm1 = class(TForm)
    SQLConnection1: TSQLConnection;
    SqlServerMethod1: TSqlServerMethod;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  Bar : string;
begin
  SQLConnection1.Open();

  SqlServerMethod1.ParamByName('Foo').AsBoolean := True;

  SqlServerMethod1.ExecuteMethod();

  Bar := SqlServerMethod1.ParamByName('ReturnParameter').AsString;

  SqlServerMethod1.Close();

  SQLConnection1.Close();

  ShowMessage(Bar);
end;

end.

信不信由你,但ShowMessage(Bar)返回" False" !!!

我找到了解决服务器问题的解决方案

function TfModule.Test(Foo : Boolean) : string;
begin
  if Foo then
  begin
    Foo := True;
  end
  else
  begin
    Foo := False;
  end;

  if (Foo = True) then
  begin
    Result := 'True';
  end
  else
  begin
    Result := 'False';
  end;
end;

是的,这是修复!通过此修复,客户端中的ShowMessage(Bar)返回" True"。

我真的不明白。

我搞砸了什么吗?

我的原始代码有什么问题?

注意:如果我改变了#34; if(Foo = true)那么"通过"如果Foo那么"有用 !但在我的真实项目中,if语句更复杂,我必须使用括号。

0 个答案:

没有答案