C++Builder
  Начало   Форум   Помощь Войти Регистрация  
Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Создание базы данных Firebird  (Прочитано 20836 раз)
d7d1cd
Участник


Сказали спасибо: +59/-24
Offline

Сообщений: 1005


Создание базы данных Firebird
« : 25 Февраль 2014, 19:36:48 »

Привет всем. Я только начинаю изучать базы даных и поэтому решил создать эту тему, где буду задавать вопросы. Думаю, что эта тема будет интересна всем новичкам. Уважаемые знатоки, будьте так любезны, окажите помощь.
В качестве типа базы данных я выбрал Firebird, в качестве инструмента для проектирования базы IBExpert. На компьютере у меня установлен IBExpert версии 2013.2.20.1 и сервер Firebird версии 2.5 с настройками, приведенными в скриншоте.
Создание базы данных я начинаю с открытия IBExpert и выбора: База данных - Создать базу... Открывается окно Создание базы данных, которое я привожу в скриншоте. И сразу возникают вопросы:

1. Если я планирую сделать базу данных, к которой доступ должен осуществляться по сети, то в поле 1 я должен выбрать "Удаленный", если же база будет использоваться только на том же компьютере, на котором она расположена, то нужно выбрать "Локальный". Все верно? Или же данное поле позволяет создать базу на удаленной машине, если выбрать "Удаленный"?
2. Если я в поле 1 выбрал "Удаленный", то что я должен ввести в поле 2 и выбрать в поле 3?
3. В поле 4 указываю полный путь к базе данных. Тут как бы нет вопроса.
4. Поле 5, я понимаю, менять не надо. Но скажите, для чего оно?
5. Поля 6 и 7 - это, соответственно, логин (SYSDBA) и пароль (masterkey). Почему именно такие?
6. Поля 8, 9, 10 и 11 для меня вообще не понятны. Поясните.

И еще: все настройки в данном окне я смогу поменять в будущем, в уже созданной базе? Или какие-то поля нужно заполнить конкретными значениями и в будущем их поменять нельзя?

Записан
Tantos
А ты воспользовался поиском перед тем, как спросить?!
Давний друг


Сказали спасибо: +350/-28
Offline

Сообщений: 2181


Re: Создание базы данных Firebird
« Ответ #1 : 26 Февраль 2014, 01:15:05 »

1. Нет. Это лишь указывает, на каком сервере находится сам файл БД. Я уже давал раскладку по строкам подключения.
2. В поле 2 - имя сервера, поле 3 не трогаем.
3. Ну тут как бы нет ответа
4. Вполне может быть, что и нужно. Файл клиентской библиотеки может называться по-разному. А кроме того, он отличается для Классического и СуперСервера. Что если мне с этого окмпьютера необходимо подключаться к другим, где установлены Классический и СуперСервер? Или к серверу Interbase?
5. Потому что так задумано. Пароль можно (и нужно!) поменять. Вас же не удивляет, почему в MS SQL администратор по умолчанию называется sa?
Рискну предположить, что это аббревиатура от SYStem DataBase Administrator.
6. Размер страницы традиционно выбирается по размеру кластера ФС, если речь идет о Windows.
Кодировка - она и есть кодировка. Либо CP1251, либо UTF-8.
Диалект - ставьте 3. Первый был до версии 6 Interbase и Firebird 1.5/
Collation - не в курсе, работаю с FB 1.5

Да. Последние 4 поля потом лучше не менять - последствия будут непредсказуемыми.
Я рекомендую достать книжку Хелен Борри, тогда многие вопросы сразу отпадут.
Записан
d7d1cd
Участник


Сказали спасибо: +59/-24
Offline

Сообщений: 1005


Re: Создание базы данных Firebird
« Ответ #2 : 26 Февраль 2014, 17:57:01 »

Спасибо за ответы. Создал я базу данных. В функциях у меня сразу появилось 2 функции. Я их удалил, чтобы начать изучение с нуля. А вот в ролях есть одна роль. Она не удаляется. Почему?
Записан
Tantos
А ты воспользовался поиском перед тем, как спросить?!
Давний друг


Сказали спасибо: +350/-28
Offline

Сообщений: 2181


