【问题标题】:Select max visual studio 2010选择 Max Visual Studio 2010
【发布时间】:2013-04-25 12:55:23
【问题描述】:

我正在将一个程序从 Visual Basic 6 更新到 Visual Studio 2010,当然,我发现了很多问题,所以请解决。

我正在使用具有相同键(索引)的四个表的 Access 数据库。

如果我使用如下代码,我可以从 CodDekafix 表中获取最后一条记录:

Private Sub cmdLast_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles   cmdLast.Click
    Dim Con As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\DEKAFIX\Consulta Dekafix\dekafix.mdb")
    Dim cmd As New OleDbCommand()
    Con.Open()
    sql = "Select * From Indice Where CodDekafix=(Select max(CodDekafix) From Indice)"

但是,如果我想从具有相同键(索引)的所有表中获取所有结果,并进行如下所示的更改,则程序不起作用。

sql = "Select * from Indice, dekafix1, dekafix2, dekafix3" _
      & " where CodDekafix=(Select max(CodDekafix) From Indice) and" _
      & " Indice.CodDekafix = dekafix1.CodDekafix and" _
      & " dekafix1.CodDekafix=dekafix2.CodDekafix and" _
      & " dekafix2.CodDekafix=dekafix3.CodDekafix and" _
      & " ORDER BY Indice.CodDekafix"

【问题讨论】:

  • 你得到什么错误?
  • 我想我看到了问题所在,所以我在下面提供了答案。但总的来说,与其告诉我们一些“不起作用”并让我们猜测您遇到问题的地方,不如告诉我们您收到什么错误消息或异常以及它在哪一行。

标签: sql vb.net ms-access vb6


【解决方案1】:

您在第二个代码示例中的 SQL 代码无效。当我们在 VB 代码中去掉表示字符串的格式时,你会得到:

Select * from Indice, dekafix1, dekafix2, dekafix3
where CodDekafix=(Select max(CodDekafix) From Indice) and
Indice.CodDekafix = dekafix1.CodDekafix and
dekafix1.CodDekafix=dekafix2.CodDekafix and
dekafix2.CodDekafix=dekafix3.CodDekafix and
ORDER BY Indice.CodDekafix

这里有两个问题:

1) 在 ORDER BY 子句之前有一个额外的“and”。删除它。

2) WHERE 子句的第一行对 CodDekafix -- 您需要指定来自哪个表。 将 CodDekafix 替换为 Indice.CodDekafix 应该可以解决问题。

sql = "Select * from Indice, dekafix1, dekafix2, dekafix3" _
  & " where Indice.CodDekafix=(Select max(CodDekafix) From Indice) and" _
  & " Indice.CodDekafix = dekafix1.CodDekafix and" _
  & " dekafix1.CodDekafix=dekafix2.CodDekafix and" _
  & " dekafix2.CodDekafix=dekafix3.CodDekafix" _
  & " ORDER BY Indice.CodDekafix"

【讨论】:

  • 我删除了 exta "and" 但错误是一样的:"sintax error (operator missing) in query expression "'CodDekafix=(Select max(CodDekafix) From Indice) and Indice.CodDekafix = dekafix1.CodDekafix 和 dekafix1.CodDekafix=dekafix2.CodDekafix 和 dekafix2.CodDekafix=dekafix3.CodDekafix 和'。
  • 根据您提供的错误消息,额外的“and”仍在您的查询中。
  • 但是问题还没有说完。现在显示的错误是:OleDBException was unhandled - The specified field 'CodDekafix' can reference more than one table listed in FROM 子句的 SQL 语句。
  • 啊,好电话。我已经编辑了我的答案来解决这个问题——因为“CodDekafix”出现在您加入的多个表中,您需要在 WHERE 子句中选择要与哪个表进行比较。第一个没有附加表名;指定“Indice.CodDekafix”应该可以解决问题。
  • 对不起。我不知道该怎么办。我做了与使用 Visual Basic 5 相同的操作。我需要从表 Indice 中获取 CodDekafix 的最大值,并从具有相同 CodDekafix 的其他表中获取其他值,并按相同数据排序。可以举个例子吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-15
相关资源
最近更新 更多