Question

Report Automation From VB6 With Passed Parameters

Asked by: bingie

I have built a report in Access that when invoked from access prompts me for a StartDate. When entered the reports runs fine.

I would like to invoke this report from my visual basic program, so that when invoked the report simply appears on the screen.

Here is my current function, where I am attempting to invoke this report.

When I call this function, I pass to it the dateStart which is the StartDate required by the report.

But, I am still prompted for a StartDate and no report appears.

Private Sub generateSchedule(dateStart As Date)
Dim ac As Access.Application
Set ac = New Access.Application
ac.OpenCurrentDatabase DBPATH
Dim paraString As String
paraString = Replace("StartDate = #dt#", "dt", dateStart)
ac.DoCmd.OpenReport "qry_Crosstab_Results", acViewPreview, , paraString
DoEvents
ac.CloseCurrentDatabase
Set ac = Nothing
End Sub

                                  
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:

Select allOpen in new window

This Question has been solved and asker verified All Experts Exchange premium technology solutions are available to subscription members.

Subscribe now for full access to Experts Exchange and get

Instant Access to this Solution

  • Plus...
  • 30 Day FREE access, no risk, no obligation
  • Collaborate with the world's top tech experts
  • Unlimited access to our exclusive solution database
  • Never be left without tech help again

Subscribe Now

Asked On
2009-01-14 at 13:36:23ID24052626
Tags

Report

,

Parameter

,

vb6

Topics

Visual Basic Programming

,

Microsoft Access Database

,

Access Reports

Participating Experts
1
Points
500
Comments
15

Trusted by hundreds of thousands everyday for fast, accurate and reliable tech support.

  • "The time we save is the biggest benefit of Experts Exchange to Warner Bros. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange." Mike Kapnisakis, Warner Bros.
  • "Our team likes having a resource that is more secure than just using Google and most experts using this service really know their stuff. It's nice to look here first versus using Google." Dayna Sellner, Lockheed Martin
  • "Anytime that I've been stumped with a problem, 9 out of 10 times Experts Exchange has either the accepted solution or an open discussion of the potential solution to the problem." Kenny Red, eBay Inc.

See what Experts Exchange can do for you.

Got a question?

We've got the answer.

Experts Exchange has been collecting answers to technology questions since 1996…3 million and counting! If you have a question, chances are we already have your answer.

Screenshot of Experts Exchange Knowledgebase

Need individual assistance?

Our experts are ready to help.

If you can't find the exact answer you're looking for, ask our exclusive community of 50,000 experts. You’ll get a personalized answer from a trusted professional.

Screenshot of Experts Exchange Knowledgebase

Want to learn from the best?

Read articles from industry experts.

Thousands of free tech tips, tricks, how-to’s and tutorials are available in our peer reviewed articles section. See for yourself how smart our experts are, no login required.

Screenshot of an Article

Working on a long term project?

Store your work and research.

Save solutions to your questions, answers you’ve discovered through searching plus helpful articles in your personal knowledgebase for easy future access.

Screenshot of Experts Exchange Knowledgebase

Access the answers to your technology questions today.

Subscribe Now

30-day free trial. Register in 60 seconds.

What Makes Experts Exchange Unique?

Members of the expert community talk about why the experience at Experts Exchange is different than what you will find anywhere else.

Trusted by the world's most respected brands.

image of each brand's logo

Faithfully serving IT professionals since 1996.

Experts Exchange Logo

Try it out and discover for yourself.

Subscribe Now

30-day free trial. Register in 60 seconds.

