1

Access 2010 と連携するプログラムを実行しようとすると、エラーがスローされる

WARNING:Looking for usage map at page 1774, but page type is 1

次にuser lacks privilege、使用しようとしているテーブルへのアクセスに関するエラーをスローします。

このプログラムは、Access 2013 を使用すると問題なく動作するようで、Access 2010 で update ステートメントを初めて試したときに一度だけ動作しました。今ではまったく機能しません。

オンラインのどこにもこのエラーへの参照が見つからないようなので、他の誰かが以前に遭遇したことを願っています.

次のコード行でエラーがスローされますが、Access 2013 とのインターフェイスでは発生しません。

ResultSet rSet = stmt.executeQuery("Select * FROM Players");

メソッド全体は次のとおりです。

 public int addPlayer(String name, int x) throws SQLException //drafts a person to team x (ownerID)
, ClassNotFoundException
    {
    //Database db = new DatabaseBuilder().setCodecProvider(new CryptCodecProvider()).open(new File("BBFBLMasterVersion3.accdb"));
    Connection con;
    try 
    {
        Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
        con = DriverManager.getConnection("jdbc:ucanaccess://C:/Users/Andrew/Dropbox/Public/Schoolwork/IRC/BBFBLMasterVersion3.accdb"); //name of ODBC driver
        Statement stmt = con.createStatement();
        //stmt.executeQuery("SELECT * FROM DraftNightQuery");
        //ResultSet rSet = stmt.getResultSet();
        ResultSet rSet = stmt.executeQuery("Select * FROM Players");
        String[] split = name.split(" "); 
        String salary = "1";
        while(rSet.next())
        {   
            String lastName = rSet.getString("Last");
            //int x = Integer.parseInt(salary);
            if(split[0].toLowerCase().equalsIgnoreCase(lastName))
            {
                String firstName = rSet.getString("First"); //get the item from column named Team Name
                if(split[1].toLowerCase().equalsIgnoreCase(firstName))
                {
                    Statement connec = con.createStatement();
                    Statement idMatch = con.createStatement();
                    String id = rSet.getString("ID");
                    connec.executeUpdate("UPDATE Players SET OwnerID = "+x+" WHERE Last ='"+split[0]+"' AND First='"+split[1]+"' ");
                    //stmt.executeUpdate(whoToAdd);
                    ResultSet temp =idMatch.executeQuery("SELECT * FROM Salaries WHERE ID ='"+id+"'");
                    while(temp.next()){
                        String tempID = rSet.getString("ID");
                        if(id.toLowerCase().equalsIgnoreCase(tempID)){
                            salary = temp.getString("Salary");
                        }
                    }   
                    con.close();
                    connec.close();
                    stmt.close();
                    idMatch.close();
                    return Integer.parseInt(salary);
                }
            }
        }
        return 1;
    }
    finally{}
}
4

1 に答える 1

4

Gord が言ったように、この問題は jackcess によって検出され、ログに記録され、accdb ファイルの破損が原因である可能性があります (Compact and repair Access ツールで修正してみます)。また、同期ドロップボックス フォルダーでの使用が原因である可能性もあります。したがって、ファイルが UCanAccess を介して、または別の方法で変更されたことは関係ありません。これは、すべてが下位層で発生したためです。jackcessフォーラムで報告された同様の問題を見つけてください(はい、それらはグーグル可能です。ページ番号を削除しましたか?)

于 2015-02-11T21:24:04.367 に答える