以文本方式查看主题
- Foxtable(狐表) (http://foxtable.com/bbs/index.asp)
-- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2)
---- [讨论] 用代码删除查询表,这段代码有错吗? (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=2896)
|
-- 作者:wcs
-- 发布时间:2009/5/23 22:40:00
-- [讨论] 用代码删除查询表,这段代码有错吗?
For Each dt As DataTable In DataTables If dt.Type = 4 Then dim name as string = dt.name Maintable = Tables(name) Syscmd.Table.Delete() Sendkeys.Sendwait("{ENTER}") End If next
这段代码的意思是:用系统命令Syscmd.Table.Delete()来删除外部查询表
因为执行系统命令以后,会有一个对话框出来,要按确定,所以再来了一个模拟按键Sendkeys.Sendwait("{ENTER}")
怎奈这段代码在执行时,如果选择对话框中的“是”则出错:
此主题相关图片如下:未命名.jpg
需要指出的是,我感觉是模拟按键的代码有问题,因为如果我在出现的对话框手动中选择“否”,则其他代码可以正常执行(可以找出所有的外部查询表,一个个地要求我选择“是”或“否”)
请教各位!
|
-- 作者:八婺
-- 发布时间:2009/5/23 23:07:00
--
删除临时表可以直接用代码的。 系统命令和模拟按键似乎应该这样。
Sendkeys.Send("{ENTER}") Syscmd.Table.Delete()
[此贴子已经被作者于2009-5-23 23:06:57编辑过]
|
-- 作者:八婺
-- 发布时间:2009/5/23 23:36:00
--
用流程语句怎么也只能删除一个表?
try For Each dt As DataTable In DataTables If dt.Type = 4 Then Maintable = Tables(dt.name) Sendkeys.Send("{ENTER}") Syscmd.Table.Delete() End If next Catch ex As Exception End try
|
-- 作者:wcs
-- 发布时间:2009/5/23 23:38:00
--
二楼是不是顺序搞反了?
先执行系统命令:Syscmd.Table.Delete()
然后才出现对话窗口,这时才需要有模拟按键:Sendkeys.Send("{ENTER}")
现在的问题是: 1、模拟按键不起作用,出现了对话窗口,不接受这个模拟按键的动作,非要手动选择“是”或“否”,这个代码有误;
2、对话窗口出来以后,手动选择“是”,则出错; 手动选择“否”,则不出错,程序会一个个地找出外部查询表,一个个地提示是不是要删除!
|
-- 作者:八婺
-- 发布时间:2009/5/23 23:42:00
--
没错呀,看看三楼。 只是每执行一次只能删除一个表,搞不明白为什么。
|
-- 作者:八婺
-- 发布时间:2009/5/23 23:51:00
--
还是希望他爸能开放用代码删除所有类型表的功能,此功能虽有一定的风险,感觉还是大家各取所需比较好。 或者在表属性中增加一个允许删除属性,默认不允许,这样就可以减少一些担忧。
|
-- 作者:wcs
-- 发布时间:2009/5/24 10:08:00
--
不好意思,我不明白 try
Catch ex As Exception End try
是什么意思?
同时按道理讲,还是要先执行系统命令,再出现对话窗口,最后才模拟按键的。
但是按三楼的办法,确实自动删除了一个外部查询表。
实在是不明白啊!
|
-- 作者:wcs
-- 发布时间:2009/5/24 11:26:00
--
我用命令窗口仔细测试了一下,代码中取得外部查询表的表名这一段是正确的。
但是,系统命令不会受FOR each 的约束,它只会循环执行一次!
这是我用OUTPUT.SHOW(),对每一句代码进行观察的结果。
不知道这是个BUG,还是老大的故意安排!
|
-- 作者:mr725
-- 发布时间:2009/7/29 21:59:00
--
这样可以删除: 放在命令窗口试一试!~ dim n as integer For Each dt As DataTable In DataTables If dt.Type = 4 Then n=n+1 End If next Dim i As Integer = 1 Do While i <= n try For Each dt As DataTable In DataTables If dt.Type = 4 Then Maintable = Tables(dt.name) Sendkeys.Send("{ENTER}") Syscmd.Table.Delete() End If next Catch ex As Exception End try i = i + 1 loop
[此贴子已经被作者于2009-7-29 21:59:24编辑过]
|
-- 作者:狐狸爸爸
-- 发布时间:2009/7/29 22:07:00
--
For i as integer = DataTables.Count -1 to 0 Step -1 If DataTables(i).Type = 4 Then DataTables.Delete(DataTables(i).Name) End If next |
[此贴子已经被作者于2009-7-29 22:07:29编辑过]
|