2013-05-07 57 views
1

我想用记录集更新sql中的单个记录我从一个记录集中提取数据并尝试将其保存到数据库中的另一个表这是我插入的代码语句在SQL中运行良好。Visual Basic 6 ADO更新SQL字符串

' Opening the connection 
cn.ConnectionString = "Provider=SQLOLEDB; Data Source=" & dbLocation & "; Initial Catalog=Posbdat; User Id=sa" 
cn.Open 
rh.ConnectionString = "Provider=SQLOLEDB; Data Source=" & dbLocation & "; Initial Catalog=Postrans; User Id=sa" 
rh.Open 

rs.Open "Select Top 1 * from CustomerPoints order by RedemptionDate desc", cn, adModeReadWrite 
x.Open " Select Top 1 * from Register_Header order by datetime desc", rh, adModeReadWrite 

rt.Open " SELECT top 1 upc FROM Register_Trans INNER JOIN Register_Header ON Register_Trans.trans_no = Register_Header.trans_no Where trans_subtype = 'AP' Order by Register_Trans.datetime desc ", rh, adOpenDynamic 

Debug.Print x!emp_no 
Debug.Print x!till_no 
Debug.Print x.Fields(10) 
Debug.Print itemupc 
itemupc = rt.Fields(0) 
Dim cmd As New ADODB.Recordset 
cmd.Open "UPDATE CustomerPoints set emp_no = " & x!emp_no & _ 
", till_no = " & x!till_no & " purch_amt = " & x!Total & _ 
", item_redeem = ' " & itemupc & " ' Where RedemptionDate = (Select top 1 * from CustomerPoints order by " & _ 
"RedemptionDate Desc)", cn, adOpenDynamic 
cmd.update 

我还没有关闭任何连接或清理它,因为它不会运行没有崩溃。

+0

你得到的错误是...? – 2013-05-07 15:15:47

+0

5/7/2013 10:35:40 AM End_Trans 23 3251 ADODB.Recordset当前记录集不支持更新。这可能是提供者或选定锁定类型的限制。 dbEngineErr:没有当前记录。 – 2013-05-07 15:43:44

+0

它已经很长时间了,但是当你执行一个cmd.UPDATE时,它假定你已经加载了一个你已经修改过的记录集,然后再保存。您尝试使用的方法需要您选择一个可更新的记录集,进行更改cmd!emp_no = x!emp_no然后cmd.UPDATE。你有一个空的记录集,没有改变,并试图更新你的NULL记录集。我发布的文章向您展示了如何执行SQL而不是加载记录集。 – 2013-05-07 15:48:31

回答

2

这是一个很长的时间,但是这是我用于执行UPDATE语句:

Dim conTemp As New ADODB.Connection 

conTemp.CommandTimeout = mvarconConnection.CommandTimeout 
conTemp.ConnectionTimeout = mvarconConnection.ConnectionTimeout 
conTemp.CursorLocation = mvarconConnection.CursorLocation 
conTemp.Mode = mvarconConnection.Mode 
conTemp.ConnectionString = mvarconConnection.ConnectionString 
conTemp.Open mvarconConnection.ConnectionString 

conTemp.Execute "SET CONCAT_NULL_YIELDS_NULL OFF" 

conTemp.Execute "UPDATE CustomerPoints set emp_no = " & x!emp_no & _ 
", till_no = " & x!till_no & " purch_amt = " & x!Total & _ 
", item_redeem = ' " & itemupc & " ' Where RedemptionDate = (Select top 1 * from 
CustomerPoints order by " & _ 
"RedemptionDate Desc)" 

的mvarconConnection仅仅是存储所有的我的数据库设置,只是换成你自己我设置的对象。