I am using Access 2010 linked to SQL Server 2008 R2. My problem - how do I display time on an Access form as hh:mm am/pm instead of SQL Server\'s time(7) format of
Sorry, I don't have a dev environment setup, but can you change your SQL query to:
SELECT Convert(varchar(5), getdate(), 108)
to give HH:MM and truncate the rest so it displays correctly.
Then, you can cast as date on the way back.
Access doesn't have a Time data type, so when it links to a SQL Server time column it maps that column as Text. That's why any Date/Time Format specifier you try to apply to the linked table value has no effect: as far as Access is concerned it's a string.
So if we have a SQL Server table [Appointments]:

and we create a Linked Table in Access we get

If we create an Access form for that linked table and use plain old bound controls we get this

The text box for [apptStart] does work, but it doesn't look so great. The workaround is to leave that text box on the form, but hide it (set its .Visible property to No) and then add another unbound text box to the form. (In this case I called it [txtStartTime].) Set the .Format of the new text box to Medium Time and adjust any other formatting as required (e.g., I set Text Align to Left).
In the On Current form event, calculate the Access Date/time value corresponding to the start time in SQL Server table and stuff that value into the [txtStartTime] text box. Now we get something that looks a little better:

Now what if the user wants to edit that value? In the After Update event for the [txtStartTime] text box we create the corresponding SQL Server time string and stuff that value into the (invisible, bound) [apptStart] text box. When the record is saved the new time value is updated in the SQL Server table.
The code behind the form is as follows:
Option Compare Database
Option Explicit
Const accessDate0 = "1899-12-30 " ' <- note trailing space
Dim startTimeAsDateTime As Date
Private Sub Form_AfterUpdate()
Me.Requery
End Sub
Private Sub Form_Current()
Me.txtStartTime.Value = CDate(accessDate0 & Left(Me.apptStart, 8))
End Sub
Private Sub txtStartTime_AfterUpdate()
Me.apptStart.Value = Format(startTimeAsDateTime, "hh:nn:ss")
End Sub
Private Sub txtStartTime_BeforeUpdate(Cancel As Integer)
On Error GoTo txtStartTime_BeforeUpdate_Error
startTimeAsDateTime = CDate(accessDate0 & Me.txtStartTime.Value)
Exit Sub
txtStartTime_BeforeUpdate_Error:
MsgBox "Start Time appears to be invalid."
Cancel = True
End Sub