注册 登录
编程论坛 VB6论坛

求助,如何把ListView1内数据更新到SQLite数据库

clyfd 发布于 2024-04-23 21:34, 1593 次点击
我想把数据库内的数据根据用户编号进行更新,判断用户编号是否存在,如果存在就批量更新,不存在就批量录入
Private Sub Command12_Click()
Dim i As Integer
Set rs = cnn.OpenRecordset("Select * from 用户明细") ' 打开员工信息表的记录集
' 遍历列表视图中的每一行数据
For i = 1 To ListView1.ListItems.Count
    ' 获取当前行的每个字段数据
    Dim id As String
    Dim name As String
    Dim age As Integer
    Dim department As String
    ' 从 ListView 中获取数据
    XM = ListView1.ListItems(i).ListSubItems(1).Text
    PY = ListView1.ListItems(i).ListSubItems(2).Text
    XB = ListView1.ListItems(i).ListSubItems(3).Text
    ZZMM = ListView1.ListItems(i).ListSubItems(4).Text
    YGBH = ListView1.ListItems(i).ListSubItems(5).Text
    MM = ListView1.ListItems(i).ListSubItems(6).Text
    YGXZ = ListView1.ListItems(i).ListSubItems(7).Text
    GZGW = ListView1.ListItems(i).ListSubItems(8).Text
    GZSJ = ListView1.ListItems(i).ListSubItems(9).Text
    DH = ListView1.ListItems(i).ListSubItems(10).Text
    GZZT = ListView1.ListItems(i).ListSubItems(11).Text
    RZSJ = ListView1.ListItems(i).ListSubItems(12).Text
    LGSJ = ListView1.ListItems(i).ListSubItems(13).Text
    SFZH = ListView1.ListItems(i).ListSubItems(14).Text
    BZ = ListView1.ListItems(i).ListSubItems(15).Text
    ABZ = ListView1.ListItems(i).ListSubItems(16).Text
    ' 检查数据库中是否已存在相同的用户编号
rs.FindFirst "用户编号='" & YGBH & "'"
If rs.EOF Then ' 如果数据库中没有找到相同的用户编号就录入
    rs.AddNew ' 添加新记录
Else ' 如果数据库中已经存在相同的用户编号就更新
    rs.Fields("地区").Value = XM
    rs.Fields("本数").Value = PY
    rs.Fields("用户编号").Value = XB
    rs.Fields("户名").Value = ZZMM
    rs.Fields("详细地址").Value = YGBH
    rs.Fields("蓝牌地址").Value = MM
    rs.Fields("单元").Value = YGXZ
    rs.Fields("楼层").Value = GZGW
    rs.Fields("户号").Value = GZSJ
    rs.Fields("用户状态").Value = DH
    rs.Fields("应用分类").Value = GZZT
    rs.Fields("保单类型").Value = RZSJ
    rs.Fields("保单到期日").Value = LGSJ
    rs.Fields("报警器安装人").Value = SFZH
    rs.Fields("核对标记").Value = BZ
    rs.Fields("备注").Value = ABZ
    rs.UpdateBatch ' 保存更新的数据
End If
    rs.MoveNext ' 移动到下一条记录
Next i
End Sub
只有本站会员才能查看附件,请 登录


只有本站会员才能查看附件,请 登录

点击导入数据
在点击批量更新,但是没成功
只有本站会员才能查看附件,请 登录