Related Solutions

  1. invoke lotus notes application from VB
    I want to invoke the lotos notes application and execute the lotus notes command to start a new message application. I do not know how to link the lotus notes
  2. Help on Automation error in VB6
    I have created a setup for my VB 6 project. It uses Access 2000 and DAO 3.6. It installed fine on users machine. Now when they try to run it it gives the error "2147417848(80010108) Automation Error. The object invoked has disconnected rom its clients." I am not usi...
  3. Automation error  The object invoked has disconnected fro…
    In an Excel VBA project I get the following error message: Run-time error '2147417848(800 10 108)': Automation error The object invoked has disconnected from its clients. On the following code located just before the "End Sub" line: ... Work...
  4. VB6: Command prompt without Close button (or X) star…
    Hello experts, in Visual Basic (VB6) Program I'm running a command prompt. --- ' VB6 code part: Private Declare Function WriteConsole Lib "kernel32" _ Alias "WriteConsoleA" _ (ByVal hConsoleOutput As Long, _ ...
  5. prompt
    running visual source safe from comand prompt "ss checkout filename" will prompt "test.pl is already checked out, continue?(Y/N)" if the file is already checked out.... is there a way to force the checkout without prompting?

Free Tech Articles

  1. WARNING: 5 Reasons why you should NEVER fix a computer for free.
    It is in our nature to love the puzzle. We are obsessed. The lot of us. We love puzzles. We love the challenge. We thrive on finding the answer. We hate disarray. It bothers us deep in our soul. W...
  2. SCCM OSD Basic troubleshooting
    SCCM 2007 OSD is a fantastic way to deploy operating systems, however, like most things SCCM issues can sometimes be difficult to resolve due to the sheer volume of logs to sift through and the dispe...
  3. Migrate Small Business Server 2003 to Exchange 2010 and Windows 2008 R2
    This guide is intended to provide step by step instructions on how to migrate from Small Business Server 2003 to Windows 2008 R2 with Exchange 2010. For this migration to work you will need the fo...
  4. Create a Win7 Gadget
    This article shows you how to create a simple "Gadget" -- a sort of mini-application supported by Windows 7 and Vista. Gadgets can be dropped anywhere on the desktop to provide instant information, ...
  5. Outlook continually prompting for username and password
    There have been a lot of questions recently regarding Outlook prompting for a username and password whilst using Exchange 2007. There are a few reasons why this would happen and I will try to cover t...
  6. Backup Exchange 2010 Information Store using Windows Backup
    There seems to be quite a lot of confusion around the ability to backup Exchange 2010 using the built in Windows Backup feature. This stems from the omission of this feature prior to Exchange 2007 s...

Cloud Class Webinars

  1. Avoiding Bugs in Microsoft Access
    Alison Balter takes and in-depth look at avoiding bugs in Access. In this webinar you will learn about using the immediate window to debug your applications, invoking the debugger, using breakpoints to troubleshoot, stepping through code, setting the next statement to execute, ...
  2. Top 10 Best New Features in Visio 2010
    Scott Helmers gives live demonstrations of the top 10 new features in Visio 2010. This webinar will teach you how to create compelling diagrams by adding shapes to the page with a single click, linking the shapes in a diagram to data in Excel (or SQL Server, or SharePoint), ...
  3. IT Consultant Business Secrets Revealed
    Michael Munger, Experts Exchange tech pro and IT consultant, pulls back the curtain on his very successful businesses and answers question on every IT consultant and business owner should know about. He shares secrets on what he did to solve the 5 most common problems in IT, ...
  4. Disaster Recovery and Business Continuity
    Quest CTO, Mike Billon, gives an overview of the steps involved in building a dunamic disaster recovery plan. Through case studies and an examination of software/hardware tooles for monitoring and testing, you'll gain a better understandin of where you are, where you want ...
  5. Organize Your Visio Diagrams with Containers and Lists
    Scott Helmers uses cross functional flowcharts, wireframe diagrams, data graphic legends and seating charts to teach you: how to ustilize all three new structured diagram components in Visio 2010, the best practices for organizeing shapes in previous version of Visio, how to organize ...
  6. How to Us Objects, Properties, Events and Methods in Microsoft Access
    Alison Dalter gives an in-depbth look at objects, properties, events and methods in Microsoft Access. In this webinar you will learn about using the object browser, referring to objects, working with properties and methods, working with object variables, understanding the ...

Join the Community

Give a Little. Get a Lot.

Join the community of experts here and help other tech pros by answering question in your area of expertise. You can earn FREE access to all Experts Exchange's premium features and resources.

Join the Community

Answers

 

by: frankyteePosted on 2009-01-14 at 14:12:37ID: 23378313

you need to make it visible like below
   Dim ac As Access.Application
    Set ac = New Access.Application
    ac.OpenCurrentDatabase DBPATH
    ac.Visible = True
 ... etc

 

by: bingiePosted on 2009-01-14 at 14:32:36ID: 23378543

Nope - that doesn't work. It shows the access ide but it dissapears again after a second.

I also need to know how to send the parameter.

 

by: frankyteePosted on 2009-01-14 at 15:05:14ID: 23378860

on closer look the problem is that the remote db is closed straight away, you need a way to suspend the code before passing back to the current db. Doevents yields execution to the operating system, it will not suspend the code. the simplest way i can think of is to
1) declare the    
Dim ac As Access.Application
variable OUTSIDE your sub, say at the module level so that it remains in scope during your sub

