【问题标题】:Errors in attempting to obtain a response for a SELECT SQL command in VB尝试在 VB 中获取 SELECT SQL 命令的响应时出错
【发布时间】:2019-06-05 04:20:44
【问题描述】:

我有一个使用结帐功能的项目。为此,我在 vb 中使用了 datagridview 元素,我的目标是从所述 datagridview 中获取值并将它们放入 Microsoft Access 数据库中,但是,当尝试使用 SELECT SQL 命令时,我收到“索引超出范围”错误。

我的代码在这里:

Dim findcurrentstock as string = "SELECT '" & checkoutview(0,i).value & "'FROM Tides WHERE Times = '" & actualstarttime & "'

cmd = new oledbcommand(findcurrentstock, connection)
Response = cmd.Executereader

If response.read = false then
    msgbox("ERROR MESSAGE")
else
    currentstock = response(checkoutview(0,i).value).tostring
    msgbox("currentstock")

【问题讨论】:

  • 为什么字段名是动态的? SELECT 不会将数据“放入”数据库,它会提取数据。
  • 我首先尝试在确定项目库存的当前值时尝试提取数据,然后从库存中减去提取的金额。这就是我尝试先选择的原因
  • 保存聚合数据通常是个坏主意。需要时应根据原始交易数据计算库存余额。

标签: sql vb.net ms-access


【解决方案1】:

SQL 语句不会对字段名称使用撇号分隔符。请改用 [ ]。另外,FROM 前面有一个空格。如果 Times 是日期/时间数据类型,请使用 # 分隔符。缺少右引号。

Dim findcurrentstock as string = "SELECT [" & checkoutview(0,i).value & "] FROM Tides WHERE Times = #" & actualstarttime.ToString("yyyy'/'MM'/'dd") & "#"

【讨论】:

  • 并且必须将时间转换为格式正确的字符串表达式。
  • 实际的 SQL 命令似乎不是问题。当程序从 Access DB 中获取值时,就会出现此问题。它返回的错误表明 indexisoutofrange 但它没有意义,我有一个充满大量数据值的数据库,我似乎无法检索这个特定的值。我以前对其他 SELECT 命令使用过类似的代码,但它似乎不喜欢这个特定的表。也许这是访问的问题?我试图获取的数据是长文本类型,所以这会影响什么吗?
【解决方案2】:

您没有显示从哪里获得 i 的值,但请记住,列和行的编号是从 0 而不是 1。因此,“索引超出范围”错误的“典型”原因是在您可能需要 i - 1 时使用 i

【讨论】:

  • 当程序运行时,我使用 msgboxes 向我显示查询,它似乎将我的值用于 checkoutview(0,i) 很好。作为参考,该值是“Red Kayak”,它显示得非常好。但是,当我到达程序的响应部分时,它似乎不喜欢使用相同的值“Red Kayak”来收集响应
猜你喜欢
  • 2021-06-17
  • 1970-01-01
  • 1970-01-01
  • 2016-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-17
  • 2011-03-28
相关资源
最近更新 更多