请老师帮忙看看如何处理
11 回复
#2
cwa99582024-04-24 08:13
Private Sub Command12_Click()
Dim i As Integer
dim Rs as new ADODB.Recordset
'Set rs = cnn.OpenRecordset("Select * from 用户明细") ' 打开员工信息表的记录集
' 遍历列表视图中的每一行数据
For i = 1 To ListView1.ListItems.Count
    ' 获取当前行的每个字段数据
    Dim id As String
    Dim name As String
    Dim age As Integer
    Dim department As String
    ' 从 ListView 中获取数据
    XM = ListView1.ListItems(i).ListSubItems(1).Text
    PY = ListView1.ListItems(i).ListSubItems(2).Text
    XB = ListView1.ListItems(i).ListSubItems(3).Text
    ZZMM = ListView1.ListItems(i).ListSubItems(4).Text
    YGBH = ListView1.ListItems(i).ListSubItems(5).Text
    MM = ListView1.ListItems(i).ListSubItems(6).Text
    YGXZ = ListView1.ListItems(i).ListSubItems(7).Text
    GZGW = ListView1.ListItems(i).ListSubItems(8).Text
    GZSJ = ListView1.ListItems(i).ListSubItems(9).Text
    DH = ListView1.ListItems(i).ListSubItems(10).Text
    GZZT = ListView1.ListItems(i).ListSubItems(11).Text
    RZSJ = ListView1.ListItems(i).ListSubItems(12).Text
    LGSJ = ListView1.ListItems(i).ListSubItems(13).Text
    SFZH = ListView1.ListItems(i).ListSubItems(14).Text
    BZ = ListView1.ListItems(i).ListSubItems(15).Text
    ABZ = ListView1.ListItems(i).ListSubItems(16).Text
    ' 检查数据库中是否已存在相同的用户编号
sqlstr="select * from 用户明细 where 用户编号='" & YGBH & "'"
rs.open sqlstr, cnn
If rs.EOF Then ' 如果数据库中没有找到相同的用户编号就录入
    rs.AddNew ' 添加新记录
    rs.Fields("用户编号").Value =YGBH
    rs.Fields("地区").Value = XM
    rs.Fields("本数").Value = PY
    rs.Fields("用户编号").Value = XB
    rs.Fields("户名").Value = ZZMM
    rs.Fields("详细地址").Value = YGBH
    rs.Fields("蓝牌地址").Value = MM
    rs.Fields("单元").Value = YGXZ
    rs.Fields("楼层").Value = GZGW
    rs.Fields("户号").Value = GZSJ
    rs.Fields("用户状态").Value = DH
    rs.Fields("应用分类").Value = GZZT
    rs.Fields("保单类型").Value = RZSJ
    rs.Fields("保单到期日").Value = LGSJ
    rs.Fields("报警器安装人").Value = SFZH
    rs.Fields("核对标记").Value = BZ
    rs.Fields("备注").Value = ABZ
Else ' 如果数据库中已经存在相同的用户编号就更新
    rs.Fields("地区").Value = XM
    rs.Fields("本数").Value = PY
    rs.Fields("用户编号").Value = XB
    rs.Fields("户名").Value = ZZMM
    rs.Fields("详细地址").Value = YGBH
    rs.Fields("蓝牌地址").Value = MM
    rs.Fields("单元").Value = YGXZ
    rs.Fields("楼层").Value = GZGW
    rs.Fields("户号").Value = GZSJ
    rs.Fields("用户状态").Value = DH
    rs.Fields("应用分类").Value = GZZT
    rs.Fields("保单类型").Value = RZSJ
    rs.Fields("保单到期日").Value = LGSJ
    rs.Fields("报警器安装人").Value = SFZH
    rs.Fields("核对标记").Value = BZ
    rs.Fields("备注").Value = ABZ
   
End If
    rs.Update ' 保存更新的数据
    rs.close
Next i
End Sub
#3
clyfd2024-04-24 20:11
回复 2楼 cwa9958
老师  报错
'Dim Rs As New ADODB.Recordset
'rs.open sqlstr, cnn

