2010-06-24 8 views
2

Je travaille sur une application en vb6 qui extrait des informations d'une base de données. J'ai rencontré de nombreux problèmes qui proviennent de valeurs nulles dans la base de données car les fonctions vb6 et les sous-routines n'aiment pas les valeurs nulles. Le problème de chaîne est facilement résolu en concaténant une chaîne vide à la valeur. Mais qu'est-ce que je fais pour une valeur nulle où un booléen devrait être?VB6 null boolean

Merci pour votre aide!

+0

Null signifie « il n'y a pas de valeur », donc je n'ai aucune idée comment vous vous attendez à ce que le compilateur devine ce que vous vouliez. Il suffit de coder pour tester Null et prendre les mesures appropriées. C'est ce que Null est pour, ce n'est pas un bug ou une carence. Votre question est comme si vous demandiez quoi faire avec un nombre entier égal à 3 quand vous avez modélisé des choses dans votre tête, alors seulement 1 et 2 sont valides. Si vous ne voulez pas que Null ait du sens, ne stockez pas Null dans la base de données. – Bob77

+0

Je n'ai pas écrit la base de données. Je dois juste l'utiliser. – chama

Répondre

2

Cela suppose que vous utilisez les objets ADO pour l'accès aux données.

Dim boolField As Boolean 
If Not IsNull(fields("FieldName").value) Then 
    boolField = CBool(fields("FieldName").value) 
End If 
1

Essayez d'utiliser isnull et en spécifiant le .value du champ, sinon le isnull() vérifie l'objet de champ (et non la valeur):

If (IsNull(l_BankAccount.Recordset.Fields("BANKCODE").value) = True) Or _ 

Pour plus d'informations, voir this post.

0

Ceci est un ancien problème avec VB6 et ASP. J'utilise Trim(l_BankAccount.Recordset.Fields("BANKCODE").value & " ") qui se débarrasse de nombreux problèmes, y compris le dbNull.
Pour un champ entier CLng("0" & Trim(l_BankAccount.Recordset.Fields("BANKCODE").value & " ")) fonctionne.

1

J'utilise la plupart de ces fonctions pour gérer

nulls
'--- type-casting without errors' 
Public Function C2Str(Value As Variant) As String 
    On Error Resume Next 
    C2Str = CStr(Value) 
    On Error GoTo 0 
End Function 

Public Function C2Lng(Value As Variant) As Long 
    On Error Resume Next 
    C2Lng = CLng(Value) 
    On Error GoTo 0 
End Function 

Public Function C2Cur(Value As Variant) As Currency 
    On Error Resume Next 
    C2Cur = CCur(Value) 
    On Error GoTo 0 
End Function 

Public Function C2Dbl(Value As Variant) As Double 
    On Error Resume Next 
    C2Dbl = CDbl(Value) 
    On Error GoTo 0 
End Function 

Public Function C2Date(Value As Variant) As Date 
    On Error Resume Next 
    C2Date = CDate(Value) 
    On Error GoTo 0 
End Function 

Public Function C2Bool(Value As Variant) As Boolean 
    On Error Resume Next 
    C2Bool = CBool(Value) 
    On Error GoTo 0 
End Function 

Vous pouvez utiliser C2Bool dans votre cas :-))