【问题标题】:How to insert rows in MS Access from query that finds unmatched records using vb.net如何从使用 vb.net 查找不匹配记录的查询中在 MS Access 中插入行
【发布时间】:2023-03-07 15:30:02
【问题描述】:

我有 2 个表 'tbl_Images' 和 'tbl_ImagesDetails'。第一个表具有在第二个表中找不到的 ImageID。

我做了一个查询,首先找到不匹配的记录,然后将结果行添加到第二个表中。

如果我在 Access 2010 中运行查询,它会要求确认,然后添加行。

但是,如果我从 VB.net 运行它,它不会添加任何行并且没有错误消息。代码如下:

Dim strsql As String = "INSERT INTO tbl_ImagesDetails ( ImageID )
SELECT tbl_Images.ImageID
FROM tbl_Images LEFT JOIN tbl_ImagesDetails ON tbl_Images.[ImageID] = tbl_ImagesDetails.[ImageID]
WHERE (((tbl_Images.ImageID) Like 'ZOOMED*') 
AND ((tbl_ImagesDetails.ImageID) Is Null));"        
'Debug.Print(strsql)

Dim MyConn As New OleDbConnection(connString)
Dim cmd As New OleDbCommand(strsql, MyConn)
cmd.CommandType = CommandType.Text

If Not MyConn.State = ConnectionState.Open Then MyConn.Open()

Dim iResult As Integer = cmd.ExecuteNonQuery()
Return iResult

上面的查询应该返回 9 行,但 iResult = 0

我的问题:

  1. 确认对话框是否妨碍了您?如果是这样,我如何使用 vb 代码覆盖?

  2. ExecuteNonQuery() 是否允许一次性插入多行?

  3. 如何插入作为另一个查询结果的行(即在同一个查询中)?

【问题讨论】:

  • 我刚刚发现的东西:在 Access 中,我想知道“查看”(带有网格图标的那个)和“运行”(带有感叹号的那个)之间的区别。如果我单击查看它只显示 9 行的网格,如果我单击感叹号它会添加行。是否有使其“运行”的 vb 代码?

标签: vb.net ms-access-2010 executenonquery


【解决方案1】:

1) 确认对话框是否妨碍了您?如果是这样,我如何使用 vb 代码覆盖?

Ans:如果您通过代码(即 vb.net)执行命令,则没有确认框

2) ExecuteNonQuery() 是否允许一次插入多行?

回答:是的

3) 如何插入作为另一个查询结果的行(即在同一个查询中)?

我认为您需要检查在 vb.net 中通过查询获取的结果/记录,可能没有得到任何记录。最好编写一个函数来检查获取的记录。否则看起来还可以。

希望这会有所帮助!

【讨论】:

  • 检查获取的记录是指 1) 运行单独的查询还是 2) 向现有查询添加另一个命令?第二个怎么做?谢谢。
  • 第一部分(选择查询中的检查记录)用于测试目的。我怀疑,该查询可能没有获取任何记录。我在本地没有 MS-Access,因此无法自己进行实际测试。谢谢
  • 你说得对,它没有返回记录。现在让我看看障碍在哪里……
  • 太好了,至少你知道问题出在哪里了。很高兴帮助你,不要忘记接受它作为答案并投票,以便其他人也可以从中获得帮助。谢谢
  • 它正在工作。罪魁祸首是 Where 语句中的过滤器: Like 'ZOOMED*' 。在测试时,如果使用了完整的 ImageID,它可以工作,如果使用星号,它不会。所以我添加了按数字对图像进行分类的表格,并将该数字用作过滤器,而不是使用通配符。非常感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多