Foxtable(狐表)用户栏目专家坐堂 → [求助] 请高手们帮我查查代码哪里有错!!!


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

主题:[求助] 请高手们帮我查查代码哪里有错!!!

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


加好友 发短信
等级:一尾狐 帖子:495 积分:4013 威望:0 精华:0 注册:2008/10/10 19:36:00
[求助] 请高手们帮我查查代码哪里有错!!!  发帖心情 Post By:2009/9/5 15:23:00 [显示全部帖子]

在按钮中放了以下代码,第一次单击按钮正常,第二次单击就会出现错误提示“abc不存在名为“客户”的列”,请教高手,下面代码哪里有错?

Dim q As new QueryBuilder
q.TableName = "abc"
q.SelectString = "Select * From {表A}"
q.Build
With DataTables("abc")
    .DataCols.Add("日期", GetType(Date))
    .DataCols.Add("客户", GetType(String),10)
    .DataCols.Add("产品", GetType(String),10)
End with
Tables("窗口1_Table1").DataSource = DataTables("abc")
e.Form.Controls("Table1").Visible = true


 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.table


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


加好友 发短信
等级:一尾狐 帖子:495 积分:4013 威望:0 精华:0 注册:2008/10/10 19:36:00
  发帖心情 Post By:2009/9/5 16:12:00 [显示全部帖子]

图片点击可在新窗口打开查看  出现错误提示就不正常了!!!

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


加好友 发短信
等级:一尾狐 帖子:495 积分:4013 威望:0 精华:0 注册:2008/10/10 19:36:00
  发帖心情 Post By:2009/9/5 16:24:00 [显示全部帖子]

以下是引用狐哥在2009-9-5 16:14:00的发言:
QueryBuilder 是按条件生成查询表呀,你增加列的目的是什么?
如是要统计,你参阅:
CrossTableBuilder
DataTableBuilder
GroupTableBuilder
[此贴子已经被作者于2009-9-5 16:16:54编辑过]

附件是从我的系统中把出错的部份分解精简出来的,QueryBuilder是用来从SQL Server中查询数据的。 
q.SelectString = "Select ×××,×××,××× from a union Select ×××,×××,××× from b"
这样把多个表的数据查询出来并放到一个表中。增加临时列用于统计一些数据。

出错应该跟QueryBuilder没什么关系,但是找了好久也没找到哪里出了错。 

[此贴子已经被作者于2009-9-5 16:27:11编辑过]

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


加好友 发短信
等级:一尾狐 帖子:495 积分:4013 威望:0 精华:0 注册:2008/10/10 19:36:00
  发帖心情 Post By:2009/9/5 16:32:00 [显示全部帖子]

以下是引用狐哥在2009-9-5 16:30:00的发言:
for each dc as col in tables("abc").cols
    if dc.name = "客户" then
        Return
    end if
next

这一段的目的是什么?加在哪里?图片点击可在新窗口打开查看


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


加好友 发短信
等级:一尾狐 帖子:495 积分:4013 威望:0 精华:0 注册:2008/10/10 19:36:00
  发帖心情 Post By:2009/9/5 16:49:00 [显示全部帖子]

以下是引用狐哥在2009-9-5 16:35:00的发言:
贴出你全部公式,想办法改一下

 
 全部贴出来不太方便,用的外部数据而且代码很长。


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


加好友 发短信
等级:一尾狐 帖子:495 积分:4013 威望:0 精华:0 注册:2008/10/10 19:36:00
  发帖心情 Post By:2009/9/5 16:50:00 [显示全部帖子]

以下是引用狐哥在2009-9-5 16:41:00的发言:
苯办法一个:

If tables("abc").Cols.Contains("客户") Then
    Return
Else
    With DataTables("abc")
        .DataCols.Add("日期", GetType(Date))
        .DataCols.Add("客户", GetType(String),10)
        .DataCols.Add("产品", GetType(String),10)
    End with
End If
Tables("窗口1_Table1").DataSource = DataTables("abc")
e.Form.Controls("Table1").Visible = true

 
照你的方法试过还是出现同样的错误提示。按说再次单据按钮就是一个全新的开始,为什么为出现这种提示呢?图片点击可在新窗口打开查看


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


加好友 发短信
等级:一尾狐 帖子:495 积分:4013 威望:0 精华:0 注册:2008/10/10 19:36:00
  发帖心情 Post By:2009/9/5 17:26:00 [显示全部帖子]

因为sql语句是用的如下方式串联的,如放在AfterLoad中,没办法用LoadFilter方式设置加载条件,所以不能放在AfterLoad中
Select ×××,×××,××× from a union Select ×××,×××,××× from b
图片点击可在新窗口打开查看

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


加好友 发短信
等级:一尾狐 帖子:495 积分:4013 威望:0 精华:0 注册:2008/10/10 19:36:00
  发帖心情 Post By:2009/9/5 19:22:00 [显示全部帖子]

以下是引用mr725在2009-9-5 17:46:00的发言:

你代码最前面加上: 因为用代码增加的列只能用代码删除~
If DataTables.Contains("abc") Then
    If DataTables("abc").DataCols.Contains("日期") Then
        DataTables("abc").DataCols.Delete("日期")
    End If
    If DataTables("abc").DataCols.Contains("客户") Then
        DataTables("abc").DataCols.Delete("客户")
    End If
    If DataTables("abc").DataCols.Contains("产品") Then
        DataTables("abc").DataCols.Delete("产品")
    End If
End If

或者:(简洁些)

If DataTables.Contains("abc") Then
With DataTables("abc")
    .DataCols.Delete("日期")
    .DataCols.Delete("客户")
    .DataCols.Delete("产品")
End With
End If

[此贴子已经被作者于2009-9-5 17:52:55编辑过]


用mr725兄的方法搞定,谢谢大家帮忙 图片点击可在新窗口打开查看


 回到顶部