Foxtable(狐表)用户栏目专家坐堂 → 如何获得后台sql数据库表的默认值


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

主题:如何获得后台sql数据库表的默认值

帅哥,在线噢!
happyft
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1907 积分:16954 威望:0 精华:0 注册:2014/7/29 19:09:00
如何获得后台sql数据库表的默认值  发帖心情 Post By:2017/10/16 12:44:00 [只看该作者]

在用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,但这样要如何才能得到后台是否设置了默认值?  还是有其他更简单的方法?

谢谢!

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


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

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

 

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


 回到顶部
帅哥,在线噢!
HappyFt
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1907 积分:16954 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2017/10/16 15:08:00 [只看该作者]

前面的列是动态提取的表中所有列,因为存在这种情况第一行第一列为空,可能第二行第一列又有值,所以不能按老师说的那样跳过

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


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

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

 

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


 回到顶部
帅哥,在线噢!
HappyFt
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1907 积分:16954 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By: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而已

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


加好友 发短信
等级:超级版主 帖子:106146 积分:539847 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/10/16 20:25:00 [只看该作者]

sql可以改成这样:

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

 回到顶部
帅哥,在线噢!
HappyFt
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1907 积分:16954 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By: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' .....
效率哪种高,还是都一样?

谢谢!

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


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

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

 

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


 回到顶部