[AccessD] Removing a missing reference

Rocky Smolin - Beach Access Software bchacc at san.rr.com
Wed Aug 9 10:08:13 CDT 2006


Read the manual.  What a concept!

Rocky


Shamil Salakhetdinov wrote:
> 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




More information about the AccessD mailing list