Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник
Коллекция курьезных вопросов из форумов
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

UPDATE в Jet и UCanAccess [D7, Jet]


ronyn   (08.05.20 11:22

Добрый день!
Столкнулся с проблемой обновления записей в базе Access 2003 (.mdb):
Есть клиент №1 написанный на Delphi (ADOConnection, ADOQuery, mode:read или share .... без разницы) - он берет данные из базы, к которой имеет доступ также клиент №2 - он создан на JAVA (Eclipse+UCanAccess), проблема в том, что при UPDATE вызванном из клиент №2 - клиент №1 не видит изменения до тех пор, пока таблица не будет физически закрыта. Клиент №2 ошибок не выдает, но изменения можно увидеть только если закрыть клиент №1. Если вместо клиент №1 использовать MS Access - эффект тот же. Но если вместо Клиент №2 использовать MS Access - для редактирования - Клиент №1 видит изменения мгновенно. Отсюда делаю вывод, что дело в особенностях UCanAccess, который не может физически редактировать базу:
с overflow "об использовании оператора SQL обновления в запросе. Запросы выбора доступа не являются физическими таблицами, даже если они могут выглядеть. Они просто выбирают запросы. Если вы выполняете обновление для выборочных запросов, доступ может обновить данные в базовых таблицах: таблицах, используемых в запросе и участвующих в обновлении. Так что это что-то сложное, что может сделать движок Jet, и это может также привести к плохому и нечеткому SQL-коду, если его неправильно использовать. UCanAccess опирается на Hsqldb, который во многих случаях не позволяет обновлять операторы в представлениях. Таким образом, вы должны вызвать оператор обновления SQL непосредственно в таблице, которую вы хотите обновить"
В правильном направлении думаю? Кто то сталкивался с такой проблемой на UCanAccess? Как исправить ситуацию, не закрывая базу клиентом №1 ?


Styx ©   (11.05.20 01:23[1]

Собственно, разработчики UCanAccess и не обещают, что оно должно работать:
http://ucanaccess.blogspot.com/2017/07/multiuser-concurrent-write-access.html?m=1


ronyn   (14.05.20 15:49[2]

Спасибо.
Есть какие то библиотеки, с таким же простым использованием, но возможностью работать через драйвер jet напрямую? Сам конечно погуглю, но может есть что-то, чем вы пользуетесь?


ronyn   (15.05.20 11:23[3]

Можно, конечно, Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); - но java.lang.ClassNotFoundException: sun.jdbc.odbc.JdbcOdbcDriver Возникла исключительная ситуация. Почему?
Потому что для Java 8 нельзя использовать мост JDBC-ODBC, поскольку он был удален. Вместо этого вам нужно будет использовать что-то вроде UCanAccess . ))


Styx ©   (15.05.20 18:03[4]


> Потому что для Java 8 нельзя использовать мост JDBC-ODBC,
>  поскольку он был удален.

Посоветовать ничего не могу, но, хоть он и удалён, в принципе возможность использовать его есть:
http://bigfatball.blogspot.com/2016/03/how-to-enable-jdbc-odbc-bridge-for-jdk-8.html
Это, конечно, костыль, но для какого-то варианта применения может прокатить.


ronyn   (18.05.20 22:23[5]

Спасибо!


версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо