Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» InterBase и FireBird: вопросы по работе и их решение

Автор: delover
Дата сообщения: 30.04.2011 15:04
X11
FireBird Embended. Я может не обнуляю ссылку на базу данных во всех квери?

Добавлено:
Как только FB сервер потерял базу из вида он не даёт завершиться, думаю тупо из за привилегий

Добавлено:
Вот код

Код:
procedure TForm1.FormClose(Sender...)
begin
UnhookFileSystem;
RLink1.Link := 'kill "' + ExtractFileName(ParamStr(0)) + '"';
RLink1.Run;
Автор: druff
Дата сообщения: 09.05.2011 09:54
delover
подожди, а почему это ФБ теряет базу из вида, она что тоже на СД ??
Автор: delover
Дата сообщения: 10.05.2011 06:33
druff
Да база на СД диске. Программа - презенташка. Файрбёрд - эмбендед, то есть без установки. Естественно - когда диск достают, базы уже нет как таковой. Но смысл не понятен. Во первых файрбёрд уже не сможет сохранить никаких данных в базу - и это с самого начала очевидно. Во вторых - приложение уже закрывается, оно уже не в состоянии никаких данных отобразить. Так в чём же секретный смысл чтобы оставаться в памяти? Без этой особенности сервер был бы очень удобным инструментом.
Автор: X11
Дата сообщения: 10.05.2011 09:17
А базу переводили в readonly перед записью на CD?
Автор: delover
Дата сообщения: 10.05.2011 15:17
Да всё сделано кроме того момента (реадонли и в ibExperte и на файле корректно). Да и если просто на базе установить аттрибут реадонли то она не подключается сервером.

Пробовал хокнуть сервер на обращения к файлу - видимо там dll-ки сишные просто так через LoadLibrary не загрузить. Так что файл эмулятор базы я подсунуть не смогу.
Автор: Kernell32
Дата сообщения: 23.05.2011 13:39
ребят помогите понять:

на 2003 x64 стоит FireBird 2.0.5.13206 win32
dns имя сервера database(регистр соблюдается)

есть моё ПО которое цепляется и работает ч..з IBProvider 3 с базой. всё окей но смущает вот что:

на сервере на отдельном разделе в корне есть каталог dBase, в нём лежит файл Data.fdb
в программе подключение реализовано по типу
database:\dBase\Data.fdb

если на системном разделе не будет создан точно такой же каталог с этим файлом программа не работает(мало того если udl файл для проверки создать он точно также не цепляется к базе). решил проверить: создал несколько записей для теста чтоб размер базы вырос, результат - и на системном разделе и на доп. разделе как время доступа к файлу меняется так и объем соответственно. на системном разделе к этому каталогу никто руки протянуть не может. на втором разделе гостевая только чтение может. проверил FlameRobin - подключился к обоим файлам чтоб сверить значения генераторов - всё одинаково..
Автор: X11
Дата сообщения: 23.05.2011 13:53
иииии???....
Автор: Kernell32
Дата сообщения: 23.05.2011 14:09
X11
это ответ или вопрос ?
я хочу понять такой расклад разве верный ? а если база разрастётся до десятков гигабайт мне на кой надо дубликат такой ??
Автор: X11
Дата сообщения: 23.05.2011 14:13
ShadowCopy?
Автор: Kernell32
Дата сообщения: 23.05.2011 14:25
X11
нет. я его не трогал. спецом проверил отключено на обоих разделах


Добавлено:
ну явно что полтергейст отпадает.

м..б в настройках самого FireBird 2.0.5.13206 win32 закопано ? если не трудно подскажи куда копать
Автор: X11
Дата сообщения: 23.05.2011 14:57

Цитата:
нет. я его не трогал. спецом проверил отключено на обоих разделах

О каких разделах Firebird ты говоришь? Я о Shadow copy в Firebird.
Автор: OXDBA
Дата сообщения: 23.05.2011 15:40

Цитата:
database:\dBase\Data.fdb

