OK, thanks for the help. I figured it out. Mostly it was my bonehead forgetting that I was playing with ways to get around a couple of perceived limitations in the way that Reactor's constructed DAO works and I was querying a view and not a table at the point that I starting having this trouble and did not switch everything back.

But it raises the question again, since it appears this will not work with views. In my experience most of this stuff belongs in the database in stored procedures. I was willing to try to refactor my database for this new project because I can recognize the savings that not having to build all of this would provide. But I am having a hard time getting my head around how Reactor is useful for all but the most basic of applications. (This is NOT a criticism... it is a tremendous project... I just may not get it yet).

It seems that for anything beyond very basic data structure you end up having to use custom query functions anyway and that defeats the purpose of Reactor abstracting for you. It is seeming like I could use this for maybe 20% of the app, but beyond that the processing is just too intense to leave to simple table updates.

Am I not getting it? Or are my needs just something other than what this is intended to provide? Has anyone else tried to take an app done in sprocs and refactor it to allow Reactor to handle it?

I want to love this. Please help me... :-)

Ray


João Fernandes wrote:
Sorry ray, you missunderstood me,

This is what reactor does when you call load method on your record.

 <cfset record.load()>

Executes load method from the abstractRecord (reactor.base.abstractRecord)

Look this code
<!-------------- CODE INSIDE LOAD METHOD OF THE RECORD -------------------->
<cfif IsDefined("arguments") AND fieldList IS 1>
        <cfset fieldList = arguments[1] />
                        
        <cfelseif IsDefined("arguments") AND fieldList IS NOT 1>
                <cfloop collection="#arguments#" item="item">
                        <cfinvoke component="#this#" method="set#item#">
                                <cfinvokeargument name="#item#"
value="#arguments[item]#" />
                                </cfinvoke>
                        </cfloop>
                        
                </cfif>
                
                <cftry>
                        <cfset _getDao().read(_getTo(), fieldList) />
                        <cfcatch type="Reactor.Record.NoMatchingRecord">
                                <cfset nothingLoaded = true />
                        </cfcatch>                
                </cftry>
<!-------------- CODE INSIDE LOAD METHOD OF THE RECORD -------------------->

When it calls <cfset _getDao().read(_getTo(), fieldList) />
It will invoke read method in the DAO passing all arguments to it, but since
you didn't pass any (in this case) inside the DAO you'll be executing
<!-------------- CODE INSIDE READ METHOD OF THE DAO ----------------------->
<cfif Len(arguments.loadFieldList)>
                        <cfset UserQuery = UserGateway.createQuery() />
                        <cfloop list="#arguments.loadFieldList#"
index="field">
                                <cfset UserQuery.getWhere().isEqual("User",
field, arguments.to[field]) />
                        </cfloop>
                        
                        <cfset qRead =
UserGateway.getByQuery(UserQuery,true) />
                <cfelse>
                        <cfset qRead = UserGateway.getByFields(
                                
                        ) />
                </cfif>
<!-------------- CODE INSIDE READ METHOD OF THE DAO ----------------------->
Since the arguments.loadFieldList in your case will be empty, it will
execute <cfset qRead = UserGateway.getByFields( ) /> It should be <cfset qRead = UserGateway.getByFields( UserId = arguments.to.UserId ) />

Why is it doing this?

Because it couldn't find the primary key during the generation

Try to run this query SELECT col.COLUMN_NAME as name,
                                CASE
                                        WHEN colCon.CONSTRAINT_NAME IS NOT
NULL THEN 'true'
                                        ELSE 'false'
                                END as primaryKey,
                                CASE
                                        WHEN
columnProperty(object_id(col.TABLE_NAME), col.COLUMN_NAME, 'IsIdentity') > 0
THEN 'true'
                                        ELSE 'false'
                                END AS [identity],      
                                CASE
                                        WHEN col.IS_NULLABLE = 'No' THEN
'false'
                                        ELSE 'true'
                                END as nullable,

                                col.DATA_TYPE as dbDataType,
                                CASE
                                        WHEN
ISNUMERIC(col.CHARACTER_MAXIMUM_LENGTH) = 1 THEN
col.CHARACTER_MAXIMUM_LENGTH
                                        ELSE 0
                                END as length,
                                col.COLUMN_DEFAULT as [default]
                        FROM INFORMATION_SCHEMA.COLUMNS as col LEFT JOIN
INFORMATION_SCHEMA.TABLE_CONSTRAINTS as tabCon
                                ON col.TABLE_NAME = tabCon.TABLE_NAME
                                AND tabCon.CONSTRAINT_TYPE = 'PRIMARY KEY'
                        LEFT JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE
as colCon
                                ON col.COLUMN_NAME = colCon.COLUMN_NAME
                                AND col.TABLE_NAME = colCon.TABLE_NAME
                                AND colCon.CONSTRAINT_NAME =
tabCon.CONSTRAINT_NAME
                        WHERE col.TABLE_NAME = 'User'

And drop the result here.

João Fernandes
                                
                        






-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On
Behalf Of Ray West
Sent: quinta-feira, 10 de Agosto de 2006 16:41
To: [email protected]
Subject: Re: [Reactor for CF] Ambiguous Record Problem

OK, replying to a couple of emails here. Thanks everyone for the help...

Yes the UserID field is definitely a PK. I turned it off and saved and turned it back on to be sure it was set. Same problem exists.

While the PK was turned off I tried the shortcut method. It still worked.

I am in development mode.

I have deleted all of my project files and they were recreated... Same problem exists.

So are you saying that I can only 'search' by fields that are primary keys? What if I want to create a record and run a login script on it comparing a username and password that are not keys? This works using the shortcut method. Why should it not work by setting the properties and loading the object?

