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

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

Автор: Odysseos
Дата сообщения: 10.01.2010 16:12
JohnSilver182

В "чистом" виде в IB/FB нет автоинкрементных полей, надо использовать генераторы и триггера/хранимые процедуры (вот здесь этот вопрос подробно рассмотрен).
Автор: JohnSilver182
Дата сообщения: 10.01.2010 17:14
А эта хрень работает после завершения транзакции ??????

CREATE TRIGGER TBI_CLIENTS FOR CLIENTS
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
NEW.CLIENT_ID = GEN_ID(NEWID, 1);
END
Автор: volser
Дата сообщения: 10.01.2010 19:01
JohnSilver182
В чем собственно вопрос? Что именно не ясно в статье?
Автор: JohnSilver182
Дата сообщения: 10.01.2010 20:10
volser
Я токо уточнить . Когда на клиенте делается (Я через FIB работаю) pFIBTransaction1.Commit;
только потом выполняется все триггеры Firebird ?



Автор: volser
Дата сообщения: 10.01.2010 21:46
JohnSilver182
Нет. Триггер выполняется сразу после вставки данных на сервере.
Автор: X11
Дата сообщения: 10.01.2010 22:29
Триггеры выполняются в момент вызова. И данные, отработанные в триггере, само собой сохраняются в момент подтверждения транзакции. А вот генераторы работают ВНЕ контекста транзакций.

JohnSilver182, тебе бы почитать немного о базах данных, о транзакциях, о Firebird. Например неплохая книга Хелен Борри. Ну и материалов на ibase.ru хватает.

Добавлено:
Правильнее. Триггерый - это хранимые процедуры, которые выполняются по событиям. Открой триггеры в программе IBExpert и сразу поймёшь, что к чему.
Автор: SIgor33
Дата сообщения: 11.01.2010 10:02
программа писалась для firebird 2.1 а при запуске 1.5 возникла такая ошибка
arithmetic exception, numeric overflow, or string truncation Cannot transliterate character between character sets.
исполюзуется стандартные sql команды select case trim CAST('30.12.1899' as date)
подскажите в чем может быть дело
Автор: X11
Дата сообщения: 11.01.2010 10:18
1. Базу нужно перевести под новую версию с помощью backup/restore.
2. Выполнить скрипт, обновляющий метаданные базы.
Сделали это?
Автор: JohnSilver182
Дата сообщения: 11.01.2010 11:09

Цитата:
программа писалась для firebird 2.1 а при запуске 1.5 возникла такая ошибка

Хе хе . Проблема не так проста.
Вы пришли в контору со своим софтом под firebird 2.1 а там с...ко гениальное творение уже чьёто ТОЛЬКО под 1.5 .

Я просто думаю запускать на местах из СВОЕЙ папки FireBird как приложение , только порт надо выбрать нестандартный .
Автор: X11
Дата сообщения: 11.01.2010 11:13
Как вариант - можно использовать локальные версии сервера.
Ну или устанавливать вторую копию, вот ссылки на инфу:
установка нескольких серверов firebird
Автор: JohnSilver182
Дата сообщения: 11.01.2010 11:45
X11

Я так понимаю в комбинации 1.5 +2.1 это сканает ???


Цитата:
sc.exe create Firebird_server_1 binpath= "Firebird_2_0_v1\bin\fbserver.exe -s" start= auto displayname= Firebird_server_1
sc.exe create Firebird_server_2 binpath= "Firebird_2_0_v2\bin\fbserver.exe -s" start= auto displayname= Firebird_server_2
Автор: X11
Дата сообщения: 11.01.2010 12:00
Ну я сам лично не пробовал. но точно знаю, что не только порты должны отличаться, но и имена служб (сервисов).
Автор: JohnSilver182
Дата сообщения: 11.01.2010 13:16
X11 а если Скажем я пришел первый раз в незнакомое место и там поставили FB 1.5 а я "- ВАХ , боюсь , боюсь"
По идее из СВОЕЙ папки сделать в АвтоRUN start fbserver.exe -a и все ??

Порты само собой разные .


Автор: volser
Дата сообщения: 11.01.2010 14:07
SIgor33
Что значит "а при запуске 1.5 возникла такая ошибка"? Опишите более подробно. Какая версия ODS базы?
Автор: SIgor33
Дата сообщения: 11.01.2010 14:41
JohnSilver182

Цитата:
cофтом под firebird 2.1 а там с...ко гениальное творение уже чьёто ТОЛЬКО под 1.5

совершенно верно именно так и произошло.
их софт пусть крутится как есть моя задача с помощью sql запроса забрать определенные данные (простая выгрузка) из 3 таблиц эта задача занимает пару минут.
вот вы предлагаете
Цитата:
сделать в АвтоRUN start fbserver.exe -a

на другом порте можно подробнее при этом не останавливать их 1.5
Автор: X11
Дата сообщения: 11.01.2010 14:53