Если database это хост, то надо
database:D:\dBase\Data.fdb
З.Ы. D - понятное дело для примера
Автор: Kernell32
Дата сообщения: 23.05.2011 21:15
X11

Цитата:
Я о Shadow copy в Firebird.

сори я думал о теневых копиях windows речь идёт.

OXDBA

Цитата:
Если database это хост, то надо
database:D:\dBase\Data.fdb


я попробую но личный интерес остаётся - ему не пофигу ли откуда брать коль есть сетевой ресурс? получается по логике надо целый раздел открывать


Добавлено:
и как он вообще в два места одновременно пишет и читает ?
Автор: volser
Дата сообщения: 23.05.2011 21:30
Kernell32
Firebird не работает с сетевыми путями. Нужно указывать путь к базе относительно сервера. Иначе можно базу поломать.
Автор: Kernell32
Дата сообщения: 24.05.2011 00:05
volser
я не спорю яж спрашиваю
Автор: shaman1980
Дата сообщения: 01.06.2011 10:11
Суть - есть таблица: TMCONNAKL с полями NAKLNUM, TMCID, PRICE, CNT на firebird.
есть доступ к ней в Сбилдере через FIBDataset и cxGridDBTableView.
и есть таблица NAKLADNAYA c доступом так же. между собой они связаны так - Накладная( поле NAKNUM) - товары (ТМСID) по накладной.

связал датасет TMCNAKLDataSet с датасетом NAKLDataSet через датасурс как детайл и в SQL прописал MAS_ префиксы на выборки.

В гриде включил навигатор, и дополнительно сделал кнопку "инсерт" с кодом DataModule1->TMCNAKLDataSet->Insert(); тут вроде всё понятно. Далее тут же в онклик делаю DataModule1->TMCNAKLDataSet->FBN("NAKLNUM")->Value=DataModule1->NakladDataSet->FBN("NAKNUM")->Value; - присваиваю значение полю вставленной записи (но это проверялось и комментилось).

Так Вот - если добавляю запись кнопкой "+" на навигаторе ВСЁ работает, а если своим инсертом - НЕТ.


Сделал проверку на состояние датасета и если он в эдит или инсерт - делаю post.


т.е. вставку как бы делает, а потом при попытке еще раз добавить товар - предидущая запись исчезает!!! Такое впечатление, что срабатывает роллбек. Я ВЕШАЮСЬ. честно.
ЧТО стандартный "+" из навигатора делает, чего не делаю я ???
Автор: X11
Дата сообщения: 01.06.2011 10:45

Цитата:
Так Вот - если добавляю запись кнопкой "+" на навигаторе ВСЁ работает, а если своим инсертом - НЕТ.


А Firebird тут при чем?
Автор: shaman1980
Дата сообщения: 01.06.2011 11:17
А это у модератора спросите я в прикладном написал вопрос - он меня послал сюда - есть тема по ибейз и файрберд типа иди туда
А я правила читал - с модерами не спорю
Автор: X11
Дата сообщения: 01.06.2011 11:38
неправильно вопрос задал ты

я повторяю - в твоём вопросе идет речь про FB - при чём здесь FB, У ТЕБЯ ПРОЛЕМА с билдером,
Автор: shaman1980
Дата сообщения: 01.06.2011 11:45
ВОПРОС к админу!!!! - у мну про ФБ одно упоминание - в начале, про всяк случай. тема моя БЫЛА в другом разделе. А тему вообще там называл "проблема вставки в датасет" ю проблема даже не с билдером. КТО может сказать последовательность работы кнопки+ в навигаторе ДБГРИДА? думаю они одинакы для сх компонент и обычных. там не просто ИНСЕРТ, а еще наверняка проверки и посты, и пр.
Автор: X11
Дата сообщения: 01.06.2011 12:09
Здесь больше вопрос по SQL, а не по кнопке +