Re: Создание базы данных Firebird
« Ответ #3 : 27 Февраль 2014, 01:59:54 »

Не советую трогать что-либо с префиксом RDB$ - это зарезервированные системные фигулины.
Записан
d7d1cd
Участник


Сказали спасибо: +59/-24
Offline

Сообщений: 1005


Re: Создание базы данных Firebird
« Ответ #4 : 27 Февраль 2014, 19:25:42 »

Цитата: Tantos от 27 Февраль 2014, 01:59:54
Не советую трогать что-либо с префиксом RDB$ - это зарезервированные системные фигулины.
Ясно, не буду.
Как я понял, в базе данных сами данные хранятся в таблицах. Все остальное (процедуры, триггеры, домены, роли и т. д.) предназначены для работы с этими данными в таблицах. Правильно?

И еще вопрос. У меня есть "база данных" в таблице Excel. Если я создам точно такую же таблицу в Firebird, то как мне загрузить туда данные? Только через свое приложение или можно через IBExpert?
Записан
Tantos
А ты воспользовался поиском перед тем, как спросить?!
Давний друг


Сказали спасибо: +350/-28
Offline

Сообщений: 2181


Re: Создание базы данных Firebird
« Ответ #5 : 28 Февраль 2014, 01:35:55 »

Цитата: d7d1cd от 27 Февраль 2014, 19:25:42
Как я понял, в базе данных сами данные хранятся в таблицах. Все остальное (процедуры, триггеры, домены, роли и т. д.) предназначены для работы с этими данными в таблицах. Правильно?
В целом - да.
Цитата: d7d1cd от 27 Февраль 2014, 19:25:42
У меня есть "база данных" в таблице Excel. Если я создам точно такую же таблицу в Firebird, то как мне загрузить туда данные? Только через свое приложение или можно через IBExpert?
IBDataPump - либо отдельное приложение, либо плагин к IBExpert.
Записан
d7d1cd
Участник


Сказали спасибо: +59/-24
Offline

Сообщений: 1005


Re: Создание базы данных Firebird
« Ответ #6 : 07 Март 2014, 21:16:12 »

Между делом возник вопрос. Требуется написать приложение, которое посредством инфракрасного порта будет считывать данные из электронного электросчетчика. Посещала меня мысль, что можно создать структуру всех считываемых данных, заполнять ее при чтении данных и сохранять на диск. Однако, при последующих чтениях, старые данные необходимо сохранять. Таким образом, мне нужна база данных. Теперь, собственно, вопросы:
1. На компьютере, где будет работать программа, надо установить сервер Firebird в классическом режиме или в режиме суперсервер?
2. В программе необходимо прочитанные из счетчика данные сразу сохранять в базе данных. Какие компоненты мне будут нужны?
Записан
Tantos
А ты воспользовался поиском перед тем, как спросить?!
Давний друг


Сказали спасибо: +350/-28
Offline

Сообщений: 2181


Re: Создание базы данных Firebird
« Ответ #7 : 08 Март 2014, 02:42:22 »

1. Разницу между архитектурами я писал. Если многопользовательский доступ не нужен, вам и встроенного сервера хватит.
2. Какая среда разработки? Я на 5 пользуюсь FIBPlus, с 6 есть IBX, с какой-то версии RAD Studio - AnyDAC.
Записан
d7d1cd
Участник


Сказали спасибо: +59/-24
Offline

Сообщений: 1005


Re: Создание базы данных Firebird
« Ответ #8 : 08 Март 2014, 13:08:50 »

Цитата: Tantos от 08 Март 2014, 02:42:22
1. Разницу между архитектурами я писал. Если многопользовательский доступ не нужен, вам и встроенного сервера хватит.
2. Какая среда разработки? Я на 5 пользуюсь FIBPlus, с 6 есть IBX, с какой-то версии RAD Studio - AnyDAC.
1. Многопользовательский доступ не нужен, так как, по сути, база данных нужна лишь для "грамотного" хранения больших объемов информации.
2. Среда разработки C++BuilderXE. Подскажите, какие компоненты и с какой вкладки мне положить на форму, чтобы заполнять мою базу? Просто компонентов для работы с базами данных очень много.

