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

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

Страниц: 1 ... 6 7 [8] 9 10 ... 14   Вниз
  Печать  
Автор Тема: Транзакции Interbase  (Прочитано 146017 раз)
sarbash
Гость
« Ответ #105 : Март 26, 2010, 22:08 »

И что, стесняюсь спросить, лежит в SYS$UIDS до того, как процедура туда сунется? там же пусто изначально...
Всё же мне не понятно - зачем всё так усложнять?

P.S. А чем не устраивает такая банальность, как

Код:
as
begin
  if (new.id is null) then
    new.id = gen_id(gen_r_id,1);
end

Непонимающий К чему весь этот изврат?
Записан
gigabyte
Гость
« Ответ #106 : Март 26, 2010, 22:19 »

Эту логику я скопировал из одного очень хорошего приложения видимо ее автор имел очень веские причины чтоб так написать,а в той таблице 2 пола название и значени.
Одним словом изврат извртом а сделал через простоц генератор потому что итак не пошло на том ще месте остановилось IsNull - true и пустой QVariant
« Последнее редактирование: Март 26, 2010, 22:34 от gigabyte » Записан
sarbash
Гость
« Ответ #107 : Март 26, 2010, 22:31 »

автор, видать, большой извращенец... хотя, куда там мне, со свиным рылом да в калашный ряд...
А подумать, прежде чем тупо копировать что-то откуда-то, нужно ли оно так?
У тебя проблемы в базе, ты попробуй в эксперте запрос сделать и посмотри, работает оно там или нет? у меня вот ничего не идёт с твоим скриптом, одни проблемы. То базу вручную создавай, то таблицы не все, то процедуру ты не дал. Сдается мне, драйвер тут вообще ни при чём. Вот сам подумай, что брать из пустой SYS$UIDS? NULL и получишь.
В общем, народ, что, больше никому не нужен этот RETURNING? Подожду отзывов от других.
И на тест надо было брать 100%-работающий пример, а ты взял какой-то глюк, который и сам не тестил у себя, и мне даёшь.
Несерьёзно как-то, извини...
Записан
gigabyte
Гость
« Ответ #108 : Март 26, 2010, 22:37 »

Это ты канечно извини не хотелось переходить на личности, то если у тебя не хватает опыта протитать тот триггер и соответственно добавить одну недостающую запись в таблицу. То тогда есессно ты мены извини. Я к стати только что проповал на простом генераторе проделать то же самоэ. НЕ ИДЕТ
Код:
/******************************************************************************/
/***               Generated by IBExpert 26.03.2010 21:36:59                ***/
/******************************************************************************/

SET SQL DIALECT 3;

SET NAMES NONE;



/******************************************************************************/
/***                                 Tables                                 ***/
/******************************************************************************/


CREATE GENERATOR GEN_REPORTS_ID;

CREATE TABLE REPORTS (
    REPORTID      INTEGER NOT NULL,
    REPORTNAME    INTEGER,
    REPORTSOURCE  VARCHAR(255),
    REPORTBODY    BLOB SUB_TYPE 1 SEGMENT SIZE 16384,
    REPORTPARAMS  VARCHAR(255)
);




/******************************************************************************/
/***                                Triggers                                ***/
/******************************************************************************/


SET TERM ^ ;


/******************************************************************************/
/***                          Triggers for tables                           ***/
/******************************************************************************/



/* Trigger: REPORTS_BI */
CREATE OR ALTER TRIGGER REPORTS_BI FOR REPORTS
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  IF (NEW.REPORTID IS NULL) THEN
    NEW.REPORTID = GEN_ID(GEN_REPORTS_ID,1);
END
^


SET TERM ; ^



/******************************************************************************/
/***                               Privileges                               ***/
/******************************************************************************/

Так ты вроде хотел?

Может ты свой код скинеш и пример для теста?
Записан
gigabyte
Гость
« Ответ #109 : Март 26, 2010, 22:55 »

Так же спешу уведомить что вобравши ваш пример без использования QtFirebirdsql а именно:
Код:
#include "core/ibpp.h"
#include <iostream>
#include <string>
int main(int argc, char *argv[])
{
    IBPP::Database db1;
    db1 = IBPP::DatabaseFactory("localhost", "D:\\bookstore.fdb", "sysdba", "masterkey");
    db1->Connect();
    IBPP::Transaction tr1 = IBPP::TransactionFactory(db1,
                            IBPP::amWrite, IBPP::ilConcurrency, IBPP::lrWait);
    tr1->Start();
    IBPP::Statement st1 = IBPP::StatementFactory(db1, tr1);
    st1->Execute("INSERT INTO REPORTS(REPORTID,REPORTNAME) VALUES(NULL,11) RETURNING REPORTID");
    tr1->Commit();

    int test_id = -1024;
    st1->Get(1, test_id);
    std::cout << "returned id is " << test_id << std::endl;
    db1->Disconnect();
    return 0;
}
немного подкоректировав значение test_id провел опыт !!!!! С ИСПОЛЬЗОВАНИЕМ ПРОСТЫХ ГЕНЕРАТОРОВ !!!! и в ответ получил есессно результат -1024. который был - неправильным.
И еще меня бы очень интересовало на чем пишите у меня к примеру :
Qt 4.6.0+mingw 4.4.0+Firebird 2.1
Записан
sarbash
Гость
« Ответ #110 : Март 26, 2010, 23:31 »

