Dot-Net

表達式中未定義的函式“Nz”

  • December 8, 2019

我已經用Google搜尋了這個錯誤,但還沒有得出我為什麼會收到這個錯誤的結論。我正在嘗試用一些數據填充 DataGridView。這是我的程式碼。

Private Sub LoadGrid()
   Dim cmd As New OleDbCommand
   Dim dt As DataTable
   With cmd
       .CommandText = "project_master_query"
       .CommandType = CommandType.StoredProcedure
       .Connection = New OleDbConnection(My.Settings.cnnString)
   End With
   dt = GetData(cmd)
   dgvData.DataSource = dt
End Sub

Private Function GetData(ByVal cmd As OleDbCommand) As DataTable
   Dim dt As New DataTable
   Using cmd.Connection
       cmd.Connection.Open()
       dt.Load(cmd.ExecuteReader(CommandBehavior.CloseConnection))
   End Using
   Return dt
End Function

查詢儲存在 Access 中的“project_master_query”。

   SELECT project_master.*, location_master.LocationName,
   project_currentmilestonedef.MilestoneDefID, 
   project_currentmilestonedef.MilestoneName, project_regions.RegionName,
   owner_fullname.FullName AS OwnerFullName, designer_fullname.FullName AS DesignerFullName,
   project_issuecount.HasOpenIssues, project_updated_closedate.UpdatedCloseDate, 
   project_bonusdays.BonusDays, project_bonusdays.IsGreen, project_bonusdays.IsYellow, 
   project_bonusdays.IsRed, checklist_days_perproject_defined_1.Week1, 
   checklist_days_perproject_defined_1.Week2, checklist_days_perproject_defined_1.Week3, 
   checklist_days_perproject_defined_1.Week4, project_issueduration.ProjectIssueDurationDays, 
   project_active_status.ProjectIsOpen, project_requirement_status.RequirementStatusName, 
   priority_def.PriorityShortName
   FROM project_requirement_status 
   RIGHT JOIN (project_regions 
   RIGHT JOIN (priority_def RIGHT JOIN (location_master 
   RIGHT JOIN ((((checklist_days_perproject_defined AS checklist_days_perproject_defined_1 
   RIGHT JOIN ((((((((contacts_fullname AS designer_fullname 
   RIGHT JOIN (contacts_fullname AS owner_fullname 
   RIGHT JOIN project_master ON owner_fullname.ContactID = project_master.ContactOwner) 
   ON designer_fullname.ContactID = project_master.ContactDesigner) 
   LEFT JOIN project_issuecount 
   ON project_master.ProjectID = project_issuecount.ProjectID) 
   LEFT JOIN project_currentmilestonedef 
   ON project_master.ProjectID = project_currentmilestonedef.ProjectID) 
   LEFT JOIN project_within_benchmark_week1 
   ON project_master.ProjectID = project_within_benchmark_week1.ProjectID) 
   LEFT JOIN project_within_benchmark_week2 
   ON project_master.ProjectID = project_within_benchmark_week2.ProjectID) 
   LEFT JOIN project_within_benchmark_week3 
   ON project_master.ProjectID = project_within_benchmark_week3.ProjectID) 
   LEFT JOIN project_updated_closedate 
   ON project_master.ProjectID = project_updated_closedate.ProjectID) 
   LEFT JOIN checklist_days_perproject_defined 
   ON project_master.ProjectID = checklist_days_perproject_defined.ProjectID) 
   ON checklist_days_perproject_defined_1.ProjectID = project_master.ProjectID) 
   LEFT JOIN project_issueduration 
   ON project_master.ProjectID = project_issueduration.ProjectID) 
   LEFT JOIN project_active_status 
   ON project_master.ProjectID = project_active_status.ProjectID)    
   LEFT JOIN project_bonusdays ON project_master.ProjectID = project_bonusdays.ProjectID) 
   ON location_master.LocationID = project_master.Location) 
   ON priority_def.PriorityDefID = project_master.ProjectPriority) 
   ON project_regions.RegionID = project_master.Region) 
   ON project_requirement_status.RequirementStatusID = project_master.RequirementStatus;

如您所見,查詢中根本沒有 Nz,所以我不明白為什麼會發生這種情況。一旦呼叫 dt.Load,就會發生錯誤。

Nz函式最有可能出現在您在眾多聯接之一中引用的視圖/查詢中。你必須仔細檢查所有這些。

作為Nz()Access 應用程序而不是 Access 驅動程序的功能,只要您嘗試從 Access 應用程序外部使用它,它就會失敗。您可以將 替換為Nz構造IIf(IsNull())

請參閱文件IIfIsNull

放在一起時:

Nz(expr, [valueifnull])

變成

IIf(IsNull(expr), valueifnull, valueifnotnull)

例子

預設:Nz(tbl.A) => IIf(IsNull(tbl.A), '', tbl.A)

有備份:Nz(tbl.A, tbl.B) => IIf(IsNull(tbl.A), tbl.B, tbl.A)

引用自:https://stackoverflow.com/questions/14584355