2) in the close event of your remote db's report, add
Quit
such that that instance of Access and the remote db will shut down when you close the report

3) remove
ac.CloseCurrentDatabase
Set ac = Nothing
this is closing the remote db before you have a chance to view it

4) in you current app, if you need to reuse the ac object variable then set it to nothing before resetting it
Set ac = Nothing

 

by: bingiePosted on 2009-01-14 at 15:13:39ID: 23378930

Ok, that makes access visible but it still has problems:

1) It still requires me to manually enter the StartDate parameter

2) i just want to view the report - not have access open thus giving access to the data

 

by: frankyteePosted on 2009-01-14 at 15:23:56ID: 23379030

>1) It still requires me to manually enter the StartDate parameter
the parameter is passed to the WHERE condition argument so you paraString needs to include the relevant field/s
so for eg if the fields is called "dtStartDate"
paraString needs to something like "dtStartDate = '20090115'"

is the name of your field StartDate?
if you are having problem with # then try ', ie
paraString = Replace("StartDate = 'dt'", "dt", dateStart)

>i just want to view the report - not have access open thus giving access to the data
if you want to open remote db with certain restrictions then you'll have to modify the startup parameters of your remote db, menu tools>startup
uncheck options like "display database window", "allow full menus" etc.
you may want to leave "use access special keys" so that you can bypass it and bring those options backup at a later date.
or you can write code to do this which would be just more work

 

by: bingiePosted on 2009-01-14 at 15:33:56ID: 23379109

Set ac = New Access.Application
ac.Visible = True
ac.OpenCurrentDatabase DBPATH
Dim paraString As String
paraString = "StartDate = '" & dateStart & "'"
ac.DoCmd.OpenReport "qry_Crosstab_Results", acViewPreview, , paraString

Still prompts me to enter the StartDate (yes that is the field name). I tried with # and ' and nothing at all.

The Report is bound to a crosstab query which is fed from another query. Is this affecting it? Can i still pass a parameter to the report?

 

by: frankyteePosted on 2009-01-14 at 15:44:54ID: 23379199

>The Report is bound to a crosstab query which is fed from another query. Is this affecting it? Can i still pass a parameter to the report?

you should be able to. also check that the date parmeter actually exists in your report data!
test it with a hardcoded a value.
manually open your remote db and run something like code below
DoCmd.OpenReport "qry_Crosstab_Results", acViewPreview, , "StartDate = '1 Jan 2008'"
or
DoCmd.OpenReport "qry_Crosstab_Results", acViewPreview, , "StartDate = #1 Jan 2008#"
does it open the report correctly?

dont forget that with queries Access defaults to that awful American date format of mmddyy so you may have to format your date variable explictly for eg:
format("10/01/09","dd/mmm/yyyy")
returns 10/Jan/2009

 

by: bingiePosted on 2009-01-14 at 17:19:48ID: 23379748

Tried all that - still now go.

It will not recognize the parameter being passed to it, as it still prompts me to enter the date no matter what.

 

by: frankyteePosted on 2009-01-14 at 18:22:31ID: 23380024

that means then the problem is not the remote db code but the query/s itself. Are any of the queries (crosstab query itself and the ones that it is based  on) driving the report queries that require user input? (ie a parameter query itself, where the critieria is something like =[enter your value])

i've already tested the code i posted on a test remote db and report and it works fine.

 

by: bingiePosted on 2009-01-14 at 20:12:24ID: 23380506

Actually, my queries are listed here.

http://www.experts-exchange.com/Q_24048850.html#23377104

Thanks for sticking with me! =)

 

by: frankyteePosted on 2009-01-14 at 20:57:55ID: 23380679

well good news for me is that i'm about to go on annual leave to see my man federer who barely  won his 2nd round match. so i'll get to see him in the final on saturday.
so i have 1 hour before i knock off at work to try to sort this one out. i think it is the cross tab query which produces dynamic column headers which causes the parameter message....damn.
let me think this through.

 

by: frankyteePosted on 2009-01-14 at 21:04:56ID: 23380700

can you upload a SMALL sample of your db asap?

 

by: bingiePosted on 2009-01-14 at 21:10:19ID: 23380719

Here is my full DB - all the queries and reports are there

 

