花了一天时间调试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语句更复杂,我必须使用括号。