Shamil Salakhetdinov
shamil at users.mns.ru
Wed Aug 9 10:50:05 CDT 2006
<<< Read the manual. What a concept! >>> Yes, Rocky, when younger we used to say RTFM (sorry) as soon as you see that you're getting stuck with your "brute force attack"... -- 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:08 PM To: Access Developers discussion and problem solving Subject: Re: [AccessD] Removing a missing reference 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 -- AccessD mailing list AccessD at databaseadvisors.com http://databaseadvisors.com/mailman/listinfo/accessd Website: http://www.databaseadvisors.com