[AccessD] Removing a missing reference

Shamil Salakhetdinov shamil at users.mns.ru
Wed Aug 9 09:30:08 CDT 2006


Hello Rocky,

I did first try to use the code without optional parameters and I have found
(as you did) that it doesn't run well in late binding mode. That was strange
because in general case such code should have run well. Therefore I made an
assumption that they have done something wrong in their type library
definitions (type library is embedded into their ActiveX bartender.exe and
it's also supplied separated as a .tlb file but this one isn't registered
and can be investigated only using OleView - a utility from VS6).

Then I did have a look through BarTender installation directory and I did
find their manual, from which I have got VB.Net sample, which I have got
adjusted to VBA/VB6 and posted here...

<<<
How did you determine that btApp.Quit 1 needed the '1'?
>>>
You can see the actual value for BarTender.BtSaveOptions.btDoNotSaveChanges
in the Object Browser or when in early binding mode you can just copy and
paste it into immediate window and push [Enter]:

?BarTender.BtSaveOptions.btDoNotSaveChanges
1

--
Shamil
 
-----Original Message-----
From: accessd-bounces at databaseadvisors.com
[mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Rocky Smolin -
Beach Access Software
Sent: Wednesday, August 09, 2006 7:34 AM
To: Access Developers discussion and problem solving
Subject: Re: [AccessD] Removing a missing reference

Shamil:

Well, it works.  As you knew it would.  :-)     I am in awe.  Couldn't 
have taken you more then 15 minutes!

Questions:  how did you determine that the

        Set btFormat = btApp.Formats.Open(Me.fldFABLabelFile, False, "")

needed two more arguments (False and "")?

How did you determine that PrintOut needed two more arguments?

        btFormat.PrintOut False, False

How did you determine that     btApp.Quit 1 needed the '1'?

Thanks and best regards,

Rocky


Shamil Salakhetdinov wrote:
> Rocky,
>
> This code should work OK with late binding(watch code lines wraps):
>
> 'Declaring a BarTender application variable
> Dim btApp As Object 'BarTender.Application
> 'Declaring a format variable
> Dim btFormat As Object ' BarTender.Format
> 'Instantiating the BarTender object
> Set btApp = CreateObject("BarTender.Application")
> 'Setting the BarTender Application Visible
> btApp.Visible = True
> 'Setting the BarTender format to open
> Set btFormat = btApp.Formats.Open("c:\Temp\Format1.btw", False, "")
> 'Printing the label format
> btFormat.PrintOut False, False
> 'Ending the BarTender process
> btApp.Quit 1 'BarTender.BtSaveOptions.btDoNotSaveChanges
>
> As you were recommended here you can use conditional compilation and early
> binding to have intellisense while developing/testing and to compile and
run
> using late binding when preparing/using a production version:
>
> #if PRODUCTION_VERSION then
> 'Declaring a BarTender application variable
> Dim btApp As Object 'BarTender.Application
> 'Declaring a format variable
> Dim btFormat As Object ' BarTender.Format
> #else
> 'Declaring a BarTender application variable
> Dim btApp As BarTender.Application
> 'Declaring a format variable
> Dim btFormat as BarTender.Format
> #endif
> 'Instantiating the BarTender object
> Set btApp = GetBarTenderApp()
> If Not btApp is Nothing then
> 	'Setting the BarTender Application Visible
> 	btApp.Visible = True
> 	'Setting the BarTender format to open
> 	Set btFormat = btApp.Formats.Open("c:\Temp\Format1.btw", False, "")
> 	'Printing the label format
> 	btFormat.PrintOut False, False
> 	'Ending the BarTender process
> 	btApp.Quit 1 'BarTender.BtSaveOptions.btDoNotSaveChanges
> End if
>
> ...
>
> Private function GetBarTenderApp() as object
> On error resume next
> 	Set GetBarTenderApp = CreateObject("BarTender.Application")
> End function
>
> --
> Shamil
>  
> -----Original Message-----
> From: accessd-bounces at databaseadvisors.com
> [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Rocky Smolin -
> Beach Access Software
> Sent: Wednesday, August 09, 2006 12:36 AM
> To: Access Developers discussion and problem solving
> Subject: Re: [AccessD] Removing a missing reference
>
> Shamil:
>
> I tried using late binding which would work real well but partway into 
> the code I got an error.  On the statement:
>
>         Set BtFormat = BtApp.Formats.Open(Me.fldFABLabelFile)
>
> I get an 'argument not optional' error - don't know why.  But the 
> reference is to the Bartender.exe, if that makes any difference.  Using 
> early binding, this code works well.
>
> To change from early to late binding I changed
>
> Public BtApp As BarTender.Application
> Public BtFormat As BarTender.Format
>
> to
>
> Public BtApp As Object 'BarTender.Application
> Public BtFormat As Variant 'BarTender.Format
>
> and then in the load event:
>
> Set BtApp = CreateObject("BarTender.Application")
>
> There is no object model for Bartender so I don't know what it is 
> expecting for BtFormat. 
>
> But late binding would solve the problem.
>
> Any ideas?
>
> If I want to try your other solution I'll have some questions.  It's a 
> bit past my capabilities.
>
> Thanks and regards,
>
> Rocky
>
>
> Shamil Salakhetdinov wrote:
>   
>> Rocky,
>>
>> I still think the easiest and the most reliable solution for your case is
>>     
> to
>   
>> use late binding. Did I miss something in this thread - why it didn't
work
>> for you?
>>
>> If you decide to not use late binding and if remove reference doesn't
work
>> for you - then you can use Add Reference (anyway your intention to use
>> Remove Reference forces your FE to loose its compiled state as well as
Add
>> Reference does).
>>
>> I mean the following:
>>  
>> - put all your bar code printing code into a separate library/utility
>> database, set reference to bar code printing library in this database;
>>
>> - in your FE keep the code to check is it possible to create bar code
>> printing object or not;
>>
>> - if it's possible to create bar code printing object then add reference
>>     
> to
>   
>> its library (code to add reference MUST BE kept in another library
>>     
> database
>   
>> - if executed in FE such will force FEs global vars to loose their
>>     
> values);
>   
>> Etc.
>>
>> This above is a flexible solution but its above description isn't a full
>> story - in this case if your FE uses global variables then you have to
>> create another "proxy" FE to keep start-up code, (dynamic) references,
>> commandbars... and use your current FE as a library database - then
>> CurrentDb if you use it becomes a problem etc.
>>
>> This above technique works very well - it was used in real life apps here
>> and there back to the years 1998-2000 but program databases and their
code
>> should be refactored to be used within this technique....
>>
>> It's very shortly described here - "A method to modularize MS Access
>> applications" - http://smsconsulting.spb.ru/shamil_s/downloads.htm
>>
>> But applying it for your case looks like using "cannons to shoot at
>> nightingales" - why not use simple and effective late binding?
>>
>> --
>> Shamil
>>  
>> -----Original Message-----
>> From: accessd-bounces at databaseadvisors.com
>> [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Rocky Smolin -
>> Beach Access Software
>> Sent: Tuesday, August 08, 2006 11:45 PM
>> To: Access Developers discussion and problem solving
>> Subject: Re: [AccessD] Removing a missing reference
>>
>> Marty:
>>
>> Access.References.Remove refCurr still generates error: -2147319779 -
>>     
> Object
>   
>> library not registered.  
>>
>> Rocky
>>
>>
>>
>>
>>   
>>     
>
>   

-- 
Rocky Smolin
Beach Access Software
858-259-4334
www.e-z-mrp.com

-- 
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com




More information about the AccessD mailing list