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
**********************************************************************

Reply via email to