P.S. Когда-то я видел программу на VBA для работы с базой данных Access. Использовался один компонент. Там отправлялся SQL запрос и в ответ на этот запрос из базы получались данные. Затем эти данные выводились в обычные поля ввода, списки и прочее. Вот здесь мне хотелось бы сделать что-то похожее. Как можно меньше компонентов.
« Последнее редактирование: 09 Март 2014, 12:09:01 от d7d1cd » Записан
Tantos
А ты воспользовался поиском перед тем, как спросить?!
Давний друг


Сказали спасибо: +350/-28
Offline

Сообщений: 2181


Re: Создание базы данных Firebird
« Ответ #9 : 11 Март 2014, 05:33:58 »

1. Значит, встроенного сервера тебе будет более чем.
2. Не могу подсказать - нет у меня данной версии IDE.
Записан
Rius
Давний друг


Сказали спасибо: +116/-5
Offline

Сообщений: 753


Re: Создание базы данных Firebird
« Ответ #10 : 11 Март 2014, 10:23:21 »

Цитата: d7d1cd от 08 Март 2014, 13:08:50
Цитата: Tantos от 08 Март 2014, 02:42:22
1. Разницу между архитектурами я писал. Если многопользовательский доступ не нужен, вам и встроенного сервера хватит.
1. Многопользовательский доступ не нужен, так как, по сути, база данных нужна лишь для "грамотного" хранения больших объемов информации.

Цитата: d7d1cd от 22 Февраль 2014, 14:10:27
...
База (1 файл) должна будет лежать в сетевой папке на одном компьютере, а доступ к ней будет осуществляться с других компьютеров локальной сети....

Вы уверены что ничего не напутали?
Записан
d7d1cd
Участник


Сказали спасибо: +59/-24
Offline

Сообщений: 1005


Re: Создание базы данных Firebird
« Ответ #11 : 11 Март 2014, 20:17:05 »

Цитата: Tantos от 11 Март 2014, 05:33:58
2. Не могу подсказать - нет у меня данной версии IDE.
Ну вроде компоненты от версии к версии идут почти одни и те же. Подскажите компоненты из вашей IDE.
Записан
d7d1cd
Участник


Сказали спасибо: +59/-24
Offline

Сообщений: 1005


Re: Создание базы данных Firebird
« Ответ #12 : 11 Март 2014, 20:18:30 »

Цитата: Rius от 11 Март 2014, 10:23:21
Вы уверены что ничего не напутали?
Уверен. У меня несколько задач. В одной надо организовать общий доступ к базе, в другой - монопольный.
Записан
Tantos
А ты воспользовался поиском перед тем, как спросить?!
Давний друг


Сказали спасибо: +350/-28
Offline

Сообщений: 2181


Re: Создание базы данных Firebird
« Ответ #13 : 12 Март 2014, 02:15:11 »

Цитата: d7d1cd от 11 Март 2014, 20:17:05
Ну вроде компоненты от версии к версии идут почти одни и те же. Подскажите компоненты из вашей IDE.
Я бы не был так уверен в этом...
Вообще, в 5 и 6 версии - IBX (вкладка Interbase: IBDataBase, IBTransaction, IBDataSet) + вкладка "Data Access": DataSource + вкладка "Data Controls": DBGrid.
Я использую вместо IBX набор компонентов FIBPlus, а вместо "Data Controls" - набор компонентов EhLib. Вместо стандартного генератора отчетов QReport - FastReport.
Записан
d7d1cd
Участник


Сказали спасибо: +59/-24
Offline

Сообщений: 1005


Re: Создание базы данных Firebird
« Ответ #14 : 12 Март 2014, 21:06:46 »

Снова вопрос. Именно по базе данных. Если я создаю таблицу, то обязательно ли создавать в ней поле, в котором будет храниться номер записи? Смотрел несколько видео по созданию базы данных и во всех создавали такое поле, хотя потом нигде его не использовали.
Записан
Rius
Давний друг


Сказали спасибо: +116/-5
Offline

Сообщений: 753


Re: Создание базы данных Firebird
« Ответ #15 : 12 Март 2014, 21:20:30 »

Идентификатор записи. Обязательно. Пригодится ещё.
Записан
d7d1cd
Участник


