Charlotte Foust 
      cfoust at infostatsystems.com
      
      Tue Jul 22 14:45:38 CDT 2003
    
That's a good idea, Gustav.  Let me see what I can do with it.
Charlotte Foust
-----Original Message-----
From: Gustav Brock [mailto:gustav at cactus.dk] 
Sent: Tuesday, July 22, 2003 11:03 AM
To: Access Developers discussion and problem solving
Subject: Re: [AccessD] Broken References in Runtime AXP
Hi Charlotte
That is of course correct. Users have no patience.
However, it may not be that processor dependant. I've tested it on a 266
MHz machine and the test lasts only for a couple of seconds for seven
assorted references.
But another trick is to run a potentially error raising query and trap
an error. That takes only a split second but will cause a briefly flash
of the open query. This is an example of how to do that; the in-line
comments should be all you need:
<code>
Public Function CheckReferences( _
  ByVal booErrorDisplay As Boolean) As Boolean
' Try to check - without using DAO or ADO - if a reference is broken by
' running a query with an expression using a "standard" built in
function. ' Example of query string using Right():
'   SELECT TOP 1 Id, Date() AS Check FROM MSysObjects;
'
' As the query will flash briefly when opened, resize it to minimum size
' and position it in a corner of the app window before saving it. ' '
Returns True if references were OK or could be validated successfully. '
' 2001-08-01. Cactus Data ApS. CPH.
  ' Query with expression that may fail.
  Const cstrRefQry    As String = "USysQryReferencesCheck"
  ' Errors to trap.
  ' Error 2001: Query is "too complex".
  Const clngRefError1 As Long = 2001
  ' Error 3075: Function isn't available in expressions in query
expression.
  Const clngRefError2 As Long = 3075
  
  Dim lngError        As Long
  Dim booChecked      As Boolean
    
  On Error Resume Next
  
  ' Run the query and record a possible error.
  DoCmd.OpenQuery cstrRefQry, acViewNormal
  ' If error clngError is raised, a reference is missing.
  lngError = Err.Number
  ' Close checking query.
  DoCmd.Close acQuery, cstrRefQry
  
  Select Case lngError
    Case 0
      ' No errors.
      booChecked = True
    Case clngRefError1, clngRefError2
      ' Run the function to fix the references.
      booChecked = VerifyReferences(booErrorDisplay)
    Case Else
      ' Another error occurred.
      ' Return False.
  End Select
  
  CheckReferences = booChecked
End Function
</code>
/gustav
> I tested it and it works but we would have to figure out how to make 
> it run just once to fix the reference and then disable it going 
> forward. The delay is significant, and I'm running a fast machine, 
> which many of our customers aren't.
> Charlotte Foust
> -----Original Message-----
> From: Gustav Brock [mailto:gustav at cactus.dk]
> Sent: Monday, July 21, 2003 10:50 PM
> To: Access Developers discussion and problem solving
> Subject: Re: [AccessD] Broken References in Runtime AXP
> Hi Charlotte
> Did you try to apply my Function VerifyReferences() - or similar -
which
> I posted earlier?
> The problem is that Access believes the references are OK but at least
> one turns out not to be.
> This bug is a bummer and it is unbelievable that MS has allowed it to
> survive since A97 - or probably since A95. 
> It would be nice if someone working with Access 2003 beta could report
> back to MS if the bug still exists. I am, however, fully aware that it
> will take quite some time to test this ...
> /gustav
>> The reference resolves using the RefLibPaths key.  Unfortunately, I'm
>> still getting a #Name? Error on a control bound to the expression 
>> Format(Date(),"dd-mmm-yyyy").  Any other suggestions.
_______________________________________________
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com