QUESTION How do I perform DB2 cursor control in VisualAge? ANSWER VisualAge does not currently support the control of cursors for DB2. However, this level of control can be done with Smalltalk coding. Below are some ideas for manipulating SQL cursors for IBM database queries. Many implementation details are left out, but this info should give your customer a starting point for enhancing the database visual part. Cursor manipulation is possible using the AbtResultTable class. AbtResultTable objects are required for any query that returns data to VisualAge (ie SELECT statements). Below is a snippet of code which demonstrates a subset of the AbtResultTable function. The #next message is equivalent to a cursor fetch. The #close message closes the cursor. | dbm db rt row | dbm := AbtDbmSystem activeDatabaseMgr. db := dbm openDatabaseNamed: 'VISUALAG'. rt := db resultTableFromQuerySpec: ('SELECT * FROM SQLCAM01' abrAsQuerySpec). [(row := rt next) == nil] whileFalse:[ Transcript show: row asString;cr]. rt close. One way to override the result table (cursor) logic is to modify the Database Visual part code. This code resides in application AbtRunDatabaseQueryPartApp. Create a subclass of AbtQueryResultTable class so that certain methods can be overridden. Method #initializeOnResultTable is used to build a collection of rows from the result table. The default implementation is to load ALL rows into the collection using the AbtResultTable method do:. This method can be overridden to initially retrieve only a certain number of rows. (( self resultTable ) == nil ) ifFalse:[self getMoreRows: 10]. "getMoreRows: must be written" self currentRowIndex: (( self rows size > 0 ) ifTrue: [ 1 ] ifFalse:- 0 . The getMoreRows: method must be created, and it will be used to get the specified number of rows. The application developer will be responsible for closing the cursor when finished. ---------------------------------------------------- getMoreRows: aNum | newRow rowCount | rowCount := 1. newRow := self resultTable next. [newRow == nil or:[rowCount > aNum]] whileFalse:[ self rows add: ( self updateObjectForRow: newRow alreadyInDb: true ). rowCount := rowCount + 1. newRow := self resultTable next.] Using the Public Interface editor, the user can create an action in the newly created class to retrieve the next n rows. AbtDatabaseQuery methods #executeQuery and #executeQueryAsTransaction contain code to construct an AbtQueryResultTable object based on the query being executed. These methods would need to be overridden to instantiate the new AbtQueryResultTable subclass (rather than AbtQueryResultTable).