2014-01-30 58 views
0

我正在使用VB6,並且如果文本框留空,我試圖向數據庫中插入NULL值。當我這樣做時,'NULL'被插入到只有NULL的數據庫中。我怎樣才能解決這個問題?從文本框中插入空白文本爲NULL

Dim ctl As Control 
For Each ctl In Me.Controls 
    If TypeOf ctl Is TextBox Then 
     If ctl.Text = "" Then 
     ctl.Text = "NULL" 
     End If 
    End If 
Next 

Set prm = cmdDlrID.CreateParameter("@ContractNumberField", adVarChar, adParamInput, 50, txtContNum.Text) 
cmdDlrID.Parameters.Append prm 
Set prm = cmdDlrID.CreateParameter("@ContractSuffix", adVarChar, adParamInput, 50, txtContSfx.Text) 
cmdDlrID.Parameters.Append prm 
Set prm = cmdDlrID.CreateParameter("@CustomerLastName", adVarChar, adParamInput, 50, txtCustLstNme.Text) 
cmdDlrID.Parameters.Append prm 
Set prm = cmdDlrID.CreateParameter("@CustomerFirstName", adVarChar, adParamInput, 50, txtCustFstNme.Text) 
cmdDlrID.Parameters.Append prm 
Set prm = cmdDlrID.CreateParameter("@Last6OfVin", adVarChar, adParamInput, 10, txtVin6.Text) 
cmdDlrID.Parameters.Append prm 
Set prm = cmdDlrID.CreateParameter("@DealershipName", adVarChar, adParamInput, 100, cmbDealerName.Text) 
cmdDlrID.Parameters.Append prm 
Set prm = cmdDlrID.CreateParameter("@ClaimNumber", adVarChar, adParamInput, 50, txtClaimNumber.Text) 
cmdDlrID.Parameters.Append prm 
Set prm = cmdDlrID.CreateParameter("@PortalClaimNumber", adVarChar, adParamInput, 50, txtPortalClaimNum.Text) 
cmdDlrID.Parameters.Append prm 
Set prm = cmdDlrID.CreateParameter("@RONumber", adVarChar, adParamInput, 50, txtRONumber.Text) 
cmdDlrID.Parameters.Append prm 
Set prm = cmdDlrID.CreateParameter("@ContractID", adVarChar, adParamInput, 50, txtContCode.Text) 
cmdDlrID.Parameters.Append prm 
Set prm = cmdDlrID.CreateParameter("@LookUpUser", adVarChar, adParamInput, 50, username) 
cmdDlrID.Parameters.Append prm 
Set prm = cmdDlrID.CreateParameter("@LookUpTime", adVarChar, adParamInput, 50, "CurrentDate") 
cmdDlrID.Parameters.Append prm 
Set prm = cmdDlrID.CreateParameter("@Department", adVarChar, adParamInput, 50, "Department") 
cmdDlrID.Parameters.Append prm 


cmdDlrID.Execute 

存儲過程

ALTER PROCEDURE [dbo].[InsertLookupLog] 
-- Add the parameters for the stored procedure here 
@ContractNumberField varchar(50) , 
@ContractSuffix varchar(50), 
@CustomerLastName varchar(50), 
@CustomerFirstName varchar(50), 
@Last6ofVIN varchar(10), 
@DealerShipName varchar(100), 
@ClaimNumber varchar(50), 
@PortalClaimNumber varchar(50), 
@RONumber varchar(50), 
@ContractId varchar(50), 
@LookUpUser varchar(50), 
@LookUpTime varchar(50), 
@Department varchar(50) 
AS 
BEGIN 
-- SET NOCOUNT ON added to prevent extra result sets from 
-- interfering with SELECT statements. 
SET NOCOUNT ON; 

Insert Into tblContractLookupLog (ContractNumberField,ContractSuffix, CustomerLastName, CustomerFirstName,Last6ofVin,DealershipName,ClaimNumber, PortalClaimNumber, RONumber, ContractID, LookUpUser,LookUpTime,Department) Values (@ContractNumberField,@ContractSuffix,@CustomerLastName,@CustomerFirstName,@Last6ofVin,@DealershipName,@ClaimNumber,@PortalClaimNumber,@RONumber, @ContractID, @LookUpUser,@LookUpTime,@Department) 
END 

回答

2

這裏的問題是您正在設置TextBox到字符串字面"NULL"不是值NULL。您將需要使用Nothing而不是使用String。你可以抽象出這樣一個函數

Function GetDbValue(ByVal tb) 
    If tb.Text = "" Then 
    Return Nothing 
    Else 
    Return tb.Text 
    End If 
End Function 

然後取出For環和修改參數創建代碼如下

Set prm = cmdDlrID.CreateParameter("@ContractNumberField", adVarChar, adParamInput, 50, GetDbValue(txtContNum) 

注:我不是100%肯定Nothing將轉化爲一個NULL在VB6中的DB值,但我很確定是這種情況。使用字符串文字"NULL"絕對不會工作

+0

是啊返回沒有什麼是紅色的,所以生病尋找什麼改變,以 – Zingo

0

由於您使用的是存儲過程,因此如果值爲空字符串,則可以修改過程以插入null。像這樣:

Insert Into tblContractLookupLog (ContractNumberField,More columns here) 
Values (NullIf(@ContractNumberField, ''),More columns here) 

如果兩個參數的值相同,則NullIf函數將返回NULL。在這種情況下,如果您有@ContractNumberField的空字符串,則NULLIF函數將返回NULL。

對存儲過程進行此更改後,只需將空字符串傳遞給存儲過程即可。