楼上几位,我还是不太明白!!!!!!最简单的程序在这:procedure TForm1.Button1Click(Sender: TObject); var a,b :integer; var s:string; begin a:=1; b:=2; s:='a<b'; if a<b then begin showmessage('ok'); end; end; end.谁只要能把if a<b then中的a<b想办法用S这个字串来替就可以了(当然不知直接用了,s是string,a<b是boolean。谁行??????????
procedure TForm1.Button1Click(Sender: TObject); var a,b :integer; var s:string; begin a:=1; b:=2; s:='a<b'; if FUN(s) then begin showmessage('ok'); end; end; end. 关键如何来定义FUN处理字符串,
太好了,这个运行没有错,呵呵 procedure TForm1.Button1Click(Sender: TObject); var s: variant; begin s:= edit1.Text; if Bool(s) then showmessage('TRUE') else showmessage('FALSE'); end;但是结果是错的:P
procedure TForm1.Button1Click(Sender: TObject); var a,b :integer; var s:boolean; begin a:=1; b:=2; s:=a<b; if s then begin showmessage('ok'); end; end; end. 不知道这么行吗?
这样,这样: select 1 as Field(你自己写,不要也可) where (:pcondition) parameters.parambyname('pcondition') := edit1.textif(not isempty) then begin true end else false; hahahahahahahhahaha
高呀 DELPHI 也只有在SQL时才是解释的
ADOQuery1.Close; ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('select 1 As Expr1 where '+Trim(Edit1.Text)); ADOQuery1.Prepared := true; ADOQuery1.Open; if(not ADOQuery1.IsEmpty) then showmessage('TRUE') else showmessage('FALSE'); 通过测试,加上try就更好了 + - * / ()没有问题,只是 MOD Div 可就得按sql的标准了
procedure TForm1.Button5Click(Sender: TObject); var a,b :integer; s:boolean; begin a:=1; b:=2; s:=a<b; if s then begin showmessage('ok'); end; end; 老兄这种方法我试了--可以。
我估计你要的并不是那个字符串 你要的是一个 boolen 类型的变量 s 如果你的 a 和 b 的关系是有限的,可以考虑 先比较 a b 然后把比较的结果付给 s 然后使用 s 来判断 不过觉得这样好象么有什么简便哦 呵呵我也糊涂了
我也喜欢这么做。 但解释语句可以把运算符进去我还没写过。 我在php中常写 for ( $i = 0 ; $i < 100 ; $i ++ ) include $i.".php" ; 这个好像delphi就无法做到。
s1:='a'+'<'+'b';
然后再判断s,和s1
关键是看你怎么生成s1
var a,b :integer;
var s:string;
begin
a:=1;
b:=2;
s:='a<b';
if a<b then
begin
showmessage('ok');
end;
end;
end.谁只要能把if a<b then中的a<b想办法用S这个字串来替就可以了(当然不知直接用了,s是string,a<b是boolean。谁行??????????
var a,b :integer;
var s:string;
begin
a:=1;
b:=2;
s:='a<b';
if FUN(s) then
begin
showmessage('ok');
end;
end;
end.
关键如何来定义FUN处理字符串,
关键在于,你整个表达式是一个字符串,不能直接进行运算。以后的语言要是有一个excute()函数就好了,执行用户的表达式给回结果。
procedure TForm1.Button1Click(Sender: TObject);
var s: variant;
begin
s:= edit1.Text;
if Bool(s) then
showmessage('TRUE')
else
showmessage('FALSE');
end;但是结果是错的:P
var a,b :integer;
var s:boolean;
begin
a:=1;
b:=2;
s:=a<b;
if s then
begin
showmessage('ok');
end;
end;
end.
不知道这么行吗?
必须对表达式进行分析
我作过类似的东东
可以对算术表达式进行分析
当然改一改可以对
逻辑表达式进行分析
如果你要的话
我可以改过之后发给你
EM:[email protected]
select 1 as Field(你自己写,不要也可) where (:pcondition)
parameters.parambyname('pcondition') := edit1.textif(not isempty) then
begin
true
end
else
false;
hahahahahahahhahaha
DELPHI
也只有在SQL时才是解释的
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select 1 As Expr1 where '+Trim(Edit1.Text));
ADOQuery1.Prepared := true;
ADOQuery1.Open;
if(not ADOQuery1.IsEmpty) then
showmessage('TRUE')
else
showmessage('FALSE');
通过测试,加上try就更好了 + - * / ()没有问题,只是 MOD Div 可就得按sql的标准了
这是最简单的!
否则Delphi怎么能看懂你的原程序?
但是不能对DELPHI中定义的变量进行判断
只能对常量
不免美中不足
要完全实现还是需要对表达式解析的
这种功能在VFP里实现特别简单,特别实用。(用宏替换 & 和名称表达式())
但是在delphi 和 bcb 里几乎不可能实现,我以前一直用VFP对类似字符串转化为 名称 或 表达式的用法用的多了。但等我学bcb时,也到处发帖子问类似问题,得到的结果是绝对没有,就是因为他们是编译语言,而非解释语言。
即便费了不少心思实现你提到的具体例子,但也不可能从根本上解决其他类似问题。即字符串转化为名称或表达式的问题。
var
a,b :integer;
s:boolean;
begin
a:=1;
b:=2;
s:=a<b;
if s then
begin
showmessage('ok');
end;
end;
老兄这种方法我试了--可以。
你要的是一个 boolen 类型的变量 s
如果你的 a 和 b 的关系是有限的,可以考虑
先比较 a b 然后把比较的结果付给 s
然后使用 s 来判断
不过觉得这样好象么有什么简便哦
呵呵我也糊涂了
但解释语句可以把运算符进去我还没写过。
我在php中常写
for ( $i = 0 ; $i < 100 ; $i ++ )
include $i.".php" ;
这个好像delphi就无法做到。
搞定。一般介绍算法的书上都会有例子的。