Access交流中心

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

VBA获取文件的值出现:法记录所做的更改,因为您输入的值违反了为此表或列定义的设置(例如,您所输入的值小于最小值或大于最大值)。请更正错误并重试

李伟芳  发表于:2016-05-25 13:30:48  
复制

获取外部文件的数据,貌似第一天还有用,第二天用的时候就报这个错,查了资料但是还是无从下手,哪位大神帮忙看下,啥子情况

========================

Private Sub Command248_Click()

    Dim i As Integer
    Dim filepath As String
    Dim ssql As String
    Dim ssql1 As String
    Dim Rs As New ADODB.Recordset
    Dim j As Integer
    Dim path As String
    Dim sl As Integer
    Dim cf As Integer
    Dim gx As Integer
    Dim DLG As FileDialog, vFile
    sl = 0
    cf = 0
    gx = 0
    Set DLG = Application.FileDialog(msoFileDialogOpen)
    With DLG
        .AllowMultiSelect = False
        .ButtonName = "选择"
        .InitialFileName = CurrentProject.path
'        .Filters.Add "Graphics Files", "*.csv;", 1
        .Filters.Add "Graphics Files", "*.csv", 1
    End With
    If DLG.Show = -1 Then
    path = DLG.SelectedItems(1)
        filepath = path
        ConvertCSVToXls path
        path = Replace(path, ".csv", ".xlsx")
mz = GetSheetName1(path, 1)
Set cnn = CreateObject("adodb.connection")
Set Rs = CreateObject("adodb.Recordset")
cnn.Open "provider=microsoft.ace.oledb.12.0;extended properties=excel 12.0;data source=" & path
sql = "select * from [" & mz & "]"
Rs.Open sql, cnn, 1, 1
           cf = Rs.RecordCount
sql1 = "delete from  后台销售记录详情 "
opensql (sql1)
        For j = 1 To Rs.RecordCount
        ddid = False
        khww = False
        bbgl = False
        hx = False
        If IsNull(Rs("商家编码").Value) = False Then khww = True
'Rs("商家编码").Value这里报错,应该取到的值是:"5001+5006*2"
        If IsNull(DLookup("订单ID", "后台销售记录", "订单ID ='" & Rs!订单编号.Value & "'")) = False Then ddid = True
        If ddid = True And khww = True Then
        Dim spbm As String
        spbm = Rs!商家编码.Value
        Call xzbbmx(Rs!订单编号.Value, Rs!商家编码.Value, Rs!购买数量.Value)
End If
            Rs.MoveNext
       Next
Rs.Close
cnn.Close
Set Rs = Nothing
Set cnn = Nothing
   MsgBox ("智能匹配完成")
  If Dir(path) <> "" Then
DeleteFiles path
End If
    End If
     Me![销售记录查询1].Requery

End Sub

===========================

 

Top
煮江品茶 发表于:2016-05-25 14:43:32
看看商家编码字段长度是否小了

李伟芳 发表于:2016-05-25 14:54:07

不存在字段小的问题,因为我不保存,值的来源也是外部的EXCEL表的数据,经过我测试,单挑记录是有效的,但是那一列的值,有些是数字格式的,有了其他符号的数据默认是字符串的格式,这样的话,ADO获取的数据会不会因为这一点报错呢,要怎么改呢,首先数据文件是不能改的,因为是后台系统导出来的,我不能控制他的格式!



煮江品茶 发表于:2016-05-25 16:37:35
把Access表中的字段设为字符型,长度可以设置大一些。

李伟芳 发表于:2016-05-25 16:44:29

点击下载此附件

基本上我已经找出问题所在了,但是不知道怎么处理,您下载下那个数据文件,你会发现商家编码那一列,其实有两种格式,一种是带“+”的字符串数据类型,还有一种是单独的数字的 是数字数据类型,如果我的数据文件里面那一列只有带“+”的那种数据,那么就不会报错,如果单独是数字,也不会报错

文件我已经上传,操作流程是,点击按钮进入,源代码,然后选中CVS文件,会自动进行转换成EXCEL,然后读取EXCEL的数据,我已经把跟这个错误无关的代码,又涉及到其他程序的代码删除了



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