DELPHI如何简洁和高效的判断EDIT中输入的值类型?
解决时间 2021-07-19 01:02
- 提问者网友:浩歌待明月
- 2021-07-18 09:58
需要根据用户输入的值进行不同的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;
最佳答案
- 五星知识达人网友:北方的南先生
- 2021-07-18 10:12
这个方法不好,不科学,如果非要这样写的话,这个函数也不太好,用这个吧
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'));
全部回答
- 1楼网友:duile
- 2021-07-18 12:12
建议 where 序号='+edit.text+' or 用户名='''+edit.text+''' or 日期='''+edit.text+'''
- 2楼网友:長槍戰八方
- 2021-07-18 11:34
可能很难完善,假如有人使用纯数字的用户名呢,你就把他当序号来查询了.
我建议你还是规定一个输入语法,比如操作者打算按序号查找,那麻烦在序号前加个x,如果是名字,前面加个m,日期就加r等等,程序判断输入的首个字母然后决定怎么处理.
- 3楼网友:旧脸谱
- 2021-07-18 11:20
在选择表的时候就把表中字段类型取出来,选择字段的时候将类型给 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('表名')
我要举报
大家都在看
推荐资讯