|
![]() | 作者: lwei889 [lwei889]
![]() |
登录 |
procedure TForm2.Button2Click(Sender: TObject); var k:integer; m,i,h,t:double; link:string; begin h:=1; t:=4096; link:=edit1.Text+edit2.Text+edit3.Text+edit4.Text; i:=strtofloat(link); while (i<>strtofloat(adotable1ipflag.Value)) and (h<t) do begin m:=(h+t)/2; //这里将m转换为整数 //这里将ADO将数据库移动到m这个位置 //下面的程序是开始比较 if i=strtofloat(adotable1ipflag.Value) then begin application.MessageBox('IP地址已经找到','提示信息',mb_ok); exit; end else begin if i>strtofloat(adotable1ipflag.Value) then h:=int(m+1) else t:=int(m-1); end; if h>t then begin application.MessageBox('无此IP地址','提示信息',mb_ok); exit; end; end; end; 上面是个用是个折半法查找的程序! 遇到了以下几个问题: m:=(h+t)/2 这里的m 是double型的数据,我想把他转为整型数据! 该怎么转换 (doubletoint不行啊) 另一个问题是,我想让一条语句移动到数据库中指定条数记录, 比如我想移动到第五条 该怎么移动 我用ADOTABLE1.MOVEDBY(5) 这个是每次向下移动5条记录! 注: 我是用ip地址大小进行比较,在录入数据库时,做了改变 192.168.0.0. 已转换为19216800 这样由小到大排列 谢谢了! |
地主 发表时间: 05-03-04 10:02 |
![]() | 回复: zhoen889 [zhoen889] ![]() |
登录 |
数据库搞的怎么样了?这就是数据库中的部分代码吗? 顶顶!! |
B1层 发表时间: 05-03-05 10:56 |
![]() | 回复: lwei889 [lwei889] ![]() |
登录 |
现在做的还顺利,问题已经解决了,不过我不是用上面的方法,我用的是ADOQUERY执行SQL语句搞定的,这样效率高啊! 再把贴一部分代码出来:下面这段代码能正常运行 (其实就是一条SQL语句+一个参数) begin if edit6.Text='' then begin application.MessageBox('请输入IP地址','提示信息',mb_ok); exit; end; if adoquery1.Active then adoquery1.Close; adoquery1.SQL.Clear; adoquery1.SQL.Add('select * from ipinfo where ip=:searchip'); adoquery1.Parameters[0].Value:=edit6.Text; adoquery1.Active:=true; dbedit1.Text:=inttostr(number.value); dbedit2.Text:=username.value; dbedit3.Text:=worker.value; dbedit4.Text:=position.value; dbedit5.Text:=ip_changer.value; dbedit6.Text:=inttostr(vlan.value); dbedit7.Text:=inttostr(port.value); dbedit8.Text:=ip.Value; dbedit9.Text:=mac.value; dbedit10.Text:=phone.value; dbedit11.Text:=email.value; dbedit12.Text:=datetostr(open_date.value); dbedit13.Text:=user_stat.value; edit6.Text:=''; edit6.SetFocus; end; 可是我第一次帖出来的问题还没有解决啊,还请赐教啊 (我绝对不是懒啊,我是在网上查了资料,delphi函数库也查了可是找不到,才发贴的!!) |
B2层 发表时间: 05-03-05 17:39 |
![]() | 回复: 286 [unique] ![]() |
登录 |
C里有类型强制转换,Delphi也应该有吧。 ADO是COM组件,这与语言无关,ADO中有一个rs.move 记录号 你找找这个功能在Delphi中是什么方法吧。 |
B3层 发表时间: 05-03-07 10:05 |
![]() | 回复: lwei889 [lwei889] ![]() |
登录 |
在delphi中用int()函数也可以 m:real; 可是我在用的时候如 m=int((1+4091)/2) 结果m=2 要是在转换过程中丢失也不至于就成了2了 不解 我去试下rs.move 谢谢286! |
B4层 发表时间: 05-03-07 19:39 |
![]() | 回复: 286 [unique] ![]() |
登录 |
1 “要是在转换过程中丢失也不至于就成了2了”什么意思? 2 是“rs.move 记录号”,而不是“rs.move”,如果没有,你不妨试试先移指针到头,再 ADOTABLE1.MOVEDBY(记录号) |
B5层 发表时间: 05-03-08 09:09 |
![]() | 回复: lwei889 [lwei889] ![]() |
登录 |
如:m=int((1+4096)/2) 如果不用INT取整 m=2048.5 但是用int取整后,m=2 我不太理解,我想表达的也就是这个意思 再说明一下m我定义的是real类型,在用int转换后,类型发生了改变,是不是在这个过程中导致结果差别这么大! |
B6层 发表时间: 05-03-08 17:05 |
![]() | 回复: 286 [unique] ![]() |
登录 |
是的。一般某个变量类型与要赋给他值的表达式类型不一样,才转换。 你的“m=int((1+4096)/2)”表示,2048.5选转成int类型,然后又转成了real类型。 还有,delphi中赋值不是 m:=int(...)吗? 你这里等于2,是不是系统当成判断二者是否相等了? |
B7层 发表时间: 05-03-08 17:16 |
![]() | 回复: lwei889 [lwei889] ![]() |
登录 |
现在看到你的提示,是我的表达式有问题 我在程序里写的是 m:=int((1+4096)/2) 但在发贴的时候给写漏了 因为m 定义为 real型,但表达是m:=int((1+4096)/2) 应该是表达式的问题,但程序运行过程没有提示,也没有报错 谢谢286 如果286再看到此贴,还想在请教一个问题: 我在用delphi做一个管理IP地址的程序,现在有个问题是批量输入ip地址 如起始ip地址是192.168.0.0 结束IP地址是192.168.10.255 我现在想对用户的输入做一个判断,就是开始IP地址不能大于结束IP地址,还有对起始和结束IP地址是否合法 如果满足以上两个条件 则将这些ip地址写入数据库,否则给出相应提示 286能否给个提示 (明天我把我的想法贴出来,希望286看到后给点指点) |
B8层 发表时间: 05-03-11 20:25 |
![]() | 回复: 286 [unique] ![]() |
登录 |
![]() 你作两个函数,一个是由串转整型,一个由整型转串。 “就是开始IP地址不能大于结束IP地址,” 这个通过串转的整型进行判断 “还有对起始和结束IP地址是否合法” 在串转整型的过程中进行判断。 这样作有几大好处: 1 完成你上面的两个操作。 2 对输入没错但不标准的IP进行标准化。比如192.168.010.010也是一个合法IP,但不标准。 |
B9层 发表时间: 05-03-14 09:36 |
![]() | 回复: lwei889 [lwei889] ![]() |
登录 |
谢谢286 |
B10层 发表时间: 05-03-14 11:56 |
|
20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon
粤ICP备05087286号