Hi Willy,
I have been thinking about this for the last day (amongst 20,000 other
things) and I really don't have an easy answer. 

On Tue, 2014-01-14 at 10:20 +0100, Willy Raets wrote:
> Hi all,
> 
> In MS Access it was possible to make a query based on a query. I am in
> the middle of porting all MS Access clients to Gambas 3 and all tables
> have been migrated to MySql.
> 
I do sort of remember this. We used to make a lot of use of it. But I
can't remember how it was done. Could you post a simple example?

> Is it possible in Gambas to do a query and next do another query on the
> result of the previous query combined with some extra tables?

(Without the example, the answer is) Well not really, but there are a
lot of options.
> 
> Or, do I need to do the query, store the result in a table and next
> query this table combined with the extra tables.

No, you need not go this far!
A Gambas "result" is not a "cursor" in the true sense of the word. The
best way I can explain it is that it is sort of a live collection of
rows. You can iterate through it using the short form of the For Each
method, but you cant refer to it in another query as the dbms has no
idea what you could be talking about.

There are a few options that leap to mind without remembering how this
stuff was done, but they all involve using direct SQL calls rather than
the clever stuff Benout has provided. Also be very aware that you will
be writing dbms specific code and so lose the database "agnosticity"
that normal use of gb.db provides. (And as you seem intent on using that
dog of a dbms, MySQL, I can't really be entirely specific as to how to
go about it.)

Generally, it works like this. The SQL standard requires a SELECT
statement to refer in the FROM clause to either:
- real tables
- views
- embedded queries.

So we can 
        SELECT (blah..)
        FROM aTable as A, aView as B, (SELECT Martians FROM
                                        somewhere WHERE etc) AS C
        WHERE A.Joe= b.Mary AND B.Sausages = C.Martians;
(Note, I am cleverly avoiding JOINS here :-) )

This is standard (and I mean Standard!) SQL. 

But you can't do that using the normal Gambas db stuff, you have to do a
Connection.Exec(query) call and that is 
a) dbms specific and
b) not updatable.

So to cut a long story short, consider this approach:
1) Convert your Access queries to views and store them in your MySQL
(Ack, spit) database, but only store the Keying information
2) Use those views, which are "visible" in gambas as Tables
3) Use the view result as a list of keys in your gambas app to do real
table updates.

We do this every day, let me check todays stats... pic attached
hmm a pretty slow day really.


> 
> I know this last option would work, but I am just wondering if there are
> any better ways of doing this, without having to create a table with the
> query result.
> 
> Suggestions are appreciated.
> 

hth
Bruce

<<attachment: Selection_030.png>>

------------------------------------------------------------------------------
CenturyLink Cloud: The Leader in Enterprise Cloud Services.
Learn Why More Businesses Are Choosing CenturyLink Cloud For
Critical Workloads, Development Environments & Everything In Between.
Get a Quote or Start a Free Trial Today. 
http://pubads.g.doubleclick.net/gampad/clk?id=119420431&iu=/4140/ostg.clktrk
_______________________________________________
Gambas-user mailing list
Gambas-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/gambas-user

Reply via email to