cursorsetprop("sendupdates",.t.,"gh")&&设置为可更新 cursorsetprop("wheretype",2) cursorsetprop("buffering",5)&&设置表缓冲 * do form 表单1 else if messagebox("数据库连接失败,是否继续连接?",48+4,"连接失败提示")=6 &&回答"是" return else quit endif endif 3、建一表单,用来操作下载到本地的临时表gh并更新服务器表。 A、在表单中放一表格grid1 B、在表单的init里写上 SELECT gh thisform.grid1.RecordSource='gh' &&&将表格的数据源设置为表gh **********如果想表格好看点,最好能定义一下表格各列的宽度 *thisform.grid1.colunm1.width=40 C、在表单中放新增,删除,保存到服务器,清空服务器数据四个按钮 新增按钮:反正是临时表,直接在表格里新增,以图快。你可以用文本框,这样可以控制是否有重复记录,输入是否符合要求等。至于如何才能达到你的要求,就看你自己的了。 新增按钮的click 过程代码: SELECT gh APPEND BLANK thisform.grid1.SetFocus 删除按钮:在C/S里,删除只能打上删除号,不能pack,否则,死得很难看的。Pack要写在表单的退出中。因为不能使用pack,就用了set filter to !dele().这个东东在临时表中好象要移动一下记录指针才生效的。 删除按钮click代码: sele gh bh=alltrim(编号) xm=alltrim(姓名) set filter to !dele() if messagebox(bh+xm+"的数据删除,将不能恢复,真的要删除吗?",48+4,"信息提示")=6 &&回答"是" sqlexec(nhandle,"delete from 人员表 where 编号=?bh")&&&删除服务器上相应的记录 DELETE &&&&删除临时表中的相应记录,注意不能在这使用pack ENDIF **************以下是移动指针 if delete() if !eof() skip else if recn()>1 skip -1 endif endif endif thisform.grid1.setfocus 保存按钮:因为临时表直接绑到了表格中,在录入时就保存了,这里主要是指将临时表中的数据更新到服务器的表中,代码很简单。 保存按钮的click代码: select gh TABLEUPDATE(.t.) 清空服务器相应数据表按钮:相当于本地表的zap Click代码如下: select gh if messagebox("你正在执行的操作是清空服务器的数据,真的要清空吗?",48+4,"信息提示")=6 &&回答"是" sqlexec(nhandle,"truncate table 人员表") &&清空服务器数据表 ENDIF 至此,已基本完工。在程序中加上一句 Do form 表单 运行程序试一试?应该早就试了,我至此已运行很多次试了的。 4、完善一些功能。 A、表格的afterrowcolchange:我是不想每增加一个记录都去按一次新增按钮,于是就采用allowaddnew。 SELECT gh thisform.command2.Caption='删除 '+ALLTRIM(编号)+ALLTRIM(姓名) IF !EMPTY(ALLTRIM(编号)) thisform.grid1.allowaddnew= .T. ELSE thisform.grid1.allowaddnew=.f. ENDIF B、表单的init:为了让刚才的allowaddnew生效,我先判断gh是否有记录,如果没有就先加个空记录。然后定义一下表格各列的宽度。 SELECT gh if recc()=0 appe blan endif with thisform.grid1 .recordsource='gh' |