以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  如何获得后台sql数据库表的默认值  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=108099)

--  作者:happyft
--  发布时间:2017/10/16 12:44:00
--  如何获得后台sql数据库表的默认值
在用sql拼接语句保存时遇到一个问题,拼接的代码如下:
For Each r As Row In Curtb.rows
    For Each dc As DataCol In tb.dataCols
       If dc.IsNumeric Then
            If r(dc.Name) = Nothing Then  \'数据为空赋值为null,否则会变为默认的0
                str2 + = "Null" &  ","
            Else
                str2 + = r(dc.Name) & ","
            End If
        Else
      ....
        End If
    Next
Next
 \'---Union新增的所有行后一次性insert到数据表中
 If str2 > "" Then
  stradd + = "Se lect " & str2.Trim(",") & vbcrlf & "Union All" & vbcrlf
......
 End If

如果数值列在前台窗口界面中没有填写任何数据时,不赋值为null,则保存后全部值会变为0,如果没有值的让其为null,但有些数字列是设置了默认值的
这样insert时就会提示出错,不能有NUll值,因为代码是通用所有表的,所以想说如果没有录入任何内容的数值列后台设置了默认不能为空的值时让其为默认值,
否则才为null,但这样要如何才能得到后台是否设置了默认值?  还是有其他更简单的方法?

谢谢!

--  作者:有点甜
--  发布时间:2017/10/16 14:32:00
--  

insert的时候,如果是null的列,你可以跳过,比如,第二列是null,你就可以不赋值。

 

insert into 表A (第一列, 第五列) values (\'123\', \'456\')


--  作者:HappyFt
--  发布时间:2017/10/16 15:08:00
--  
前面的列是动态提取的表中所有列,因为存在这种情况第一行第一列为空,可能第二行第一列又有值,所以不能按老师说的那样跳过
--  作者:有点甜
--  发布时间:2017/10/16 15:24:00
--  

方法一:你把null改成default试试;

 

方法二:直接写insert语句,效率差不多的。


--  作者:HappyFt
--  发布时间:2017/10/16 15:56:00
--  
用default后msgbox显示出来的sql语句是这样的,执行时提示关键字\'default\'处有语法错误

insert into BOM(产品编码,类别,品名,规格,长度,产品来源,转序入库,用量,使用工序,计量单位,装箱数,损耗,提前期,标准工时,标准单价,备注,父件编码,通用编码,sys_Fbh,sys_Fzt,sys_Inputer,sys_Edate,sys_Revisor,sys_Mdate)

Se lect \'10-2D762530-C\',\'成品\',\'二叶片地桩-2500\',\'外径Φ76,T3.0 二叶片,螺距100 法兰盘200\',5000,\'外购\',0,1,default,\'pcs\',12,1,default,default,default,Null,Null,Null,1,\'待处理\',\'开发者\',\'2017-10-16 15:45:09\',Null,\'2017-10-16 15:45:09\'

老师指的方法二不太明白,现在就是用直接用的insert语句,只是如果表中有多行修改时se lect 后面会有union all连接所有修改行一次性insert而已

--  作者:有点蓝
--  发布时间:2017/10/16 20:25:00
--  
sql可以改成这样:

insert into 表A (第一列, 第五列) values (\'123\', \'456\');insert into 表A (第二列, 第八列) values (\'123\', \'456\');insert into ......

--  作者:HappyFt
--  发布时间:2017/10/17 9:21:00
--  
insert into 表A (第一列, 第五列) values (\'123\', \'456\');
insert into 表A (第二列, 第八列) values (\'123\', \'456\');
insert into .....

与 
insert into 表A (第一列, 第五列) 
se lect \'123\', \'456\' union all
se lect \'123\', \'456\' union all
se lect \'123\', \'456\' .....
效率哪种高,还是都一样?

谢谢!

--  作者:有点甜
--  发布时间:2017/10/17 9:41:00
--  

 后者的效率高。如果你用insert into的话,加上事务,效率差不多的。

 

 但你的情况,要用insert插入。