2011-12-04 99 views
1

我有一個VB6函數,它執行SQL刪除。VB6函數返回值

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 

我讀的地方,最好是返回一個整數,它決定了缺失是否是成功的:該功能取決於缺失是否是一個成功則返回。但是,從我看到的即刪除或未刪除(如果發生錯誤時未刪除)運行函數,只能有兩個結果。返回一個整數是否更好?

+2

沒有,返回一個整數,是不是更好。當你返回666時,客戶端代碼將無法猜測發生了什麼。擁抱布爾值是因爲它具有明確的能力。通過消除True返回值的不明確性,將其稱爲TryDelete(),使其更好。 –

回答

3

我建議你最好的選擇是返回一個枚舉類型;枚舉的每個值然後可以向調用者解釋清楚明確的問題是什麼,並且可以根據需要在以後添加新的錯誤原因而不會破壞任何內容。類似...

Public Enum DB_ERRS 
    Success 
    NoConnection 
    FailedForThisReason 
    FailedForThatReason 
    FailedForOtherReason 
    Failed 
End Enum 

然後,所有數據庫訪問函數都可以返回此類型的值...

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 

智能感知,甚至會幫您填寫他們。

2

這是相當主觀的。

有人會說,返回布爾值是因爲它很簡單。

另一個人會說,返回一個整數,因爲稍後您可能想要添加第三個狀態,如「已存檔」,並且它會破壞現有的代碼。

和別人會說,溝那個C式返回碼。創建一個不返回任何內容的sub,並在需要指示失敗時引發異常。

我個人更喜歡異常。但是由你來決定。

+1

我同意這一點。我是一名.NET程序員,他不得不遷移到VB6來支持遺留系統。我通常會爲此使用異常,但在VB6中沒有例外。 – w0051977

+3

@ w0051977在VB6中有例外。不是以.NET的方式,但仍然。當你說'On Error GoTo'時,這是一個異常處理程序,你可以在其中檢查你的異常('Err'對象)。你通過調用'Err.Raise'來拋出異常。 – GSerg

+0

要添加到GSerg的觀點,在調用.NET代碼時,VB中引發的錯誤可能被捕獲爲COMException。 –

0

就大小而言,integer是一個32位有符號整數,而boolean數據類型實際上沒有定義的大小。但是,它也取決於你在哪裏閱讀過有關在布爾值上使用整數的上下文。

對於某些,使用它作爲函數的返回值時,差異是無關緊要的。

但是,它可以是一個偏好的東西在存儲過程如果你還考慮從存儲過程的返回值。布爾值(當轉換爲數字時)的評估可能會導致它被視爲有點(0和1)。在任何情況下,它都是更主觀的方法。整數允許更多的靈活性,而布爾值則提供了限制和簡單性。哪個更好?我認爲這是幾乎完全取決於你,你的喜好,你的編碼標準,貴公司的編碼標準,或諸如此類的東西..

只是爲了分享數據類型的鏈接:

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

+0

謝謝你的鏈接。我作爲開發人員的經驗在於Java,.NET和VB6。我不清楚這些語言中使用的數據類型如何char,boolean,double,float等映射到您提供的鏈接中的數據類型。你能詳細說明一下嗎? – w0051977

+0

這是不正確的。在VB6和Integer中是一個2字節的有符號整數。 VB6中的Long是一個32位有符號整數。和布爾一樣,整數是2個字節。 – tcarvin

0

我會拋出我的意見。我個人認爲返回一個布爾值是正確的做法。你真的關心它爲什麼沒有刪除?通常情況下,刪除可能首先失敗的原因只有幾個(文件鎖定或權限不足)。如果您需要返回失敗原因,以某種方式處理它,則返回一個整數。現在我個人不喜歡幻數,所以我永遠不會返回一個整數,而是返回一個枚舉值。