w0051977
w0051977

Reputation: 15787

Return values from VB6 function

I have a VB6 function, which executes an SQL delete. The function returns a boolean depending on whether or not the deletion was successful:

Public Function Delete(ByVal RecordID As Integer)  As Boolean

On Error GoTo ErrorGenerated //Execute SQL delete

Delete = True

Exit Function

ErrorGenerated: Delete = False

End Function

I read somewhere that it is better to return an integer, which dictates whether or not the deletion was successful. However, there can only be two outcomes from running the function from what I can see i.e. deleted or not deleted (not deleted if an error is thrown). Is it better to return an integer?

Upvotes: 1

Views: 10146

Answers (4)

Brian Hooper
Brian Hooper

Reputation: 22044

I'd suggest your best bet is to return an enumerated type; each value for the enumeration can then explain to the caller what the problem is in a clear and unambiguous way, and new error reasons can be added later as required without breaking anything. Something like...

Public Enum DB_ERRS
    Success
    NoConnection
    FailedForThisReason
    FailedForThatReason
    FailedForOtherReason
    Failed
End Enum

Then all your database access functions could return a value of this type...

Public Function Delete(ByVal RecordID As Integer) As DB_ERRS

  On Error GoTo ErrorGenerated
  Execute SQL delete
  Delete = Success
  Exit Function

  ErrorGenerated:

  If Err.Number = this Then
     Delete = FailedForThisReason
  Else
     Delete = Failed
  End If

End Function 

Intellisense will even help you fill them in.

Upvotes: 3

UnhandledExcepSean
UnhandledExcepSean

Reputation: 12804

I'll throw my opinion in. I personally think that returning a boolean value is the right thing to do. Do you really care why it failed to delete? Not normally, there are only a few reasons why a delete could fail in the first place (file locked or lack of permissions). If you need to return the reason for failure so it can be handled differently in some way, then yes, return an integer. Now personally, I don't like magic numbers, so I would never return an integer and would return an enum value instead.

Upvotes: 0

Nonym
Nonym

Reputation: 6299

In terms of size, an integer is a 32-bit signed integer, while the boolean data type doesn't really have a defined size. However, it also depends on the context from where you've read about using integers over booleans.

For SOME, the difference is irrelevant when using it as a return value from functions.

However, it can be something of a preference in stored procedures if you're also considering the return value from the stored procedure. The evaluation of booleans (when converted to numbers) may lead to it being treated like a bit (0 and 1).. In any case, it's more of a subjective approach. Integers allow more flexibility, while booleans offer limitation and simplicity. Which is better? I think it's almost entirely up to you, your preference, your coding standards, your company's coding standards, or whatnot..

Just to share a link on data types :

http://msdn.microsoft.com/en-us/library/aa383751(v=vs.85).aspx

Upvotes: 0

GSerg
GSerg

Reputation: 78155

This is rather subjective.

One would say, return a boolean because it's as simple as it gets.

Another one would say, return an integer, because later you might want to add a third status, such as "archived," and it would break existing code.

And someone else would say, Ditch that C-style return codes. Create a sub that doesn't return anything, and raise an exception in case you need to indicate failure.

I personally prefer exceptions. But it's up to you to decide.

Upvotes: 2

Related Questions