Цитата:
их софт пусть крутится как есть моя задача с помощью sql запроса забрать определенные данные (простая выгрузка) из 3 таблиц эта задача занимает пару минут.


ну дык локальная версия разве не спасёт отца русской демократии?
Автор: JohnSilver182
Дата сообщения: 11.01.2010 15:10
Я мало работал с FireBird , но мне каца проще:
Скопировать со своей машин FireBird на флешку , сделать
http://forum.vingrad.ru/forum/topic-217811.html

Цитата:
В firebird.conf находим строчку:
RemoteServicePort = 3050

Я сделал RemoteServicePort = 3097
И запустить прямо с флешки (start fbserver.exe -a)
, указав в Подключении IP сервера типа : 127.0.0.1/3097





Добавлено:

Цитата:
совершенно верно именно так и произошло.

Что то знакомое до ужаса , Это в аптеках софт стоит под FB 1.5 ???
Автор: jonikDk
Дата сообщения: 11.01.2010 16:33

Цитата:
программа писалась для firebird 2.1 а при запуске 1.5 возникла такая ошибка

проблема в том что совместимость сверху вниз, а не наоборот. Если запускаешь на 1.5 то и проектировать базу и приложение надо было под 1.5
Автор: Odysseos
Дата сообщения: 12.01.2010 02:18
SIgor33

Вместо CAST('30.12.1899' as date) попробуй выполнить CAST('1899-12-30' as date) - и вообще, возьми за правило всегда, когда передаешь дату не как параметр, а напрямую, как строку - записывать ее именно в виде YYYY-MM-DD: это формат даты, не зависящий от локали, установленной на машине, на которой крутится sql-сервер, и это, кстати, относится ко всем sql-серверам, не только к IB/FB (локаль на сервере у клиента может отличаться от локали, установленной на машине разработчика - что и приводит к ошибке конверсии строки в дату).
Автор: SIgor33
Дата сообщения: 12.01.2010 08:21
спасибо всем!
Буду пробовать если что задам еще пару вопросов
Автор: Odysseos
Дата сообщения: 15.01.2010 00:04
SIgor33

Помогло?
Автор: SIgor33
Дата сообщения: 15.01.2010 08:25
Odysseos
Нет, проблема была в следующем когда я использовал функцию сравнения строки так например fam='иванов' была ошибка поменял на fam like 'иванов' все заработало.
Автор: Odysseos
Дата сообщения: 15.01.2010 09:46
SIgor33

На прямое сравнение вида fam='иванов' выдавалось "arithmetic exception, numeric overflow, or string truncation Cannot transliterate character between character sets.", а на сравнение fam like 'иванов' - не выдавалось??? Так не бывает. В то, что находиться Ивановы по первому сравнению не будут - это верю (потому что "=" - это жесткое сравнение, на точное соответствие). А вот в то, что будет вываливаться такая ошибка - неа
Автор: JohnSilver182
Дата сообщения: 15.01.2010 10:35
Hi ALL

В IB EXpert копирую таблицы а оно мне

Connecting to 127.0.0.1:P:\ProjectD\AvtoMoikaEx\Base\AVTOMOIKA.FDB... Successfull.
Connecting to 127.0.0.1:D:\base\AVTOMOIKA.FDB... Successfull.
==== EXCEPTION =====
Table "CLIENT" exists in the destination database already.

Я то знаю что таблица есть , но теперь мне если ее Дропать то все Форен кей навернуться
Автор: volser
Дата сообщения: 15.01.2010 10:54
JohnSilver182
Если табличка уже существует выгрузите данные в скрипт, а потом их загрузите.
Автор: SIgor33
Дата сообщения: 15.01.2010 13:17
Как в interbase реализовать конструкцию case? а то версия 5.5 ее не подерживает а клиента стоит именно она и менять не чего неходят
Автор: JohnSilver182
Дата сообщения: 15.01.2010 14:16

Цитата:
Если табличка уже существует выгрузите данные в скрипт, а потом их загрузите.

Как то немного через ж... но идея ясна .
Автор: OXDBA
Дата сообщения: 15.01.2010 16:32
SIgor33
Варианты навскидку:
1. Каждый запрос с case оформлять процедурой с кучей if then внутри;
2. Под каждый case писать процедуру, левым джойном цеплять ее к запросам вместо case;
3. Перенести case'ы в клиентскую часть;
P.S.
Да, обновите IB до 5.6, с 5.5 проблемы были.
Автор: EugeneBoss3
Дата сообщения: 16.01.2010 02:01
Знатоки, подскажите, плиз, возможно ли использовать FireBird для работы с таблицами DBase (*.dbf)? Проблема в том, что нужно перелить данные из dbf'ок в базу FireBird без использования BDE
Автор: SIgor33
Дата сообщения: 16.01.2010 09:29
OXDBA
спасибо понял

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465

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


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