Foxtable(狐表)用户栏目专家坐堂 → 2022.01.29和最新预览版sql command bug


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

主题:2022.01.29和最新预览版sql command bug

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


加好友 发短信
等级:小狐 帖子:302 积分:2069 威望:0 精华:0 注册:2017/11/19 9:46:00
2022.01.29和最新预览版sql command bug  发帖心情 Post By:2022/5/19 15:17:00 [只看该作者]

bug 描述:
通过sql command生成的datatable不能保存。sql server数据源。
这个错误简直没有道理。

代码示例:

Dim TotParts As Integer = 3
Dim SalesONX As String = "SO-009622"

If TotParts < 1 Then
    messagebox.show("Can not proceed. Total parts must >= 1" , "Error", Messageboxbuttons.ok, MessageBoxIcon.warning)
    Return 0
End If

Dim cmd As New SQLCo mmand
cmd.connectionname = _ConnectionName

cmd.Comma ndText = "SEL ECT * from {SalesOrdsForDispatch} where SalesON='" & SalesONX & "'"

Dim DTB As DataTable = cmd.Execu teReader(True)

Dim ExistTotParts As Integer = DTB.DataRows.count


If TotParts = ExistTotParts Then
    messagebox.show("Can not proceed. Total parts = existing no. of parts" , "Error", Messageboxbuttons.ok, MessageBoxIcon.warning)
    Return 0
End If
' ******************************************************************
If TotParts > ExistTotParts Then
    '如果全部发货了,则不允许再次拆分
    Dim tr As DataRow = dtb.find("DateDelivered is null")
    If tr Is Nothing Then
        messagebox.show("Can not proceed. All the parts have been delivered." , "Error", Messageboxbuttons.ok, MessageBoxIcon.warning)
        Return 0
    End If
     
    
    '增加新的parts
    Dim kr As DataRow = DTB.DataRows(0)
    For i As Integer = ExistTotParts + 1 To TotParts
        Dim nr As DataRow = DTB.addnew
        
        For Each cl As DataCol In DTB.DataCols
            Dim cname As String = cl.name
            If Cname Like "SiteFeed*" = False Then
                Select Case Cname
                    Case "Weight", "Status", "PartNo", "DateDelivered", "DispatchNo", "MaxLth", "Progress_Stock", "Printed"
                        
                    Case Else
                        nr(Cname) = kr(Cname)
                        
                End Select
                
            End If
        Next
        
        nr("PartNo") = i & "/" & TotParts
        
    Next
 
    Output.Show(dtb.DataRows.count)
    
    DTB.save  '(这句代码会报错) 新增行无法保存
     
    
    
    messagebox.show("Successful. Order has been split into " & Totparts & " parts." , "Note", Messageboxbuttons.ok, MessageBoxIcon.Information)
     
    Return 0
End If 

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


加好友 发短信
等级:小狐 帖子:302 积分:2069 威望:0 精华:0 注册:2017/11/19 9:46:00
  发帖心情 Post By:2022/5/19 15:19:00 [只看该作者]

代码执行后,被修改的行可以保存,单新增的行无法保存,提示大串文字错误。

图片点击可在新窗口打开查看此主题相关图片如下:untitled.png
图片点击可在新窗口打开查看

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


加好友 发短信
等级:小狐 帖子:302 积分:2069 威望:0 精华:0 注册:2017/11/19 9:46:00
  发帖心情 Post By:2022/5/19 15:53:00 [只看该作者]

补充说明以下,数据库那头没有任何索引、视图一类的。就是纯foxtable建立的表。

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105487 积分:536426 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/5/19 16:01:00 [只看该作者]


数据库里的数据表是不是有什么外键约束、非空约束等

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


加好友 发短信
等级:小狐 帖子:302 积分:2069 威望:0 精华:0 注册:2017/11/19 9:46:00
  发帖心情 Post By:2022/5/19 16:03:00 [只看该作者]

我发现的问题:
这段代码很长时间一直运行正常。不久前我增加了datetime列,这次赋值的时候没有排除datetime列。
此时源行的datetime列值是空值,但赋给了新增行,导致新增行保存时被数据库拒绝。

请贵方查一下应该时这个原因,不过这也勉强算是一个bug,毕竟同样结构的数据,彼此赋值应该时常见操作,foxtable应该考虑这种情况进行修复。

 回到顶部
帅哥,在线噢!
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105487 积分:536426 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/5/19 16:51:00 [只看该作者]

是有问题,已反馈

 回到顶部