'遍历源表中的字段
         For j = 0 To MyTableS.Fields.Count - 1 'Db_Acs.Fields.Count - 1
         
'选择源表字段的类型,并按字段类型在目标表中建立相同字段与类型
           Select Case MyTableS.Fields(j).Type 'Db_Acs.Fields(j).Type
               Case adBigInt                    ' 20
                  Set MyFieldD = MyTableD.CreateField(MyTableS.Fields(j).Name, dbInteger)
               Case adBinary                    ' 128
                  Set MyFieldD = MyTableD.CreateField(MyTableS.Fields(j).Name, dbByte)
               Case adBoolean                   ' 11
                  Set MyFieldD = MyTableD.CreateField(MyTableS.Fields(j).Name, dbBoolean)
               Case adChar                      ' 129
                  Set MyFieldD = MyTableD.CreateField(MyTableS.Fields(j).Name, dbText, MyTableS.Fields(j).FieldSize)
               Case adDate                      ' 7
                  Set MyFieldD = MyTableD.CreateField(MyTableS.Fields(j).Name, dbDate)
               Case adDBDate                    ' 133
                  Set MyFieldD = MyTableD.CreateField(MyTableS.Fields(j).Name, dbDate)
               Case adDBTime                    ' 134
                  Set MyFieldD = MyTableD.CreateField(MyTableS.Fields(j).Name, dbDate)
               Case adDBTimeStamp               ' 135
                  Set MyFieldD = MyTableD.CreateField(MyTableS.Fields(j).Name, dbDate)
               Case adDecimal                   ' 14
                  Set MyFieldD = MyTableD.CreateField(MyTableS.Fields(j).Name, dbInteger)
               Case adDouble                    ' 5
                  Set MyFieldD = MyTableD.CreateField(MyTableS.Fields(j).Name, dbDouble)
               Case adInteger                   ' 3
                  Set MyFieldD = MyTableD.CreateField(MyTableS.Fields(j).Name, dbInteger)
               Case adLongVarBinary             ' 205
                  Set MyFieldD = MyTableD.CreateField(MyTableS.Fields(j).Name, dbLong)
               Case adLongVarChar               ' 201
                  Set MyFieldD = MyTableD.CreateField(MyTableS.Fields(j).Name, dbMemo)
               Case adLongVarWChar              ' 203
                  Set MyFieldD = MyTableD.CreateField(MyTableS.Fields(j).Name, dbText, MyTableS.Fields(j).FieldSize)
               Case adNumeric                  ' 131
                  Set MyFieldD = MyTableD.CreateField(MyTableS.Fields(j).Name, dbInteger)
               Case adSingle                    ' 4
                  Set MyFieldD = MyTableD.CreateField(MyTableS.Fields(j).Name, dbSingle)
               Case adSmallInt                  ' 2
                  Set MyFieldD = MyTableD.CreateField(MyTableS.Fields(j).Name, dbInteger)
               Case adTinyInt                   ' 16
                  Set MyFieldD = MyTableD.CreateField(MyTableS.Fields(j).Name, dbInteger)
               Case adUnsignedBigInt            ' 21
                  Set MyFieldD = MyTableD.CreateField(MyTableS.Fields(j).Name, dbInteger)
               Case adUnsignedInt               ' 19
                  Set MyFieldD = MyTableD.CreateField(MyTableS.Fields(j).Name, dbInteger)
               Case adUnsignedSmallInt          ' 18
                  Set MyFieldD = MyTableD.CreateField(MyTableS.Fields(j).Name, dbInteger)
               Case adVarBinary                 ' 204
                  Set MyFieldD = MyTableD.CreateField(MyTableS.Fields(j).Name, dbByte)
               Case adUnsignedTinyInt           ' 17
                  Set MyFieldD = MyTableD.CreateField(MyTableS.Fields(j).Name, dbInteger)
               Case adVarChar                   ' 200
                  Set MyFieldD = MyTableD.CreateField(MyTableS.Fields(j).Name, dbText, MyTableS.Fields(j).FieldSize)
               Case adVarWChar                  ' 202
                  Set MyFieldD = MyTableD.CreateField(MyTableS.Fields(j).Name, dbText, MyTableS.Fields(j).FieldSize)
               Case adWChar                     ' 130
                  Set MyFieldD = MyTableD.CreateField(MyTableS.Fields(j).Name, dbText, MyTableS.Fields(j).FieldSize)
            End Select
            
'在目标表中建立新字段
            On Error Resume Next
                MyTableD.Fields.Append MyFieldD
           Next j
 
 '在目标库中建立新表
           On Error Resume Next
           MyDatabaseD.TableDefs.Append MyTableD
           F备份恢复.Label2.Caption = F备份恢复.Combo1.List(i) & "数据表建立成功!"
'关闭源库
'           MyDatabaseS.Close 'Db_Acs.Close
        Next i
'关闭源库
           MyDatabaseS.Close
'关闭目标库
           MyDatabaseD.Close
           
        For i = 0 To F备份恢复.Combo1.ListCount - 1
            Debug.Print F备份恢复.Combo1.List(i)
        Next
        For i = 0 To F备份恢复.Combo1.ListCount - 1
            F备份恢复.PB1.Value = i + 1
            F备份恢复.Label2.Caption = "正在导出" & F备份恢复.Combo1.List(i) & "的数据"
            If F备份恢复.Combo1.List(i) = "MSysACEs" Or F备份恢复.Combo1.List(i) = "MSysObjects" Or F备份恢复.Combo1.List(i) = "MSysModules" Or F备份恢复.Combo1.List(i) = "MSysQueries" Or F备份恢复.Combo1.List(i) = "MSysRelationships" Then
                GoTo 2000:
            End If
            Db_Acs.Open F备份恢复.Combo1.List(i), MDIFZJ.con
            Db_mdb.Open F备份恢复.Combo1.List(i), "Provider=Microsoft.Jet.OLEDB.3.51;Persist Security Info=False;Data Source= " & dbname, adOpenStatic, adLockOptimistic
            
            If Not Db_Acs.BOF Then Db_Acs.MoveFirst
            j = 0
            On Error Resume Next
            Do While Not Db_Acs.EOF
                j = j + 1
                Db_mdb.AddNew
                For k = 0 To Db_Acs.Fields.Count - 1
                  If Db_Acs.Fields(k) = "" Then
                     Db_mdb.Fields(k) = " "
                  Else
                     Db_mdb.Fields(k) = Db_Acs.Fields(k)
                  End If
                Next k
                Db_mdb.Update
                Db_Acs.MoveNext
                If mynum > 0 Then If j > mynum - 1 Then Exit Do
            Loop
            Db_mdb.Close
            Db_Acs.Close
2000:
        Next i
        shujusanxia = True
        Exit Function
End Function
我用以上程序将一个ACCESS的库文件导出另一个同结构的文件
用ACCESS打开时,数据库提示"
'Index1'不是该表中的索引,请查看TableDef对象的索引集合
来决定有效的索引名"
请问高手这是怎么回事,如果是程序错了请帮忙修改.

解决方案 »

  1.   

    解释一下
    Db_Acs.Open F备份恢复.Combo1.List(i), MDIFZJ.con
    中的MDIFZJ.con是什么东东
      

  2.   

    MDIFZJ.con是我在另一个窗体里定义的一个公共的连接变量
      

  3.   

    我也用DAO连接数据库。当我选定了某一条记录之后,如何修改这一条记录的内容。还请指教!
      

  4.   

    回复: chengxf() 
      先在数据库中,把指针指向要修改的记录,然后    
          XXX.edit
          XXX.field("YYY")=XYXY
          XXX.updata