Предупреждение: поиск карты использования на странице 1774, но тип страницы равен 1 в UCanAccess.

При попытке запустить программу, которая взаимодействует с Access 2010, выдает ошибку

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

а затем продолжает выдавать ошибки о user lacks privilege для доступа к таблице, которую я пытаюсь использовать.

Эта программа отлично работает при использовании Access 2013, и однажды она сработала в Access 2010, когда я впервые попробовал оператор обновления. Теперь вообще не работает.

Кажется, я не могу найти ссылку на эту ошибку где-либо в Интернете, поэтому я надеюсь, что кто-то еще сталкивался с ней раньше.

Он выдает ошибку в этой строке кода, чего не происходит при взаимодействии с 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{}
}

person AndyReifman    schedule 11.02.2015    source источник
comment
Это вопрос программирования или вы ищете техническую поддержку для этой неуказанной программы? Будет чрезвычайно трудно помочь вам с деталями, предоставленными на данный момент.   -  person tnw    schedule 11.02.2015
comment
@tnw Это программа, которую я написал. Я почти уверен, что UCanAccess является причиной проблемы, однако это невозможно сказать, поскольку он не ссылается на него в начале предупреждения.   -  person AndyReifman    schedule 11.02.2015
comment
@stevesliva Я обновлю пост, указав строку, с которой у него проблемы.   -  person AndyReifman    schedule 11.02.2015
comment
@Eabryt Как мы должны помочь вам понять, в чем проблема, без кода? Вопросы, требующие помощи в отладке (почему этот код не работает?), должны включать желаемое поведение, конкретную проблему или ошибку и кратчайший код, необходимый для их воспроизведения, в самом вопросе. Вопросы без четкой формулировки проблемы бесполезны для других читателей. См. раздел Как создать минимальный, полный и проверяемый пример.   -  person tnw    schedule 11.02.2015
comment
Я столкнулся с этим в модерации... вам нужно было дать понять, что это ваш код. Спасибо за обновление. Удачи с ошибкой, которую невозможно найти в Google.   -  person stevesliva    schedule 11.02.2015
comment
@tnw Я обновил его, чтобы включить весь метод. А также указать, какая линия вызывает проблемы.   -  person AndyReifman    schedule 11.02.2015
comment
Это звучит как сообщение об ошибке от Jackcess, который является уровнем диспетчера записей, который использует UCanAccess. В частности, он извлек страницу данных из файла .accdb, ожидая, что это будет страница определенного типа (карта использования), и, по-видимому, получил что-то другое (страница, тип которой = 1). Я заметил, что ваш файл .accdb находится в папке Dropbox. Есть ли вероятность того, что один и тот же файл Dropbox был открыт на двух разных машинах одновременно?   -  person Gord Thompson    schedule 11.02.2015
comment
@GordThompson У меня открыт Dropbox на нескольких разных машинах, но ни на одной из них не открыта старая версия (кроме текущего ноутбука). У меня открыт файл .accdb, однако раньше это никогда не вызывало никаких проблем.   -  person AndyReifman    schedule 11.02.2015


Ответы (1)


Как сказал Горд, проблема обнаружена и зарегистрирована jackcess и, вероятно, вызвана повреждением файла accdb (я попытался бы исправить это с помощью инструмента Compact and repair Access). Кроме того, это может быть, в свою очередь, вызвано его использованием в папке синхронизации. Таким образом, то, что файл был изменен через UCanAccess или другим способом, не имеет значения, потому что все произошло на более низком уровне. Пожалуйста, найдите сообщения о похожих проблемах на форуме jackcess (да, их можно гуглить, вы удалили номер страницы?)

person jamadei    schedule 11.02.2015
comment
Я гуглил без номера страницы, но безуспешно. Я запустил утилиту compact & repair, и она сработала. Теперь меня беспокоит то, что это временно, и мне придется запускать его снова в будущем, что может быть проблематично, если он находится в середине попытки использовать программу. На данный момент это, кажется, работает. Надеемся, что в ближайшие несколько недель он получит серьезные испытания. - person AndyReifman; 12.02.2015
comment
@Eabryt Хотя у меня нет веских доказательств, подтверждающих мое утверждение, мне все же кажется, что открытие базы данных Access непосредственно из общего ресурса Dropbox — плохая идея, если есть какой-либо шанс, что более одного пользователя /process может сделать это одновременно. См. соответствующий вопрос здесь. - person Gord Thompson; 12.02.2015