CompareBookmarks Method Example (VJ++)

Microsoft ActiveX Data Objects (ADO)

CompareBookmarks Method Example (VJ++)

This example demonstrates the CompareBookmarks method. The relative value of bookmarks is seldom needed unless a particular bookmark is somehow special.

Designate a random row of a Recordset derived from the Authors table as the target of a search. Then display the position of each row relative to that target.

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

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

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

    // CompareBookmarksX function

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

        // Declarations.
        BufferedReader in =
            new BufferedReader (new InputStreamReader(System.in));
        String strCnn = "DSN=Pubs;Provider=MSDASQL;uid=sa;pwd=;";
        int intCount;
        Variant varTarget = null;
        int intResult;
        String strAns;
        int intDisplaySize = 15;

        try
        {
            rstAuthors = new Recordset();
            rstAuthors.open("SELECT * FROM authors",
                strCnn,
                AdoEnums.CursorType.STATIC,
                AdoEnums.LockType.READONLY,
                AdoEnums.CommandType.TEXT);
            intCount = rstAuthors.getRecordCount();
            System.out.println("Rows in the Recordset = " +
                Integer.toString(intCount));

            // Exit if an empty recordset.
            if(intCount == 0)
                System.exit(0);

            // Randomize.
            intCount = (int)(intCount * Math.random());
            // Get position between 0 and count-1.
            System.out.println("\nRandomly chosen row position = " +
                Integer.toString(intCount)+ "\n");
            rstAuthors.move(intCount,new Integer(AdoEnums.Bookmark.FIRST));             // Move row to random position.
            varTarget = (Variant)rstAuthors.getBookmark();
            // Remember the mystery row.
            intCount = 0;
            rstAuthors.moveFirst();

            // Loop through recordset.
            while(!rstAuthors.getEOF())
            {
                intResult = rstAuthors.compareBookmarks
                    ((Variant)rstAuthors.getBookmark(), varTarget);
                if(intResult == AdoEnums.Compare.NOTEQUAL)
                    System.out.println("Row " +
                        Integer.toString(intCount) +
                        ": Bookmarks are not equal.");
                else if(intResult == AdoEnums.Compare.NOTCOMPARABLE)
                    System.out.println("Row " +
                        Integer.toString(intCount) +
                        ": Bookmarks are not comparable.");
                else
                {
                    switch(intResult)
                    {
                    case AdoEnums.Compare.LESSTHAN :
                        strAns = "less than";
                        break;
                    case AdoEnums.Compare.EQUAL :
                        strAns = "equal to";
                        break;
                    case AdoEnums.Compare.GREATERTHAN :
                        strAns = "greater than";
                        break;
                    default :
                        strAns = "in error comparing to";
                        break;
                    }
                    System.out.println("Row position " +
                        Integer.toString(intCount) +
                        " is " + strAns + " the target.");
                }
                if(intCount % intDisplaySize == 0 && intCount > 0)
                {
                    System.out.println("\nPress <Enter> to continue..");
                    in.readLine();
                }
                intCount++;
                rstAuthors.moveNext();
            }

            // Cleanup objects before exit.
            rstAuthors.close();
            System.out.println("\nPress <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 first.
            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);
        }
    }

    // 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");
    }
}