我改成
Private Sub Command12_Click()
Dim i As Integer
Dim sqlstr As String
Set Rs = cnn.OpenRecordset("Select * from 用户明细") ' 打开员工信息表的记录集
' 遍历列表视图中的每一行数据
For i = 1 To ListView1.ListItems.Count
Print ' 获取当前行的每个字段数据
 Dim id As String
 Dim name As String
 Dim age As Integer
 Dim department As String
 Dim rsLogin As cRecordset
 ' 从 ListView 中获取数据
 XM = ListView1.ListItems(i).ListSubItems(1).Text
 PY = ListView1.ListItems(i).ListSubItems(2).Text
 XB = ListView1.ListItems(i).ListSubItems(3).Text
 ZZMM = ListView1.ListItems(i).ListSubItems(4).Text
 YGBH = ListView1.ListItems(i).ListSubItems(5).Text
 MM = ListView1.ListItems(i).ListSubItems(6).Text
 YGXZ = ListView1.ListItems(i).ListSubItems(7).Text
 GZGW = ListView1.ListItems(i).ListSubItems(8).Text
 GZSJ = ListView1.ListItems(i).ListSubItems(9).Text
 DH = ListView1.ListItems(i).ListSubItems(10).Text
 GZZT = ListView1.ListItems(i).ListSubItems(11).Text
 RZSJ = ListView1.ListItems(i).ListSubItems(12).Text
 LGSJ = ListView1.ListItems(i).ListSubItems(13).Text
 SFZH = ListView1.ListItems(i).ListSubItems(14).Text
 BZ = ListView1.ListItems(i).ListSubItems(15).Text
 ABZ = ListView1.ListItems(i).ListSubItems(16).Text
 ' 检查数据库中是否已存在相同的用户编号
sqlstr = "select * from [用户明细] where [用户编号] ='" & YGBH & "'"

Set rsLogin = cnn.OpenRecordset(sqlstr)
If Rs.EOF Then ' 如果数据库中没有找到相同的用户编号就录入
 Rs.AddNew ' 添加新记录
 Rs.Fields("用户编号").Value = YGBH
 Rs.Fields("地区").Value = XM
 Rs.Fields("本数").Value = PY
 Rs.Fields("用户编号").Value = XB
 Rs.Fields("户名").Value = ZZMM
 Rs.Fields("详细地址").Value = YGBH
 Rs.Fields("蓝牌地址").Value = MM
 Rs.Fields("单元").Value = YGXZ
 Rs.Fields("楼层").Value = GZGW
 Rs.Fields("户号").Value = GZSJ
 Rs.Fields("用户状态").Value = DH
 Rs.Fields("应用分类").Value = GZZT
 Rs.Fields("保单类型").Value = RZSJ
 Rs.Fields("保单到期日").Value = LGSJ
 Rs.Fields("报警器安装人").Value = SFZH
 Rs.Fields("核对标记").Value = BZ
 Rs.Fields("备注").Value = ABZ
Else ' 如果数据库中已经存在相同的用户编号就更新
 Rs.Fields("地区").Value = XM
 Rs.Fields("本数").Value = PY
 Rs.Fields("用户编号").Value = XB
 Rs.Fields("户名").Value = ZZMM
 Rs.Fields("详细地址").Value = YGBH
 Rs.Fields("蓝牌地址").Value = MM
 Rs.Fields("单元").Value = YGXZ
 Rs.Fields("楼层").Value = GZGW
 Rs.Fields("户号").Value = GZSJ
 Rs.Fields("用户状态").Value = DH
 Rs.Fields("应用分类").Value = GZZT
 Rs.Fields("保单类型").Value = RZSJ
 Rs.Fields("保单到期日").Value = LGSJ
 Rs.Fields("报警器安装人").Value = SFZH
 Rs.Fields("核对标记").Value = BZ
 Rs.Fields("备注").Value = ABZ

End If
Rs.UpdateBatch ' 将所有新添加的记录保存到数据库中
 Rs.MoveLast ' 移动到最后一条记录
Next i
End Sub
还是不行


