第1个问题:    strConString = "Driver={Microsoft dBASE Driver (*.dbf)};" & _
                 "DriverID=277;" & _
                 "Dbq=" & strPath                   这种定义 FOXPRO 6.0 表的 链接  稳不稳定
       好象我经常一会儿会出错, 一会儿又不会.第2个问题:  从 SQL 导出表 至 Foxpro 表
       在程序中 涉及 Foxpro 自身有 D (日期型) 、 N (整型) 、C (字符型) <如果只有字符时不会出错,能否给源码-_->
       导回我用 INSERT INTO 时 
       ............................................
       系统提示如下:
               实时错误 '-2147217913 (80040e07)'
               [Microsoft ] [ODBC dBase Driver] 标准表达式中数据类型不匹配。       导出失败!        第1个问题10分,第2个问题40分,问题解决马上给分^_^
        在线等....................

解决方案 »

  1.   

    '参考1下Private Sub ExportBankData(ByVal strFile As String, rsPayroll As ADODB.Recordset)
        Dim cnDBF As ADODB.Connection
        Dim strConString As String
        Dim strPath As String
        Dim strSql As String
        
        
        On Error GoTo Errorhandle
        If InStr(strFile, "\") > 0 Then
            strPath = Left(strFile, InStrRev(strFile, "\", -1, vbTextCompare) - 1)
        Else
            strPath = "C:"
            strFile = "C:\报盘.dbf"
        End If    strConString = "Driver={Microsoft Visual FoxPro Driver};" & _
                           "SourceType=DBF;" & _
                           "SourceDB=" & strPath & ";" & _
                           "Exclusive=YES;"
        Set cnDBF = New ADODB.Connection
        cnDBF.ConnectionString = strConString
        cnDBF.Open
        
        strSql = "CREATE TABLE [" & strFile & "] " & _
            "(帐号 char(20),金额 numeric(8,2),姓名 char(22),编号 char(30),摘要 char(20),TEMP char(1))"
        cnDBF.Execute strSql
        
        Do While Not rsPayroll.EOF
            strSql = "Insert into " & strFile & _
                " Values('" & Trim$(rsPayroll!hrsscount) & "'," & CStr(rsPayroll!hrssacm) & ",'" & _
                    Trim$(rsPayroll!hrsnam) & "','','','')"
            cnDBF.Execute strSql
            rsPayroll.MoveNext
        Loop
        
        cnDBF.Close
        Set cnDBF = Nothing
        Exit Sub
    Errorhandle:
        Set cnDBF = Nothing
        Err.Raise Err.Number, Err.Source, Err.Description
    End Sub
      

  2.   

    1.最好使用OLE DB来连接
    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strPath & ";Extended Properties=dBASE 5.0;Persist Security Info=False"2.
    Dim rsSql As New ADODB.Recordset
    Dim rsDbf As New ADODB.Recordset
    Dim cnSql As New ADODB.Connection
    Dim cnDbf As New ADODB.ConnectioncnDbf.Execute "create table test2(field1 int,field2 varchar(10),...)"  '--创建一个与源表结构一样的表
    cnSql.Open "...."
    rsSql.Open "select * from test1", cnSql
    rsDbf.Open "test2", cnDbf
    While Not rsSql.EOF
      rsDbf.AddNew
      rsDbf!field1 = rsSql!field1
      rsDbf!field2 = rsSql!field2 - -可在此将rsSql!field2的类型转换后赋值
      。
      。
      。
      rsDbf.Update
      rsSql.MoveNext
    Loop
    rsDbf.Close
    rsSql.Close
    cnDbf.Close
    cnSql.Close
    Set rsDbf = Nothing
    Set rsSql = Nothing
    Set cnDbf = Nothing
    Set cnSql = Nothing
      

  3.   

    1.最好使用OLE DB来连接
    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strPath & ";Extended Properties=dBASE 5.0;Persist Security Info=False"2.
    Dim rsSql As New ADODB.Recordset
    Dim rsDbf As New ADODB.Recordset
    Dim cnSql As New ADODB.Connection
    Dim cnDbf As New ADODB.ConnectioncnDbf.Execute "create table test2(field1 int,field2 varchar(10),...)"  '--创建一个与源表结构一样的表
    cnSql.Open "...."
    rsSql.Open "select * from test1", cnSql
    rsDbf.Open "test2", cnDbf
    While Not rsSql.EOF
      rsDbf.AddNew
      rsDbf!field1 = rsSql!field1
      rsDbf!field2 = rsSql!field2 - -可在此将rsSql!field2的类型转换后赋值
      。
      。
      。
      rsDbf.Update
      rsSql.MoveNext
    Loop
    rsDbf.Close
    rsSql.Close
    cnDbf.Close
    cnSql.Close
    Set rsDbf = Nothing
    Set rsSql = Nothing
    Set cnDbf = Nothing
    Set cnSql = Nothing