![]() | |
![]() |
| | Thread Tools | Display Modes |
#11
| |||
| |||
|
|
"lyle fairfield" <lylefair (AT) yahoo (DOT) ca> wrote in message news:EAh2j.15510$9F1.10921 (AT) read1 (DOT) cgocable.net... "Neil" <nospam (AT) nospam (DOT) net> wrote in news:amg2j.871$Vq.43 (AT) nlpi061 (DOT) nbdc.sbc.com: "lyle" <lyle.fairfield (AT) gmail (DOT) com> wrote in message news:72efa194-0a71-42de-a549-79a724509fb2 (AT) p69g2000hsa (DOT) googlegroups.com. .. On Nov 24, 1:14 pm, "Mintyman" <minty... (AT) ntlworld (DOT) com> wrote: HI, I'm not that experienced in Access so am turning to the experts for some basic help. I have the following fields in a table : Name Type Level Number Start Date Date End Date Date Is it possible to have some code that will automatically change the value of 'level' from 2 to 1 if today's date is greater than 'End Date'? Effectively, I want the customer's access level to drop once their contract has run out. At the moment I have to keep an eye on when customer contracts are due to end and manually update the value in the 'level' field from 2 to 1. Can anyone show me how to do this? Thanks! Probably you should determine the customer's access level on the basis of [End Date]<VBA.Date(). Maintaining a "level" field that simply mimics the results of a calculation is unnecessary, and is generally considered to be poor design. Hi, Lyle. I tend to disagree with you on this. I think having a "level" field is a good idea. There may be other reasons besides expiration date for determining the level. Granted, all those criteria could be included in a dynamic level calculation. But having a separate field would allow ad-hoc adjustments to someone's level on a case-by-case basis. So I prefer the separate field approach. Another benefit of the separate field approach is that it allows sorting on filtering on that value, which isn't possible with a calculated value. Now here you might say that any sorting or filtering should be provided programmatically as part of the application. But depending on the size of the business and the need, they might not have the time or the resources to program everything that might be needed with the database. So being able to do sorting and filtering using the bulit-in Access tools is a big plus, IMO. So, those are my thoughts. Neil 1. As the level field is time-dependent would it not always have to be recalculated before/during use? If so, why not just use the calculation? 2. You think this would be beyond the casual user SELECT Orders.* FROM Orders WHERE ShippedDate > RequiredDate ORDER BY DateDiff("D", RequiredDate, ShippedDate) but updating the level field would not? -- lyle fairfield I will arise and go now, For always night and day I hear lake water lapping With low sounds by the shore; While I stand on the roadway Or on the pavements gray, I hear it in the deep heart's core. - Yeats "Mintyman" <mintyman (AT) ntlworld (DOT) com> wrote |
|
Hi guys, Thanks for the input here. I'll give you a bit more context so you know what i'm trying to achieve. I have 2 levels of contract for customers : Standard and Premium. Everyone by default will get a Standard contract (level 1). If people want to upgrade, they can move to premium (level 2). Upon doing so, they will choose a length of time their contract will run for : 3,6,12, 24 months. Once their premium contract has run out, I would like it to automatically revert back to a Standard contract (level 1). I'm using the 'level' as a variable in an ASP website to determine access to extra functionality e.g. % If varLevel = 2 then % Show extra content/functionality for premium customers % Else % Show basic content/functionality for standard customers % End If % I hope this makes sense! |
#12
| |||
| |||
|
|
You can use Windows Scheduler (in Control Panel) to run the query whenever you want. The way you'd do it is as follows: 1) Create your query. 2) Create a macro. In this macro have a single item that calls RunCode. Have it call a routine you create. 3) In the routine that you referenced in the macro, do the following: Currentdb.Execute "MyQuery", dbfailonerror Docmd.Quit That will run your macro and then close the application when it's done. 4) In Windows scheduler, create a new scheduled task based on Microsoft Access. Go into the task and edit it, telling it to open your database. At the end of that line, put /x macroname. Example: c:\program files\office\msaccess.exe c:\somedir\mydatabase.mdb /x mymacroname Note that you have to specify the path to msaccess.exe if you want to use the supplemental arguments. Is that clear? If not, let me know. Neil "Mintyman" <mintyman (AT) ntlworld (DOT) com> wrote in message news:6Ni2j.5612$B97.4576 (AT) newsfe7-win (DOT) ntli.net... Hi Neil, Will this query only run when I run it in Access? I would like these values to be updated on a constant basis without me having to do anything. I wasn't sure if Access could do this or whether i'm getting confused with SQL stored proedures. An alternative would be to place the code on a webpage on my site that will be accessed on a daily basis. That way, the query could be triggered every time a visitor loads that specific page. "Neil" <nospam (AT) nospam (DOT) net> wrote in message news:dq_1j.1362$AR7.112 (AT) nlpi070 (DOT) nbdc.sbc.com... You can create a query; don't add any tables; click the SQL button; and then add the following: Update MyTable Set Level=1 Where EndDate<Date() If you want to ONLY update if the level was 2 (e.g., not 3), then you'd do: Update MyTable Set Level=1 Where EndDate<Date() AND Level=2 Save your query, and then, when you open it from the database window, it will update your records. (Be sure to substitute the actual name of your table for MyTable.) "Mintyman" <mintyman (AT) ntlworld (DOT) com> wrote in message news:NRZ1j.12827$Ew3.9757 (AT) newsfe7-gui (DOT) ntli.net... HI, I'm not that experienced in Access so am turning to the experts for some basic help. I have the following fields in a table : Name Type Level Number Start Date Date End Date Date Is it possible to have some code that will automatically change the value of 'level' from 2 to 1 if today's date is greater than 'End Date'? Effectively, I want the customer's access level to drop once their contract has run out. At the moment I have to keep an eye on when customer contracts are due to end and manually update the value in the 'level' field from 2 to 1. Can anyone show me how to do this? Thanks! |
#13
| |||
| |||
|
|
Sounds perfect Neil.....only problem is that I don't have access to the PC. The database is located on a hosting account on a remote server (where my website is hosted). So, I can't get access to the Windows Scheduler. I was hoping there would be a way for Access to run these updates automatically. |
|
I agree this query only needs to be run once a day. However, the only way I know of calling this update would be to put a trigger in the ASP code on a designated page that I know will be visited at least once a day - the homepage soudns ideal. However, I don't want it to trigger every time the page is requested. That would be a waste of overheads. The only way I could do it would be to enclose it in an IF statement that would only allow the code to run during a given period in the day e.g. run the update ASP code between 11am and 11.20am. Then all I need to do is hope that I receive a vistior within that time period. I know it's not elegant but it should work......unless you can think of a better idea? |
| "Neil" <nospam (AT) nospam (DOT) net> wrote in message news:5fl2j.24521$JD.4523 (AT) newssvr21 (DOT) news.prodigy.net... You can use Windows Scheduler (in Control Panel) to run the query whenever you want. The way you'd do it is as follows: 1) Create your query. 2) Create a macro. In this macro have a single item that calls RunCode. Have it call a routine you create. 3) In the routine that you referenced in the macro, do the following: Currentdb.Execute "MyQuery", dbfailonerror Docmd.Quit That will run your macro and then close the application when it's done. 4) In Windows scheduler, create a new scheduled task based on Microsoft Access. Go into the task and edit it, telling it to open your database. At the end of that line, put /x macroname. Example: c:\program files\office\msaccess.exe c:\somedir\mydatabase.mdb /x mymacroname Note that you have to specify the path to msaccess.exe if you want to use the supplemental arguments. Is that clear? If not, let me know. Neil "Mintyman" <mintyman (AT) ntlworld (DOT) com> wrote in message news:6Ni2j.5612$B97.4576 (AT) newsfe7-win (DOT) ntli.net... Hi Neil, Will this query only run when I run it in Access? I would like these values to be updated on a constant basis without me having to do anything. I wasn't sure if Access could do this or whether i'm getting confused with SQL stored proedures. An alternative would be to place the code on a webpage on my site that will be accessed on a daily basis. That way, the query could be triggered every time a visitor loads that specific page. "Neil" <nospam (AT) nospam (DOT) net> wrote in message news:dq_1j.1362$AR7.112 (AT) nlpi070 (DOT) nbdc.sbc.com... You can create a query; don't add any tables; click the SQL button; and then add the following: Update MyTable Set Level=1 Where EndDate<Date() If you want to ONLY update if the level was 2 (e.g., not 3), then you'd do: Update MyTable Set Level=1 Where EndDate<Date() AND Level=2 Save your query, and then, when you open it from the database window, it will update your records. (Be sure to substitute the actual name of your table for MyTable.) "Mintyman" <mintyman (AT) ntlworld (DOT) com> wrote in message news:NRZ1j.12827$Ew3.9757 (AT) newsfe7-gui (DOT) ntli.net... HI, I'm not that experienced in Access so am turning to the experts for some basic help. I have the following fields in a table : Name Type Level Number Start Date Date End Date Date Is it possible to have some code that will automatically change the value of 'level' from 2 to 1 if today's date is greater than 'End Date'? Effectively, I want the customer's access level to drop once their contract has run out. At the moment I have to keep an eye on when customer contracts are due to end and manually update the value in the 'level' field from 2 to 1. Can anyone show me how to do this? Thanks! |
#14
| |||
| |||
|
|
Sounds perfect Neil.....only problem is that I don't have access to the PC. The database is located on a hosting account on a remote server (where my website is hosted). So, I can't get access to the Windows Scheduler. I was hoping there would be a way for Access to run these updates automatically. I agree this query only needs to be run once a day. However, the only way I know of calling this update would be to put a trigger in the ASP code on a designated page that I know will be visited at least once a day - the homepage soudns ideal. However, I don't want it to trigger every time the page is requested. That would be a waste of overheads. The only way I could do it would be to enclose it in an IF statement that would only allow the code to run during a given period in the day e.g. run the update ASP code between 11am and 11.20am. Then all I need to do is hope that I receive a vistior within that time period. I know it's not elegant but it should work......unless you can think of a better idea? |
#15
| |||
| |||
|
|
"Mintyman" <mintyman (AT) ntlworld (DOT) com> wrote in message news:fieaeq$a3i$1$8300dec7 (AT) news (DOT) demon.co.uk... Sounds perfect Neil.....only problem is that I don't have access to the PC. The database is located on a hosting account on a remote server (where my website is hosted). So, I can't get access to the Windows Scheduler. I was hoping there would be a way for Access to run these updates automatically. I agree this query only needs to be run once a day. However, the only way I know of calling this update would be to put a trigger in the ASP code on a designated page that I know will be visited at least once a day - the homepage soudns ideal. However, I don't want it to trigger every time the page is requested. That would be a waste of overheads. The only way I could do it would be to enclose it in an IF statement that would only allow the code to run during a given period in the day e.g. run the update ASP code between 11am and 11.20am. Then all I need to do is hope that I receive a vistior within that time period. I know it's not elegant but it should work......unless you can think of a better idea? Also, are you using this MDB as a back end for your web site, or are you just hosting it on the same server as your web site? If it's being used as a back end for your web site, then my original reasons for advocating a standalone Level field are null and void. If that's the case, the go with Lyle's suggestion and use a calculated value to determine the level when needed and avoid the updating altogether. I was basing my suggestion on the idea that users would be interacting directly with the Level field, and would benefit from having a standalone field. But if that's not the case, then forget the standalone field altogether. Neil |
#16
| |||
| |||
|
|
Users will be interacting directly with the 'Level' field so i'm keen to keep it separate. Thank you (and Lyle) for your input on this )"Neil" <nospam (AT) nospam (DOT) net> wrote in message news:9Jy2j.27033$lD6.18098 (AT) newssvr27 (DOT) news.prodigy.net... "Mintyman" <mintyman (AT) ntlworld (DOT) com> wrote in message news:fieaeq$a3i$1$8300dec7 (AT) news (DOT) demon.co.uk... Sounds perfect Neil.....only problem is that I don't have access to the PC. The database is located on a hosting account on a remote server (where my website is hosted). So, I can't get access to the Windows Scheduler. I was hoping there would be a way for Access to run these updates automatically. I agree this query only needs to be run once a day. However, the only way I know of calling this update would be to put a trigger in the ASP code on a designated page that I know will be visited at least once a day - the homepage soudns ideal. However, I don't want it to trigger every time the page is requested. That would be a waste of overheads. The only way I could do it would be to enclose it in an IF statement that would only allow the code to run during a given period in the day e.g. run the update ASP code between 11am and 11.20am. Then all I need to do is hope that I receive a vistior within that time period. I know it's not elegant but it should work......unless you can think of a better idea? Also, are you using this MDB as a back end for your web site, or are you just hosting it on the same server as your web site? If it's being used as a back end for your web site, then my original reasons for advocating a standalone Level field are null and void. If that's the case, the go with Lyle's suggestion and use a calculated value to determine the level when needed and avoid the updating altogether. I was basing my suggestion on the idea that users would be interacting directly with the Level field, and would benefit from having a standalone field. But if that's not the case, then forget the standalone field altogether. Neil |
![]() |
| Thread Tools | |
| Display Modes | |
| |