Сказали спасибо: +59/-24
Offline

Сообщений: 1005


Re: Создание базы данных Firebird
« Ответ #16 : 12 Март 2014, 21:35:22 »

Цитата: Rius от 12 Март 2014, 21:20:30
Идентификатор записи. Обязательно. Пригодится ещё.
Как я понимаю, обязательно это только в том случае, если пригодится еще. Так?
Записан
Tantos
А ты воспользовался поиском перед тем, как спросить?!
Давний друг


Сказали спасибо: +350/-28
Offline

Сообщений: 2181


Re: Создание базы данных Firebird
« Ответ #17 : 13 Март 2014, 01:53:32 »

Нет, не так. Как вы собрались однозначно идентифицировать запись среди набора других записей? Как вы собираетесь проводить операции изменения или удаления записи, если нет уникального идентификатора записи?
Записан
d7d1cd
Участник


Сказали спасибо: +59/-24
Offline

Сообщений: 1005


Re: Создание базы данных Firebird
« Ответ #18 : 13 Март 2014, 21:36:05 »

Цитата: Tantos от 13 Март 2014, 01:53:32
Нет, не так. Как вы собрались однозначно идентифицировать запись среди набора других записей? Как вы собираетесь проводить операции изменения или удаления записи, если нет уникального идентификатора записи?
А если у меня будет поле, значения которого гарантированно не будут повторятся? Я ж могу его использовать как поле ID...

Есть еще вопросы. Ответьте, пожалуйста.
1. Триггер - это код, который выполняется автоматически до или после удаления, обновления или создания новой записи. Так?
2. Процедура - это код, который будет выполняться по запросу из моей программы. С помощью процедур происходит работа с данными в базе (удаление, обновление и создание). Или с данными можно работать не используя процедуры?
3. Что такое функция?
4. Что будет, если значение поля идентификатора записи достигнет максимального значения выбранного числового типа данных? Начнется с нуля?
Записан
Tantos
А ты воспользовался поиском перед тем, как спросить?!
Давний друг


Сказали спасибо: +350/-28
Offline

Сообщений: 2181


Re: Создание базы данных Firebird
« Ответ #19 : 14 Март 2014, 02:05:34 »

Цитата: d7d1cd от 13 Март 2014, 21:36:05
А если у меня будет поле, значения которого гарантированно не будут повторятся? Я ж могу его использовать как поле ID...
Можете. Только не говорите потом, что вас не предупреждали...
Цитата: d7d1cd от 13 Март 2014, 21:36:05
1. Триггер - это код, который выполняется автоматически до или после удаления, обновления или создания новой записи. Так?
2. Процедура - это код, который будет выполняться по запросу из моей программы. С помощью процедур происходит работа с данными в базе (удаление, обновление и создание). Или с данными можно работать не используя процедуры?
3. Что такое функция?
4. Что будет, если значение поля идентификатора записи достигнет максимального значения выбранного числового типа данных? Начнется с нуля?
1. Так.
2. Можно работать и напрямую. Я использую процедуры для построения запросов - гораздо удобней внести изменения в процедуру, чем перекомпилировать код. Да и более менее сложный запрос проще реализовать через процедуру.
3. Иллюстрация:
Код
CREATE OR ALTER PROCEDURE GET_DATE_DATA (
   DATE_FR DATE,
   DATE_TO DATE,
   PROFIT NUMERIC(4,3),
   RECTYPE NUMERIC(1,0),
   TAC10 NUMERIC(4,3),
   TAC18 NUMERIC(4,3))
RETURNS (
   DATE_IN DATE,
   DOZES NUMERIC(7,3),
   SL_ALL NUMERIC(11,2),
   MANCOST NUMERIC(11,2),
   EXCISE NUMERIC(11,2),
   WATER NUMERIC(8,4),
   RO_SUMM NUMERIC(13,4),
   FSUM NUMERIC(11,2),
   CASH NUMERIC(11,2),
   DIFF NUMERIC(5,4),
   NO_TAC NUMERIC(11,2),
   MATERIALS NUMERIC(8,4),
   EXPENSES NUMERIC(8,2),
   RENTAB NUMERIC(8,2),
   RID INTEGER,
   TAC NUMERIC(11,2),
   BASE_TAC NUMERIC(2,0),
   PRICE_NTAC NUMERIC(11,2))
