Russian Qt Forum
Май 22, 2024, 20:08 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 ... 7 8 [9] 10 11 ... 14   Вниз
  Печать  
Автор Тема: Транзакции Interbase  (Прочитано 146666 раз)
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #120 : Март 30, 2010, 10:42 »

>>а они - собаки этакие ЖДУТ одна другую и пока я не закомичу предыдущую другая данные не получает
Загадка:
Куча народу зависла в очередь в кассы, т.к. одна из касирш не завершила транзакцию ( неважно почему) и пошла на горшок.
Вопрос, что будет программеру, который выбрал такой режим транзакций?

Улыбающийся
Записан

Юра.
gigabyte
Гость
« Ответ #121 : Март 30, 2010, 11:49 »

А нифига не будет потому что в реальной ситуации эта трансакция отработает за доли секунды и нихто этого не заметит
Записан
Tonal
Гость
« Ответ #122 : Март 30, 2010, 19:48 »

Не ждут - просто выполняются последовательно.
При параллельном выполнении все, кроме первой получат отлуп.

Ну и сценарий весьма прост:
 1. Одновременно стартуют 2 транзакции.
 2. Обе выполняют первый селект
  SELECT VAL FROM SYS$UIDS WHERE ID = :UIDNAME INTO :TEMPUID;
и получают одно и тоже число.
 3. Первая выполняет
  UPDATE SYS$UIDS SET VAL = :TEMPUID + 1  WHERE ID = :UIDNAME;
вторая на этом обламывается.

Для того, чтобы увидеть, нужно просто запустить одновременно несколько клиентов с разных машин. Или на одной с несколькими процессорами/ядрами.
Клиентам достаточно просто в цикле звать эту процедуру.
Записан
sarbash
Гость
« Ответ #123 : Март 31, 2010, 10:30 »

Короче, генераторы рулят.
Никто мой патч не проверял, кроме gigabyte?
Записан
gigabyte
Гость
« Ответ #124 : Март 31, 2010, 12:44 »

Видимо нет Грустный
Записан
sarbash
Гость
« Ответ #125 : Апрель 01, 2010, 15:46 »

Предлагаю рассмотреть необходимость и возможность реализации именованных транзакций.
Это пожелание.
« Последнее редактирование: Апрель 02, 2010, 08:02 от sarbash » Записан
sne
Гость
« Ответ #126 : Май 19, 2010, 13:59 »

axax, прежде всего хочу выразить благодарность за хорошее рабочее решение Улыбающийся
Далее, хотел бы спросить, при открытии несуществующей БД, qtfirebirdibppsqldriver успешно меня обламывает даже не пытаясь создать новую БД.
Хотелось бы увидеть поведение подобное sqlite плагину, который создает новую БД.

Что-то вроде:
Код:
        dp->iDb->Connect();
    }
    catch (IBPP::Exception& e)
    {
        if (db.indexOf(QRegExp(QLatin1String("[\\\\/]"))) != -1
            && !QFile::exists(db)) {
            // possibly file path
            try {
                dp->iDb->Create(3);
                dp->iDb->Connect();

                setOpen(true);
                return true;
            }
            catch (IBPP::Exception& e) {
                setOpenError(true);
                dp->setError("Unable to create and connect", e, QSqlError::ConnectionError);
                return false;
            }
        }

        setOpenError(true);
        dp->setError("Unable to connect", e, QSqlError::ConnectionError);
        return false;
    }

Очень надеюсь на ответ, будет-ли введен пордобный функционал в следующие версии и/или есть какой другой способ создания несуществующего файла БД?
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #127 : Май 19, 2010, 14:17 »

>>Хотелось бы увидеть поведение подобное sqlite плагину, который создает новую БД.
это особенность самого SQLite, драйвер тут не причём.
Записан

Юра.
sne
Гость
« Ответ #128 : Май 19, 2010, 15:25 »

lit-uriy, я понимаю, но иначе БД не создать впринципе. Не подключать же ibpp к своему проекту еще раз, если используешь плагин уже  сним Улыбающийся

Если есть иные варианты создания базы, помимо ее восстановления из бэкапа, внимательно слушаю.
Записан
crossly
Гость
« Ответ #129 : Май 19, 2010, 15:37 »

люди издревле используют isql
Записан
sne
Гость
« Ответ #130 : Май 19, 2010, 16:19 »

люди издревле используют isql
Этот способ немногим лучше gbak, т.к. предполагает поиск всех запущеных IB серверов (а их может быть не один), определение путей и вызов с перенаправлением потока ввода/вывода...
Записан
const
Гость
« Ответ #131 : Май 25, 2010, 09:47 »

Хотел спросить про создание базы, но sne меня опередил. Улыбающийся . Теперь по существу.
В таблицу базы:
Код:
CREATE TABLE Journal
( IDX INTEGER NOT NULL PRIMARY KEY,
  DTTM TIMESTAMP NOT NULL,
  WHOSEND VARCHAR(10) NOT NULL,
  NAME VARCHAR(50) NOT NULL,
  MESS VARCHAR(50) NOT NULL);

В своей проге пишу данные таким запросом:
Код:
"INSERT INTO Journal (DTTM,WHOSEND,NAME,MESS) VALUES ('NOW',:WHOSEND,:NAME,:MESSAGE)"
Всё нормально записывается.

Потом читаю
Код:
"select DTTM, WHOSEND, NAME, MESS from JOURNAL ORDER BY IDX ASC"

При выполнении
Код:
query.value(0).toDateTime().toString("dd.MM.yy hh:mm:ss")
Он дату читает правильно, а с временем творится какая то фигня.
В большинстве случаев он возвращает 00:00:00 (ну то есть например "25.05.10 00:00:00"). Но иногда (1/50 записей, случайно) он возвращяет правильное время.
При этом если базу открыть EMS Sql manager-ом и принудительно из него поменять какое-нибудь поле дата-время, то в программе оно прочитается правильно (проверяли опытным путём вместе со sne).
Подскажите в какую стророну копать, а то уже замучался... Моя прога? QT? firebirdsqlibppdriver? Firebird?
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #132 : Май 25, 2010, 11:40 »

const, ну а в БД пишется правильно? что реально записывается?
попробуй с помощью демки sqlbrowser, записать/прочитать
Записан

Юра.
const
Гость
« Ответ #133 : Май 26, 2010, 16:21 »

значение времени в базу формирует сам сервер (см. запрос.), при этом если базу открыть EMS SQL Manager-ом то читаются корректно И дата, И время. А в моей программе время нулями...
Записан
const
Гость
« Ответ #134 : Июнь 30, 2010, 11:19 »

Мда, вопрос про время так и висит открытым. Толи люди все в отпусках (везёт :-( ) толи просто не знает никто, толи пишу не туда.
Записан
Страниц: 1 ... 7 8 [9] 10 11 ... 14   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.07 секунд. Запросов: 20.