永发信息网

DELPHI如何简洁和高效的判断EDIT中输入的值类型?

答案:4  悬赏:50  手机版
解决时间 2021-07-19 01:02

需要根据用户输入的值进行不同的SQL查询,

例如用户输入:123123 那么查询语句的条件写为where 序号=123123

用户输入:测试 那么查询语句的条件写为where 用户名='测试'

用户输入:2009-12-01 那么查询语句的条件写为where 日期='2009-12-1'

等等。。。。。

主要区别在于条件后是否将用户输入的值用引号引起来。

怎么写代码会简洁些,而且执行效率高些呢?

找了找发现以下这种方法相对简洁,但是遇到日期型等就只能一直TRY下去了。有更好的方法么?

function isInt(val: String): Boolean;
begin
try
strtoint(val);
result := true;
execpt
result := false;
end;
end;

最佳答案

这个方法不好,不科学,如果非要这样写的话,这个函数也不太好,用这个吧


function CheckString(val: String): String;
var i:integer;
DT:TDateTime;
begin
Result:='';
if(tryStrtoint(val,i))then
begin
Result:='序号=' + val;
end;
if(tryStrtoDateTime(val,DT))then
begin
if(Result='')then
begin
Result:='日期=''' + val + '''';
end
else
begin
Result:=Result + ' or 日期=''' + val + '''';
end;
end;
if(Result='')then
begin
Result:='用户名=''' + val + '''';
end
else
begin
Result:=Result + ' or 用户名=''' + val + '''';
end;
end;


调用


showmessage('select * from where ' + CheckString('123'));

全部回答
建议 where 序号='+edit.text+' or 用户名='''+edit.text+''' or 日期='''+edit.text+'''

可能很难完善,假如有人使用纯数字的用户名呢,你就把他当序号来查询了.

我建议你还是规定一个输入语法,比如操作者打算按序号查找,那麻烦在序号前加个x,如果是名字,前面加个m,日期就加r等等,程序判断输入的首个字母然后决定怎么处理.

在选择表的时候就把表中字段类型取出来,选择字段的时候将类型给 EDIT ,Edit输入的时候就按照不同类型给予不同的输入方式

select syscolumns.name as 字段名,systypes.name as 类型,syscolumns.length as 长度 from syscolumns inner join systypes on syscolumns.xtype=systypes.xtype where id=object_id('表名')

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
比例应用题类型,用比例知识解答应用题的几种
QQ农场的故障 ???
芝浦电动工具质量怎样,芝浦角磨机的谈刷怎么
电脑发出的辐射,会被反射或阻断吗?
孕妇的破事
谁能告诉我147期双色球头奖号码是多少?
新华字典中一页大约有250个字,估计1万字占多
贝爷的台词,求下以下荒野求生贝爷语录的英语
我家金毛现在4个月了,毛是卷的,专家发表哈
邮政员工的节假日
赛尔号浪漫的海洋漫游者在哪里
什么面霜比较好??
网易带代言魔兽后我用新手卡玩到时间后还得用
女朋友过生日,我送手链合适吗?
这种关于黑执事的书在哪里买的到啊?
推荐资讯
和珍惜时间有关的格言,关于珍惜的诗句
生产玻璃的原材料是什么
怎样在心里默默爱一个人?
如果一个数等于它的不包括自身的所有因数之和
鍌 鍙 鍪 鍫 鍳念什么?
在广州摆摊哪里好
梦幻诛仙怎麽容易打出紫装啊?我的生产全都四
从1000到1999这之间的1000个自然数中,有多少
MP4格式播放问题
经典译制片电影讲述一个女子在莫斯科的遭遇
天气为什么这样的冷?
手机辐射到底有多大?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?