vb.net

linanir77 2015-01-21 04:31:32
If Not TreeView1.SelectedNode.Text.ToString = TreeView1.SelectedNode.FullPath.ToString Then
cn = New OleDbConnection(cnStr)
Dim sql As String = "select * from " & TreeView1.SelectedNode.Text
da = New OleDbDataAdapter(sql, cn)
If Not IsError(da) Then
ds = New DataSet
da.Fill(ds, TreeView1.SelectedNode.Text.ToString)
DataGridView2.DataSource = ds.Tables(0)
DataGridView2.AllowUserToAddRows = False
End If
End If

这段代码,红色标出部分,我想问,如果da搜索完数据库后,没有找到要找的表,会返回什么值?如何判断?

还有一个问题,看下面代码
da.Fill(ds, "表格信息汇总")
dv1 = ds.Tables("表格信息汇总").DefaultView
dv1.RowFilter = "层级='1'"
dv1.Table.AcceptChanges()
dim i=0
Do Until i=dv1.table.count
.Nodes.Add(dv1.tables.rows(i)("名称").ToString)
i=i+1
loop
上面代码不完全,但是代码本身没有错误,代码是给treeview添加内容的,最开始ds中的记录是20条,通过rowfilter筛选出层级=1的,应该只剩下6条的,但是实际执行下来,dv1.table.count还是20,没有变少,这个是怎么回事呢?困扰了很久了希望大家帮忙看一下。谢谢了。

...全文
161 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
於黾 2015-01-22
  • 打赏
  • 举报
回复
你这不是da有问题,是fill的时候sql语句出错了 最简单的办法就是整个用try包起来了
linanir77 2015-01-22
  • 打赏
  • 举报
回复
解决了,方法见红色部分 Dim a As Boolean = True If Not TreeView1.SelectedNode.Text.ToString = TreeView1.SelectedNode.FullPath.ToString Then cn = New OleDbConnection(cnStr) Dim sql As String = "select * from " & TreeView1.SelectedNode.Text da = New OleDbDataAdapter(sql, cn) Try ds = New DataSet da.Fill(ds, TreeView1.SelectedNode.Text.ToString) Catch err As Exception a = False Finally End Try If a = True Then ds = New DataSet da.Fill(ds, TreeView1.SelectedNode.Text.ToString) DataGridView2.DataSource = ds.Tables(0) DataGridView2.AllowUserToAddRows = False End If End If
linanir77 2015-01-21
  • 打赏
  • 举报
回复
引用 5 楼 rddqlqwxzx 的回复:
可能逻辑语句没用好,进行查错处理
跟逻辑语句没有关系,程序功能就是选中树状列表中的选项后,在右边的datagridview中对应的表格,左边树状列表中有些表数据库中还没有,我想用iserror来判断,如果表格找到了,就输出到右边的datagridview中,如果表格没找到,就不输出内容。 但是iserror貌似没用,还是会出现找不到表的错误。
rddqlqwxzx 2015-01-21
  • 打赏
  • 举报
回复
可能逻辑语句没用好,进行查错处理
linanir77 2015-01-21
  • 打赏
  • 举报
回复
引用 1 楼 Z65443344 的回复:
你要看OleDbDataAdapter()这个函数里是如何处理的 如果里面有try,catch,并且catch里已经对错误进行了处理,那么da会是null 如果没有try,catch,或catch里把错误throw了,那么就直接抛异常了,你外面还必须加try,catch来捕获异常才行 dv1 = ds.Tables("表格信息汇总").DefaultView DataRow[] dr= dv1.Select("层级='1'")
我用try catch试过了,结果返回的是”Microsoft office access 数据库引擎找不到输入表或查询”前端踏勘表“。请确定它存在且其名称拼写正确“ 我加了一个iserror来判断是否出错的,但是没有用,我应该用什么语句来判断是否出错呢?上面引号里的那一长串,到底要用什么来判断呢?用is dbnull iserror isempty? 全部代码如下: Private Sub TreeView1_AfterSelect(sender As Object, e As TreeViewEventArgs) Handles TreeView1.AfterSelect TextBox4.Text = TreeView1.SelectedNode.Text & Environment.NewLine & TreeView1.SelectedNode.FullPath If Not TreeView1.SelectedNode.Text.ToString = TreeView1.SelectedNode.FullPath.ToString Then cn = New OleDbConnection(cnStr) Dim sql As String = "select * from " & TreeView1.SelectedNode.Text da = New OleDbDataAdapter(sql, cn) Try ds = New DataSet da.Fill(ds, TreeView1.SelectedNode.Text.ToString) Catch err As Exception MsgBox(err.Message) Finally MsgBox("ok") End Try If Not IsError(da) Then ds = New DataSet da.Fill(ds, TreeView1.SelectedNode.Text.ToString) DataGridView2.DataSource = ds.Tables(0) DataGridView2.AllowUserToAddRows = False End If End If End Sub
rddqlqwxzx 2015-01-21
  • 打赏
  • 举报
回复
怎样才能快速学会VB呢?
linanir77 2015-01-21
  • 打赏
  • 举报
回复
第二个问题我已经用这个办法解决了,红色部分,我就是不明白,为什么RowFilter过滤后,为什么总条目数没变呢?要用什么过滤才能把不需要的条目删掉,最后得出剩余的符合要求的条目数呢? If TabPage1.Visible = True And tp1status = 0 Then cn = New OleDbConnection(cnStr) Dim sql As String = "select * from 表格信息汇总 order by 层级" Dim dv1 As DataView Dim dv2 As DataView da = New OleDbDataAdapter(sql, cn) ds = New DataSet dv1 = New DataView da.Fill(ds, "表格信息汇总") dv1 = ds.Tables("表格信息汇总").DefaultView dv1.RowFilter = "层级='1'" dv1.Table.AcceptChanges() Dim drv1 As DataRowView Dim drv2 As DataRowView Dim i = 0 With TreeView1 .BeginUpdate() .Nodes.Clear() For Each drv1 In dv1 If Not IsNothing(drv1("名称")) Then .Nodes.Add(drv1("名称").ToString) End If dv2 = New DataView dv2 = ds.Tables("表格信息汇总").DefaultView 'If ds.Tables("表格信息汇总").Select("分类=" & dv1.Table.Rows(i)("名称").ToString).Length > 0 Then dv2.RowFilter = "分类='" & dv1.Table.Rows(i)("名称").ToString & "'" dv2.Table.AcceptChanges() For Each drv2 In dv2 If Not IsNothing(drv2("名称")) Then .Nodes(i).Nodes.Add(drv2("名称").ToString) End If Next 'End If i = i + 1 Next
於黾 2015-01-21
  • 打赏
  • 举报
回复
你要看OleDbDataAdapter()这个函数里是如何处理的 如果里面有try,catch,并且catch里已经对错误进行了处理,那么da会是null 如果没有try,catch,或catch里把错误throw了,那么就直接抛异常了,你外面还必须加try,catch来捕获异常才行 dv1 = ds.Tables("表格信息汇总").DefaultView DataRow[] dr= dv1.Select("层级='1'")

16,553

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