标题:VB中怎么更新dbf数据库中的数据,可以打开,就是更新不成功
取消只看楼主
dc__sky
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:31
专家分:117
注 册:2012-3-13
结帖率:100%
已结贴  问题点数:20 回复次数:3 
VB中怎么更新dbf数据库中的数据,可以打开,就是更新不成功
要把vv.xls 中的数据(多条) 更新到TYPE1.dbf数据表中,条件是vv.xls中的"名称"(第一列) "电压伏级"(第二列) "规格"(第三列)分别等于TYPE1.dbf中的model1、model3、model2。
把蓝色的代码换成红色的,两种方法都有错误,麻烦各位帮忙看一下,鄙人初来乍到还没有分。
Private Sub Command1_Click()
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim xlapp As Excel.Application
Dim xlbook As Excel.Workbook
Dim xlsheet As Excel.Worksheet
On Error GoTo 10
Set xlapp = New Excel.Application
Set xlbook = xlapp.Workbooks.Open("C:\CBGL\vv.xls")
Set xlsheet = xlbook.Worksheets("vv")
If xlsheet.Cells(1, 1) = "名称" And xlsheet.Cells(1, 2) = "ID" And xlsheet.Cells(1, 3) = "规格" And xlsheet.Cells(1, 4) = "单位" _
And xlsheet.Cells(1, 5) = "总量" And xlsheet.Cells(1, 6) = "总价" Then
    X = 2
cn.Open "Provider=MSDASQL.1;Driver=Microsoft Visual Foxpro Driver;SourceDB=C:\CBGL \;SourceType=DBF"
rs.Open "select * from TYPE1 ", cn, adOpenKeyset, adLockOptimistic
    Do While xlsheet.Cells(X, 1) <> ""
    'Sql = "update TYPE1 set m1 ='" & xlsheet.Cells(X, 5) & "',p1='" & xlsheet.Cells(X, 6) & "' where model1 =" & xlsheet.Cells(X, 1) & " and model2 =" & xlsheet.Cells(X, 3) & " and model3 =" & xlsheet.Cells(X, 2) & ""
    'rs.Open Sql, cn, 1, 3
   ' Set rs = cn.Execute(Sql)
   rs.Update
   If rs.Fields("model1") = Trim(xlsheet.Cells(X, 1)) And rs.Fields("model2") = Trim(xlsheet.Cells(X, 3)) And rs.Fields("model3") = Trim(xlsheet.Cells(X, 2)) Then
    rs.Fields("m1") = xlsheet.Cells(X, 5)
    rs.Fields("p1") = xlsheet.Cells(X, 6)
    End If
    X = X + 1
    Loop
    rs.Close
    cn.Close
Else
  GoTo 10
End If
xlbook.Close False
xlapp.Quit
Set xlapp = Nothing
MsgBox "数据更新成功!", vbOKOnly + 48, "信息"
'ProgressBar1.Value = 0
Exit Sub
10: MsgBox "更新数据出错,请检查文本!", vbOKOnly + 48, "信息": xlapp.Quit
xlapp.Quit

End Sub
搜索更多相关主题的帖子: 数据表 数据库 规格 
2012-03-14 23:25
dc__sky
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:31
专家分:117
注 册:2012-3-13
得分:0 
谢谢你的回答,因为这个涉及到很多数据的更新,所以用原来的if 只能完成一条,现在我将程序改为下面的代码;可以更新了,但是excel中的数据读到最后了,dbf文件中却只更新了第一条数据,是不是蓝色那里永远指向第一行呀,这个问题要怎么解决呢!万分感谢!
If rs.BOF And rs.EOF Then
    Do Until rs.Fields("model1") = Trim(xlsheet.Cells(X, 1)) And rs.Fields("model2") = Trim(xlsheet.Cells(X, 3)) And rs.Fields("model3") = Trim(xlsheet.Cells(X, 2))
    rs.MoveNext
    Loop
    End If
  ' If rs.Fields("model1") = Trim(xlsheet.Cells(X, 1)) And rs.Fields("model2") = Trim(xlsheet.Cells(X, 3)) And rs.Fields("model3") = Trim(xlsheet.Cells(X, 2)) Then
    rs.Fields("m1") = Val(Trim(xlsheet.Cells(X, 5)))
    rs.Fields("p1") = Val(Trim(xlsheet.Cells(X, 6)))
   rs.Update
2012-03-15 10:40
dc__sky
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:31
专家分:117
注 册:2012-3-13
得分:0 
If xlsheet.Cells(1, 1) = "名称" And xlsheet.Cells(1, 2) = "ID" And xlsheet.Cells(1, 3) = "规格" And xlsheet.Cells(1, 4) = "单位" _
And xlsheet.Cells(1, 5) = "总量" And xlsheet.Cells(1, 6) = "总价" Then
    X = 2
==================================
X在一楼有了呀!X就是指excel中的行,现在excel没问题,可以遍历到最后一行并读出数据,主要是
rs.Fields("m1") = Val(Trim(xlsheet.Cells(X, 5)))
rs.Fields("p1") = Val(Trim(xlsheet.Cells(X, 6)))这两句只更新了第一行,你看看上面的程序,他在循环体里的。就是dbf数据表了就只更新了第一行。
拜托了!!
2012-03-15 13:42
dc__sky
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:31
专家分:117
注 册:2012-3-13
得分:0 
你们的回答都没有解决问题,不过我已经找到方法了,所以还是谢谢你们!只能散分给你们了~~~
2012-03-18 21:11



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-363207-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.209944 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved