以文本方式查看主题

-  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编辑过]