Here's the question:
--
Brett Valjalo * Assistant to the President
Corporate Alliances * Career Agents
300 Brannan Street * Suite 212 San Francisco, Ca 94107
Work/415-597-5509 Fax/415-597-5501 PCS/510-331-5555
Email/br...@careeragents.com
http://www.careeragents.com
--
L. M. (Larry) Linson
Access Database Examples at http://homestead.deja.com/user.accdevel
(script execution must be enabled in your browser to see it)
Earlybird Bargains: Y3K Remediation Planning
Sent via Deja.com http://www.deja.com/
Before you buy.
In article <85ist9$m5t$1...@nnrp1.deja.com>,
--
Free Silkworm Zone
Can someone describe in what cases/circumstances EXACTLY that I can avoid
this occurence, because I've done a LOT of dicking around with indexing
fields, opening forms using the docmd openform Where Clauses, Where clauses
in saved queries (both hardcoded and criteria pulled from forms), etc? And
nothing seems to help.
Can someone just state with certainty whether what I'm asking is possible,
or am I just being unclear as to what I want? Basically, its this:
How can I open form1 bound to tbl or qryA, choose a record from the list on
the form1, then jump to form2 which lists the details of the record, without
incurring two times of pulling the entire qry or tbl across the wire. And
details on what procedure to use would be awesome.
The whole "just put it on one form" answer is not what I'm looking for, I
know I probably "could" do this using a bound, tabbed form that has the
continuous "brief list of table contents" form on one tab, and the single
record "full list of fields detail" form on another tab, but thats not what
I want if I can avoid it. Among many reasons is that the table and records
are large enough that I want the full screen to display either the brief
list or full details. If that makes sense. I really Appreciate all help on
this... I'd like not to resort to a workaround if their is indeed a simple
solution that does what I want... It will have widespread application to my
db as well.
TIA
brett
Thanks for the help. It's getting clearer. A couple more ?'s, if you happen to
revisit the thread?
1. I'm curious as to whether the Left () function you give an example of is
essentially analogous to ANYTHING you try compare with a field other than just
make a simple, verbatim comparison to it's exact value, based on the field type
(like fldDateField<#01/01/2000# would pull partially, but year(fldDateField)<2000
would pull fully)?
2. In your example if MyField was indexed, would you still have the full pull?
I'm guessing you would, if the above was true.
3. How do form references affect things? Should I try to make sure that any
references to controls have the same field type set as the field does in the
tabledef?
4. How do links to other tables affect the scenario? I.E. would:
SELECT JobOrders.OrderTaker, Companies.ClientCompany, JobOrders.DateTaken,
JobOrders.Position, JobOrders.Priority
FROM Companies INNER JOIN (JobOrders INNER JOIN Clients ON JobOrders.BranchID =
Clients.BranchID) ON Companies.CompanyID = Clients.CompanyID;
which is designed to pull all records from job orders, but also needs a
ClientCompany field thats two tables removed, also pull across the entire Client
and Company tables (of course the ID's are indexed) as well as the joborders
table? If so, if I stipulated a simple Where clause on an indexed field in the
JobOrders table (like JobOrderID=1), would that avoid that occurence?
5. If one only chooses certain fields, are you saying those ARE the only one's
brought over? Always?
TIA for your help
Brett
Chuck Grimsby wrote:
> Larry or Michka could probably answer better then I, but I'll take a
> stab at it.
>
> A =lot= depends upon the set up of your query. For all intents and
> purposes, you can "consider" that forms bound directly to tables,
> bring across the whole table (though, actually, it's just the portion
> of the table being accessed). If you're doing any ordering on the
> table in your form, the whole table has to come across to be ordered.
>
> For a form based on a Query, it'll depends upon what Indexes are being
> used, and if any additional processing of the record before selection
> is used. For example, if you're selecting on a date and that date
> field isn't indexed, the whole table comes across. If you're using a
> indexed date field =and= you're using something like WHERE
> LEFT$([MyField], 6) = "Barney"... Then the records that match the
> date, =all= the records that match the date, have to come across so
> that the Left$ operator can work on the record to see if selection
> should occur.
>
> Is that any help?
>
> On Thu, 13 Jan 2000 08:36:33 -0800, "Brett J. Valjalo"
> ------
> Age Is A Hell Of A Price To Pay For Maturity.
The entire processing of the query is done on the machine where Access
resides and where the query is running. Regardless of table indexing,
criteria, whatever, Access must pull the entire data set across the wire in
order to select the proper subset of records that match those specs. The
data are retrieved in a certain order based on the indexes (indexes do not
restrict the data set in Access, like they do in, say, FoxPro, they just
order it), but the entire set of data are still transmitted, the query
cannot run until the data are present on the system where the query is
processing information.
The methods you are suggesting could only be done if Access sent the query
request to the server, the server file ran the query on the server side, and
then transmitted the resulting data set. How else could it pick and choose
which records to transmit? How would the server know what to do in the
first place? I do not know of any way in Access to run a remote query in
that fashion. SQL Server or any other client server can do that, that is
what client/server operation entails, but not file servers like Access.
That is the nature of file server operations, to only use local data.
But...
Load the data once, it remains in the local machine until you explicitly
remove it. So, if you run all your vital queries at startup of your app,
the initial startup will be slowed but the app should run faster thereafter.
Alternatively, copy the data to local tables at startup, run all queries
against that local set, and update/purge when closing the app.
One last hope, though. I seem to recall Arvin showed us a technique at one
time for linking directly to querydefs in a server file. I'm not sure if
that would resolve this, but perhaps, although I think the entire process
would then involve transmitting the querydef to the local machine and then
running it the same way as always. Could be wrong, though.
--
Pete B
Chuck Grimsby <cdotg...@worldnetdotattdot.net> wrote in message
news:v60t7scm4n04ddsvr...@4ax.com...
>
> Larry or Michka could probably answer better then I, but I'll take a
> stab at it.
>
> A =lot= depends upon the set up of your query. For all intents and
> purposes, you can "consider" that forms bound directly to tables,
> bring across the whole table (though, actually, it's just the portion
> of the table being accessed). If you're doing any ordering on the
> table in your form, the whole table has to come across to be ordered.
>
> For a form based on a Query, it'll depends upon what Indexes are being
> used, and if any additional processing of the record before selection
> is used. For example, if you're selecting on a date and that date
> field isn't indexed, the whole table comes across. If you're using a
> indexed date field =and= you're using something like WHERE
> LEFT$([MyField], 6) = "Barney"... Then the records that match the
> date, =all= the records that match the date, have to come across so
> that the Left$ operator can work on the record to see if selection
> should occur.
>
> Is that any help?
>
> On Thu, 13 Jan 2000 08:36:33 -0800, "Brett J. Valjalo"
1) Jet takes the query to compiles it (if it is already compiled skip to
step #3)
2) Jet pulls down column info on all the tables and uses it to construct a
query plan
3) The QPE (query processing engine) runs the compiled query, which WILL
take advantage of indexes if the compiled query allows it by ONLY bringing
down index pages instead of all data, whenever it can.
4) If a unqiue bookmark can be obtained for each row, then once #3 is done,
only the key fields needed will be pulled down, plus the records that need
to be shown. Extra data is only retreived as you get to that row.
--
?MichKa
(insensitive fruitarian)
random junk of dubious value, a multilingual website, the
48-language TSI Form/Report to Data Access Page Wizard,
and lots of replication "stuff" at http://www.trigeminal.com/
?
"Pete B" <bar...@datatek.com> wrote in message
news:s81a865...@news.supernews.com...
You are <g>
Think of it this way. If you index the table, and use those indices properly
in the query, Access will get the page that the record resides on. The
server need do nothing except return those pages, in the same way it returns
file requests. The index is a pointer to where the page lives on the
server's drive. Only if there are no discernable indices, or you haven't
restricted the data set with a Where clause, will the entire table be piped
in. That's exactly what the Query Optimizer does. If you download the file
v35perf.doc and hunt down the ISAMStats and ShowPlan functions at the end
you should be able to see much of this for yourself. Here's the file:
http://download.microsoft.com/download/access97/whitep6/1/WIN98/EN-US/V35per
f.exe
---
Arvin Meyer
And what happens if this is the very first time ever, or it is a dynamic
SQL, or the table is not indexed, or if the query must fetch info not on
indexed columns? How would a query determine the unique bookmarks for, say,
all records, never before processed by the local app, where one column must
match criteria A and another must match criteria B, neither of which are on
indexed fields?
The real question is not what kind of data you obtain from the remote file,
rather it is where do you process that data. Anything limiting the process
would apply equally as well to local data as to remote data, whether it is
internal Jet processes or application-driven factors.
I could even see this if there were a remote system which also has Access
installed, IOW you could then tell the other Access system what to do, but
what if it is just an mdb file stored there? Everything that happens to
that remote file has to be transmitted over the network, 100%. But that is
not the case for a client server at all.
Are you saying that Jet goes in and looks for/obtains that info by using the
resources of the other machine to do the selection? How does it manage to
do that? In other words, what is the difference between running the query
on local data vs remote data? In either case, the query requires the same
amount of information, regardless of what specific _kind or amount_ of info,
in order to perform its' task. So where does it get that information to
form that plan at the outset, and once it has it, where does it then do its'
work, does it do it on the server or the local system?
Does it "form that plan" while it is doing something on the local system or
while it is doing something on the remote system? How could it possibly do
anything on a remote system? What if it updates tables stored remotely,
where are the updates for the indexes processed, remotely or locally? Still
seems like it would have to get the entire set of indexes or whatever in
order to devise that plan or edit/change data, meaning it would have to load
as much info over the wire from the remote tables as it would if it were
doing the identical thing to a local data set.
I certainly am not trying to disagree with you, you know the Jet internals
far better than me, but seems to me that is not the issue. And be patient,
I'm trying to learn here. It just seems to me that Jet or whatever has to
obtain as much information from a remote file as it would from it's own file
in order to do it's tasks, IOW it has to "load the whole thing" over the
wire. But a client server does NOT require that at all.
Somehow, I do not feel like I am expressing this very well, I hope you can
discern what I am getting at.
--
Pete B
Michael (michka) Kaplan <forme...@spamless.trigeminal.spamless.com> wrote
in message news:uPKGxo4X$GA.266@cpmsnbbsa04...
And of course, you are assuming most of the indexes exist, which in real
life they frequently do not.
In fact, I would certainly hope to hell it never has to load the entire
actual set of records, that would _really_ be a bottleneck.
--
Pete B
Arvin Meyer <a...@m.com> wrote in message
news:85qqo6$d4p$1...@nntp9.atl.mindspring.net...
You are correct in that it must request the entire index for a table, in
order to use it, but just imagine a table where the average record size it 5
to 6 hundred bytes, and the average byte size for each index for that row
might be 8 bytes or less. Think how much less data must be brought across
the pipe in order to retrieve say 2 or 3 hundred rows, out of a set of
tables with with 5 thousand records in one and 8 thousand in the joined
table.
---
Arvin Meyer
Pete B wrote in message <0M9g4.483$sO5....@news.rdc1.tn.home.com>...
--
Pete B
Chuck Grimsby <cdotg...@worldnetdotattdot.net> wrote in message
news:c4l48sokr74gvtm01...@4ax.com...
> On Sun, 16 Jan 2000 02:10:04 GMT, "Pete B" <bar...@datatek.com>
> wrote:
>
> >And of course, you are assuming most of the indexes exist, which in real
> >life they frequently do not.
>
> They don't?!? They darn well better! What good are they if they
> =don't= exist until they're needed?
>
You are probably correct about an app that you design as an Access mdb,
Chuck. But consider, there are many other types of remote data you can be
linked to, and if it is such an Access app, maybe you may not have been the
person who set it up. For example, if you link to FoxPro tables as an
external data source, you are pretty much restricted to using whatever is
provided by the FP app for indexing.
> >In fact, I would certainly hope to hell it never has to load the entire
> >actual set of records, that would _really_ be a bottleneck.
>
Actually, I think if it was any table that had no indexing, the only way
Access could do stuff is via a sequential scan of every record. So that
would be _way_ slow.
> Why do think DSUMs are so slow? Ta-da! Luckily, they only pull
> across 1 or 2 fields.
>
> ------
> Thou Shall Not Kill, Unless It's For Dinner!
But you and Michael have convinced me that I overstated my case here.
After reviewing my good ol' JDEPG, it appears that it is a _very, very_
complex issue. The things I see in the manual about optimization appear to
indicate that, as Michael said, the actual data tables and their associated
index tables may be only a small part of the overall situation, lots of
other things involved in the query processing, and you probably can, after
all, optimize an attached file-server data file processing almost as much
as local table structure. So I guess I was wrong about that.
--
Pete B
Arvin Meyer <a...@m.com> wrote in message
news:85tied$898$1...@nntp4.atl.mindspring.net...
> The indices DO exist in the databases, I write and they're used properly
> too. <vbg>
>
> You are correct in that it must request the entire index for a table, in
> order to use it, but just imagine a table where the average record size
it 5
> to 6 hundred bytes, and the average byte size for each index for that row
> might be 8 bytes or less. Think how much less data must be brought across
> the pipe in order to retrieve say 2 or 3 hundred rows, out of a set of
> tables with with 5 thousand records in one and 8 thousand in the joined
> table.
> ---
> Arvin Meyer
>
> Pete B wrote in message <0M9g4.483$sO5....@news.rdc1.tn.home.com>...
SELECT DISTINCTROW Candidates.CandidateId, Candidates.[Candidate Name],
Payments.InvoiceID, Candidates.CandidateTitle, Candidates.Interviewer
FROM Candidates LEFT JOIN Payments ON Candidates.[Candidate Name] =
Payments.[Candidate Name]
WHERE (((Candidates.Status)<[forms]![splashscreen]![Active]))
ORDER BY Candidates.[Candidate Name];
Now, candidate.status is indexed, and so is payments.candidate name. I know
that this query pulls ALL rows from Candidates, although the value of [active]
(which is 2, via an option group) would stipulate only about 25% of the rows.
So, is the full pull the result of:
A) the DistinctRow, or
B) the Order By, or
C) the Left Join, or
D) one or more of the above?
TIA
Brett
Pete B wrote:
> Comments below
>
> --
> Pete B
> Chuck Grimsby <cdotg...@worldnetdotattdot.net> wrote in message
> news:c4l48sokr74gvtm01...@4ax.com...
> > On Sun, 16 Jan 2000 02:10:04 GMT, "Pete B" <bar...@datatek.com>
> > wrote:
> >
> > >And of course, you are assuming most of the indexes exist, which in real
> > >life they frequently do not.
> >
> > They don't?!? They darn well better! What good are they if they
> > =don't= exist until they're needed?
> >
>
> You are probably correct about an app that you design as an Access mdb,
> Chuck. But consider, there are many other types of remote data you can be
> linked to, and if it is such an Access app, maybe you may not have been the
> person who set it up. For example, if you link to FoxPro tables as an
> external data source, you are pretty much restricted to using whatever is
> provided by the FP app for indexing.
>
> > >In fact, I would certainly hope to hell it never has to load the entire
> > >actual set of records, that would _really_ be a bottleneck.
> >
>
> Actually, I think if it was any table that had no indexing, the only way
> Access could do stuff is via a sequential scan of every record. So that
> would be _way_ slow.
>
> > Why do think DSUMs are so slow? Ta-da! Luckily, they only pull
> > across 1 or 2 fields.
> >
> > ------
> > Thou Shall Not Kill, Unless It's For Dinner!
--
It's that damned keyboard bug again, entering what I typed instead of what
I meant....
:=)
--
Pete B
Chuck Grimsby <cdotg...@worldnetdotattdot.net> wrote in message
news:be478so0jse9ugufj...@4ax.com...
> On Mon, 17 Jan 2000 08:57:43 -0600, "Pete B" <bar...@datatek.com>
> wrote:
>
> >> >And of course, you are assuming most of the indexes exist, which in
real
> >> >life they frequently do not.
>
> >> They don't?!? They darn well better! What good are they if they
> >> =don't= exist until they're needed?
>
> >You are probably correct about an app that you design as an Access mdb,
> >Chuck. But consider, there are many other types of remote data you can
be
> >linked to, and if it is such an Access app, maybe you may not have been
the
> >person who set it up. For example, if you link to FoxPro tables as an
> >external data source, you are pretty much restricted to using whatever
is
> >provided by the FP app for indexing.
>
> Unindexed tables, regardless of source, are handled the same way as
> the Domain functions. I assume that's true for FoxPro as well, but
> I've no experience with FoxPro.
>
> >> >In fact, I would certainly hope to hell it never has to load the
entire
> >> >actual set of records, that would _really_ be a bottleneck.
>
> >Actually, I think if it was any table that had no indexing, the only way
> >Access could do stuff is via a sequential scan of every record. So that
> >would be _way_ slow.
>
>
> Uhh... Pete... You're replying to yourself. You wrote both sets of
> the above lines.
>
> ------
> Blondes Are Intellagint... Intell... Oh Forget It.
>