Charlotte Foust
cfoust at infostatsystems.com
Mon Sep 15 10:03:18 CDT 2003
Hen, Something like SELECT * FROM MyTable WHERE 1=2 returns an empty recordset immediately in my experience. I have used it for years to force forms to load right away with no records. This is the same as WHERE False, although I prefer the explicit syntax. Exactly what is it that you feel is wrong with that approach? It certainly works and is the only reliable method I've found for quickly loading a form with an empty recordset. Charlotte Foust -----Original Message----- From: Henry Simpson [mailto:hsimpson88 at hotmail.com] Sent: Monday, September 15, 2003 6:03 AM To: accessd at databaseadvisors.com Subject: Re: [AccessD] listbox with rowsource type (ala MS) Gustav: One of the things I was trying to say was that using a field list row source does not submit the query SQL to the BE for retreival so there is no difference whether or not a where clause is present. Another point is that it is only necessary to add an impossible restraint to a single table if the SQL is submitted because Jet should process that index first and finding nothing to join on, disregard the other table indexes. I'm not satisfied that using three 'Where Null' restraints wouldn't cause all three indexes to be pulled before the FE started processing the joing. My main point was that I have seen the 'Where False' construct advocated several times in the past on this list and that had led me to believe that someone here had at some time read or determined that the FE SQL parser had enough intelligence to determine that it was unnecessary to submit the request for data to a BE file when this condition was encountered. Otherwise, how does it make sense? If there are records with 0 in some field, will it return those? If there are yes/no fields with false records, would it return those? Apparently not, so what does it actually do with this magical condition? Let's just put an end to promoting 'Where False' as a means to retreiving a limited recordset. Hen >From: Gustav Brock <gustav at cactus.dk> >Reply-To: Access Developers discussion and problem >solving<accessd at databaseadvisors.com> >To: Access Developers discussion and problem >solving<accessd at databaseadvisors.com> >CC: Sad Der <accessd666 at yahoo.com> >Subject: Re: [AccessD] listbox with rowsource type (ala MS) >Date: Mon, 15 Sep 2003 09:17:46 +0200 > >Hi Sander > >Henry is right (Subject: Where False, was listbox with rowsource type). >I did a test but with small tables only. > >However, assuming each table has a normal autonumber primary key, >modify the query like this: > > SELECT > tblOne.*, > tblTwo.*, > tblThree.* > FROM > tblOne, > tblTwo, > tblThree > WHERE > tblOne.ID Is Null And > tblTwo.ID Is Null And > tblThree.ID Is Null; > >That should reveal the field names in a split second. > >/gustav > > > > Hi Sander > > > Maybe I'm missing something, but why all this trouble to get a field > > list? > > > 1. Create a select query like this: > > > SELECT > > tblOne.*, > > tblTwo.*, > > tblThree.* > > FROM > > tblOne, > > tblTwo, > > tblThree > > WHERE > > False; > > > and save it as, say, qdyFieldList. > > This will retrieve all fields from the tables but no records. > > > 2. In your form, adjust the combobox to have FieldList as > > RowSourceType and specify qdyFieldList as the RowSource. > > > This should load in a fraction of a section. > > > /gustav > > > >>>i've got a problem. I'm using a tab control. On all > >>>tabs i've got listboxes wich are filled with field > >>>names of a couple of tables. These listboxes are > >>>filled using the rowsource type thingy. This seems to > >>>be the original MS-way-of-programming. > >>> > >>>Below I pasted the code. In the property RowSourceType > >>>of the listbox I fill in the function name. > >>> > >>>When I programmed it it worked fine. The client is on > >>>the desktop of the user and the BE is on our test > >>>network. It took about 4 seconds to load each > >>>tab-page. > >>> > >>>Now it's in production (on another network) and if a switch between > >>>tab pages now takes almost 2 MINUTES!!! > >>> > >>>Any ideas how this is possible?? > >>> > >>>tia > >>> > >>>Sander > > >>>Private Function ListMeetVelden(fld As Control, id As Variant, row > >>>As Variant, col As Variant, code As > >>>Variant) As Variant > >>> > >>> Static strVelden() As String > >>> Static lngRows As Long > >>> Dim varRetVal As Variant > >>> Dim oMeetTable As DAO.Recordset > >>> Dim i As Integer > >>> > >>> On Error GoTo ListMeetVelden_Error > >>> > >>> Select Case code > >>> Case acLBInitialize > >>> ReDim strVelden(0) > >>> 'fill array with fields. > >>> Set oMeetTable = CurrentDb().OpenRecordset(Name:="tblxxxx", > >>>Type:=dbOpenSnapshot, Options:=dbOpenForwardOnly) > >>> With oMeetTable > >>> For i = 0 To .Fields.Count - 1 > >>> strVelden(UBound(strFields)) = "C_" & .Fields(i).Name > >>> ReDim Preserve strVelden(0 To > >>>UBound(strVelden) + 1) > >>> Next i > >>> End With > >>> > >>> Set oMeetTable = Nothing > >>> 'fill array with fields. > >>> Set oMeetTable = CurrentDb().OpenRecordset(Name:="tblxxx", > >>>Type:=dbOpenSnapshot, Options:=dbOpenForwardOnly) > >>> With oMeetTable > >>> For i = 0 To .Fields.Count - 1 > >>> strVelden(UBound(strFields)) = "D_" & .Fields(i).Name > >>> ReDim Preserve strVelden(0 To > >>>UBound(strFields) + 1) > >>> Next i > >>> End With > >>> > >>> Set oMeetTable = Nothing > >>> 'fill array with fields. > >>> Set oMeetTable = CurrentDb().OpenRecordset(Name:="tblxxx", > >>>Type:=dbOpenSnapshot, Options:=dbOpenForwardOnly) > >>> With oMeetTable > >>> For i = 0 To .Fields.Count - 1 > >>> strVelden(UBound(strVelden)) = "E_" & .Fields(i).Name > >>> ReDim Preserve strVelden(0 To > >>>UBound(strVelden) + 1) > >>> Next i > >>> End With > >>> > >>> ReDim Preserve strVelden(0 To UBound(strVelden) > >>>- 1) > >>> > >>> lngRows = UBound(strVelden) + 1 ' array is > >>>0-based > >>> varRetVal = lngRows > >>> Case acLBOpen > >>> varRetVal = Timer 'Unique ID for control > >>> Case acLBGetRowCount > >>> varRetVal = lngRows > >>> Case acLBGetColumnCount > >>> varRetVal = 1 > >>> Case acLBGetColumnWidth > >>> varRetVal = -1 'Default of -1 uses default > >>>column width > >>> Case acLBGetValue > >>> varRetVal = strVelden(row) > >>> Case acLBEnd > >>> Erase strVelden > >>> End Select > >>> > >>> ListMeetVelden = varRetVal > >>> > >>>ListMeetVelden_Exit: > >>> Set oMeetTable = Nothing > >>> Exit Function > >>>ListMeetVelden_Error: > >>> Set oMeetTable = Nothing > >>> Call g_oGenErr.Throw("xxx.frmxxx", "tblxxxx") > >>>End Function _________________________________________________________________ Tired of spam? Get advanced junk mail protection with MSN 8. http://join.msn.com/?page=features/junkmail _______________________________________________ AccessD mailing list AccessD at databaseadvisors.com http://databaseadvisors.com/mailman/listinfo/accessd Website: http://www.databaseadvisors.com