这样对吗?错在哪?

lcge 2004-08-30 10:43:30
问题一
Dim n As String
n = "select 序号 from 订单名细表 where 订单号='" & Trim(Me.Label29.Text) & "'"
Dim nadper As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter(n, dataconn)
dataset.Clear()
nadper.Fill(dataset, "订单名细表")
ynum = dataset.Tables(0).Rows(0).Item(0)
出错提示:
其他信息:在位置 0 处没有任何行。

问题二
Dim m As String
For yynum = ynum To dataset.tables(0).rows.count
mm = yynum + 1
m = "update 订单名细表 set 序号='" & yynum & "' where 序号='" & mm & "'"
Dim mcomm As New OleDb.OleDbCommand(m, dataconn)
mcomm.Connection.Close()
mcomm.Connection.Open()
mcomm.ExecuteNonQuery()
mcomm.Connection.Close()
Next
目的是让大于yynum序号后面的序号减1更新后面的序号!
...全文
93 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
3tzjq 2004-08-31
  • 打赏
  • 举报
回复
问题1:不如用dim dr as OleDbDataReader=mcomm.ExecuteReader
if dr.Read then ynum=dr.GetValue(0)
问题2:
你的代码:
Dim mcomm As New OleDb.OleDbCommand(m, dataconn)
mcomm.Connection.Close()
mcomm.Connection.Open()
mcomm.ExecuteNonQuery()
mcomm.Connection.Close()

搞不懂为什么要关闭连接又打开的.完全没必要!
lcge 2004-08-31
  • 打赏
  • 举报
回复
问题一还是这样,在数据库里运行是没问题的.
怎样用一个UPDATE处理吗?可以给个例子吗?
以上二问题有什么更好的办法吗?
lcge 2004-08-31
  • 打赏
  • 举报
回复
谢谢各位热心人仕,问题已经解决了.
原来的DATASET是全变量的,我去掉它,新加了一个局部变量的dim da as new dataset()的da,
现为 Dim n As String
n = "select 序号 from 订单名细表 where 订单号='" & Trim(Me.Label29.Text) & "'"
Dim nadper As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter(n, dataconn)
Dim da As New dataset()
da.Clear()
nadper.Fill(da, "订单名细表")
ynum = da.Tables(0).Rows(0).Item(0)
二个问题都好了.(第二个问题不变动.)
把全量改为局变量就好了,这是为什么?能给个合理的解释吗?

我是新学的,很多问题没考虑好,比如连数据库消耗时间等问题,要大家多指点!
thinkingforever 2004-08-31
  • 打赏
  • 举报
回复
问题1,没有查出来数据,不管用dataset还是DataReader,在读数据前最好先判断有没有数据.
问题2,是什么错误,还有没有必要循环一次就连一次数据库,这样很消耗时间的
Dim m As String
Dim mcomm As New OleDb.OleDbCommand(m, dataconn)
mcomm.Connection=dataconn
mcomm.Connection.Open()
For yynum = ynum To dataset.tables(0).rows.count
mm = yynum + 1
m = "update 订单名细表 set 序号='" & yynum & "' where 序号='" & mm & "'"

mcomm.commandtext=m
mcomm.ExecuteNonQuery()
Next
mcomm.Connection.Close()
TonyTonyQ 2004-08-31
  • 打赏
  • 举报
回复
問題一:
“訂單號”是數值型的還是字符型的?數值型的不用加"''"符號,其他看不出什麽問題啊。
問題二:
Dim m As String
m = "update 订单名细表 set 序号=" & yynum+1 & " where 序号>" & yynum
Dim mcomm As New OleDb.OleDbCommand(m, dataconn)
mcomm.Connection.Open()
mcomm.ExecuteNonQuery()
...
前提是“序號”是數值型的,字符型的話,加上“''”符號,並且可能需要類型轉換。
zhpsam109 2004-08-30
  • 打赏
  • 举报
回复
1.楼上的说的对
2.可以用一个update语句解决,没不要循环使用update,update一次可以更新多行!
The123 2004-08-30
  • 打赏
  • 举报
回复
问题一
先把那段SQL语句放到你的数据库里,看看能不能查到东西。
你的出错信息表明,你的查询查到了0条记录
问题二
你用try..catch捕捉一下错误信息

16,554

社区成员

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

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