Hope I answered everything.

Ray


João Fernandes wrote:
The problem is, when you use <cfset record.setUserid(someval)>
<cfset record.load()>

In the read method inside UserDao.cfc if you take a look into the code I
posted in my last email, load() and load(userid=val) go through different
paths. The load() method goes through
<cfset qRead = UserGateway.getByFields(
                                <!------- This part is blank ------->
) />
The part in blank is where reactor should put the code to load the record
based on the primary key definition. Delete your project files and
regenerate to see if the problem persists.

João Fernandes


-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On
Behalf Of Ray West
Sent: quinta-feira, 10 de Agosto de 2006 16:15
To: [email protected]
Subject: Re: [Reactor for CF] Ambiguous Record Problem

The shortcut method appears to be using the same setUserID property setter that I am calling. And yet the shortcut method works...

Ray


Ray West wrote:
frak... well... it is not working here and I need to be able to pass the object into a method for processing (not to mention that that is the better way to do it) so the shortcut method won't work for this.

R

Jared Rypka-Hauer wrote:
I've been using it just fine with SQL Server for eons... well, not eons, but a long time.

I'm trying to think of what the issue could be man. Coming up, as usual, with a big fat blank. ;)

J


------------------------------------------------

Jared C. Rypka-Hauer

Continuum Media Group LLC

http://www.web-relevant.com

Member, Team Macromedia - ColdFusion


"That which does not kill me makes me stranger." - Yonah Schmeidler















On Aug 10, 2006, at 9:25 AM, Ray West wrote:

NP Chris,

This is an exception thrown by Reactor and not a CF error. I don't get anything extra when I turn on debugging in CF. A query of some sort apparently runs fine, it just returns unexpected data.

I am going to load the new version and see if there is any difference.

Have anyone reproduced this or gotten it to run correctly with SQL Server?

Ray

Chris Phillips wrote:
I appologize Ray.
I didn't catch that you were saying that
<cfset objUser.setUserID(1) />
<cfset objUser.load() />
didn't work
and
<cfset objUser.load(UserID=1) />
did.
Which makes this rather wierd.
If it were me, I'd turn on debugging and watch the queries that CF is generating to see how they are different.
Let us know what you see.
Regards,
Chris
On 8/9/06, *Ray West* <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>> wrote:
    It is... second guess? :-)
    Can anyone repro this?
    Ray
    Chris Phillips wrote:
     > First guess is that UserID is not a PrimaryKey.
     >
     > On 8/9/06, *Ray West* < [EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>
    <mailto:[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>>> wrote:
     >
     >     Hi,
     >
     >     In MS SQL Server, whenever I create a record and do this:
     >
     >     <cfset objUser.setUserID (1) />
     >     <cfset objUser.load() />
     >
> I get an ambiguous record error, even though there is only one
     >     record in
     >     the table with that ID.
     >
     >     When I do:
     >
     >     <cfset objUser.load(UserID=1) />
     >
     >     It works fine.
     >
     >     Any help appreciated...
     >
     >     Ray
     >
     >
     >
     >
     >     -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    -- --
     >     -- -- -- -- --
     >     Reactor for ColdFusion Mailing List
     >     [email protected] <mailto:[email protected]>
    <mailto:[email protected] <mailto:[email protected]>>
     >     Archives at:
    http://www.mail-archive.com/reactor%40doughughes.net/
     >     < http://www.mail-archive.com/reactor%40doughughes.net/>
> -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
     >     -- -- -- -- --
     >
     >
     >
     >
     > --
     > Chris Phillips
     > www.dealerpeak.com <http://www.dealerpeak.com>
    <http://www.dealerpeak.com>
     > Senior Application Developer
> -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
     > -- -- -- --
     > Reactor for ColdFusion Mailing List
     > [email protected] <mailto:[email protected]>
> Archives at: http://www.mail-archive.com/reactor%40doughughes.net/ > -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
     > -- -- -- --
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    -- -- -- --
    Reactor for ColdFusion Mailing List
    [email protected] <mailto:[email protected]>
    Archives at: http://www.mail-archive.com/reactor%40doughughes.net/
    <http://www.mail-archive.com/reactor%40doughughes.net/>
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    -- -- -- --
--
Chris Phillips
www.dealerpeak.com <http://www.dealerpeak.com>
Senior Application Developer
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
Reactor for ColdFusion Mailing List
[email protected] <mailto:[email protected]>
Archives at: http://www.mail-archive.com/reactor%40doughughes.net/
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
Reactor for ColdFusion Mailing List
[email protected] <mailto:[email protected]>
Archives at: http://www.mail-archive.com/reactor%40doughughes.net/
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
Reactor for ColdFusion Mailing List
[email protected]
Archives at: http://www.mail-archive.com/reactor%40doughughes.net/
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
Reactor for ColdFusion Mailing List
[email protected]
Archives at: http://www.mail-archive.com/reactor%40doughughes.net/
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --





-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-- --
Reactor for ColdFusion Mailing List
[email protected]
Archives at: http://www.mail-archive.com/reactor%40doughughes.net/
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-- --



-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-- --
Reactor for ColdFusion Mailing List
[email protected]
Archives at: http://www.mail-archive.com/reactor%40doughughes.net/
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-- --





-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-- --
Reactor for ColdFusion Mailing List
[email protected]
Archives at: http://www.mail-archive.com/reactor%40doughughes.net/
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-- --



-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
Reactor for ColdFusion Mailing List
[email protected]
Archives at: http://www.mail-archive.com/reactor%40doughughes.net/
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --






-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
Reactor for ColdFusion Mailing List
[email protected]
Archives at: http://www.mail-archive.com/reactor%40doughughes.net/
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

Reply via email to