Foxtable(狐表)用户栏目专家坐堂 → [求助]Excel数据导入 逻辑类型自动转换失败


  共有2588人关注过本帖树形打印复制链接

主题:[求助]Excel数据导入 逻辑类型自动转换失败

帅哥哟,离线,有人找我吗?
qaswzh
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:5 积分:101 威望:0 精华:0 注册:2018/4/13 1:18:00
[求助]Excel数据导入 逻辑类型自动转换失败  发帖心情 Post By:2018/4/13 1:32:00 [只看该作者]

1、通过系统菜单导出数据表到Excel文件,其中逻辑类型的列,在Excel中的值为“TRUE” "FALSE"
2、将该Excel文件导入到数据库,代码如下:
Dim Book As New XLS.Book(dlg.FileName) 
Dim Sheet As XLS.Sheet = Book.Sheets(0)
略...

For n As Integer = 1 To Sheet.Rows.Count -1 
    Dim gmid As String = sheet(n,2).Text 

    Dim dr As DataRow = DataTables("grxxb").SQLFind("gmid = '" & gmid & "'") 
    If dr Is Nothing Then '如果不存在同身份证号的人
        dr =  DataTables("grxxb").AddNew()
    End If
    For m As Integer = 0 To nms.Length - 1
        dr(nms(m)) = Sheet(n,m).Value
    Next
    dr.Save()
Next

导入时报错:
该字符串未被识别为有效的布尔值。不能在 ylbx 列中存储 <0>。所需类型是 Boolean。

3、我将Excel文件中 "TRUE" “FALSE”,改为“True” “False” 就正常了。

问题是导入导出对于这个单词的大小写处理,怎么能逻辑不一致呢?

 回到顶部
帅哥哟,离线,有人找我吗?
qaswzh
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:5 积分:101 威望:0 精华:0 注册:2018/4/13 1:18:00
  发帖心情 Post By:2018/4/13 3:08:00 [只看该作者]

1、Excel自动把逻辑值设置为TRUE和FALSE
2、重新导入到foxtable中,却提示
该字符串未被识别为有效的布尔值。不能在 ylbx 列中存储 <0>。所需类型是 Boolean。


感觉像是看到了一个BUG

 回到顶部
帅哥哟,离线,有人找我吗?
lzzhx
  3楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:995 积分:6712 威望:0 精华:0 注册:2015/1/12 22:12:00
  发帖心情 Post By:2018/4/13 7:48:00 [只看该作者]

我认为应该让Excel自动把逻辑值设置为T1和0才能正确导入

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/4/13 8:46:00 [只看该作者]

For m As Integer = 0 To nms.Length - 1
    If dr.DataTable.DataCols(nms(m)).isboolean Then
        If Sheet(n,m).Value = "1" OrElse Sheet(n,m).Value = "true" Then
            dr(nms(m)) = True
        Else
            dr(nms(m)) = False
           
        End If

    Else
        dr(nms(m)) = Sheet(n,m).Value
    End If
Next
[此贴子已经被作者于2018/4/13 8:46:17编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
qaswzh
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:5 积分:101 威望:0 精华:0 注册:2018/4/13 1:18:00
  发帖心情 Post By:2018/4/13 23:27:00 [只看该作者]

版主回答完美解决问题!

If dr.DataTable.DataCols(nms(m)).isboolean Then

我在用的时候,把上面这行代码修改如下:

If  DataTables("grxxb").DataCols(nms(m)).isboolean Then


因为我发现如果

Dim dr As DataRow = DataTables("grxxb").SQLFind("gmid = '" & gmid & "'") 

这个时候调用下面这行代码会报错,提示: 未将引用设置到对象之类的
If dr.DataTable.DataCols(nms(m)).isboolean Then


 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:109678 积分:558082 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/4/14 9:03:00 [只看该作者]

Dim dr As DataRow = DataTables("grxxb").SQLFind("gmid = '" & gmid & "'")
if dr isnot nothing andalso dr.DataTable.DataCols(nms(m)).isboolean then

end if

建议还是使用

If  DataTables("grxxb").DataCols(nms(m)).isboolean Then

 回到顶部