AS
--DECLARE VARIABLE MF       INTEGER;
DECLARE VARIABLE DIFF_2   NUMERIC(8,2);
DECLARE VARIABLE DIFF_4   NUMERIC(8,4);
DECLARE VARIABLE TAC2     NUMERIC(1,0);
DECLARE VARIABLE ING_SUMM NUMERIC(13,8);
DECLARE VARIABLE AUX2_SUM NUMERIC(11,2);
DECLARE VARIABLE TAC_V NUMERIC(17,7);
BEGIN
 IF ( RECTYPE >= 0 ) THEN
    BEGIN
      FOR
         SELECT RECEPT.DATE_IN, RECEPT.DOZES, RECEPT.SL_ALL, RECEPT.MANCOST,
                RECEPT.EXCISE, RECEPT.WATER_SUM, GET_RECOTHER_SUM.RO_SUMM, RECEPT.FSUM,
                RECEPT.CASH, RECEPT.TAC2, SUM(REC_INGRID.QUANT*REC_INGRID.PRICE) AS S1,
                GET_RECOTHER_SUM.AUX2_SUM, RECEPT.RID, RECEPT.PRICE_NTAC
         FROM RECEPT
         LEFT JOIN REC_INGRID                          ON RECEPT.RID  = REC_INGRID.RID
         LEFT JOIN GET_RECOTHER_SUM(:DATE_FR, :DATE_TO) ON RECEPT.RID = GET_RECOTHER_SUM.RID
         WHERE (RECEPT.DATE_IN BETWEEN :DATE_FR AND :DATE_TO) AND RECEPT.MEDEST 1
                AND RTYPE=:RECTYPE
         GROUP BY RECEPT.DATE_IN, RECEPT.DOZES, RECEPT.SL_ALL, RECEPT.MANCOST,
                  RECEPT.EXCISE, RECEPT.WATER_SUM, GET_RECOTHER_SUM.RO_SUMM, RECEPT.FSUM,
                  RECEPT.CASH, RECEPT.TAC2, GET_RECOTHER_SUM.AUX2_SUM,
                  RECEPT.RID, RECEPT.PRICE_NTAC
      INTO :DATE_IN, :DOZES, :SL_ALL, :MANCOST, :EXCISE, :WATER, :RO_SUMM, :FSUM,
           :CASH, :TAC2, :ING_SUMM, :AUX2_SUM, :RID, :PRICE_NTAC
      DO
      BEGIN
 
           MATERIALS = ( :ING_SUMM - :WATER/:DOZES + :RO_SUMM ) * :DOZES + AUX2_SUM;
           EXPENSES  = :MANCOST + ( RO_SUMM + ING_SUMM ) * :DOZES + AUX2_SUM;
           RENTAB    = EXPENSES * :PROFIT;
           IF ( :EXCISE IS NULL ) THEN EXCISE = 0;
           IF ( TAC2 = 1 ) THEN
            BEGIN
                NO_TAC = ( (:SL_ALL-:EXCISE)/(100 + :TAC18*100))*100;
                TAC_V    = :NO_TAC * :TAC18;
                BASE_TAC = :TAC18 * 100;
            END
           ELSE
            BEGIN
                NO_TAC = ((:SL_ALL-:EXCISE)/(100 + :TAC10*100))*100;
                TAC_V    = :NO_TAC * :TAC10;
                BASE_TAC = :TAC10 * 100;
            END
 
           DIFF_2 = ROUNDING( :ING_SUMM - :WATER + :RO_SUMM, 2);
           DIFF_4 = ROUNDING( :ING_SUMM - :WATER + :RO_SUMM, 4);
           DIFF   = ROUNDING( :DIFF_2 - :DIFF_4, 4);
           TAC    = ROUNDING( :TAC_V,  2);
           SUSPEND;
      END
    END
 ELSE
     BEGIN
      FOR
         SELECT RECEPT.DATE_IN, RECEPT.DOZES, RECEPT.SL_ALL, RECEPT.MANCOST,
                RECEPT.EXCISE, RECEPT.WATER_SUM, GET_RECOTHER_SUM.RO_SUMM, RECEPT.FSUM,
                RECEPT.CASH, RECEPT.TAC2, SUM(REC_INGRID.QUANT*REC_INGRID.PRICE) AS S1,
                GET_RECOTHER_SUM.AUX2_SUM, RECEPT.RID, RECEPT.PRICE_NTAC
         FROM RECEPT
         LEFT JOIN REC_INGRID                           ON RECEPT.RID = REC_INGRID.RID
         LEFT JOIN GET_RECOTHER_SUM(:DATE_FR, :DATE_TO) ON RECEPT.RID = GET_RECOTHER_SUM.RID
         WHERE (RECEPT.DATE_IN BETWEEN :DATE_FR AND :DATE_TO) AND RECEPT.MEDEST 1
         GROUP BY RECEPT.DATE_IN, RECEPT.DOZES, RECEPT.SL_ALL, RECEPT.MANCOST,
                  RECEPT.EXCISE, RECEPT.WATER_SUM, GET_RECOTHER_SUM.RO_SUMM, RECEPT.FSUM,
                  RECEPT.CASH, RECEPT.TAC2, GET_RECOTHER_SUM.AUX2_SUM,
                  RECEPT.RID, RECEPT.PRICE_NTAC
      INTO :DATE_IN, :DOZES, :SL_ALL, :MANCOST, :EXCISE, :WATER, :RO_SUMM, :FSUM,
           :CASH, :TAC2, :ING_SUMM, :AUX2_SUM, :RID, :PRICE_NTAC
      DO
      BEGIN
 
           MATERIALS = ( :ING_SUMM - :WATER/:DOZES + :RO_SUMM ) * :DOZES + AUX2_SUM;
           EXPENSES  = :MANCOST + ( RO_SUMM + ING_SUMM ) * :DOZES + AUX2_SUM;
           RENTAB    = EXPENSES * :PROFIT;         -- НДС 10 ИЛИ 18
           IF ( TAC2 = 1 ) THEN
            BEGIN
                NO_TAC = ((:SL_ALL-:EXCISE)/(100 + :TAC18*100))*100;
                TAC_V    = :NO_TAC * :TAC18;
                BASE_TAC = :TAC18 * 100;
            END
           ELSE
            BEGIN
                NO_TAC = ((:SL_ALL-:EXCISE)/(100 + :TAC10*100))*100;
                TAC_V    = :NO_TAC * :TAC10;
                BASE_TAC = :TAC18 * 100;
            END
 
           DIFF_2 = ROUNDING( :ING_SUMM - :WATER + :RO_SUMM, 2);
           DIFF_4 = ROUNDING( :ING_SUMM - :WATER + :RO_SUMM, 4);
           DIFF   = ROUNDING( :DIFF_2 - :DIFF_4, 4);
           TAC    = ROUNDING( :TAC_V,  2);
           SUSPEND;
      END
     END
