Quantcast
Channel: SQL.ru: Firebird, InterBase
Viewing all 1677 articles
Browse latest View live

как делить firebird с чужими?

$
0
0
появился у нас клиент, который хочет наше ПО: Delphi-2007 + FIB + Firebird-2.1
при этом сети ему не надо, всё на одной машине - дополнительная программа для диспетчера автопарка.
Мы посмотрели эту машину, а там уже установлен СКАУТ - Эксплорэр 3.5.16.2 и соответственно к нему Firebird-2.5.02674_1_Win32.
Вопрос в том, что мы ещё ни разу не делили ни с кем службу Firebird. Работали себе по тихому сами на этом сервере, а тут вот такое. Нашу версию БД 2.1 мы конечно поднимем под 2.5 - это не корень проблемы. Эти СКАУТЫ постоянно дистанционно чего-то обновляют через Инет, перезагружают систему и все такое, при этом могут и не не предупредить пользователей-диспетчеров. Регламент, конечно можно выработать при совместной договорённости. А вопрос у меня такой - можно ли нам работать вместе со скаутами на одном сервере или мне просить у клиента выделить нам отдельный компьютер? Если имели опыт ответьте.

Как заполнить одну таблицу данными из второй таблицы

$
0
0
Здравствуйте. помогите плиз не могу никак решить как составить запрос.
есть 2 таблицы
1 таблица id1,name1,massa1 (range)
2 таблица id2,kodid2,name2,massa2 (box)
таблицы сопоставимы по полям id1-kodid2.

Нужно в первую таблицу в massa1 занести сумму столбца massa2, сгруппированному по kodid2
Как сгруппировать разобрался:
select KODID2,sum(MASSA2) from BOX group by KODID2 , а вот заполнить первую не получается.
Есть еще одно условие INSERT не подходит , т.к ID1 и NAME1 не меняется , а у них надо менять тока massa1.

пробовал
update range , (select sum(massa2) as massa from box group by kodid2) tt set range.massa1=tt.massa where range.id=tt.kodid2;

выдает ошибку Invalid token.Dynamic SQL Error.SQL error code = -104.Token unknown - line 1, column 14. Ругается на запятую после "," после range. Возможно FIREBIRD так не может.

update range set massa1=(select sum(massa2) from box as BB group by kodid2) where (range.id1=BB.kodid2)

Кричит что нет поля BB.kodid2

InterBase - не подключается к файлам в сети

$
0
0
Добрый день.

Пробую по JDBC (interclient) подключиться к файлу (БД), но получаю ошибку:
java.sql.SQLException: No suitable driver found for jdbc:interbase:\\192.168.100.209:8080\Базы\test\2016\162\111.ibs
	at java.sql.DriverManager.getConnection(DriverManager.java:689)
	at java.sql.DriverManager.getConnection(DriverManager.java:247)
	at com.company.Main.main(Main.java:27)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)


Что примечательно:
если файл находится в локальном доступе (к примеру D:\111.ibs), то подключение проходит успешно, можно работать.

В чем причина понять не могу, косяк interclient?

переезд с fb 2.0 на 2.5 или на 3

$
0
0
Планирую перевод проекта с fb 2.0 на 2.5 или сразу 3.0
Как это делать у себя на компе - читал в релизнотах
Но заранее хочу понять как мне это потом делать на компах клиентов ? Можно ли и как правильнее это автоматизировать ?

Кейс 1:
Клиент к которому можно приехать, забэкапить базу на прежнем fb, удалить прежний, поставить новый, рестор
Тут если что-то не получится - все можно вернуть назад. Можно прежний не удалять, а просто остановить если нужно оставить теже порты для работы. Так ?

Кейс 2:
Клиент к которому можно только выслать инсталятор обновления. И даже по удаленке к нему не зацепиться. Тут как ?

Базы разные от 100 до 600Мб




--
понимать что ты чего-то не знаешь - мудро,
понимать что ты даже не знаешь, что чего-то не знаешь - печально,
но это факт, который таки очень полезно понимать :-)

приложения-клиенты не могут подключиться к серверу FB в другой подсети

$
0
0
Имеется подсеть, например, 120.20.150.* в которой был сервер с FB 1.5 (физический Win Serv 2003) и все клиенты без проблем подключались. Сервер FB 1.5 перенесли на 120.15.75.* (виртуальный Win Serv 2012), теперь к нему невозможно подключиться , типа connection not established... Пингуется этот сервер отлично с клиентских ПК. На порт 3050 в фаерволе добавлено исключение для всех программ. Я не силен в сетях и портах, поэтому прошу помочь - как определить, кто блокирует соединение? Сервер, или по пути на железном уровне (фаерволы в коммутаторах)? Можно ли определить на сервере, был ли запрос на порт 3050? Завтра попрошу коллег подключится в их подсети 120.15.75.*

