以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  2022.01.29和最新预览版sql command bug  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=177380)

--  作者:lgzhao
--  发布时间:2022/5/19 15:17:00
--  2022.01.29和最新预览版sql command bug
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
--  发布时间:2022/5/19 15:19:00
--  
代码执行后,被修改的行可以保存,单新增的行无法保存,提示大串文字错误。

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

--  作者:lgzhao
--  发布时间:2022/5/19 15:53:00
--  
补充说明以下,数据库那头没有任何索引、视图一类的。就是纯foxtable建立的表。
--  作者:有点蓝
--  发布时间:2022/5/19 16:01:00
--  

数据库里的数据表是不是有什么外键约束、非空约束等
--  作者:lgzhao
--  发布时间:2022/5/19 16:03:00
--  
我发现的问题:
这段代码很长时间一直运行正常。不久前我增加了datetime列,这次赋值的时候没有排除datetime列。
此时源行的datetime列值是空值,但赋给了新增行,导致新增行保存时被数据库拒绝。

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

--  作者:有点蓝
--  发布时间:2022/5/19 16:51:00
--  
是有问题,已反馈