END
 
Я привел текст процедуры. А вот используемая в процедуре ROUNDING - это функция. Самописная. Есть и встроенные - модуль числа, косинус, получение подстроки и т.п.
4. Тип INTEGER хранит значения от -2 147 483 648 до +2 147 483 648. Есть еще тип INT64(BIGINT) - от –2^63 до (2^63)-1 . Если уж он переполнится, получите ошибку переполнения данных. Ну и не забудьте поделиться секретом философского камня заодно .
Записан
d7d1cd
Участник


Сказали спасибо: +59/-24
Offline

Сообщений: 1005


Re: Создание базы данных Firebird
« Ответ #20 : 14 Март 2014, 19:06:10 »

Спасибо за ответы.
Записан
d7d1cd
Участник


Сказали спасибо: +59/-24
Offline

Сообщений: 1005


Re: Создание базы данных Firebird
« Ответ #21 : 18 Март 2014, 20:42:16 »

Итааак, снова вопрос!
Можно создать процедуру в базе данных, с помощью которой будет создаваться запись. Процедура будет иметь входные параметры, которые соответствуют полям в базе. Как вызвать такую процедуру тоже понятно.
Теперь собственно вопрос: как создать процедуру, которая будет производить чтение записей из базы данных, например по условию в определенном поле? То есть, как эта процедура вернет запрашиваемые данные и как это будет, если этих данных будет много.