п.с. Сеть корпоративная, новые веяния, сервер перенесен по требованию безопасников ... Все манипуляции также проводил с IBExpert, в тулзе проверки соединения работает только пинг. 21 порт, ftp - тоже самое, нет коннекта.

Опять про округление

$
0
0
Доброго времени суток.

Помогите понять причину, на будущее?
Есть ПО с небольшими расчетами. Считаем в процедурах на сервере. Точность не для космических полетов, но нужна.
Когда-то перешел на rfunc, из-за его функции calcexpr - это при тестах решало проблему с округлением 0,5 (нормально считает, не думает, что 0.5 - это 0.49999999).
Сегодня натолкнулись на проблему в ROUND, и во встроенной функции, и в той, что в rfunc:

select round(226598.205, 2) from RDB$DATABASE

возвращает верно, 226598.21 ок

select calcexpr('79562.7'||' + ('||coalesce(285.7, 0)||' * '||coalesce(514.65, 0)||')', '') from RDB$DATABASE

226598.205 - да, все ок, так и выходит

но если объединить:
select round(calcexpr('79562.7'||' + ('||coalesce(285.7, 0)||' * '||coalesce(514.65, 0)||')', ''), 2) from RDB$DATABASE

- т.е., вычислить это значение, и сразу округлить, то почему-то, возвращает 226598.20, а не 226598.21 ((

Обрамил calcexpr cast as Numeric(18,10) - начало считать правильно. Но почему сразу то не считает, ведь поэтапные проверки - все расчеты верные. И что-то мне подсказывает, что неправильно так делать. Или правильно?

Спасибо!

Группировка и домен D_BOOLEAN

$
0
0
Добрый день!
На не совсем приятные грабли наткнулся. Есть таблица, в которой несколько полей могут принимать только логические значения. Поэтому в качестве домена для них указан D_BOOLEAN, поля на основе которого FiB'ы трактуют как логические. И в Grid'ах он отображаются соответственно, если выборка идет напрямую из таблицы или простого представления на основе таблицы.
Если же добавить в представление группировку (не затрагивающую эти поля агрегатными функциями), то теряются исходные типы полей и заменяются нечто из серии RDB$xxxx с типом INTEGER.
Попытки явно указать тип значения через cast желаемого результата не дают.

Почему так и ЧЯДНТ?
FB 2.5.7

SQLVar TableAlias

$
0
0
Есть запрос, в котором одна таблица джойнится дважды. Пусть будет типа такого
SELECT
  mod1."NAME",
  mod2."NAME"
FROM
  moduls mod1,
  moduls mod2

Вопрос - можно ли как-то получить алиасы таблиц для двух полей? Сами таблицы можно получить через
SqlVar.RelName
но для этих полей RelName одинаков. Можно ли как-то выкусить именно алиасы таблиц

Сервер Interbase 2009/XE3

С уважением, Vasilisk

Изменить тело в процедурах

$
0
0
Коллеги, приветствую!
Просьба подсказать есть ли кого готовые решения или мысли как массово изменить тело процедур?
Задача следующая:
Требуется провести аудит по использованию процедур при формировании отчетов.
В БД насчитывается около 700 процедур для отчетов.
Первое, что пришло в голову это добавить строчку "insert into..." в тело процедуры после begin, но каждую править руками трудозатратно.
Спасибо.

interbase 6.0

$
0
0
InterBaseCS_LI-V6.0.2.tar
InterBaseSS_LI-V6.0.2.tar
IB60_0_0_627.Win32

Может ли кто выложить исходники?

Подзапрос с сортировкой

$
0
0
Здравствуйте. Изучаю SQL самостоятельно. Придумал задачку. Как её можно реализовать теоретически? Вот такая беда. Допустим, необходимо реализовать отчет в виде таблице. Вертикальном столбике написаны ФИО учеников, а в горизонтальном столбике их оценки. Необходимо на пересечении вывести кол-во оценок.

Лучше будет гнать по SELECT COUNT(*) в каждую ячейку или как-то можно использовать временную таблицу?

Сервером заменяется тип поля при группировке в представлении

$
0
0
Добрый день!
Несколько дней назад уже пытался задать этот вопрос, но, похоже, зря сформулировал его с упором в сторону приложения. Меж тем, ноги растут к серверу.
Итак, создаем, таблицу:
CREATE TABLE A (
    ID    D_INTEGER NOT NULL /* D_INTEGER = INTEGER */,
    FLAG  D_BOOLEAN /* D_BOOLEAN = INTEGER CHECK (VALUE BETWEEN 0 and 1) */
)

На ее основе создаем простое представление:
CREATE OR ALTER VIEW VIEW_SIMPLE(ID, FLAG) 
AS
select id, flag from a;

Смотрим типы полей (я смотрю в IBExpert) и видим D_INTEGER и D_BOOLEAN. Теперь создаем аналогичное представление, но с группировкой (для упрощения не используем даже агрегатных функций, хотя с ними результат аналогичен):
CREATE OR ALTER VIEW VIEW_GROUP(ID, FLAG)
AS
select id, flag from a group by 1,2;

На выходе получаем поля с типами вида RDB$24155, RDB$24156. Но почему?
Я мог бы понять, если бы типы были заменены для полей, для которых применяются агрегаты типа SUM, но в данном случае диапазон значений полей не может меняться!
FB 2.5.7.

Правильный размер varchar поля для набора символов UTF8?

$
0
0
При создании varchar поля (UTF8) какой более правильный размер будет: 8 или 7, 256 или 255, 1024 или 1023?
Почему возник такой вопрос. Потому что максимальный размер можно указать не 8192, а 8191, т.е. на 1 байт меньше.

Перенос данных базы security2.fdb -> security3.fdb при переходе FB 2.1 -> FB 2.5 -> FB 3.0

$
0
0
Всем привет!

Появилась у меня задача перехода с версии FB 2.1.3 на последнюю доступную версию, FB 3.0.2 (обе установлены на Windows Server 2003 R2). Как промежуточную использую FB 2.5.7, установленную на рядовом компьютере с Win 10 x64. Все FireBird'ы установлены 64-разрядные.
Базы перегнали используя backup-restore из 2.1 в 2.5, затем в 3.0. Проблемы были, но решились удалением/правкой некорректных данных в самих базах. Базы заработали в FB 3.0, все есть.

Далее требуется перенести логины и пароли пользователей, которые хранятся в security2.fdb (около 300 пользователей)
Перегнал базу используя backup-restore на сервер с FB 3.0 (в тестовый каталог), подключился с помощью IBExpert, проверил что данные на месте и всё выглядит так же как и на 2.5 и 2.1
Нагуглил тему на этом форуме, в ней было сообщение со скриптом
затем нашел how-to-migrate-copy-users-from-security2-fdb-firebird-2-5-to-security3-fdb
Так понял этот скрипт предназначен для isql из набора самого FireBird, нашел информацию о том как запустить этот скрипт, сохранил его в файл и адаптировал (скорректировал пути).
Проверил что восстановленная мной база security2.fdb имеет ODS=12.0
С первого раза не вышло т.к. я указал рабочую базу security3.fdb и получил отлуп что нет таких прав у пользователя SYSDBA, выключив сервер FB (остановил службу) скопировал базу в тестовый каталог, запустил службу обратно, скорректировал путь до целевой базы security3.fdb, запустил скрипт и думал что уже всё, но нет... получил ошибку:

ошибка
SQL> input C:\DB\migration.sql;
Database: 'C:\DB\newsecurity3.fdb', User: SYSDBA
Statement failed, SQLSTATE = 22001
arithmetic exception, numeric overflow, or string truncation
-string right truncation
-expected length 32, actual 96
-At block line: 56, col: 5
After line 3 in file C:\DB\migration.sql


Поглядев что у меня в базах через IBExpert увидел разницу в объёмах, отведенных под данные, понял о чем речь в ошибке
security2.fdb скриншот
security3.fdb скриншот

Уважаемые, подскажите как можно выйти из этой ситуации? Может я что-то пропустил или не понимаю?

blob binary -> varchar binary

$
0
0
FB 2.5.5
create procedure test
returns (
  res varchar(100),
  b blob sub_type binary,
  s varchar(100) character set binary)
as
begin
 s = x'013000AA13FF';
 b = x'013000AA13FF';
 if (b=s) then begin
  res = 1;
  suspend;
 end
 s = b;
 if (b=s) then begin
  res = 2;
  suspend;
 end
 b = s;
 if (b=s) then begin
  res = 3;
  suspend;
 end
 s = b;
 if (b=s) then begin
  res = 4;
  suspend;
 end
end

Получаю значения res=1,3,4. При присвоении бинарной строке значения бинарного блоба (s=b) "нечитаемые" символы заменяются на точку. Почему ведь строка-то тоже бинарная! Как правильно засунуть значение из бинарного блоба в бинарную строку?

Чудное API

$
0
0

hvlad
ты серьёзно считаешь свои высеры (типа "кривого API, спроектированного без
применения мозга") критикой ?

Я не знаю каким должен быть мозг, чтобы сделать это:
firebird\output_x64>fbsvcmgr.exe localhost:service_mgr expected_db test user sysdba 
password bbb action_db_stats dbname test2

Database "C:\USERS\SD\MY DOCUMENTS\FIREBIRD\OUTPUT_X64\TEST2"
Database header page information:
........
firebird\output_x64>fbsvcmgr.exe localhost:service_mgr expected_db test user sysdba 
password bbb action_backup dbname test2 bkp_file aaa
Missing security context for C:\USERS\SD\MY DOCUMENTS\FIREBIRD\OUTPUT_X64\TEST2
-Exiting before completion due to errors


И таки да, это тот же уровень, что и "дурить разработчиков - плохая идея".

Posted via ActualForum NNTP Server 1.5

Изменения в FbRemoteEvent

$
0
0
Доброго времени суток.

Прошу помощи в следующем - проект с FB 1.5 переехал на 2.5. Драйвера для .NET и DDEX обновились до последней версии соответственно.

Ранее в проекте был примерно такой код который соответственно перестал собиратся.

FbRemoteEvent revent = new FbRemoteEvent(fb);
revent.AddEvents(new string[] { "new_g" });

revent.RemoteEventCounts += new FbRemoteEventEventHandler (EventCounts); 

revent.QueueEvents();



Погуглив я нашел хоть какие то объяснения - https://www.tabsoverspaces.com/233621-changes-in-new-fbremoteevent/ и переписал конструктор и обработчики событий, но вот метода revent.AddEvents в новой версии драйвера уже нет и не очень понятно на что его заменять. Может быть кто то сталкивался с похожим? Может быть какой то док есть?

Спасибо.

Исключить выходные дни

$
0
0
Здравствуйте.
Есть процедура
update uslug.DB
set rab = '1'
where (drab not in  'Выходные дни')


Каким образом можно исключить выходные? только циклом, либо есть еще встроенные функции?

Медленная работа функции LoadBlobFromFile

$
0
0
Привет всем! Скачал UDF с сайта Ibase.ru библиотеку с данной функцией (спасибо KDV). Функции зарегистрировал, все работает. Но!
Имеем два сервера:
Сервер 1:
Intel(R) Xeon(R) CPUE31240 3.3GHz, 8 ядер
16Гб, рэйд 1
Вин-сервер 2008, 64 бита.

Сервер 2 (по сути и не сервер, обычный рабочий комп).
Intel(R) Core(TM) I5-3470 3.2GHz, 4 ядра.
8Гб, система Win7, 64 бита на SSD, сервер FB на обычном диске.

Везде FB2.5.7, 32 бита, только что выкачанный с официального сайта.

На сервере 1 функция работает гораздо медленнее. Сравнивался запрос из описания к библиотеке вида
update b
set b=LoadBlobFromFile('c:\1.txt')
where id = 1

------ Performance info ------
Prepare time = 0ms
Execute time = 1m 31s 167ms
Current memory = 9 821 152
Max memory = 9 851 552
Memory buffers = 2 048
Reads from disk to cache = 9
Writes from cache to disk = 8 600
Fetches from cache = 30 893


Это для одного файла в 42Мб. Аналогичный файл на сервере 2 затягивается в базу за 2с.
Обычные файловые операции - копирование, чтение и т.п. на сервере 1 выполняются нормально, процессор не загружен.
Обычным образом (через IBExpert, вьювер блобов) блобы подгружаются практически мгновенно.
Пробовал на всех версиях сервера - 32 бита, классик, суперклассик, суперсервер. Разницы нет - все одинаково долго выполняется. На сервере 2 все одинаково быстро. Все тесты выполнялись локально, так что сеть ни при чем. Но при тестах по сети (например, от сервера 1 запрос к серверу 2 и, наоборот - от сервера 2 к серверу 1, все естественно тоже самое - первый случай долго выполняется, второй очень быстро - сеть загружается почти на все 100Мбит).
К базам во время теста никто не подключен кроме SYSDBA.
Вроде в UDF функции тормозить-то нечему, но и на железо грешить тоже не получается. Кривые руки тоже просто некуда приложить было.
Куда надо копать? какую статистику смотреть почему так получается? Заранее спасибо.

Запуск пошагового примера разработки приложения

$
0
0
Уважаемые, помогите, пожалуйста, разобраться.
Пытаюсь освоить Delphi, заинтересовал один пример базы данных, который взял отсюда
http://www.ibase.ru/develop/

При запуске примера приложение запрашивает username и pass.
Нигде на сайте ibase не нашел информации.
В итоге пример запустить не могу.
При попытке ввести что либо выдает следуюющее - Driver ID is not defined....


как узнать логин и пароль?
Или дело не в них?
Заранее благодарен.
Viewing all 1677 articles
Browse latest View live