Shamil Salakhetdinov
shamil at users.mns.ru
Tue Dec 27 00:41:56 CST 2005
Phil,
It will work this way:
Imports System.Data.OleDb
Module myModule
Sub Main()
Dim strCnn As String = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source={{FullPathToYourMdbHere}};" & _
"User Id=admin;" & _
"Password="
Dim strSql As String = _
"SELECT (DLookup(""CodeDesc""" & _
",""CodeTable"",""ID = """ & _
"& [theCode])) AS MyDescription " & _
" FROM MasterTable "
Try
Dim cnn As New OleDbConnection(strCnn)
Dim cmd As New OleDbCommand(strSql, cnn)
cnn.Open()
Dim rdr As OleDbDataReader = _
cmd.ExecuteReader(CommandBehavior.CloseConnection)
While rdr.Read()
Console.WriteLine(rdr.GetString(0))
End While
rdr.Close()
Catch e As Exception
MsgBox("Error: " & e.Message)
End Try
End Sub
End Module
But anyway I'd use join instead of DLookUp - it should work quicker and it's
more generic way to get lookup values - if it ever happens you'll need to
upsize to SQL Server then you will not need to change your queries....
Shamil
----- Original Message -----
From: "Phil Jewett" <pjewett at bayplace.com>
To: <accessd at databaseadvisors.com>
Sent: Tuesday, December 27, 2005 1:12 AM
Subject: [AccessD] Use module function in query from vb.net
> I am trying to retrieve an Access query using ado.net that includes a
> module function for a column (actually several columns). The query
> works fine from within Access, but when called from ado.net it fails
> with the error "Undefined function 'GetMyDesc' in expression".
>
> The access query:
>
> MyQuery: "select GetMyDesc([thecode]) as MyDescription.... from
> [MasterTable]"
>
> The function GetMyDesc is a public function in a module:
>
> Public Function GetMyDesc(ByVal ID As Long) As String
> Dim HoldID As Long
> HoldID = Nz(ID, 0)
> GetMyDesc= Nz(DLookup("CodeDesc", "CodeTable", "ID = " & HoldID),
> "")
> End Function
>
> This is my ado.net code:
>
> cmd.CommandText = "MyQuery"
> cmd.CommandType = CommandType.StoredProcedure
> Try
> FoundDR = cmd.ExecuteReader(CommandBehavior.CloseConnection)
> Catch e As Exception
> MsgBox("Error: " & e.Message)
> End Try
>
> I have tried using a command type of both stored procedure and plain
> text, with the same error resulting.
>
> As for the reason for doing this in the first place, the MasterTable has
> 14 or so foreign keys, and rather than join 14 references to the code
> lookup table, I use the function to retrieve the code descriptions. But
> being able to get to an Access module function from ado.net seems just
> as necessary as getting to user functions in SQL server.
>
> Phil Jewett
> --
> AccessD mailing list
> AccessD at databaseadvisors.com
> http://databaseadvisors.com/mailman/listinfo/accessd
> Website: http://www.databaseadvisors.com