P.S. Я использую компонент TIBQuery. Читал, что некоторые использую ADO компоненты. Что лучше?
Записан
Tantos
А ты воспользовался поиском перед тем, как спросить?!
Давний друг


Сказали спасибо: +350/-28
Offline

Сообщений: 2181


Re: Создание базы данных Firebird
« Ответ #22 : 19 Март 2014, 01:59:41 »

Используй дальше TIBQuery. Обрати внимание на выложенную мной процедуру - выборка по условию плюс обработка результата.
Записан
d7d1cd
Участник


Сказали спасибо: +59/-24
Offline

Сообщений: 1005


Re: Создание базы данных Firebird
« Ответ #23 : 19 Март 2014, 14:51:01 »

Цитата: Tantos от 19 Март 2014, 01:59:41
Используй дальше TIBQuery. Обрати внимание на выложенную мной процедуру - выборка по условию плюс обработка результата.
Я никогда не писал SQL запросов, поэтому мне очень сложно разобраться в приведенной процедуре. В С++, например, если функция возвращает значение, то это одна переменная определенного типа. А как процедура вернет значения, если их по условию отбора получилось 1000?
Записан
Tantos
А ты воспользовался поиском перед тем, как спросить?!
Давний друг


Сказали спасибо: +350/-28
Offline

Сообщений: 2181


Re: Создание базы данных Firebird
« Ответ #24 : 20 Март 2014, 01:43:11 »

Тут несколько другая ситуация - работа идет с набором данных. Поэтому вполне естественен тот факт, что результат запроса возвращает множество разнотипных данных. Если хотите грубую аналогию - это как функция, возвращающая указатель на класс или структуру.
Записан
d7d1cd
Участник


Сказали спасибо: +59/-24
Offline

Сообщений: 1005


Re: Создание базы данных Firebird
« Ответ #25 : 21 Март 2014, 21:21:34 »

Скажите, можно ли "настроить" базу данных таким способом, что запись в нее можно будет осуществить только через хранимую процедуру (когда такая создана в базе) и никак больше? То есть, чтобы обычным запросом "INSERT INTO ..." запись сделать было невозможно.
Записан
Tantos
А ты воспользовался поиском перед тем, как спросить?!
Давний друг


Сказали спасибо: +350/-28
Offline

Сообщений: 2181


Re: Создание базы данных Firebird
« Ответ #26 : 22 Март 2014, 08:58:12 »

Нет.
Записан
d7d1cd
Участник


Сказали спасибо: +59/-24
Offline

Сообщений: 1005


Re: Создание базы данных Firebird
« Ответ #27 : 22 Март 2014, 10:06:58 »

Цитата: Tantos от 22 Март 2014, 08:58:12
Нет.
Тогда подскажите как мне сделать, если необходимо вести лог работы с базой? У меня в базе будет таблица, в которую будет записываться кто, когда, куда и что именно (запись, удаление, изменение) делал в базе данных. Наверное, это надо делать через триггеры (BEFORE INSERT, BEFORE DELETE, BEFORE UPDATE). Верно?
Записан
Tantos
А ты воспользовался поиском перед тем, как спросить?!
Давний друг


Сказали спасибо: +350/-28
Offline

Сообщений: 2181


Re: Создание базы данных Firebird
« Ответ #28 : 22 Март 2014, 15:37:00 »

Поищи в Интернете книгу Хелен Борри - там аккурат готовое решение есть.
Записан
d7d1cd
Участник


Сказали спасибо: +59/-24
Offline

Сообщений: 1005


Re: Создание базы данных Firebird
« Ответ #29 : 27 Март 2014, 20:36:54 »

Печатаю потихоньку Хелен Борри и читаю. Параллельно вопросы:
1. Как я понимаю, имена пользователей и их пароли хранятся на сервере, а не в базе данных. В базе хранятся только роли и их назначают конкретному пользователю. Правильно?
2. Что такое GRANT OPTION?
3. Когда имеет смысл создавать индексы?
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  




....

Powered by SMF 1.1.21 | SMF © 2025, Simple Machines
Страница сгенерирована за 0.11 секунд. Запросов: 21.