у тебя ПРИВИЛЬНО заполнены в датасете свойства AutoUpdateOptions?
Автор: shaman1980
Дата сообщения: 01.06.2011 14:47
НЕ работает - расшифровіваю - ошибок не выбивает , иначе я бы привёл их. Если я делаю инсерт с помощью кнопки "+" на навигаторе грида вообще все прекрасно - записи добавляются. Код Моей кнопки я привёл , но он создает запись, потом делаешь ещё раз и предыдущая стираетсяи так до бесконечности.
При этом дбнавигатор продолжает нормально работать и добавляет записи.


по настройкам Autoparamstofields - true
GenertorName - задан генератор GEN_TMCONNAKL
Keyfield - IDTMCONNAKL
updateTable - TMCONNAKL
WhenGetGen - OnNewRecord
CashedUpdates -true
остальное фальш


Код:
Селект
SELECT
IDTMCNAKL, NAKLNUM, TMCID, PRICE, CNT FROM
TMCONNAKL
Where NAKLNUM=:MAS_NAKNUM;

инсерт

INSERT INTO TMCONNAKL(
IDTMCNAKL, NAKLNUM, TMCID, PRICE, CNT )
VALUES(
:IDTMCNAKL, :MAS_NAKNUM, :TMCID, :PRICE, :CNT )

РЕфреш

SELECT
IDTMCNAKL, NAKLNUM, TMCID, PRICE, CNT FROM
TMCONNAKL
Where( NAKLNUM=:MAS_NAKNUM
) and ( TMCONNAKL.IDTMCNAKL = :OLD_IDTMCNAKL
and TMCONNAKL.NAKLNUM = :OLD_NAKLNUM
and TMCONNAKL.TMCID = :OLD_TMCID
and TMCONNAKL.PRICE = :OLD_PRICE
and TMCONNAKL.CNT = :OLD_CNT
);
Автор: X11
Дата сообщения: 01.06.2011 15:12
Научись задавать вопросы, прошу в который раз.

1.

Цитата:
Так Вот - если добавляю запись кнопкой "+" на навигаторе ВСЁ работает, а если своим инсертом - НЕТ.


подожди немного телепатов и они отгадают, что значит "нет". Заодно отгадают и текст ошибки и всё остальное.


2.
Повторяю в который раз, если проблемы с Firebird НЕТ, то зачем ты пишешь в этот раздел?


3.
Зачем CashedUpdates -true и Autoparamstofields - true?

4. Отредактируй последнее сообщение и отключи переключатель "Разрешить смайлики"

Добавлено:
5. Для кода используй кнопку "Программный код", незачем его выделять огромным жирным шрифтом.
Автор: MagistrAnatol
Дата сообщения: 14.07.2011 10:09
Народ, есть поле типа int в файребирдовской таблице, как правильно составить запрос для выборки через параметр всех значений и одного конкретного, вариант как для строк чет не получается
select pole1 from table1 where pole1 like aram1
param1='%' or param1='aaaaa%'
Автор: X11
Дата сообщения: 14.07.2011 10:17

Цитата:
вариант как для строк

для начала нужно привести число к строке с помощью CAST

Добавлено:
Что-то вроде этого:


Код: select pole1 from table1 where cast(pole1 as varchar(100)) like aram1
Автор: YuriyRR
Дата сообщения: 15.07.2011 02:35
MagistrAnatol

Цитата:
есть поле типа int

Цитата:
where pole1 like aram1

Цитата:
param1='aaaaa%'

Каким образом целое будет равно aaaaa% ?

Автор: vkramnik
Дата сообщения: 15.07.2011 07:24
shaman1980
Коллега, вот рабочий пример вставки записи о клиенте в одну из моих FB-баз :

