Foxtable(狐表)用户栏目专家坐堂 → [讨论] 用代码删除查询表,这段代码有错吗?


  共有20924人关注过本帖树形打印复制链接

主题:[讨论] 用代码删除查询表,这段代码有错吗?

帅哥哟,离线,有人找我吗?
wcs
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1039 积分:7450 威望:0 精华:0 注册:2008/8/31 22:52:00
[讨论] 用代码删除查询表,这段代码有错吗?  发帖心情 Post By: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
图片点击可在新窗口打开查看

需要指出的是,我感觉是模拟按键的代码有问题,因为如果我在出现的对话框手动中选择“否”,则其他代码可以正常执行(可以找出所有的外部查询表,一个个地要求我选择“是”或“否”)

请教各位!

 回到顶部
帅哥哟,离线,有人找我吗?
八婺
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:252 积分:1355 威望:0 精华:0 注册:2009/4/5 13:06:00
  发帖心情 Post By:2009/5/23 23:07:00 [只看该作者]




删除临时表可以直接用代码的。
系统命令和模拟按键似乎应该这样。

Sendkeys.Send("{ENTER}")
Syscmd.Table.Delete()
[此贴子已经被作者于2009-5-23 23:06:57编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
八婺
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:252 积分:1355 威望:0 精华:0 注册:2009/4/5 13:06:00
  发帖心情 Post By: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
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1039 积分:7450 威望:0 精华:0 注册:2008/8/31 22:52:00
  发帖心情 Post By:2009/5/23 23:38:00 [只看该作者]

二楼是不是顺序搞反了?

先执行系统命令:Syscmd.Table.Delete()

然后才出现对话窗口,这时才需要有模拟按键:Sendkeys.Send("{ENTER}")

现在的问题是:
1、模拟按键不起作用,出现了对话窗口,不接受这个模拟按键的动作,非要手动选择“是”或“否”,这个代码有误;

2、对话窗口出来以后,手动选择“是”,则出错;     手动选择“否”,则不出错,程序会一个个地找出外部查询表,一个个地提示是不是要删除!

 回到顶部
帅哥哟,离线,有人找我吗?
八婺
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:252 积分:1355 威望:0 精华:0 注册:2009/4/5 13:06:00
  发帖心情 Post By:2009/5/23 23:42:00 [只看该作者]

没错呀,看看三楼。
只是每执行一次只能删除一个表,搞不明白为什么。

 回到顶部
帅哥哟,离线,有人找我吗?
八婺
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:252 积分:1355 威望:0 精华:0 注册:2009/4/5 13:06:00
  发帖心情 Post By:2009/5/23 23:51:00 [只看该作者]

还是希望他爸能开放用代码删除所有类型表的功能,此功能虽有一定的风险,感觉还是大家各取所需比较好。
或者在表属性中增加一个允许删除属性,默认不允许,这样就可以减少一些担忧。

 回到顶部
帅哥哟,离线,有人找我吗?
wcs
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1039 积分:7450 威望:0 精华:0 注册:2008/8/31 22:52:00
  发帖心情 Post By:2009/5/24 10:08:00 [只看该作者]

不好意思,我不明白
try

Catch ex As Exception
End try

是什么意思?

同时按道理讲,还是要先执行系统命令,再出现对话窗口,最后才模拟按键的。

但是按三楼的办法,确实自动删除了一个外部查询表。

实在是不明白啊!


 回到顶部
帅哥哟,离线,有人找我吗?
wcs
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1039 积分:7450 威望:0 精华:0 注册:2008/8/31 22:52:00
  发帖心情 Post By:2009/5/24 11:26:00 [只看该作者]

我用命令窗口仔细测试了一下,代码中取得外部查询表的表名这一段是正确的。

但是,系统命令不会受FOR each 的约束,它只会循环执行一次!

这是我用OUTPUT.SHOW(),对每一句代码进行观察的结果。

不知道这是个BUG,还是老大的故意安排!


 回到顶部
帅哥哟,离线,有人找我吗?
mr725
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By: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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By: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编辑过]

 回到顶部
总数 11 1 2 下一页