| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3281 人关注过本帖, 1 人收藏
标题:VB中怎么更新dbf数据库中的数据,可以打开,就是更新不成功
只看楼主 加入收藏
dc__sky
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:31
专家分:117
注 册:2012-3-13
结帖率:100%
收藏(1)
已结贴  问题点数:20 回复次数:7 
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
apple0072011
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:249
专家分:989
注 册:2011-8-17
收藏
得分:10 
   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
修改为:
   If TRIM(rs.Fields("model1")) == Trim(xlsheet.Cells(X, 1)) And TRIM(rs.Fields("model2")) == Trim(xlsheet.Cells(X, 3)) And TRIM(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
   rs.Update

天道酬勤
2012-03-15 08:31
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
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4943
专家分:30067
注 册:2008-10-15
收藏
得分:10 
X 是怎么来的?????

X 应该是一个循环变量,然后根据 这个X 来查找对应的记录,然后再更新对应的记录。

授人于鱼,不如授人于渔
早已停用QQ了
2012-03-15 13:32
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
apple0072011
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:249
专家分:989
注 册:2011-8-17
收藏
得分:0 
第一句:If rs.BOF And rs.EOF Then 是什么意思?判断记录集是否为空,如果为空进行下面的语句,所以你的循环根本没有执行,就直接调到END IF 后的语句了。h
还有就是你的
rs.Fields("m1") = Val(Trim(xlsheet.Cells(X, 5)))
rs.Fields("p1") = Val(Trim(xlsheet.Cells(X, 6)))
rs.Update
这个语句应该放到 Do Until ……LOOP 循环内

[ 本帖最后由 apple0072011 于 2012-3-16 10:11 编辑 ]

天道酬勤
2012-03-16 10:04
dc__sky
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:31
专家分:117
注 册:2012-3-13
收藏
得分:0 
你们的回答都没有解决问题,不过我已经找到方法了,所以还是谢谢你们!只能散分给你们了~~~
2012-03-18 21:11
BouyeiBoy
Rank: 1
等 级:新手上路
帖 子:4
专家分:5
注 册:2012-3-21
收藏
得分:0 
不你的方法说出来大家共享下可以吗!我很想知道.要不发到我邮箱好吗,谢谢!
邮箱:l1sh2y3@
2012-03-22 09:19
快速回复:VB中怎么更新dbf数据库中的数据,可以打开,就是更新不成功
数据加载中...
 
   



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

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