home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / vabasi11.zip / IP21153O.ZIP / OS2 / SERVER / VERSION1.TXT < prev   
Text File  |  1997-06-23  |  47KB  |  1,041 lines

  1. ========================================================================
  2. IBM VisualAge for Basic for OS/2 and for Windows Version 1.1 (June 1997)
  3. ========================================================================
  4.  
  5. DESCRIPTION OF KNOWN DEFECTS AND RESTRICTIONS IN THIS VERSION
  6.  
  7. The known defects and restrictions are grouped in the following
  8. categories:
  9.   A. Building server procedures
  10.   B. Calling server procedures
  11.   C. Database access
  12.   D. Language elements
  13.   E. Miscellaneous
  14.   F. Run-time problems
  15.   G. User Interface
  16.   H. Communications Components
  17.   I. Country-specific information
  18.  
  19. ------------------------------------------------------------------------
  20. A. Building Server Procedures
  21. ------------------------------------------------------------------------
  22.  
  23. ------------------------------------------------------------------------
  24. A.1. Building Server Procedures:  Replacing a server procedure on a DB2
  25. server
  26.  
  27. During server procedure development, set the database manager
  28. configuration using KEEPDARI=NO, so that DB2 will unload server
  29. procedures after each call.  (DB2 loads a server procedure into memory
  30. when it runs, and may not unload it from memory to let you replace it.)
  31.  
  32. For execution, set KEEPDARI=YES to give better performance, so that the
  33. server procedures do not need to be reloaded each time they are run.
  34. With KEEPDARI=YES, the following message may appear: "Stored Procedure
  35. DLL cannot be created because it is in use."  This will happen if you
  36. are trying to rebuild a server procedure which has already been run by
  37. DB2.  Stopping and restarting DB2 will free the server procedure from
  38. memory, allowing you to rebuild it.
  39.  
  40. ------------------------------------------------------------------------
  41. A.2. Building Server Procedures:  Running a server procedure on a DB2
  42. server in UNFENCED mode
  43.  
  44. Do not run a server procedure built using VisualAge for Basic on DB2
  45. in UNFENCED mode.  For this version, run server procedures in FENCED
  46. mode.
  47.  
  48. ------------------------------------------------------------------------
  49. A.3. Building Server Procedures:  Building the UNITS UDF sample
  50.  
  51. Before building the UDF in vabasic\samples\udf\units\unitudf.prj,
  52. edit the assignment statement of the global variable Path to use the
  53. path (with a trailing "\" or "/") of the location of the UDF built on
  54. the database server.
  55.  
  56. To run the units user-defined function on an AIX server, copy
  57. only the units.dat file to the AIX server.  Numbers in a
  58. units.rec file generated on OS/2 or Windows will not be in the
  59. correct binary format for AIX.  The units.dat file, however, is
  60. entirely in ASCII format.
  61.  
  62. For additional details about this and other UDF samples, browse the
  63. README.UDF file in vabasic\samples\udf.
  64.  
  65.  
  66. ------------------------------------------------------------------------
  67. B. Calling Server Procedures
  68. ------------------------------------------------------------------------
  69.  
  70. -------------------------------------------------------------------------
  71. B.1. Calling Server Procedures:  Calling more than 5 stored procedures
  72.  
  73. In DB2 for OS/2, Version 2.1.0, no more than 5 different stored
  74. procedures can be invoked by one application.  The sixth and subsequent
  75. calls to different stored procedures receive SQL error code 1131.  This
  76. restriction is removed in DB2 for OS/2, Version 2.1.1 or later.
  77.  
  78. In DB2 for OS/2, Version 2.1.0 and later, an application can call the
  79. same stored procedure as many times as system resources permit.
  80.  
  81. ------------------------------------------------------------------------
  82. B.2. Calling Server Procedures:  Matching levels of CLI
  83.  
  84. When calling a stored procedure using CLI, make sure the levels of CLI
  85. support on the client and server machines are the same, especially if the
  86. client and server are on different operating systems.
  87.  
  88. ------------------------------------------------------------------------
  89. B.3. Calling Server Procedures:  Calling from a generated executable
  90.  
  91. For OS/2, when a stored procedure is invoked from a generated executable,
  92. Visual Age for Basic will display the following message when running
  93. the executable:
  94.  
  95. "Priority cannot be set for the current thread".
  96.  
  97. This message can be suppressed by setting an environment variable
  98. as follows:
  99.  
  100. set VWSPSETPRTY=NO
  101.  
  102. This environment setting should be made by each OS/2 client running the
  103. generated executable.
  104.  
  105. ------------------------------------------------------------------------
  106. B.4. Calling Server Procedures:  For UDFs with VARCHAR input or result
  107. arguments
  108.  
  109. A DB2 UDF VARCHAR parameter should be declared as Basic data type
  110. "string", not as a sqlvarchar structure.  The result should be
  111. NULL terminated ( & with chr$(0) before return).  However, there have
  112. been problems reported for VARCHAR result parameters when the client and
  113. the server are on different platforms.
  114.  
  115. ------------------------------------------------------------------------
  116. B.5. Calling Server Procedures:  Passing string arguments to a stored
  117. procedure using SP OCX
  118.  
  119. The SP OCX pads a string argument with nulls to a length of 256,
  120. whether the string is fixed or varying length.  It also truncates
  121. any input string at 255 (adding either a null or garbage to make
  122. a length of 256), and any output string at 256.  The stored
  123. procedure, which declares the parameter as a varying-length
  124. string, can test for the first null with the InStr function and
  125. use the Left$ or Mid$ function to obtain the original string:
  126.  
  127. original_string = Left$(input_string, 1, InStr(input_string, Chr$(0)))
  128.  
  129. ------------------------------------------------------------------------
  130. B.6. Calling Server Procedures: Debugging server procedures when
  131. client has an open cursor
  132.  
  133. If a client procedure has an open SQL cursor and calls a
  134. server procedure which (a) contains embedded SQL and (b) has been
  135. built with remote debug enabled, then subsequent processing with
  136. the cursor fails since DB2 will have closed the cursor.  To bypass
  137. the problem, debug the procedures locally before making them server
  138. procedures, and then build them with remote debug disabled.
  139.  
  140. ------------------------------------------------------------------------
  141. B.7. Calling Server Procedures:  Bad characters in AIX server messages
  142.  
  143. When doing a remote debug of a server procedure running on an AIX server,
  144. there may be times when messages in the debugger contain bad characters.
  145. If messages contain bad characters, then the AIX server may be using
  146. a different language locale than the X Windows system displaying the
  147. debugger.  Make sure the locale setting of the debugger client and
  148. server are the same language.
  149.  
  150. If a user wants to check the contents of the message in English, then
  151. change the LANG setting in the file CONFIG.VW located on the AIX server
  152. in $HOME/$SQLLIBDIR:
  153.   LANG=En_US
  154.  
  155.  
  156. ------------------------------------------------------------------------
  157. C. Database Access
  158. ------------------------------------------------------------------------
  159.  
  160. ------------------------------------------------------------------------
  161. C.1. Database Access:  CLI SQLProcedures function
  162.  
  163. The CLI SQLProcedures function cannot be used to access information from
  164. the DB2CLI.PROCEDURES table that VisualAge for Basic has inserted.
  165. Attempting this results in a CLI0166E PARMLIST syntax error, because
  166. the VisualAge for Basic parameter descriptions currently use Basic
  167. datatypes, which are not supported by CLI.  You can use the CLI procs
  168. sample to access only information that respects the restrictions
  169. documented in the DB2 for OS/2 CLI Guide and Reference, Appendix G.
  170. See the vabasic\samples\cli\procx.prj sample for how to bypass this
  171. restriction.
  172.  
  173. ------------------------------------------------------------------------
  174. C.2. Database Access:  DB2 not started or CONNECT RESET missing
  175.  
  176. If a message appears in the Code Window saying "DB2 is not started or a
  177. CONNECT RESET statement is missing," and you have verified that DB2 is
  178. started and you have appropriate CONNECT RESET statements in place, exit
  179. VisualAge for Basic and then start it again.
  180.  
  181. If the problem persists, then one reason may be that the DB2 server
  182. being accessed has the configuration setting AUTHENTICATION set to
  183. SERVER.  To determine this setting, issue the command
  184.    db2 get dbm cfg | more
  185. from a DB2 Command Line window on the DB2 Server.
  186.  
  187. To avoid such connection errors, use the Options -> Database -> Set
  188. database logon information menuitem in the Project Window of VisualAge
  189. for Basic with DB2 Support to enter an userid and password that is
  190. authorized to the DB2 server.
  191.  
  192. ------------------------------------------------------------------------
  193. C.3. Database Access:  DB2 Patches and the Data Component
  194.  
  195. If you are planning to develop and/or run a VisualAge for Basic
  196. application that uses the Data Component and/or Data Access classes to
  197. access a DB2 database, then each client needs to have several DB2 patches
  198. configured.  These patches need to be configured on every client
  199. workstation, and for each DB2 database alias defined on a client
  200. workstation.  NOTE:  these steps are necessary for Windows 95 and
  201. Windows NT users of VisualAge for Basic who accessing a DB2 Version 2.x
  202. Server or users on Windows 95 and Windows NT who have a DB2 Version 2.x
  203. Software Developer's Kit installed.  Users with DB2 Version 5 Server
  204. and/or Software Developer's Kit installed are not affected.
  205.  
  206. 1. In the "DB2 for Windows 95" or "DB2 for Windows NT" menu/folder,
  207.    locate the "DB2 CLI/ODBC Administrator" and run it.  If you do not
  208.    have this item, then your level of the DB2 SDK may not contain these
  209.    patches.
  210. 2. Select a DB2 Alias and, if not done already, click the "Add as ODBC"
  211.    button.
  212. 3. The selected alias should now also appear in the "ODBC Data Source
  213.    Name" column.
  214. 4. Click the "Configure" button.
  215. 5. A message may appear asking whether to connect to the DB2 Alias.
  216.    click the "Yes" button.
  217. 6. A logon screen may appear.  Enter a userid and password authorized
  218.    to the database and click "Ok".
  219. 7. A message "Connect completed successfully" may appear.  Click "Ok".
  220. 8. A "ODBC Data Source Configuration" notebook appears.  In the lower
  221.    right portion of this notebook, Click the tab labeled with two
  222.    downward pointing arrows.  This scrolls the visible notebook tabs
  223.    down by one tab.
  224. 9. The tab "Patches" should now appear along the right side of the
  225.    notebook.  Click this tab.
  226. 10. The "PATCH1:" notebook page appears, listing a number of available
  227.     patches provided by DB2.  See section 9.2.2 of the DB2 SDK
  228.     README.TXT file for detailed descriptions of these patches.
  229. 11. Select the following patches.  The cumulative total displayed for
  230.     PATCH1 should be 1485:
  231.     - Map COUNT(colname) to COUNT(*)
  232.     - Map timestamp values to date values
  233.     - Map timestamp values to time values
  234.     - Null terminate DBCS strings
  235.     - Permit MS Access, Visual Basic handshake
  236.     - Return primary key ahead of unique index
  237.     - MS Visual Basic fix for empty searched update/delete
  238. 12. Click "OK".
  239. 13. Message "Save changes to the DB2CLI.INI file?" appears.  Click "OK".
  240. 14. Double click in upper left corner of notebook to close the notebook.
  241. 15. Click the "Exit" button to end the DB2 CLI/ODBC Administrator.
  242.  
  243. ------------------------------------------------------------------------
  244. C.4. Database Access:  Can't Load xxODBCxx.DLL Error Message
  245.  
  246. On Windows NT and Windows 95, if you get the error message "Can't load
  247. xxODBCxx.DLL" whenever starting VisualAge for Basic, then this indicates
  248. that you do not have an ODBC driver installed.  If you are planning on
  249. using the Data Component and/or Data Access classes, then you need to
  250. install the ODBC driver shipped with the database management system you
  251. will be accessing.  If you are not planning to do database access using
  252. ODBC, then you can suppress this error message by renaming the file
  253. \VABASIC\BIN\VWODBC.DLL (Ex., VWODBC.BLL).
  254.  
  255. ------------------------------------------------------------------------
  256. C.5. Database Access:  Starting ODBCADM.EXE on OS/2
  257.  
  258. When running the ODBC driver manager (ODBCADM.EXE) from an OS/2 command
  259. window, use the start command (i.e., 'start odbcadm').  This will create
  260. a separate session that may be closed after exiting the driver manager.
  261.  
  262. ------------------------------------------------------------------------
  263. C.6. Database Access:  Resizing sample dialogs
  264.  
  265. In many Embedded SQL and CLI samples in the \VABASIC\SAMPLES\EMBED and
  266. \VABASIC\SAMPLES\CLI subdirectories, there are small secondary dialogs
  267. that appear asking for input like the database alias, logon userid, or
  268. logon password.  The dialogs have OK and Cancel buttons, but they do not
  269. appear until one has resized the dialog.  Resizing in any direction will
  270. display the buttons.
  271.  
  272. ------------------------------------------------------------------------
  273. C.7. Database Access:  The Data Component and DB2 Support
  274.  
  275. The Data Component is not working on the Windows version of VisualAge
  276. for Basic with DB2 Support.  The component works correctly on VisualAge
  277. for Basic (i.e., without DB2 Support).  To access DB2 databases, an
  278. application can use the Data Component and Data Access classes in 
  279. VisualAge for Basic, or the application can use embedded SQL and/or CLI
  280. in VisualAge for Basic with DB2 Support.
  281.  
  282.  
  283. ------------------------------------------------------------------------
  284. D. Language Elements
  285. ------------------------------------------------------------------------
  286.  
  287. ------------------------------------------------------------------------
  288. D.1. Language Elements:  PrintForm method
  289.  
  290. The PrintForm method on a form is not implemented.
  291.  
  292. Details: The printer does not behave as expected when the following code
  293. is entered in the Form_Click method:
  294.  
  295.   printer.print "This may never print"
  296.   printer.enddoc
  297.  
  298. In addition, there should be an implicit Printer.EndDoc when the
  299. application has finished executing (providing it has printed something).
  300.  
  301. Workaround: save the form to a file and print it from there.
  302.  
  303. ------------------------------------------------------------------------
  304. D.2. Language Elements:  Title Property - not working in a generated
  305. executable.
  306.  
  307. On all platforms the Title property does not work properly when
  308. set in a generated executable.
  309.  
  310. ------------------------------------------------------------------------
  311. D.3. Language Elements:  String DataType byte size
  312.  
  313. The description of the Byte Size for a String datatype. as described in
  314. the DataType appendix of the Language Reference, is incorrect.  The
  315. correct description is below:
  316.  
  317. Byte Size
  318.                         English          International(Multibyte)
  319. Win32   VariantString   Unicode          Unicode
  320.                         2 bytes/char.    2bytes/character
  321.  
  322.         String Type     1 byte/char.     Multibyte per character
  323.  
  324.  
  325. OS/2, AIX               1 byte/char.     Multibyte per character
  326.                         to a max of 2 billion.
  327.  
  328.  
  329. ------------------------------------------------------------------------
  330. E. Miscellaneous
  331. ------------------------------------------------------------------------
  332.  
  333. ------------------------------------------------------------------------
  334. E.1. Miscellaneous: Creating a SOM object on a form
  335.  
  336. When you create a SOM object on a form, VisualAge for Basic may crash.
  337.  
  338. Details: when you select a SOM class from the Component Catalog, and use the
  339. Toolbox to create a SOM object on a form, VisualAge for Basic may crash.
  340.  
  341. SOM objects that may cause this error include: AttributeDef, ConstantDef,
  342. Contained, ExceptionDef, InterfaceDef, ModuleDef, OperationDef,
  343. ParameterDef, SOMDClientProxy, SOMMSingleInstance, and TypeDef.
  344.  
  345. Actions that may cause this error include:
  346.   -- Selecting the object on the form and clicking on the Delete key.
  347.   -- Going to the File menu and selecting New Project
  348.   -- Going to Project Window Run Menu and clicking on Run, then on End
  349.  
  350.  
  351. ------------------------------------------------------------------------
  352. E.2. Miscellaneous: Renaming DLLs for Microsoft Visual Basic 4.0
  353.  
  354. If you plan to use both Microsoft Visual Basic 4.0 and IBM VisualAge for
  355. Basic client, you will need to rename the following DLLs located in the
  356. vabasic\bin directory to a backup name (for example, by replacing the
  357. DLL extension with BLL):
  358.  
  359.    CTL3D32.DLL           MSVCR40.DLL
  360.    MFC40.DLL             MSVCRT40.DLL
  361.    MFCO40.DLL            OLEPRO32.DLL
  362.  
  363. ------------------------------------------------------------------------
  364. E.3. Miscellaneous:  The Two-Dimensional Graphics Part
  365.  
  366. The Two-Dimensional Graphics Part (shipped with the OpenDoc
  367. runtime), will crash VisualAge for Basic if the "link" pages
  368. are selected from the OpenDoc Properties notebook. The link
  369. pages are not active, so this is not a functional problem.
  370.  
  371. ------------------------------------------------------------------------
  372. E.4. Miscellaneous:  The OpenDoc Cookbook part
  373.  
  374. The OpenDoc Cookbook part is not recommended for use in
  375. VisualAge for Basic at this time.
  376.  
  377. ------------------------------------------------------------------------
  378. E.5. Miscellaneous:  The OpenDoc MultiMedia parts
  379.  
  380. The OpenDoc MultiMedia parts (shipped with the Developer's
  381. Connection) work best if they are first contained within
  382. other container parts.  For example, instead of using the
  383. Video Part as the root part of an OpenDoc document, use a
  384. container part as the root and embed the Video Part in it
  385. (example container parts include the Page Layout and Text
  386. Parts shipped with the OpenDoc runtime or the Container Part
  387. shipped with the Warp Toolkit).  This is also a useful tip for
  388. other OpenDoc parts that do not behave as expected.
  389.  
  390. ------------------------------------------------------------------------
  391. E.6. Miscellaneous:  Generating executables from projects building
  392. Stored Procedures and/or User-Defined Functions
  393.  
  394. If a project that calls a stored procedure or user-defined function is
  395. also the project that builds them, then there will be error messages
  396. when building and/or executing the project as a generated executable.
  397. The following workaround can be used to build an executable client
  398. application:
  399.  
  400. 1) Start VisualAge for Basic and load the project.
  401. 2) Run the application.
  402. 3) Stop the application.
  403. 4) In the project window, remove any files in the Stored Procedure
  404.    or User-Defined Function categories (do NOT save the project).
  405. 5) Build an executable file.
  406. 6) Exit VisualAge for Basic (do NOT save the project), and run the
  407.    generated executable.
  408.  
  409. ------------------------------------------------------------------------
  410. E.7. Miscellaneous:  Font Migration
  411.  
  412. If a font name specified in a VisualAge for Basic application is not
  413. installed on the machine loading or running the application, then the
  414. font will be changed to the default font of the operating system (for
  415. example, System font for Windows NT, System Proportional font for OS/2).
  416. One side effect of this behavior is that invalid font names are not
  417. flagged as errors in the Property Editor or the Code Editor.
  418.  
  419. ------------------------------------------------------------------------
  420. E.8. Miscellaneous:  VBX/OCX Migration
  421.  
  422. Users of Microsoft Visual Basic 3.0 and VBX controls may be able to
  423. migrate their applications into VisualAge for Basic and use the
  424. equivalent OCX.  Follow these steps:
  425.  
  426.  1. Save any .FRM files as text files (not binary files) in Microsoft
  427.     Visual Basic 3.0.
  428.  
  429.  2. Start VisualAge for Basic for Windows NT
  430.  
  431.  3. In the Project window, select Window ==> Component Catalog.
  432.  
  433.  4. Select the OLE components to be used in the application.  As a
  434.     component is selected, any applicable icons will be placed in the
  435.     ToolBox window.
  436.  
  437.  5. Using a text editor (NotePad, for example), inspect the .FRM files
  438.     for the Begin... End sections describing VBX instances.  Remove this
  439.     section from the form (Save a backup of this form prior to such an
  440.     operation).  Do NOT remove event logic (ex., vbxname1_click()) from
  441.     the form.
  442.  
  443.  6. Save any modified files.
  444.  
  445.  7. Remove the Form1 loaded by VisualAge for Basic from the untitled
  446.     project choosing Selected ==> Remove in the Project Window.
  447.  
  448.  8. In the Project Window, select File ==> Add File to load individually
  449.     each file of the application, including the modified forms.
  450.  
  451.  9. Choose Selected ==> Show Form to view each form in Design Mode.
  452.     Using the ToolBox, add in an OCX instance for each VBX instance
  453.     removed from the form(s), giving each the same Name as each VBX
  454.     instance had in Visual Basic 3.0.  This will preserve the event
  455.     logic.
  456.  
  457. 10. Choose File ==> Save Project As to create a .PRJ file that can be
  458.     used to load the converted project into VisualAge for Basic.  Save
  459.     each modified form as a .I formatted file.
  460.  
  461. ------------------------------------------------------------------------
  462. E.9. Miscellaneous:  TrueType Fonts
  463.  
  464. If you are finding text displayed in VisualAge for Basic is just some
  465. garbled graphic characters, then your computer may have a setting
  466. restricting fonts to only TrueType fonts.  In the Fonts control panel,
  467. there is a setting determining whether to show only TrueType fonts.
  468.  
  469. To show non-TrueType fonts on Windows 95:
  470. 1) Open the My Computer folder.
  471. 2) Open the Control Panel folder.
  472. 3) Open the Fonts folder.
  473. 4) In the menu of the Fonts folder, select the View -> Options menuitem.
  474. 5) In the Fonts Notebook, select the TrueType notebook tab.
  475. 6) Uncheck the option Show only TrueType fonts in programs on my
  476.    computer.
  477. 7) Restart the computer.
  478.  
  479. To show non-TrueType fonts on Windows NT:
  480. 1) Open the Main folder.
  481. 2) Open the Control Panel folder.
  482. 3) Open the Fonts dialog.
  483. 4) In the Fonts dialog, click the TrueType button.
  484. 5) Uncheck the option Show only TrueType fonts in applications.
  485. 6) Close the Fonts dialog
  486. 7) You do not need to restart the computer.
  487.  
  488. ------------------------------------------------------------------------
  489. E.10. Miscellaneous:  Passing strings from SOM to VisualAge for Basic
  490.  
  491. Consider the following C function:
  492.  
  493.  static char myStr[] = "hello world";
  494.  
  495.  SOM_Scope string  SOMLINK _my_sub()
  496.  {
  497.      return(myStr);
  498.  }
  499.  
  500. As per the SOM rules, to allow the memory management of SOM and
  501. VisualAge for Basic to work correctly you must copy all return string
  502. parameters as follows:
  503.  
  504.  static char myStr[] = "hello world";
  505.  
  506.  static char *SOMstrdup(const char *str)
  507.  {
  508.   char  *rtrn = SOMMalloc(strlen(str)+1);
  509.  
  510.   strcpy(rtrn, str);
  511.  
  512.   return str;
  513.  }
  514.  
  515.  SOM_Scope string  SOMLINK _my_sub()
  516.  {
  517.      return SOMstrdup(myStr);
  518.  }
  519.  
  520. ------------------------------------------------------------------------
  521. E.11. Miscellaneous:  Running Tutorial #2
  522.  
  523. To run tutorial #2, start VisualAge for Basic in a command prompt window
  524. from the \vabasic\samples\tutorial\tutor2 subdirectory.  This will
  525. allow VisualAge for Basic to find the SOM.IR file containing the
  526. SOMCalculator class.
  527.  
  528. ------------------------------------------------------------------------
  529. E.12. Miscellaneous:  SOM object access and SOMBASE environment variable
  530.  
  531. When using a SOM object with VisualAge for Basic, the SOMBASE environment
  532. variable must be set.  Usually, SOMBASE environment variable is set
  533. automatically by installing a product like VisualAge for C++ or SOM
  534. Toolkit.  In some cases, the SOM support of VisualAge for Basic is not
  535. setting SOMBASE.  If the level of SOM installed by VisualAge for Basic
  536. is your preferred level, make sure SOMBASE is set to the \VABASIC\SOM
  537. directory.
  538.  
  539. ------------------------------------------------------------------------
  540. E.13. Miscellaneous:  Product Descriptions During Install on OS/2
  541.  
  542. When using the Installation program for VisualAge for Basic on OS/2 from
  543. the CD-ROM, there may be an error message after displaying a product
  544. description.  There is a restriction in the installation program that
  545. limits one to browsing only one product description in each invocation
  546. of the install program.  This error condition does not occur when
  547. copying the install directory onto a hard disk.
  548.  
  549. The product descriptions are displayed using the Details -> Product
  550. Description menuitem of the Installation and Maintenance window of
  551. the OS/2 VisualAge for Basic installation program.  If the message
  552. "EPFIE112:  Unable to transfer C:\OS2\SYSTEM\$EPFINST\EPFIDESC.TMP -
  553. the file is in use or locked" appears, exit and restart the install
  554. program.
  555.  
  556. ------------------------------------------------------------------------
  557. E.14. Miscellaneous:  Dialog title of OCX "(Custom)" Properties
  558.  
  559. The Dialog Window title of any OCX "(Custom)" Property is incorrect.
  560. It is always "Editor's Property".
  561.  
  562. ------------------------------------------------------------------------
  563. E.15. Miscellaneous:  Drop down list of SP.OCX on Property Editor
  564.  
  565. The following properties of SP.OCX do not show a "Dropdown list"
  566. on the Property Editor in VisualAge for Basic:
  567.  
  568.  - DatabaseAlias
  569.  - DatabasePassword
  570.  - DatabaseSPInfo
  571.  
  572. Workaround: These values must be typed in, or entered using the (Custom)
  573. property dialog.
  574.  
  575. ------------------------------------------------------------------------
  576. E.16 Miscellaneous:  Using the Online Books in NT 4.0
  577.  
  578. Browsing the Online Books (Ex., Getting Started, Programmer's Guide) on
  579. NT 4.0 may result in crashes in the XVIEW utility.  One workaround for
  580. use in the English, Italian, or Brazilian translations of these books
  581. is to change the ShortCut for these books to use the IVIEW utility
  582. instead.  IVIEW.EXE is found in the \VABASIC\BIN directory.  The XVIEW
  583. utility works well on NT 3.5.1 and Windows 95.
  584.  
  585.  
  586. ------------------------------------------------------------------------
  587. F. Run-Time Problems
  588. ------------------------------------------------------------------------
  589.  
  590. ------------------------------------------------------------------------
  591. F.1. Run-Time Problems:  Restriction on dynamic array passing
  592.  
  593. Because DB2 cannot determine the size of a ReDim-ed array during run
  594. time, it can only handle the default value of MAXARRAYSIZE.
  595.  
  596. On OS/2 and Windows NT clients, if the array being ReDim-ed is larger
  597. than the default value of MAXARRAYSIZE, it will cause a SQL0822N error
  598. ("The SQLDA contains a data address or indicator variable address which
  599. is not valid.").
  600.  
  601. Solution:  VisualAge for Basic provides an environment variable called
  602. MAXARRAYSIZE.  Its default values are 64KB on AIX, 10KB on OS/2, and
  603. SQLMAXBLOB on Windows.  Set this environment variable to be the same or
  604. larger than the array's ReDim-ed size.  For example:
  605.  
  606. /*  OS/2 clients: foo.bas module  */
  607.     subroutine foo()
  608.        Dim array1() as integer
  609.        Redim array1(10, 2000);
  610. /*  End of subroutine foo()  */
  611.  
  612. In this example, the array's ReDim-ed size (10 x 2000 or 20,000) is
  613. larger than the default value of MAXARRAYSIZE on OS/2 (10KB), so you need
  614. to set the MAXARRAYSIZE environment variable to 20,000 or greater.
  615.  
  616. To improve performance, you can set MAXARRAYSIZE less than the default
  617. value, as long as it is as large or larger than any ReDim-ed arrays in
  618. your program.  Here are the maximum sizes for any ReDim-ed arrays in your
  619. program:  OS/2 = 27 KB  (27,648 bytes),  Windows NT and Windows 95 = 32KB
  620. (32,768 bytes).
  621.  
  622. ------------------------------------------------------------------------
  623. F.2. Run-Time Problems:  ScaleWidth/ScaleHeight properties
  624.  
  625. If a program performs a resize in its code (in other words, changes the
  626. value of the Width and/or Height property), VisualAge for Basic does not
  627. update the ScaleWidth and ScaleHeight properties.
  628.  
  629. If a user manually resizes a form, VisualAge for Basic updates the
  630. ScaleWidth and ScaleHeight properties correctly.
  631.  
  632. If the ScaleMode is set to a value different than 1 (Twips), then the
  633. ScaleHeight and ScaleWidth values may be incorrect at runtime.
  634.  
  635. ------------------------------------------------------------------------
  636. F.3. Run-Time Problems:  Calling external functions
  637.  
  638. On OS/2, all function calls made to external functions must be made to
  639. DLLs which use the _system linkage convention.  DLLs which use the
  640. _optlink system linkage convention are not supported in this version.
  641.  
  642. ------------------------------------------------------------------------
  643. F.4. Run-Time Problems:  SOM Interface Repository Performance Enhancement
  644.  
  645. The SOM toolkit shipped in VisualAge for Basic is Version 2.1.2.  If you
  646. have installed SOM 2.1.4 or later, it includes the ability to add
  647. an index to a SOM Interface Repository (SOMIR).  Users of SOMIR files
  648. that don't have an index will notice VisualAge for Basic runs an
  649. application slower the first time than in subsequent runs of the
  650. application.  Users of SOMIR files that predate Version 2.1.4 can add
  651. indexes to these files by using the IRINDEX utility
  652. (irindex <SOMIR name>).  For additional details, please read the README
  653. file for SOM 2.1.4 or later.
  654.  
  655. For users planning to install SOM 2.1.4 or later, please note that if you
  656. have a previous version installed that does not include the sample
  657. directories, then you will need to create these directories in order
  658. to complete the installation.  The 2.1.4 install program will indicate
  659. which directories are needed.
  660.  
  661. --------------------------------------------------------------------
  662. F.5. Run-Time Problems:  Note for String and Variant usage on Windows
  663.      NT and Windows 95
  664.  
  665. The following issues concern the usage of String and Variant datatypes
  666. in VisualAge for Basic for Windows NT and Windows 95:
  667.  
  668.  (1) Difference of internal code
  669.  
  670.      In VisualAge for Basic, the internal code of a String variable
  671.      is the PC code (DBCS PC code in DBCS PC environments). On the other
  672.      hand, the internal code of Variant variable type is Unicode to
  673.      exploit performance advantages in the interaction with 32bit OLE
  674.      automation.
  675.  
  676.      This internal code difference typically appears in the result of
  677.      byte operational string functions (such as LenB($), LeftB($),
  678.      MidB($), RightB($), etc...).
  679.  
  680.  (2) File & display I/O, interaction with DB2 and CLI/ODBC drivers
  681.  
  682.      Regardless the above internal code difference,
  683.      both String type and Variant type variables can be used in the
  684.      VisualAge for Basic APIs for file I/O, display I/O, and interaction
  685.      with database systems where PC code is expected implicitly.
  686.      In case of Variant variables, the output data (from VisualAge for
  687.      Basic program) is automatically converted to the String type
  688.      representation (PC code), and input data is automatically converted
  689.      to a receiving Variant data type representation (Unicode).
  690.      Programmers just need to care about putting valid data which is not
  691.      corrupted in the variables.
  692.  
  693.  (3) String and Variant variables in OLE automation server/container
  694.  
  695.      Regardless the internal code difference, both String and Variant
  696.      variables can be used in OLE automation containers and can call both
  697.      16bit and 32bit versions of OLE automation servers. VisualAge for
  698.      Basic can convert data types to the one expected by an OLE server
  699.      automatically (i.e. if a 32bit OLE server expects BSTR,
  700.      VisualAge for Basic converts a String type variable to Variant
  701.      representation and then passes it to the OLE server.  An OLE server
  702.      also performs automatic conversion if necessary according to the OLE
  703.      server's responsibility.
  704.  
  705.  (4) String/Variant data conversion by VisualAge for Basic
  706.  
  707.      On the Windows NT and Windows 95 platforms, VisualAge for Basic
  708.      automatically performs necessary conversions for String and Variant
  709.      types.  In this conversion process, if there is invalid data in the
  710.      source variable, VisualAge for Basic just removes it and the result
  711.      may include no data after the conversion.
  712.  
  713.  
  714. ------------------------------------------------------------------------
  715. G.  User Interface
  716. ------------------------------------------------------------------------
  717.  
  718. ------------------------------------------------------------------------
  719. G.1. User Interface:  Mnemonic characters not working on OS/2
  720.  
  721. On OS/2, if Fixpack 17 or later has not been applied, the mnemonic
  722. character (i.e., the accelerator key) in the caption of labels and
  723. buttons (check box, option, and command buttons) does not appear
  724. underlined when using certain fonts.  This applies to the VisualAge
  725. for Basic user interface as well as applications written in VisualAge
  726. for Basic.
  727.  
  728. ------------------------------------------------------------------------
  729.  
  730. G.2. User Interface:  OS/2 Support
  731.  
  732. In some areas where system requirements are mentioned, OS/2 support is
  733. described as OS/2 3.0 (Warp).  The correct statement for OS/2 support is
  734. OS/2 3.0 (Warp) or later.
  735.  
  736. ------------------------------------------------------------------------
  737.  
  738. G.3. User Interface:  Editing captions in the Menu Editor
  739.  
  740. The Edit "textbox" that appears in the menu editor over a menuitem when
  741. changing its caption does not move with the menuitem when the menu
  742. editor scrollbar is used.  Clicking on another menuitem will reposition
  743. the edit textbox.
  744.  
  745.  
  746. ------------------------------------------------------------------------
  747.  
  748. G.4. User Interface:  Screen Resolution Migration
  749.  
  750. If a form in an application written on a machine with one screen
  751. resolution is migrated to a machine with less screen resolution, and
  752. the form's width and/or height now exceeds the screen size, then an error
  753. occurs when displaying the form in design and run modes.
  754.  
  755. ------------------------------------------------------------------------
  756.  
  757. G.5. User Interface:  Alignment Property on OS/2
  758.  
  759. OS/2 does not support allow text alignment (i.e., right justify, center,
  760. etc.) of its checkbox, option button, and textbox controls.  In
  761. VisualAge for Basic for OS/2, the alignment property of these
  762. components is ignored.
  763.  
  764. ------------------------------------------------------------------------
  765. G.6. User Interface:  FontSize Property
  766.  
  767. When browsing the FontSize property in the Property Editor, the same list
  768. of font sizes is displayed for every font, regardless of whether each
  769. size is supported on the current machine.  If an unsupported FontSize
  770. is selected, VisualAge for Basic will use the closest supported FontSize.
  771.  
  772. ------------------------------------------------------------------------
  773. G.7. User Interface:  Long File Names in the FileListBox component
  774.  
  775. On Windows95, the FileListBox component does not display any long file
  776. names.  Also, it does not display any file names in a long subdirectory
  777. name.  This problem does not occur on OS/2 and Windows NT.
  778.  
  779.  
  780. ------------------------------------------------------------------------
  781. H.  Communication Components
  782. ------------------------------------------------------------------------
  783.  
  784. ------------------------------------------------------------------------
  785. H.1.1. Communication Components: SOM requirement
  786.  
  787. All the Communication Components (APPC, ASYNC, HLLAPI, NetBIOS, TCP/IP)
  788. are created with SOM classes, so you need to set up your environment
  789. to make SOM available on OS/2, Windows NT, and Windows 95.
  790.  
  791. ------------------------------------------------------------------------
  792. H.2.1. NetBIOS: No-Wait functions
  793.  
  794. In this version, NetBIOS does not support No-Wait functions even if you
  795. can find the API names in the ccnetapi.idl.
  796.  
  797. ------------------------------------------------------------------------
  798. H.2.2. NetBIOS: Sequence octet data type
  799.  
  800. Some APIs use SOM's sequence octet data type, so when you invoke a
  801. method of NetBIOS or NetBiosAPI class you are required to convert the
  802. received/sent data to an appropriate data type.
  803. e.g.,
  804.    If the received data can be processed as a string, first you need
  805.    to receive the data in a data type that can handle binary data,
  806.    then convert to string data type, or something appropriate.
  807.  
  808.    When sending data, you may code as follows:
  809.  
  810.       Dim IntArrayBuf(50) As Integer
  811.       Dim testdata As String
  812.       Dim netbios  As NetBiosAPI
  813.       Set netbios = New NetBiosAPI
  814.       testdata = "(Client) SEND-Data from SendWait."
  815.  
  816.       For i = 1 to 32
  817.          IntArrayBuf(i-1) = Asc(Mid$(testdata, i, 1))
  818.       Next i
  819.       rc = netbios.SendWait(0, ncb_lsn, IntArrayBuf, 33)
  820.  
  821.    When receiving data, you may code as follows:
  822.       Dim receivebuf As String * 512
  823.       Dim IntArrayBuf(50) As Integer
  824.       Dim netbios  As NetBiosAPI
  825.       Set netbios = New NetBiosAPI
  826.  
  827.       rc = netbios.ReceiveWait(0, ncb_lsn, IntArrayBuf, ncb_length)
  828.       If rc <> 0 Then
  829.          'MsgBox "ReceiveWait error RC = " & rc
  830.          GoTo EndProcess
  831.       Else
  832.       For i = 0 to 511
  833.          Mid(receivebuf, i+1, 1) = Chr$( IntArrayBuf(i) )
  834.       Next i
  835.          'MsgBox "ReceiveWait succeeded!"
  836.       End If
  837.  
  838. To know which API uses SOM sequence octet data type, please refer to
  839. ccnetapi.idl or ccnetapv.idl.
  840.  
  841. ------------------------------------------------------------------------
  842. H.3.1. TCP/IP: Sock_init method
  843.  
  844. For Windows, Sock_init method issues WSAStartup() system call that
  845. assumes the WinSock version is 1.1 on the Windows environments.
  846.  
  847. ------------------------------------------------------------------------
  848. H.3.2. TCP/IP: Sock_errno method
  849.  
  850. The Sock_errno method returns the error code set by the last issued
  851. socket call.  When a socket call has an error, the return value of
  852. the sock_errno() (OS/2) or WSAGetLastError()(Windows) system calls are
  853. stored in an internal variable, and the value is returned when this
  854. method is called.  On OS/2, the Sock_errno method also returns the value
  855. of h_errno for gethostbyaddr() and gethostbyname() calls.
  856.  
  857. ------------------------------------------------------------------------
  858. H.3.3. TCP/IP: ConnectTimeOut property
  859.  
  860. For OS/2, the ConnectTimeOut property does not affect the ConnectStart
  861. method.  This means no timeout occurs and the control immediately returns
  862. an error when connection is not established.
  863.  
  864. ------------------------------------------------------------------------
  865. H.3.4. TCP/IP: Naming convention
  866.  
  867. The method names of TCPIPSockAPI are almost based on the Socket API
  868. function names.  But there are some differences between them because
  869. of the differences across operating systems.
  870.  
  871.     OS/2             Windows                Method Name
  872.     -------------------------------------------------------
  873.     ioctl()          ioctosocket()          Ioctlsocket()
  874.     soclose()        closesocket()          Soclose()
  875.     sock_init()      WSAStartup()(*1)       Sock_Init()
  876.     sock_errno()(*2) WSAGetLastError()(*2)  Sock_errno()
  877.  
  878.     (*1) Please refer the "Sock_init method" in this file.
  879.     (*2) Please refer the "Sock_errno method" in this file.
  880.  
  881. ------------------------------------------------------------------------
  882. H.4.1. ASYNC: Event driven programming (OnComm/SThreshold/RThreshold)
  883.  
  884. The OnComm event does not work on all platforms.  So, even if you
  885. changed the value of SThreshold/RThreshold value, you will not trigger
  886. events.  This means that you cannot write an "Event driven"
  887. asynchronous program using CCCOM.  Instead, use the polling mechanism
  888. program described in the example/tutorial.
  889.  
  890. For an error during a binary file transfer, you can get the error status
  891. by getting the value of FxStatus Property.
  892.  
  893. ------------------------------------------------------------------------
  894. H.4.2. ASYNC: AutoPortOpen
  895.  
  896. If you set the AutoPortOpen property to False and start the project,
  897. CCCOM automatically searches and opens an available serial port, if
  898. possible.  After that, if you set the AutoPortOpen to False, the port is
  899. not open when you set the CommPort property.  If you set AutoPortOpen
  900. to True, the port will be opened automatically when you change or
  901. set the CommPort property.
  902.  
  903. ------------------------------------------------------------------------
  904. H.4.3. ASYNC: Sample program
  905.  
  906. In the ASYNC sample program in ...\samples\comm\async, when you
  907. push the "File Receive" or "File Send" buttons, a file transferred
  908. message appears immediately on the TextBox1.  But the actual file
  909. transfer is going in a separate thread.  You can confirm real transfer
  910. completion by getting the value of FxStatus.  If the file transfer is
  911. on going, FxStatus is 4.  If it completed, it will be 0.
  912.  
  913. ------------------------------------------------------------------------
  914. H.4.4. ASYNC: Binary file transfer
  915.  
  916. When using the Binary file transfer functions of CCCOM component:
  917.  
  918.   - In YMODEM and ZMODEM, you can not download more than 1 file at
  919.     one time.  If you set the Download property to "", only 1 file
  920.     will be stored.
  921.   - In the ZMODEM protocol, XferFileSize sometimes indicate a size
  922.     twice as much as the original size.
  923.   - XMODEM is more stable than YMODEM and ZMODEM.  ZMODEM also is slower.
  924.     The use of XMODEM is strongly recommended.
  925.  
  926. ------------------------------------------------------------------------
  927. H.5.1. HLLAPI: Multiple instances of Esession component
  928.  
  929. When you create more than 2 Esession components in a project, you cannot
  930. assign separate SessionID property values for each component.  Once you
  931. change the SessionID of one component, the other component's SessionID
  932. will be changed to the same ID.
  933.  
  934. ------------------------------------------------------------------------
  935. H.5.2. HLLAPI: String return data
  936.  
  937. Some methods of Ehllapi SOM class returns a string data (e.g.
  938. QuerySessions, QuerySessionStatus, etc.).  You can not get the entire
  939. value as in REXX-HLLAPI because the data after NULL will be lost and
  940. is not seen in Basic.  "Lost" information includes Host Row/Column and
  941. Codepage information.  To see these values, read the corresponding
  942. properties of the Esession component.
  943.  
  944.  
  945. ------------------------------------------------------------------------
  946. I.  Country-specific information
  947. ------------------------------------------------------------------------
  948.  
  949. ------------------------------------------------------------------------
  950. I.1. Country:  DBCS Font Name
  951.  
  952. Statements in the Sub main in samples\db2api\util.bas and in
  953. samples\cli\samputil.bas set the font name for the iOutput form
  954. to "Courier" so that output can be displayed in aligned columns.
  955. In a DBCS environment, the Courier font cannot display double-byte
  956. characters; therefore, DBCS users should change the font name to
  957. MINCHO or some other DBCS font.
  958.  
  959. ------------------------------------------------------------------------
  960. I.2. Country:  DBCS Data in CLI calls
  961.  
  962. When passing arguments that contain DBCS characters in CLI calls, be
  963. sure to use byte counting, not character counting, functions like LenB,
  964. InStrB, MidB.
  965.  
  966. ------------------------------------------------------------------------
  967. I.3. Country:  Distribution of INTSTRNG.DLL
  968.  
  969. All the country dependent functions, such as IME (Input Method Editor)
  970. related functions and DBCS character comparison functions, are stored in
  971. the DLL named INTSTRNG.DLL.  If you distribute an executable file which
  972. calls INTSTRNG.DLL, in Japan, make the directory named "081" (for OS/2)
  973. or "JPN" (for Windows) under the subdirectory that stores other DLL
  974. files, then put the INTSTRNG.DLL there.
  975.  
  976. ------------------------------------------------------------------------
  977. I.4. Country:  Italian Codepage for AIX
  978.  
  979. When using the remote debugging feature of the VisualAge for Basic
  980. Server on AIX on an Italian RS/6000, some characters may not display
  981. correctly using the default locale installed on the server.  The locale
  982. IBM 850 will display characters correctly.  Characters affected are ones
  983. with accents and other features.
  984.  
  985. ------------------------------------------------------------------------
  986. I.5. Country:  Entering special characters in the Property Editor
  987.  
  988. When using the Alt + <ASCII code> sequence to enter a character, some
  989. sequence numbers will not work correctly in the Property Editor (ex.,
  990. Alt + 163 will tab into another property).  To get around this problem,
  991. set the Num Lock key on.  Some numbers may appear along with the desired
  992. character, but these can be removed using the Delete or Backspace keys.
  993.  
  994. ------------------------------------------------------------------------
  995. I.6. Country:  Displaying DBCS errors message on AIX server
  996.  
  997. When using the Remote Debug capabilities of VisualAge for Basic Server
  998. on an AIX server using a DBCS locale, enter the following settings in
  999. the .Xdefaults file of the userid that owns the DB2/6000 database
  1000. instance(s):
  1001.  
  1002. *fontList: -dt-interface user-medium-r-normal-l*-*:
  1003. *XmText.fontList: -dt-interface user-medium-r-normal-l*-*:
  1004.  
  1005. This setting is needed to display correctly error messages containing
  1006. double-byte characters.
  1007.  
  1008. ------------------------------------------------------------------------
  1009. I.7. Country:  Displaying Simplified Chinese characters in the Code
  1010.      Editor
  1011.  
  1012. The default System font on the Simplified Chinese version of Windows NT
  1013. and Windows 95 is a True Type font.  The code editor of VisualAge for
  1014. Basic does not display Simplified Chinese characters correctly when
  1015. using this font.  To correct the problem, select a non-True Type font,
  1016. such as MINCHO or the "Ming" font, and enable this font in the Code
  1017. Editor.  Example:
  1018. 1) Edit the file \VABASIC\CONFIG\INSTPREF.INI
  1019. 2) In the [Application] stanza, add the following lines:
  1020.    EditComponents.Font.FontName=MINCHO
  1021.    EditComponents.Font.Size=12
  1022. 3) Save this file, and restart VisualAge for Basic
  1023.  
  1024. ------------------------------------------------------------------------
  1025. I.8. Country:  Cursor position on a character in the Code Editor.
  1026.  
  1027. For SBCS characters, the cursor should appear along the front edge of the
  1028. current character.  For DBCS characters, the cursor may appear further
  1029. within the current character.
  1030.  
  1031. ------------------------------------------------------------------------
  1032. I.9. Country:  KeyAscii value of KeyPress event
  1033.  
  1034. In any DBCS environment, KeyAscii value of KeyPress event does not
  1035. carry the correct double byte character code.
  1036. On OS/2, the bytes are returned in the reverse order.
  1037. On Windows, only the first byte of the DBCS character is returned.
  1038.  
  1039. This function works correctly for the SBCS input.
  1040.  
  1041.