by: frankyteePosted on 2009-01-14 at 22:08:49ID: 23380952

the problem is you have a parameter query in qryGetDailyShifts.
StartDate is not a field in a table but a parameter.

the where condition (paraString) in the docmd.openreport method
ac.DoCmd.OpenReport "qry_Crosstab_Results", acViewPreview, , paraString

is to filter the report with a value for a field not a parameter input.
btw you have the wrong report name, it should be
rpt_Crosstab_Results and not qry_Crosstab_Results

---------------------------------------------------------------------------
now off the top of my head, to get around this parameter,
create a table say tmpDate with field StartDate. this table should only contain a single record.
you will dynamically delete records from this table and insert with your required startdate.
then join to this table in your query qryGetDailyShifts
so that query becomes:
SELECT DISTINCT tblShifts.EmployeeNumber, EmployeeName, ShiftDate, d.startdate, concatshifts(tblShifts.EmployeeNumber,ShiftDate) AS Shifts
FROM tmpDate AS d, tblShifts INNER JOIN tblEmployee ON tblShifts.EmployeeNumber=tblEmployee.EmployeeNumber
WHERE ShiftValid=Yes And ShiftDate Between
d.StartDate And DateAdd("d",6,d.StartDate);
----------------------------------------------------------------------------
then remove
PARAMETERS StartDate DateTime;
from the crosstab query qry_Crosstab_Results
----------------------------------------------------------------------------
the vb code would be:

    Dim DBPATH As String
    Dim sql As String
    
    Set ac = New Access.Application  'module variable      
    DBPATH = "whateverpath.....\DB1.mdb" 'whatever    
    ac.OpenCurrentDatabase DBPATH
    Dim paraString As String
    paraString = "StartDate = #" & dateStart & "#"
 
    'clear table and insert parameter date
    sql = "delete * from tmpDate"
    ac.DoCmd.RunSQL sql
    sql = "insert into tmpDate(StartDate) select #" & dateStart & "#"
    ac.DoCmd.RunSQL sql        
    ac.DoCmd.OpenReport "rpt_Crosstab_Results", acViewPreview, , paraString       
    ac.Visible = True
 
------------------------------------------------------------------------
                                              
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:

Select allOpen in new window

 

by: frankyteePosted on 2009-01-14 at 22:24:12ID: 23381009

now this will remove the parameter prompt as your queries are no longer prompting for user input.
the last bit you need to fix (post a new question as its unlikely others will want to wad thru this thread) is your report. the report design is bound to date values which are the current date values in this weeks shift. by next week your report will not work because the dates will be different.

as i'm now on leave i'll give you a suggestion. rather than bound the report to the crosstab, create another table say trptShifts and dynamically delete and insert into this table the contents of the cross tab query.
this table should have column headers monday, tuesday, ... etc rather than the actual dates.
the critical thing is the
1) number of columns in your report must be fixed which is ok now as it is 6 days from the start date.
2) use the column position (via recordset) of the cross tab query to identify which column to insert into the monday, tuesday ... columns etc.
3) you also need to insert the headers of the cross tab query as a row entry into this report table. you might have to use a text field to hold the data as it will be a mixture of dates and time.

if all of this is too much trouble then dont use the crosstab output but the normalised output of the actual source tables.

20120131-EE-VQP-002

3 Ways to Join

30-Day Free Trial

The Experts

98% positive feedback on 31,087 answers since March 2000. angeliii is a Microsoft Most Valuable Professional for his work with MS SQL Server & Develoment.

He has also proven his knowledge of Visual Basic Programming, PHP Scripting and Oracle Databases.

The Experts

97% positive feedback on 10,752 answers since July 2000. lrmoore has more than 18 years experience in the networking industry.

The six-time Mircosoft MVPs specialties include firewalls, virtual private networking, and network management.

Testimonials

"...and excellent source for support... Kind of like having your very own IT dept." Electriciansnet

Testimonials

"I was apprehensive at signing up at first. However... it has already made my life as an IT administrator much easier." JaCrews

Testimonials

"WOW! You guys have great, active, and knowledgeable people on here." moore50

Business Clients

Business Clients

In the Press

"If you’ve got a question... Experts Exchange can supply an answer.”

In the Press

"...an invaluable aid for both IT professionals and those who require tech support."

In the Press

"where IT professionals provide quick answers on just about any topic"

Business Account Plans

Loading Advertisement...