Save、Open メソッドの例 (VJ++)

次の 3 つの例では、Save メソッドと Open メソッドを一緒に使用する方法を示します。

ある社員が仕事で出張する予定があり、出張先にデータベースに含まれるテーブルを持っていく必要があるとします。出かける前に、Recordset としてデータにアクセスし、それを持ち出し可能な形式に保存します。出張先では、接続されていないローカルな Recordset としてアクセスします。Recordset に変更を加え、変更分と共に Recordset を再度保存します。最終的に会社に戻ったときに、再度データベースに接続し、出張中に行った変更に関する更新を、データベースに対して行います。

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

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

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

    // First, access and save the Authors table.

    // SaveX1 function

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

        // Declarations.
        String strCnn = "DSN=Pubs;Provider=MSDASQL;uid=sa;pwd=;";
        BufferedReader in = 
            new BufferedReader(new InputStreamReader(System.in));
        File file;

        try
        {
            rstAuthors = new Recordset();
            rstAuthors.setCursorLocation(AdoEnums.CursorLocation.CLIENT);
            rstAuthors.open("SELECT * FROM Authors",
                                strCnn,
                                AdoEnums.CursorType.DYNAMIC,
                                AdoEnums.LockType.OPTIMISTIC,
                                AdoEnums.CommandType.TEXT);

            // For the sake of illustration, save the recordset to a 
            //diskette in XML format.
            file = new File("a:\\Pubs.xml");
            if(!file.exists())
                rstAuthors.save("a:\\Pubs.xml",AdoEnums.PersistFormat.XML);
            else
            {
                System.out.println("\nFile already exists.");
                System.out.println("\nPress <Enter> to continue..");
                in.readLine();
                System.exit(0);
            }
            // Cleanup objects before exit.
            rstAuthors.close();
        }
        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);
        }
    }

    // At this point, you have arrived at your destination. You will
    // access the Authors table as a local, disconnected Recordset.
    // Don't forget you must have the MSPersist provider on the machine
    // you are using in order to access the saved file, a:\Pubs.xml.

    // SaveX2 function

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

        // Declarations.
        BufferedReader in = 
            new BufferedReader(new InputStreamReader(System.in));

        try
        {
            rstAuthors = new Recordset();

            // For sake of illustration, we specify all parameters.
            rstAuthors.open("a:\\Pubs.xml",
                    "Provider=MSPersist;",
                    AdoEnums.CursorType.FORWARDONLY,
                    AdoEnums.LockType.OPTIMISTIC,
                    AdoEnums.CommandType.FILE);

            // Now you have a local, disconnected recordset.
            // Edit it as you desire.
            // (In this example, the change makes no difference).
            rstAuthors.find("au_lname = 'Carson'");
            if(rstAuthors.getEOF())
            {
                System.out.println("Name not found.");
                System.out.println("\nPress <Enter> to continue..");
                in.readLine();
                return;
            }
            rstAuthors.getField("city").setString("Berkeley");
            rstAuthors.update();

            // Save changes in ADTG format this time, for illustration.
            // Note that previous version on the diskette, as a:\Pubs.xml.
            rstAuthors.save("a:\\Pubs.adtg",AdoEnums.PersistFormat.ADTG);

            // Cleanup objects before exit.
            rstAuthors.close();
        }
        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);
        }
    }

    // Finally, update the database with your changes.

    // SaveX3 function

    static void SaveX3()
    {
        // Define ADO Objects.
        Connection cnConn1 = null;
        Recordset rstAuthors = null;

        // Declarations.
        String strCnn = "DSN=Pubs;Provider=MSDASQL;uid=sa;pwd=;";

        try
        {
            // If there is no ActiveConnection, you can open with defaults.
            rstAuthors = new Recordset();
            rstAuthors.open("a:\\Pubs.adtg");

            // Connect to the database, associate the Recordset with
            // connection, then update the database table with the changed
            // Recordset.
            cnConn1 = new Connection();
            cnConn1.open(strCnn);
            rstAuthors.setActiveConnection(cnConn1);
            rstAuthors.updateBatch();

            // Cleanup objects before exit.
            rstAuthors.close();
            cnConn1.close();
        }
        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());
            }
        }
    }

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