Вы в IBPP не вносили изменений, случаем? А драйвер патченный пересобирали? А не забыли его скопировать в $$[QT_INSTALL_PLUGINS]/sqldrivers? И зачем вставляете NULL в REPORTID?

У меня всё работает!!! И ваш последний пример с "CREATE TABLE REPORTS" работает!
Не знаю, что я делаю не так, но у меня всё работает...
Всё, жду отзывов от других.

P.S. Приаттачил работающий пример. Разбирайтесь в своей консерватории, что там у вас не так. Улыбающийся
Чуть подчистил аттач.
В строке db.setDatabaseName("TEST.FDB"); укажите полный путь к базе, где она у вас будет, иначе не приконнектится.
« Последнее редактирование: Март 26, 2010, 23:40 от sarbash » Записан
gigabyte
Гость
« Ответ #111 : Март 26, 2010, 23:42 »

Цитировать
И зачем вставляете NULL в REPORTID?

Вообще-то без разницы вставляю я туда нул или система его вставляет по умолчанию если я опускаю этот параметр.
Не катит оно.
Ладно раз вы ждете откликов от других то не буду вам мешать.
Но этот патч не работает по крайней мере у меня и проблема там именно в IBPP
Записан
sarbash
Гость
« Ответ #112 : Март 27, 2010, 01:25 »

Цитировать
И зачем вставляете NULL в REPORTID?

Вообще-то без разницы вставляю я туда нул или система его вставляет по умолчанию если я опускаю этот параметр.
Согласен абсолютно. Из принципа в insert-е передал NULL и получил на выходе реальный ПК.
У вас какой-то неправильный IBPP... Вы мне совершенно не мешаете, зря вы так думаете. Просто хотелось услышать, как у других патч прижился...
Я использовал последний архив ibpp с сайта, а именно "ibpp-2-5-3-1-src.zip" и последнюю ревизию драйвера из свн гуглокода.
В исходники IBPP никаких изменений не вносилось, правки касались только одного файла драйвера - "qsql_ibpp.cpp".
В последнем аттаче я прикрепил работающий пример, которым я проверял, всё ли в порядке. Как ни странно, всё нормально у меня работает...
Записан
gigabyte
Гость
« Ответ #113 : Март 27, 2010, 09:07 »

Я сприциально вчера пересобрал из старого архива ibpp-2-5-3-1-src.zip (размер 152.882 байт) начисто все. Результат тотже, шас попробую скачать свежий с их сайта может они что-то там подправили а меня в извесность не поставили Улыбающийся
Записан
sarbash
Гость
« Ответ #114 : Март 27, 2010, 10:54 »

Ничего не понимаю... у меня такой же IBPP.
Драйвер QFIREBIRD: чекаут от March 13, 2010: 0.17
Qt: qt-sdk-win-opensource-2010.01.exe
MinGW к нему отдельно не прикручивал, всё использую из комплекта.
Firebird: 2.1.3  (Windows Build) (Firebird-2.1.3.18185_0_Win32.exe)
WinXP Prof SP2 Russian.

P.S. Кстати, вы перед пересборкой qsqlfirebird, mingw32-make clean делаете? Я в общем, ничего не понимаю, в чём может быть проблема... Версия Firebird?
« Последнее редактирование: Март 27, 2010, 11:00 от sarbash » Записан
gigabyte
Гость
« Ответ #115 : Март 27, 2010, 11:14 »

make clean
delete
fsck
format
Улыбающийся
Все перепробовал
Записан
sarbash
Гость
« Ответ #116 : Март 27, 2010, 18:53 »

Добавил issue, если вдруг случайно кого-нибудь заинтересует функционал...
issue 9

(Что-то я не разобрался, как настройки issue поменять.)
Записан
Tonal
Гость
« Ответ #117 : Март 30, 2010, 08:29 »

Эту логику я скопировал из одного очень хорошего приложения видимо ее автор имел очень веские причины чтоб так написать,а в той таблице 2 пола название и значени.
А ты в курсе, что приведённая тобой процедура при одновременном вызове из параллельных транзакций будет генерить одинаковые номера?
Или это так и задумывается? Улыбающийся
Записан
gigabyte
Гость
« Ответ #118 : Март 30, 2010, 09:03 »

Когда
Эту логику я скопировал из одного очень хорошего приложения видимо ее автор имел очень веские причины чтоб так написать,а в той таблице 2 пола название и значени.
А ты в курсе, что приведённая тобой процедура при одновременном вызове из параллельных транзакций будет генерить одинаковые номера?
Или это так и задумывается? Улыбающийся
Когда до этого дойдет - подправлю. А пока для тестов сойдет
Записан
gigabyte
Гость
« Ответ #119 : Март 30, 2010, 09:20 »

Когда
Эту логику я скопировал из одного очень хорошего приложения видимо ее автор имел очень веские причины чтоб так написать,а в той таблице 2 пола название и значени.
А ты в курсе, что приведённая тобой процедура при одновременном вызове из параллельных транзакций будет генерить одинаковые номера?
Или это так и задумывается? Улыбающийся

Да к стати конкретнее можно на примере как это оно даст одинаковый номер а то я чото запускаю паралельно 2 трансакции а они - собаки этакие ЖДУТ одна другую и пока я не закомичу предыдущую другая данные не получает. Улыбающийся А после комита есессно - появляются правильные циферки.
Записан
Страниц: 1 ... 6 7 [8] 9 10 ... 14   Вверх
  Печать  
 
Перейти в:  


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