Название: Два соединения к базе данных Отправлено: Garfild от Март 18, 2010, 15:47 Есть два соединения с базой данных. Одно соединение отображает таблицу БД(1-е соединение), а другое соединение(2-е соединение) копирует одну из строчек таблицы... После копирования, хочу чтобы таблица обновлялась... но вот иногда когда я обращаюсь к 1-му подключению,данные в таблице отображаются старые..т.е. без изменений,которые были сделаны 2-м подключением ... как же можно обновить это 1-е подключение??
Название: Re: Два соединения к базе данных Отправлено: cya-st от Март 18, 2010, 16:19 Сделай в проге одно соединение.
Название: Re: Два соединения к базе данных Отправлено: Garfild от Март 18, 2010, 16:22 Просто если одно соединение сделать, то когда это содинение отражает таблицу, я не могу транзакцию использовать... поэтому и пришлось два соединения использовать
Название: Re: Два соединения к базе данных Отправлено: lit-uriy от Март 18, 2010, 16:46 данные в представлении обновляются при изменении модели. Попробуй по завершению копирования делать для неё select()
Название: Re: Два соединения к базе данных Отправлено: dio от Март 18, 2010, 16:51 Делаете ли вы commit во 2-м соединении?
Ну и хорошо бы рассказать: какую БД используете, как устанавливаете соединение, как делаете запрос данных, как модифицируете данные. Название: Re: Два соединения к базе данных Отправлено: Garfild от Март 18, 2010, 17:01 В том-то и дело... я после завершения копирования для модели делаю setQuery()...и вот что заметил, после того как первый раз скопирую данные не обновляються даже после вызова setQuery()... а потом все нормально... только после второго вызова появляется сразу две новых строчки(т.е. еще та строчка,которая не появилась после первого вызова), а потом все как-надо. Хотя первый раз setQuery вызывается - проверено
Название: Re: Два соединения к базе данных Отправлено: Garfild от Март 18, 2010, 17:03 В том-то и дело... я после завершения копирования для модели делаю setQuery()...и вот что заметил, после того как первый раз скопирую данные не обновляються даже после вызова setQuery()... а потом все нормально... только после второго вызова появляется сразу две новых строчки(т.е. еще та строчка,которая не появилась после первого вызова), а потом все как-надо. Хотя первый раз setQuery вызывается - проверено щас тока домой приду и расскажу :) Название: Re: Два соединения к базе данных Отправлено: Garfild от Март 18, 2010, 18:16 Использую Access.
При вызове программка сразу же подклюсается к БД Код при копировании делаю так Код ну и обновляю данные потом с помощью setQuery() Название: Re: Два соединения к базе данных Отправлено: cya-st от Март 18, 2010, 18:39 Цитировать ()...и вот что заметил, после того как первый раз скопирую данные не обновляються даже после вызова setQuery()... а потом все нормально... только после второго вызова появляется сразу две новых строчки(т.е. еще та строчка,которая не появилась после первого вызова) в таблице не обновляется?Название: Re: Два соединения к базе данных Отправлено: cya-st от Март 18, 2010, 20:25 или вывод в QTableView или куда нибудь еще?
Название: Re: Два соединения к базе данных Отправлено: Garfild от Март 18, 2010, 20:48 Цитировать ()...и вот что заметил, после того как первый раз скопирую данные не обновляються даже после вызова setQuery()... а потом все нормально... только после второго вызова появляется сразу две новых строчки(т.е. еще та строчка,которая не появилась после первого вызова) в таблице не обновляется?Просто при вызове model->setQuery() основного соединения, почему-то не всегда отображается данные вставленные с помощью 2-го соединения...то отображаются,а то нет... не пойму от чего это зависит Название: Re: Два соединения к базе данных Отправлено: dio от Март 19, 2010, 09:48 Вы обновляете данные при обработке сигнала copyEndTabl или после выполнения метода copy?
Название: Re: Два соединения к базе данных Отправлено: Garfild от Март 19, 2010, 10:14 обновляю данные после метода copy.. т.е. к тому моменту второе соединение у меня уже закрыто. И такое ощущение, что в первои соединении еще не отразились изменения, которые произошли во втором.
...то отображаются,а то нет... не пойму от чего это зависит Название: Re: Два соединения к базе данных Отправлено: dio от Март 19, 2010, 11:11 Если есть возможность, погоняйте свой код с другой многопользовательской БД. Вполне возможно, что дело в Access'e.
Название: Re: Два соединения к базе данных Отправлено: Garfild от Март 22, 2010, 09:06 Если перед обновлением таблицы,т.е. методом setQuery() повторно открыть БД (1-е соединение), т.е. сделать
Код то все нормально обновляется. Только насколько это корректно??? Получается мы БД открываем два раза Название: Re: Два соединения к базе данных Отправлено: Garfild от Март 22, 2010, 16:28 Скажите пожалуйста, если я повторно открою базу это же ни к каким последствиям не приведет???
Название: Re: Два соединения к базе данных Отправлено: dio от Март 22, 2010, 17:01 Ну если только на производительности скажется при частом выполнении. Если у вас многопользовательское приложение, я все же советую разобраться почему не видны изменения, выполненные в другой сессии.
Название: Re: Два соединения к базе данных Отправлено: MoPDoBoPoT от Март 22, 2010, 18:23 Ты, случаем, в первом соединении явно транзакцию не начинаешь?
Просто если одно соединение сделать, то когда это содинение отражает таблицу, я не могу транзакцию использовать... поэтому и пришлось два соединения использовать Обоснуй (:Название: Re: Два соединения к базе данных Отправлено: Garfild от Март 22, 2010, 22:37 Ты, случаем, в первом соединении явно транзакцию не начинаешь? Просто если одно соединение сделать, то когда это содинение отражает таблицу, я не могу транзакцию использовать... поэтому и пришлось два соединения использовать Обоснуй (:У меня в tableView отображается таблица из БД, и когда я пытаюсь использовать транзакцию, почему-то вылетает предупреждение [Microsoft][Драйвер ODBC Microsoft Access]Задать атрибут сейчас нельзя QODBC3: Unable to disable autocommit Название: Re: Два соединения к базе данных Отправлено: Garfild от Март 22, 2010, 22:44 А вообще,вот пытаюсь использовать два соединения без транзакции....одно соединение отображает таблицу, а другое вставляет строчку в таблицу - та же фигня. Почему-то при первом добавлении,изменения не отображаются, а при последующий добавлениях все добавленные строчки(включая и первую добавленную) отображаются.. Может я чего-то не вижу...
Вот код: Код
Название: Re: Два соединения к базе данных Отправлено: Garfild от Март 23, 2010, 10:23 Кажется все дело в использовании cloneDatabase() для определения второго соединения
Вот нашел в Ассистенте: Цитировать Любые изменения, сделаные в соединении с базой данных через один объект QSqlDatabase, будут влиять на другие объекты QSqlDatabase, представляющие это же соединение. Вызовите cloneDatabase(), если вы хотите создать независимое соединение с базой данных на основе существующего. Значит лучше сделать так QSqlDatabase dbase = QSqlDatabase::addDatabase("QODBC","other"); dbase = QSqlDatabase(db); Правда при закрытии dbase,основное соединение db тоже закрывается Название: Re: Два соединения к базе данных Отправлено: Garfild от Март 23, 2010, 11:00 А если использую
Код то транзакцию не получается использовать - вываливается предупреждение Цитировать [Microsoft][Драйвер ODBC Microsoft Access]Задать атрибут сейчас нельзя QODBC3: Unable to disable autocommit |