Bob Gajewski
rbgajewski at adelphia.net
Fri Apr 23 08:48:15 CDT 2004
Susan If you choose Option #2 ... (watch for line wraps) In the report's OnOpen event, place: ****************************************** Private Sub Report_Open(Cancel As Integer) Dim strFormName As String strFormName = "yourformname" If Not IsLoaded(strFormName) Then Dim strMsg As String, strResponse As String strMsg = "This report cannot be run directly. You must open the " & strFormName & " form." strResponse = MsgBox(strMsg) Cancel = True End If End Sub ****************************************** And in a module, place: ****************************************** Function IsLoaded(ByVal strFormName As String) As Boolean Const conObjStateClosed = 0 Const conDesignView = 0 If SysCmd(acSysCmdGetObjectState, acForm, strFormName) <> conObjStateClosed Then If Forms(strFormName).CurrentView <> conDesignView Then IsLoaded = True End If End If End Function ****************************************** Regards, Bob Gajewski -----Original Message----- From: accessd-bounces at databaseadvisors.com [mailto:accessd-bounces at databaseadvisors.com]On Behalf Of Jim Dettman Sent: Friday, April 23, 2004 09:16 To: Access Developers discussion and problem solving Subject: RE: [AccessD] custom sorts/groups in a report Susan, <<Unfortunately, I didn't know how to ward off the dread parameter prompt when the user opens the report naturally instead of through the form. >> In the reports OnOpen event, you can check for the existence of the form and 1. Open it and switch focus to it. 2. Cancel the report with a message box to the user telling them that they need to open the report through the form. 3. Open the form hidden, stuff a default value, and then continue. or 4. Change the query to use a function to get the value for the parameter from a global variable, which could be set from the form or from the report's OnOpen event if the form is not open. Jim (315) 699-3443 jimdettman at earthlink.net -----Original Message----- From: accessd-bounces at databaseadvisors.com [mailto:accessd-bounces at databaseadvisors.com]On Behalf Of Susan Harkins Sent: Friday, April 23, 2004 9:09 AM To: 'Access Developers discussion and problem solving' Subject: RE: [AccessD] custom sorts/groups in a report Thank you Ken. ;) My final solution is to refer to the form value in the query. This time around, I hid the report, forcing the user to use the form to open the report, but that isn't the best way to do it. Unfortunately, I didn't know how to ward off the dread parameter prompt when the user opens the report naturally instead of through the form. I've no problem setting a default for the sort, but couldn't stop that stupid prompt because it's coming from the query. :( Susan H. Susan, You can do this using only a query, without any code, OpenArgs, or calculated controls on the report's part. You simply need a query with four variables: MajorInt - the major date interval MinorInt - the minor date interval CurInt - the current date's minor interval (1 - 7 for weekdays, etc) MaxInt - the number minor intervals in the major interval For the following Major/Minor groups, use these values: Group MajorInt MinorInt MaxInt CurInt ======================================================================= Week/Day "ww" "w" 7 DatePart("w", Date) Month/Day "m" "d" 31 DatePart("d", Date) Year/Day "yyyy" "y" 366 DatePart("y", Date) Year/Week "yyyy" "ww" 54 DatePart("ww", Date) This will group by MajorInt, then MinorInt, ordering the records starting with CurInt for each MajorInt. Sample Query: (For a report, replace the Parameters with Form control references, and replace the OrderBy with grouping by GroupMajor, GroupMinor) PARAMETERS MajorInt Text ( 255 ), MinorInt Text ( 255 ), CurInt Short, MaxInt Short; SELECT DatePart([MajorInt],[DateField]) AS GroupMajor, (DatePart([MinorInt],[DateField])+IIf(DatePart([MinorInt],[DateField])<[CurI nt],[MaxInt],0)) AS GroupMinor, tblDemo.DateID, Format([DateField],"yyyy") AS [Year], Format([DateField],"mmm") AS [Month], DatePart("ww",[DateField]) AS Week, DatePart("d",[DateField]) AS DayMonth, Format([DateField],"ddd") AS [Day] FROM tblDemo ORDER BY DatePart([MajorInt],[DateField]), (DatePart([MinorInt],[DateField])+IIf(DatePart([MinorInt],[DateField])<[CurI nt],[MaxInt],0)); -Ken ----- Original Message ----- From: Susan Harkins To: 'Access Developers discussion and problem solving' Sent: Sunday, April 18, 2004 04:16 Subject: [AccessD] custom sorts/groups in a report I'm grouping and sorting a report on a date field. The grouping is by the week -- but I want it to handle a changing first day of the week variable. I can't get my head around it at all. Passing the first day of the week around is no problem -- I just can't seem to get Access to group by it. I've looked at CreateGroupLevel, but I don't see how that can help. I tried adding a DatePart expression to the Detail section and using the OpenArgs property to pass the first day of the week, and while the expression works, I can't group by it -- it's a calculated control. I don't want the users manipulating the underlying query either. They choose the first day of the week from a simple form and the rest needs to happen behind the scenes. Any suggestions? Susan H. -- _______________________________________________ AccessD mailing list AccessD at databaseadvisors.com http://databaseadvisors.com/mailman/listinfo/accessd Website: http://www.databaseadvisors.com -- _______________________________________________ AccessD mailing list AccessD at databaseadvisors.com http://databaseadvisors.com/mailman/listinfo/accessd Website: http://www.databaseadvisors.com -- _______________________________________________ AccessD mailing list AccessD at databaseadvisors.com http://databaseadvisors.com/mailman/listinfo/accessd Website: http://www.databaseadvisors.com