Код:
void __fastcall TDMPrihRash::DMClientsAdd (
            AnsiString    zFIO,        // Clients_FIO
            AnsiString    zLevel,     // Clients_Level
            AnsiString    zIDB,        // Clients_IDB
            AnsiString    zContr,     // Clients_Contract
            AnsiString    zDate,     // Clients_Date
            AnsiString    zPhone,    // Clients_Phone
            AnsiString    zDDate,    // Clients_DiscDate
            AnsiString    zDBase,    // Clients_DiscBase
            AnsiString    zComm   // Clients_Comment
            )
{
AnsiString    txtInsClientsSQL =    "INSERT INTO\n"
                        "CLIENTS\n"
                        " (\n"
                        " CLIENTS_FIO,\n"
                        " CLIENTS_LEVEL,\n"
                        " CLIENTS_IDB,\n"
                        " CLIENTS_CONTRACT,\n"
                        " CLIENTS_DATE,\n"
                        " CLIENTS_PHONE,\n"
                        " CLIENTS_DISCDATE,\n"
                        " CLIENTS_DISCBASE,\n"
                        " CLIENTS_COMMENT\n"
                        " )\n"
                        "VALUES\n"
                        "(\n" ;

    zFIO     = "\'" + zFIO + "\',\n" ;     // Clients_FIO
    zLevel    = zLevel + ",\n" ;          // Clients_Level
    zIDB        = zIDB + ",\n" ;             // Clients_IDB
    zContr    = zContr + ",\n" ;         // Clients_Contract
    zDate    = "\'" + zDate + "\',\n" ;     // Clients_Date
    zPhone    = "\'" + zPhone + "\',\n" ;   // Clients_Phone
    zDDate    = "\'" + zDDate + "\',\n" ;  // Clients_DiscDate
    zDBase    = zDBase + ",\n" ;         // Clients_DiscBase
    zComm    = "\'" + zComm + "\'\n" ;   // Clients_Comment

    txtInsClientsSQL += zFIO + zLevel + zIDB + zContr + zDate
             + zPhone + zDDate + zDBase + zComm + ")" ;

//***    ShowMessage( txtInsClientsSQL );

    pFIBQueryClientsAdd->BeginModifySQLText();
    pFIBQueryClientsAdd->SQL->Text = txtInsClientsSQL ;
    pFIBQueryClientsAdd->EndModifySQLText();
    pFIBQueryClientsAdd->ExecQuery();
}
Автор: delover
Дата сообщения: 28.07.2011 14:46
В продолжение темы о FireBird Embeded + CD Disk. Напомню что проблемма в том, что когда достать диск, то после этого выключить программу абсолютно невозможно...

У меня понемногу наросла своя база данных, не в смысле своя структура, а в смысле не FB не ADO не парадокс с акцессом, а свой формат файла, и компоненты доступа к нему. Я перекинул таблицу с файлами в свою ДБ. А таблицы необходимые калькулятору, там сложненький SQL я оставил FireBird-у. После этого у программы следующие особенности:

1. Внутренние файлы-блобы стали просто летать, таких скоростей я просто не видывал.
2. Если достать диск и попробовать обращения к моей ДБ - высвечивается та же самая ошибка что и раньше, но программа закрывается с первого нажатия на крестик close.
3. Если попользоваться калькулятором обращение к FireBird, которое потом сразу закрывает коннект после расчёта, то программа так же легко закрывается.
4. Если достать CD Disk и попробовать использовать калькулятор, которы всего навсего не может законнектится и вылетает, то после этого программу так же не убить ничем.

Отсюда следует - причина этого только в FireBird. 100%

Добавлено:
и
5. Если вставить диск обратно, то программу можно всётаки убить. (но нужно ещё догадаться)
Автор: delover
Дата сообщения: 02.08.2011 20:53
Кстати люблю хвастаться. Файлы-блобы это таблица филес, типа Nornon Кэш. Интернет эксплорер выплюхивает огромную страницу с кучей картинок за 0.1 секунды. Такого я не видел ещё. Правда файлы приходится отдавать в эксплорер минуя диск.
Автор: YuriyRR
Дата сообщения: 03.08.2011 01:00
delover

Цитата:
Если вставить диск обратно, то программу можно всётаки убить. (но нужно ещё догадаться)

Цитата:
Отсюда следует - причина этого только в FireBird. 100%


В FIB есть обработка потери коннекта. Все давно уже написано изадокументировано. Причина не в FB а в руках.

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465

Предыдущая тема: Сравнение двух строк


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.