主题:同一段代码在定时器中可运行,但在命令按钮中只运行第一条记录
SELECT rooms
GO top
DO while !EOF()
IF rooms.timeon=.t. &&为F的不执行,跳过
Thisform.txtoutput.Value="" &&清空接收信息文本框的值
lcRemoteHostIP="172.16.4."+ALLTRIM(STR(rooms.ip))
**定义一个连接端口号,注意:要保证服务器也使用相同的端口号
lcRemotePort=6000
**首先关闭连接
Thisform.WinSock1.OBJECT.Close
**建立到服务器的连接
Thisform.txtoutput.Value="正在连接.."+lcRemoteHostIP+"..,"
Thisform.WInSock1.OBJECT.Connect(lcRemoteHostIP,lcRemotePort)
lcStartSec=SECONDS()
**等待连接到服务器
DO WHILE SECONDS()-lcStartSec<lcTimeOut
INKEY(0.02) && 等待时间间隔,该语句用于在进行循环时减少对CPU资源的占用
IF Thisform.WinSock1.OBJECT.State=7
**连接成功,接收数据,分组编码
lcBuffer=SPACE(6)
**获得所接收到的数据
Thisform.winsock1.object.GetData(@lcBuffer)
REPLACE ROOMS.bm WITH lcBuffer
ThisForm.txtOutput.Value = Thisform.txtoutput.Value+lcBuffer+"单元已经连接 !"
REPLACE ROOMS.conect WITH "OK"
**计算控制码
son =0H55AAAAAAAAAA110D0F000000000000000000000000D416
BITSEND=CREATEBINARY(son)
secho =""
**进行数据发送
Thisform.WinSock1.OBJECT.SendData(BITSEND)
lcBuffer=SPACE(13)
INKEY(0.1) && 等待时间间隔0.1s
Thisform.winsock1.object.GetData(@lcBuffer)
secho =CREATEBINARY(lcBuffer)
IF secho =""
Thisform.txtoutput.Value=Thisform.txtoutput.Value+"控制信息返回超时.."
ELSE
Thisform.txtoutput.Value= Thisform.txtoutput.Value+"控制信息发送成功!"
ENDIF
EXIT
ELSE
LOOP
ENDIF
ENDDO
ELSE
endif
SKIP
LOOP
enddo
Thisform.Winsock1.OBJECT.Close
thisform.timer1.Enabled =.t.
嵌套多了点,但在Timer1中能执行全部记录,命令按钮中只执行第一条,不知何故