Move Method Example (VJ++)

Microsoft ActiveX Data Objects (ADO)

Move Method Example (VJ++)

This example uses the Move method to position the record pointer based on user input.

import java.io.*;
import com.ms.wfc.data.*;
import com.ms.com.*;

public class MoveX
{
// The main entry point for the application.

public static void main (String[] args)
{
    MoveX();
    System.exit(0);
}
// MoveX Function

static void MoveX()
{
    // Define ADO Objects
    Recordset rstAuthors = null;

    // Declarations
    String line = null;
    Variant varBookmark;
    String strCommand = null;
    int lngMove;
    BufferedReader in = 
        new BufferedReader(new InputStreamReader(System.in));

    try
    {
        //  Open recordset from Authors table.
        String strCnn = "Provider=sqloledb;Data Source=srv;"+
            "Initial Catalog=Pubs;User Id=sa;Password=;";

        rstAuthors = new Recordset();
        rstAuthors.setCursorType(AdoEnums.CursorType.STATIC);

        // Use client cursor to allow use of
        // Absolute Position property.
        rstAuthors.setCursorLocation(AdoEnums.CursorLocation.CLIENT);
        rstAuthors.open("select au_id,au_fname,au_lname,city,state " + 
            "from Authors order by au_lname", 
            strCnn,AdoEnums.CursorType.STATIC, 
            AdoEnums.CursorLocation.CLIENT, AdoEnums.CommandType.TEXT);

        rstAuthors.moveFirst();

        while(true)
        {
            // Display information about current record and
            // ask how many records to move.
            strCommand = "Record:\t\t"+ rstAuthors.getAbsolutePosition() + 
                " of " + rstAuthors.getRecordCount() + "\n" + "\tAuthor:\t\t"
                 + rstAuthors.getField("au_fname").getString() + 
                 " " + rstAuthors.getField("au_lname").getString() + 
                "\n" +"\tLocation:\t" + 
                rstAuthors.getField("city").getString() +
                 ", " +rstAuthors.getField("state").getString()
                 +"\n\n"+"\tEnter number of records to move" +
                " (positive or negative).";

            System.out.print("\t"+ strCommand + "\t");
            line =in.readLine();

            // No entry exits program loop.
            if (line.length()== 0)
                break;

            // Converts string entry to int.
            lngMove = Integer.parseInt(line);

            // Store bookmark in case the move goes too far
            // forward or backward.
            varBookmark =(Variant)rstAuthors.getBookmark();

            // Move method requires parameter of data type int.
            rstAuthors.move(lngMove);

            // Trap for BOF and EOF.
            if (rstAuthors.getBOF())
            {
                System.out.println("\tToo far backward!  " +
                    "Returning to the current record.");
                rstAuthors.setBookmark(varBookmark);
            }
            if (rstAuthors.getEOF())
            {
                System.out.println("\tToo far forward!  " +
                    "Returning to the current record.");
                rstAuthors.setBookmark(varBookmark);
            }
        }
        // Cleanup objects before exit.
        rstAuthors.close();
        System.out.println("\tPress <Enter> to continue..");
        in.readLine();
    }

    catch(AdoException ae)
    {
        // Notify user of any errors that result from ADO.

        // As passing a recordset, check for null pointer.
        if (rstAuthors!=null)
        {
            PrintProviderError(rstAuthors.getActiveConnection());
        }
        else
        {
            System.out.println(" Exception: "+ ae.getMessage());
        }
    }
    // System Read requires this catch.
    catch(java.io.IOException je)
    {
        PrintIOError(je);
    }
    // Required if the user enter non integer value.
    catch(java.lang.NumberFormatException ne)
    {
        System.out.println("\n\nPlease enter integer values!");
        rstAuthors.close();
    }
}
    // PrintProviderError Function

    static void PrintProviderError( Connection Cnn1 )
    {
        // Print Provider errors from Connection object.
        // ErrItem is an item object in the Connection’s 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");
    }
}