相关疑难解决方法(0)

在数据库中过度使用可空列是"代码味道"吗?

我只是进入一个项目,它有一个相当大的数据库后端.我已经开始挖掘这个数据库了,95%的字段都可以为空.

这是数据库世界中的常规做法吗?我只是一个卑微的程序员,而不是DBA,但我认为你想要将可空字段保持在最低限度,只有在它们有意义的地方.

如果大多数列可以为空,它是否是"代码味道"?

sql

18
推荐指数
7
解决办法
4390
查看次数

定义可以采用null参数的函数

我最近试图Nz(Value, [ValueIfNull])在Excel中重新定义Access的功能,因为我发现它非常有用但它在Excel中不存在(因为我发现在移动一些有用的函数时我很失望).Access的Nz函数检查Value- 如果此值为null,则返回ValueIfNull(否则返回Value).在Access中,它对于检查输入框的值(以及其他几个方面)非常有用:

If Nz(myTextBox.Value, "") = "" Then
    MsgBox "You need to enter something!"
End If
Run Code Online (Sandbox Code Playgroud)

滚动我自己的Nz功能似乎并不困难:

Public Function Nz(value As Variant, Optional valueIfNull As Variant = "") As Variant
    If IsNull(value) Then
        Nz = valueIfNull
    Else
        Nz = value
    End If
End Function
Run Code Online (Sandbox Code Playgroud)

但是一旦我尝试用任何实际上为空的东西调用它,Excel就会在调用行上抱怨它(Run-time error '91': Object variable or With block not set我理解它与NullReferenceException其他语言大致相同),甚至在进入Nz函数体之前.例如,Nz(someObj.Value, "")只有在someObj.Value不为null 时才会起作用(使函数完全没有用).

我在这里错过了VBA的一些细节吗?来自VB.NET之类的语言,看起来很混乱 - 我理解对象引用只是驻留在内存中的实际对象的地址,因此传递引用(而不是对象)不应该导致问题(直到你尝试实际上,当然对不存在的对象做一些事情.例如:

Dim myObj …
Run Code Online (Sandbox Code Playgroud)

excel vba excel-vba

6
推荐指数
1
解决办法
2万
查看次数

标签 统计

excel ×1

excel-vba ×1

sql ×1

vba ×1