Jeff, wasn't offended at all, not in any way. As I said, I truly am interested in learning more and how to "do this" better and more efficiently.
--just to give you, and any others reading, a bit of my background-- I founded and ran a small web-dev company in 1992-through-2002 (and was then "hired away" be a bigger firm to be their Opp and Dev Manager. BUT for all those years I was the senior architect, dev manager, project manager, client manager, etc. and while I did write code, this was always from a looking over the shoulders of my employees perspective. I never did it full time, at the most maybe a couple of hours a day. Now I find myself actually farming myself out as a developer and writing all the code myself, with only books, discussion lists, friends and close business associates, AND Google to help me. So everyday is a self-imposed learning curve. I'm proud of my work. I speak the client's language more than anything. But I'm not a trained/schooled programmer (not that CF is true programming, but I hope you know what I mean). So, again, I will absolutely humbly listen to the advice and teachings of my peers (if I may include myself.) Sincerely to all, Dan Kaufman -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Jeff Fleitz Sent: Friday, May 06, 2005 9:44 AM To: [email protected] Subject: Re: [plum] Query of Query Hi Dan, I am not an 'OOP Nazi', so no offense taken, and I certainly wasn't questioning your ability to write decent code :) I agree with you that you need to get the job done. A project with a looming deadline is not the time to start experimenting with unfamiliar waters, IMO. I wasn't sure if you had 'gotten under the hood' yet, and just wanted to point out the availability of some of the tools that you could adopt. v/r, Jeff Dan wrote: > Hi Jeff, > > Re DatabaseBlocks.cfc AND other components. > > Yes I did wonder one day where had all the queries (flowers?) gone? And went > looking and found them, of course, in the components. > > CFC's are new to me. Sometimes it's like how you get across town, been > going one way (for ever) until one day somebody points out that if you take > the bypass through the components neighborhood you'll save tons of time. > > So yes, I have added study time to CFC's. I've already benefited from other > new/different/advanced techniques used in Plum. I'm sure this (CFC's) will > help me too. > > But having said that, and to fall back on my driving route metaphor above, > taking the road I'm familiar with WILL get me to my destination--that I can > be sure of, but taking a new route may involve unfamiliar elements, each of > which requiring a stop-study-and-learn brake (and I did mean brake vs. > break). I NEED to get this current app done and delivered. I know you can't > advise me--not being able to see what I'm actually doing--but am I shooting > myself in the foot by using my separated query-action-display files > methodology, CFincluded into my app? It does work for me. My overall app is > well organized in this respect. Definitely NOT a bowl of spaghetti. > > OR, would you say---and with ALL due respect to you, the Churvis's, and all > the other Plummers out there: "Dan, I've been-there-done-that; take the time > to understand what and how the CFC's are used and do that." ??? > > > Respectfully yours, > > > Dan Kaufman > > > -----Original Message----- > From: [EMAIL PROTECTED] > [mailto:[EMAIL PROTECTED] On Behalf Of Jeff > Fleitz > Sent: Thursday, May 05, 2005 10:18 PM > To: [email protected] > Subject: Re: [plum] Query of Query > > Hi Dan, > > Ever wonder how all that data magically appears in your forms and lists when > there are no <cfquery> tags to be found? > > The DatabaseBlocks.cfc component (in the components directory) is used by > all of the custom tags that access data in > Plum apps. Open the DisplayList.cfm or InsertRecord.cfm custom tags for > example, and you will see references to the > DatabaseBlocks component. You won't see <cfquery> tags being used (there > may be a stray one in there somewhere). This > is a persistent component loaded in the Application scope (look at the > Global.cfm template in your root directory), that > has properties and methods that can be reused thoughout your application. > They are similar to 'classes' in OOP languages > and promote code reuse and ease of maintenance. > > Of course you still have to deal with exception handling and locking if > appropriate for your scenario. > > As CF moves more toward Java and OOP, it is a good idea to start looking > into using components and their benefits. Adam > and Dave have a great section on this topic in the excellent ColdFusion MX > Bible, if you don't already have it. > > v/r, > > Jeff > > > > > >>Thanks Jeff. >> >>Scott's help and advice definitely helped me out. I was headed in that >>direction, but mis-stepping my way there. >> >>Re your suggestion to use the DatabaseBlock.cfc. My honest answer is I >>don't yet understand what and why with this one. >> >>What is this doing "better" than writing a SQL statement for? (I'll pull > > out > >>my Plum docs and read 'em) >> >>Dan >> >> >> >> >>-----Original Message----- >>From: [EMAIL PROTECTED] >>[mailto:[EMAIL PROTECTED] On Behalf Of Jeff >>Fleitz >>Sent: Thursday, May 05, 2005 6:22 PM >>To: [email protected] >>Subject: Re: [plum] Query of Query >> >>Hi Dan, >> >>To support what Scott says, I would try to get used to using calls to the >>DatabaseBlocks.cfc for your queries. That is >>what it is there for ;) >> >>I have a little snippet I keep that I can hotkey that sets up a blank for >>me. You just populate the clauses and rename >>the qryResult if you want, and away you go. >> >><cfscript> >> // Select record set >> selectClause = ""; >> fromClause = ""; >> whereClause = ""; >> orderByClause = ""; >> qryResult = >>Application.DatabaseBlocks.SelectRecords(selectClause:selectClause, >>fromClause:fromClause, >>whereClause:whereClause, orderByClause:orderByClause); >></cfscript> >> >>Here is an example of a simple one I created today: >> >><cfscript> >> // Select record set >> selectClause = "Workshop.WSDate AS Workshop_WSDate, Workshop.WSTeams >>AS Workshop_WSTeams, Workshop.WSRooms AS >>Workshop_WSRooms, Workshop.WSDescription AS Workshop_WSDescription"; >> fromClause = "PlumUser, Workshop, PlumUserWorkShop"; >> whereClause = "PlumUser.UserID = PlumUserWorkshop.UserId AND >>Workshop.WorkshopID = PlumUserWorkshop.WorkshopID AND >> (PlumUser.UserID = #GetAuthUser()#)"; >> orderByClause = "1"; >> qryResult = >>Application.DatabaseBlocks.SelectRecords(selectClause:selectClause, >>fromClause:fromClause, >>whereClause:whereClause, orderByClause:orderByClause); >></cfscript> >> >> >>Then you could run your QoQ against the qryResult. >> >>Right now you have to use underscores between the tablenames and fields. >>Adam and David are planning for this behavior >>to go away in the future, but it works well with the current component. >> >>Go look at the methods in there. You can do inserts, updates, get record >>counts, etc. and you can call it with either >>the dot notation above or by using a CFINVOKE. >> >>HTH, >> >>Jeff >> >> >> >> >>Dan wrote: >> >> >>>Thank you Scott. !!! >>> >>> >>> >>>A quick copy and paste to test AND IT WORKS. Now to refine it if I >>>can. I don't need elegant right now, just a working app. (my wife says >>>I look elegant in a Tux, but I prefer a T-Shirt and Shorts) >>> >>> >>> >>>Ironically I was headed in the direction of your reasoning-that my first >>>query was outside the scope of something. I was about to try caching >>>the query, but something tells me that wouldn't have worked. >>> >>> >>> >>>Dan >>> >>> >>> >>> >>> >>>-----Original Message----- >>>*From:* [EMAIL PROTECTED] >>>[mailto:[EMAIL PROTECTED] *On Behalf Of >>>*Scott Krebs >>>*Sent:* Thursday, May 05, 2005 5:13 PM >>>*To:* [email protected] >>>*Subject:* RE: [plum] Query of Query >>> >>> >>> >>>Greetings Dan, >>> >>>Since you run the first query in a template called by cfmodule and not >>>cfinclude, the result set is out of the scope of the rest of the page. A >>>quick fix would be to load the result set into the session scope by >>>doing something like the following in SiteNav.cfm after the cfquery: >>> >>> >>> >>><CFLOCK TIMEOUT="30" THROWONTIMEOUT="No" TYPE="EXCLUSIVE" SCOPE="SESSION"> >>><CFSET session.GetCategories = GetCategories> >>></CFLOCK> >>> >>> >>> >>>You can then do your QoQ on the query "session.GetCategories" and it >>>should work just fine. >>> >>> >>> >>>That's nowhere near an elegant solution, but it'll work... >>> >>> >>> >>>HTH! >>> >>>Scott >>> >>>------------------------------------------------------------------------ >>> >>>*From:* [EMAIL PROTECTED] >>>[mailto:[EMAIL PROTECTED] *On Behalf Of *Dan >>>*Sent:* Thursday, May 05, 2005 4:52 PM >>>*To:* [email protected] >>>*Subject:* [plum] Query of Query >>> >>>Hi there Plummers, >>> >>> >>> >>> >>> >>>Struggling again. Hope there's someone out there who can re-point me in >>>the right direction. >>> >>> >>> >>>On my Header.cfm page I have near the top a CFmodule call for the >>>SiteNav bar. >>> >>> >>> >>>In the SiteNav.cfm page for the bar I run a fairly fancy SQL query to >>>get the Nav Items from a couple of tables. No problem here-it works >>>very well. >>> >>> >>> >>>A little further down the page I have a "PageBar" that will show the >>>"CategoryName" and the "PageName" ( A Category can/will have multiple >>>pages) Only the CategoryName(s) appear in the SiteNav bar at top. The >>>PageNames are used in the PageBar and below that in a "subNav menu" >>> >>> >>> >>>I need the PageBar to change values displayed as a site visitor >>>clicks/selects CategoryName(s) from the SiteNav bar. >>> >>> >>> >>>Since I've already run a query that has all the CategoryNames and >>>PageNames, my reasoning was that all I needed to do was run a Query of >>>Query on the "GetCategories" query that populates the SiteNav bar, by >>>passing to it (the QoQ) the CategoryID and have my WHERE clause simply >>>say WHERE CategoryID = #URL.Cat# >>> >>> >>> >>>It seems to make logical sense to me. >>> >>> >>> >>>But I am getting an error that says *my first query* "GetCategories" >>>*can't be found in memory.* >>> >>> >>> >>>Here's some code snippets: (this is all in header.cfm) >>> >>> >>> >>><!-- #SiteNav --> >>> >>><cfmodule template="#request.layout#/SiteNav.cfm" >>>pageType="#Attributes.pageType#"> >>> >>> >>> >>>.then a bit further down the page. >>> >>> >>> >>><!--- #PageBar ---> >>> >>><div id="PageBar"> >>> >>> >>> >>><CFinclude template="../../qry/BCC_qry_*GetPageBarLabels.cfm*"> >>> >>><cfoutput query="GetPageBarLabels"> >>> >>><span class="PageTitle">#GetPageBarLabels.PageName#</span> >>> >>> >>> >>> >>> >>>GetPageBarLabels.cfm is my Query of Query on GetCategories >>> >>> >>> >>> >>> >>>and over on *SiteNav.cfm* I have (in part) >>> >>> >>> >>><CFcase value="Public"> >>> >>><CFset RoleCode ="Public"> >>> >>><CFinclude template="../../qry/BCC_qry_*GetCategories.cfm*"> >>> >>><cfoutput query="GetCategories"> >>> >>><li><a >>> >> >> > href="#Application.absoluteUrlRoot#/PublicContent/index.cfm?Cat=#CategoryID# > >>" >> >> >>>#GetCategories.CategoryName#</a></li> >>> >>></cfoutput> >>> >>> >>> >>> >>> >>> >>> >>>If you can figure out what I'm describing here, can you tell me why not >>>the GetCategories query would not be in memory? >>> >>> >>> >>> >>> >>>Thanks, >>> >>> >>> >>> >>> >>> >>> >>> >>> >>>Dan Kaufman >>> >>> >>> >>> >>> >>> >>> >>>//An Elephant Never Forgets// >>> >>>[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]> >>> >>> >>> >>> >>> >>>-- >>>No virus found in this incoming message. >>>Checked by AVG Anti-Virus. >>>Version: 7.0.308 / Virus Database: 266.11.5 - Release Date: 5/4/2005 >>> >>> >>>-- >>>No virus found in this outgoing message. >>>Checked by AVG Anti-Virus. >>>Version: 7.0.308 / Virus Database: 266.11.5 - Release Date: 5/4/2005 >>> >> >> >>********************************************************************** >>You can subscribe to and unsubscribe from lists, and you can change >>your subscriptions between normal and digest modes here: >> >>http://www.productivityenhancement.com/support/DiscussionListsForm.cfm >>********************************************************************** >> >> >> >> >>********************************************************************** >>You can subscribe to and unsubscribe from lists, and you can change >>your subscriptions between normal and digest modes here: >> >>http://www.productivityenhancement.com/support/DiscussionListsForm.cfm >>********************************************************************** >> >> > > > ********************************************************************** > You can subscribe to and unsubscribe from lists, and you can change > your subscriptions between normal and digest modes here: > > http://www.productivityenhancement.com/support/DiscussionListsForm.cfm > ********************************************************************** > > > > > ********************************************************************** > You can subscribe to and unsubscribe from lists, and you can change > your subscriptions between normal and digest modes here: > > http://www.productivityenhancement.com/support/DiscussionListsForm.cfm > ********************************************************************** > > ********************************************************************** You can subscribe to and unsubscribe from lists, and you can change your subscriptions between normal and digest modes here: http://www.productivityenhancement.com/support/DiscussionListsForm.cfm ********************************************************************** ********************************************************************** You can subscribe to and unsubscribe from lists, and you can change your subscriptions between normal and digest modes here: http://www.productivityenhancement.com/support/DiscussionListsForm.cfm **********************************************************************
