BOF, EOF, and Bookmark Properties Example (VJ++)
This example uses the BOF and EOF properties to display a message if a user tries to move past the first or last record of a Recordset. It uses the Bookmark property to let the user flag a record in a Recordset and return to it later.
// BeginBOFEOFJ import com.ms.wfc.data.*; import java.io.*; import com.ms.com.*; public class BOFEOFBookmark { Variant varBookmark; BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); String line = null; // The main entry point for the application. public static void main (String[] args) { BOFEOFBookmark b1 = new BOFEOFBookmark (); b1.BOFX(); b1.BOFX2(); System.exit(0); try { b1.finalize(); } catch(Throwable te) { System.out.println("Exception: " + te.getMessage()); } } // The main entry point for the application. public void BOFX() { // Declarations. Recordset rstPublishers = null; String strCnn; String strMessage; int intCommand = 0; strCnn = "Provider='sqloledb';Data Source='MySqlServer';" + "Initial Catalog='Pubs';Integrated Security='SSPI';"; try { // Open a recordset with data from Publishers table. rstPublishers = new Recordset(); rstPublishers.setCursorType(AdoEnums.CursorType.STATIC ); rstPublishers.setCursorLocation( AdoEnums.CursorLocation.CLIENT); // Use client cursor to enable AbsolutePosition property. rstPublishers.open(new String( "SELECT pub_id,pub_name FROM Publishers ORDER BY pub_name"), strCnn, AdoEnums.CursorType.STATIC , AdoEnums.LockType.BATCHOPTIMISTIC, AdoEnums.CommandType.TEXT ); rstPublishers.moveFirst(); //Display information about current record and get user input. while ( true) { strMessage = "\nPublisher :" + rstPublishers.getField("pub_name").getString() + "\n" + " (Record " + rstPublishers.getAbsolutePosition() + " of " + rstPublishers.getRecordCount() + ")" + "\n\n" + "Enter command : " + "\n" + "[1 - next / 2 - previous /" + "\n" + "3 - set bookmark / 4 - go to bookmark] / 5 - quit]" ; System.out.println (strMessage); line = in.readLine(); //No entry exits loop. if (line.length() == 0) break; //convert string entry to int. intCommand = Integer.parseInt(line); //out of range entry exits loop. if ((intCommand < 1) || (intCommand > 4)) break ; //Call method based on user's validated selection. MoveAny(intCommand, rstPublishers); } } catch( AdoException ae ) { // Notify user of any errors that result from ADO. // As passing a Recordset, check for null pointer first. if (rstPublishers != null) { PrintProviderError(rstPublishers.getActiveConnection()); } else { System.out.println("Exception: " + ae.getMessage()); } } // This catch is required if input string cannot be converted to // Integer data type. "TCS[VSD]" catch ( java.lang.NumberFormatException ne) { System.out.println("\nException: Integer Input required." ); } // System Read requires this catch. catch( java.io.IOException je ) { PrintIOError(je); } finally { // Cleanup objects before exit. if (rstPublishers != null) if (rstPublishers.getState() == 1) rstPublishers.close(); } } // MoveAny Function public void MoveAny(int intChoice, Recordset rsTemp) { // Move Forward or backword per selection from user, // trapping for BOF and EOF. try { switch(intChoice) { case 1: // Equals char of 1. rsTemp.moveNext(); if (rsTemp.getEOF()) { System.out.println ( "\nMoving past the last record \nTry again." ); rsTemp.moveLast(); } break; case 2: // Equals char of 2. rsTemp.movePrevious(); if (rsTemp.getBOF()) { System.out.println ( "\nMoving past the first record \nTry again." ); rsTemp.moveFirst(); } break; case 3: // Equals char of 3. // Store the bookmark of the current record. varBookmark = (Variant)rsTemp.getBookmark(); break; case 4: // Equals char of 4. // Go to the record indicated by the stored bookmark. if (varBookmark == null) System.out.println ("\nNo bookmark set!"); else rsTemp.setBookmark((Object)varBookmark); break; default: break; } } catch( AdoException ae ) { // Notify user of any errors that result from ADO. // As passing a Recordset, check for null pointer first. if (rsTemp != null) { PrintProviderError(rsTemp.getActiveConnection()); } else { System.out.println("Exception: " + ae.getMessage()); } } } // PrintProviderError Function static void PrintProviderError( Connection Cnn1 ) { // Print Provider errors from Connection object. // ErrItem is an item object in the Connections Errors collection. com.ms.wfc.data.Error ErrItem = null; long nCount = 0; int i = 0; nCount = Cnn1.getErrors().getCount(); // If there are any errors in the collection, print them. if( nCount > 0); { // Collection ranges from 0 to nCount - 1 for (i = 0; i< nCount; i++) { ErrItem = Cnn1.getErrors().getItem(i); System.out.println("\t Error number: " + ErrItem.getNumber() + "\t" + ErrItem.getDescription() ); } } } //.PrintIOError Function static void PrintIOError( java.io.IOException je) { System.out.println("Error \n"); System.out.println("\tSource = " + je.getClass() + "\n"); System.out.println("\tDescription = " + je.getMessage() + "\n"); } //////////////////////////////////////////// // BOFX2() Function. // //////////////////////////////////////////// public void BOFX2() { Recordset rs = null ; try { // Declarations. rs = new Recordset(); Variant[] arrbmk = new Variant[11]; rs.setCursorLocation( AdoEnums.CursorLocation.CLIENT); String strCnn = "Provider='sqloledb';Data Source='MySqlServer';" + "Initial Catalog='Pubs';Integrated Security='SSPI';"; rs.setActiveConnection (strCnn); // Open recorset with data from authors table. rs.open((new String("SELECT * FROM authors")),strCnn,AdoEnums.CursorType.STATIC ,AdoEnums.LockType.BATCHOPTIMISTIC,AdoEnums.CommandType.TEXT ); System.out.println ("\nNumber of records before filtering : " + rs.getRecordCount() ); int ii = 0; // Create array of bookmarks. while (rs.getEOF() != true && ii < 11) { arrbmk[ii] = (Variant)rs.getBookmark(); ii++; rs.move (2); } // set Filter to recordset. Variant bmk=new Variant(); bmk.putVariantArray(arrbmk); rs.setFilter(bmk); System.out.println ("\nNumber of records after filtering : " + rs.getRecordCount() ); // Dislay the records after filtering. rs.moveFirst(); while (!rs.getEOF()) { System.out.println ("\t" +rs.getAbsolutePosition() + " " +rs.getField("au_lname").getString()); rs.moveNext(); } rs.close(); System.out.println ("\n\nPress <Enter> key to continue."); in.readLine(); } catch( AdoException ae ) { // Notify user of any errors that result from ADO. // As passing a Recordset, check for null pointer first. if (rs != null) { PrintProviderError(rs.getActiveConnection()); System.out.println("Exception: " + ae.getMessage()); } else { System.out.println("Exception: " + ae.getMessage()); } } // System Read requires this catch. catch( java.io.IOException je ) { PrintIOError(je); } } } // EndBOFEOFJ
See Also
BOF, EOF Properties | Bookmark Property | Recordset Object