#4
clyfd2024-04-24 20:21
关键字没起作用,全修改了
#5
独木星空2024-04-24 22:30
当前在线13026人
在线会员47人
在线访客12979人
打扰了,这个论坛从去年就时不时,不能正常登录,所以,要靠大家把这个网站打造成一流。
#6
独木星空2024-04-26 08:53
今天现在在线会员23人,连游客不到15000人
#7
clyfd2024-04-26 17:44
回复 6楼 独木星空
老师,能帮我看看怎么解决问题不,现在确实论坛不火,但是还是有喜欢VB的人,并且在学习中的人在这里寻找帮助寻找知识点
#8
独木星空2024-04-26 21:15
回复 7楼 clyfd
我对vb也是一知半解。我解决数学问题都用vfp。
#9
yuma2024-04-26 22:05
附件无法下载,图片无法显示,文字还乱码,这网站废了。
#10
cwa99582024-04-27 08:12
哪句代码报错,是报什么错?
按照报错的提示改了就是了。
#11
风吹过b2024-04-27 19:07
没有环境,不测试了。说一下你原设计


rs.FindFirst "用户编号='" & YGBH & "'"
If rs.EOF Then ' 如果数据库中没有找到相同的用户编号就录入
    rs.AddNew ' 添加新记录                                           《- 这里是添加了新记录
Else ' 如果数据库中已经存在相同的用户编号就更新                      《- 添加新记录,这里不执行。这里应该是 end if,因为不得是查找到了,还是添加新记录后,都要执行后面的更新部分。
    rs.Fields("地区").Value = XM
    rs.Fields("本数").Value = PY
......
    rs.UpdateBatch ' 保存更新的数据
End If                                       《- 对应的这句不要了。
    rs.MoveNext ' 移动到下一条记录
Next i
-------------
或者在 if 里添加 用户编号 ,其他部分都是公菜
    ' 检查数据库中是否已存在相同的用户编号
rs.FindFirst "用户编号='" & YGBH & "'"
If rs.EOF Then ' 如果数据库中没有找到相同的用户编号就录入
    rs.AddNew ' 添加新记录
    rs.Fields("用户编号").Value = XB      '写入用户编号
end if
' ------添加了数据后继续添加其他数据,查找到了更新该用户编号的其他数据-------
    rs.Fields("地区").Value = XM
    rs.Fields("本数").Value = PY
'    rs.Fields("用户编号").Value = XB  这行就不要了,放到 if 里执行,不需重复写入
..........
-----------------
你其实应该生成 SQL 命令去写入。




#12
clyfd2024-04-27 21:40
回复 11楼 风吹过b
谢谢老师的帮助,确实问题比较多,要学习的地方太多了,
经过老师的提示,我修改为
Dim i As Integer
Dim sqlstr As String
' 遍历列表视图中的每一行数据
For i = 1 To ListView1.ListItems.Count
    ' 获取当前行的每个字段数据
    Dim XM As String
    Dim PY As String
    Dim XB As String
    Dim ZZMM As String
    ' 从 ListView 中获取数据
    XM = ListView1.ListItems(i).ListSubItems(1).Text ' 地区
    PY = ListView1.ListItems(i).ListSubItems(2).Text ' 本数
    XB = ListView1.ListItems(i).ListSubItems(3).Text ' 用户编号
    ZZMM = ListView1.ListItems(i).ListSubItems(4).Text ' 户名
    ' 检查数据库中是否已存在相同的用户编号
    sqlstr = "SELECT * FROM [用户明细] WHERE [用户编号] = '" & XB & "'"  
    Set rs = cnn.OpenRecordset(sqlstr)
    If Not rs.EOF Then ' 如果数据库中已经存在相同的用户编号就更新
        sqlstr = "UPDATE [用户明细] SET [本数] = '" & PY & "', [户名] = '" & ZZMM & "' WHERE [用户编号] = '" & XB & "'"
        cnn.Execute sqlstr
    Else ' 如果数据库中没有找到相同的用户编号就录入
        rs.AddNew ' 添加新记录
        rs.Fields("用户编号").Value = XB
        rs.Fields("地区").Value = XM
        rs.Fields("本数").Value = PY
        rs.Fields("户名").Value = ZZMM   
       rs.UpdateBatch ' 将所有新添加的记录保存到数据库中
    End If
Next i

老师看看是这个逻辑不

[此贴子已经被作者于2024-4-29 19:52编辑过]

1