Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

有密码MDB数据库的读取与写入

chinasa  发表于:2015-06-05 15:41:02  
复制

系统需要(背景:财务把奖金清单导入数据库,各车间使用自己的用户名登陆下载本车间奖金清单,车间主任对奖金进行调整,然后反馈给财务):

1.从设置了数据库密码的JJTB.MDB数据库中,把TB表数据读取到当前数据库的TB2表中,两张表结构完全一致。

2.操作人员会在当前数据库中对TB2的数据进行修改(此点只是说明,不需要系统操作)。

3.以“员工ID”为关键字,把TB2的记录再更新到TB中。更新时对其中两个数字字段(ZD1、ZD2)进行覆盖,但其它字段(ZD3、ZD4)若不一致则提醒。

 

现在有如下几个问题请教一下:

1.如下面代码,我现在是采取DO/LOOP循环读取TB数据,是否可以批量读入?(需要增加:部门=“XX部”的赛选条件)。

2.上面的第3步,代码应该怎样写?也就是以TB2更新TB表。

说明:我下面的代码是东拼西凑的,只是表达一个思路,各位老师看看是否能指导下,如有需要我搭建个数据表传上来。

 

Dim strConn As String
Dim Rs As New ADODB.Recordset

strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & "F:" & "\jjtb.mdb;Persist Security Info=False;Jet OLEDB:database Password=ABCD123456;"

Rs.Open "Select * from tb", strConn, adOpenKeyset, adLockOptimistic
MsgBox Rs.RecordCount


Rs.Open strSQL, ConnDB, adOpenKeyset, adLockPessimistic
DoCmd.SetWarnings 0
Rs.MoveFirs
Do Until Rs.EOF
CQ = Rs("ETD")
TDH = Rs("BL_NO")
XH = Rs("CONTAINER_NO")
XX = Rs("CONTAINER_TYPE")
FH = Rs("SEAL_NO")
JS = Rs("PKGS_NUM")
MZ = Rs("GROSS_WEIGHT")
TJ = Rs("MEASUREMENT")
CCKK = Rs("BL_NO") & Rs("CONTAINER_NO")
if 部门=“XX部” THEN

DoCmd.RunSQL "INSERT INTO tb2 ( ETD,BL_NO,CONTAINER_NO,CONTAINER_TYPE,SEAL_NO,PKGS_NUM,GROSS_WEIGHT,MEASUREMENT,ck) values(" & Chr(34) & CQ & Chr(34) & "," & Chr(34) & TDH & Chr(34) & "," & Chr(34) & XH & Chr(34) & "," & Chr(34) & XX & Chr(34) & "," & Chr(34) & FH & Chr(34) & "," & Chr(34) & JS & Chr(34) & "," & Chr(34) & MZ & Chr(34) & "," & Chr(34) & TJ & Chr(34) & "," & Chr(34) & CCKK & Chr(34) & ")"
END IF

Rs.MoveNext
Loop

Rs.Close
Set Rs = Nothing

 

 

 

Top
煮江品茶 发表于:2015-06-05 20:43:17
Dim conn As New ADODB.Connection
Dim strconn As String
Dim ssql As String
   
strconn = "阁下包含密码的数据库连接字符串"
conn.ConnectionString = strconn
conn.Open
ssql = "阁下需要进行新增、修改、删除的sql语句"
conn.Execute ssql
conn.Close
 Set conn = Nothing

chinasa 发表于:2015-06-07 15:08:29

煮版,您好!

是否可以帮助实现下面这条的SQL语句写一下,平时基本都用查询向导,所以SQL语句方面属于小白型,万分感谢。(其中提醒如果不方面则可以不用实现,我在另外的环节自己实现,请帮助更新ZD1与ZD2即可)

 

3.以“员工ID”为关键字,把TB2的记录再更新到TB中。更新时对其中两个数字字段(ZD1、ZD2)进行覆盖,但其它字段(ZD3、ZD4)若不一致则提醒。



煮江品茶 发表于:2015-06-07 19:55:57

弄两个ADO记录集读写一下不就完事了。


Sub UpdateTable1(ByVal targetTable As String, ByVal sourceTable As String, ByVal sourceFile As String, ByVal password As String)
    '功能:同结构表导入
    '参数:targetTable -- 本地目标表表名
    '      sourceTable -- 源表表名
    '      sourceFile  -- 源数据库文件地址
    '      password    -- 源数据库密码
    '示例:call UpdateTable("tb2","tb1","F:\jjtb.mdb","A123456")
    Dim ssql As String
    Dim strConn As String
    Dim rs1 As New ADODB.Recordset, rs2 As New ADODB.Recordset, rs3 As ADODB.Recordset
    Dim i As Long, j As Long
    strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sourceFile & ";Persist Security Info=False;Jet OLEDB:database Password=" & password & ";"
    ssql = "select * from " & sourceTable
    rs2.Open ssql, strConn, adOpenKeyset, adLockOptimistic
    ssql = "select * from " & targetTable
    rs1.Open ssql, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
    For i = 1 To rs1.RecordCount
        Set rs3 = rs2.Clone
        rs3.Filter = "员工ID=" & rs1!员工ID.Value
        If rs3.EOF = False Then
            For j = 0 To rs1.Fields.Count - 1
                If rs1.Fields(j).name <> "员工ID" Then
                    rs1.Fields(j).Value = rs3.Fields(j).Value
                End If
            Next
            rs1.Update
        End If
        rs1.MoveNext
    Next
    rs1.Close: Set rs1 = Nothing
    rs2.Close: Set rs2 = Nothing
    Set rs3 = Nothing
End Sub





chinasa 发表于:2015-06-08 08:08:27
万分感谢,我等下测试下再反馈结果,谢谢。

chinasa 发表于:2015-06-08 09:37:59

万分感谢,完美解决!

我员工ID是字符型,折腾了半天终于解决了,再次感谢!

         rs3.Filter = "工号= '" & rs1!工号.Value & "'"

 



总记录:5篇  页次:1/1 9 1 :