Модераторы: Akella
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Interbase/Firebird - первые шаги, вопросы чайника 
:(
    Опции темы
StayAtHome
Дата 29.1.2005, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Домосед
**


Профиль
Группа: Участник
Сообщений: 456
Регистрация: 26.1.2004
Где: Украина

Репутация: нет
Всего: 16



Начал изучать Interbase, возникает много элементарных вопросов. Поэтому, чтобы не плодить темы, с разрешения модеров хотелось бы все спрашивать здесь.
Есть таблица CUSTOMER:
Код
CREATE TABLE CUSTOMER (
   ID       INTEGER NOT NULL,
   SURNAME  VARCHAR(25),
   NAME     VARCHAR(15),
   ADDRESS  VARCHAR(255),
   PHONE    VARCHAR(25),
   NOTE     VARCHAR(255)
);

Пытаюсь заставитьь юзера указывать либо имя либо фамилию клиента. Для этого хочу создать триггер:
Код
CREATE TRIGGER TR_CUSTOMER_CHECK_NAME FOR CUSTOMER
ACTIVE BEFORE INSERT POSITION 1
AS
begin
 IF (NEW.Name IS NULL) AND (NEW.Surname IS NULL) THEN
   EXCEPTION E_Customer_Name;
end

Но он не компилируется:
Цитата
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 5, char 25.
AND.

То есть "матерится" на слово "AND" Почему?

Firebird 1.5.2 + IBExpert 2005.01.16
PM MAIL WWW ICQ YIM   Вверх
Alex
Дата 29.1.2005, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 7
Всего: 162



А так:
Код

CREATE TRIGGER TR_CUSTOMER_CHECK_NAME FOR CUSTOMER
ACTIVE BEFORE INSERT POSITION 1
AS
begin
IF ((NEW.Name IS NULL) AND (NEW.Surname IS NULL)) THEN
  EXCEPTION E_Customer_Name;
end

Добавлено @ 17:37
Модератор: Пожалуйста, один топик - один вопрос.


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
StayAtHome
Дата 29.1.2005, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Домосед
**


Профиль
Группа: Участник
Сообщений: 456
Регистрация: 26.1.2004
Где: Украина

Репутация: нет
Всего: 16



Помоголо! Тормоз я.
Работает даже так:
Код

ALTER TRIGGER TR_CUSTOMER_CHECK_NAME
ACTIVE BEFORE INSERT POSITION 1
AS
begin
IF (NEW.Name IS NULL AND NEW.Surname IS NULL) THEN
  EXCEPTION E_Customer_Name;
end

Это нормальная запись? Приколов как в Pascal не будет?
PM MAIL WWW ICQ YIM   Вверх
Alex
Дата 29.1.2005, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 7
Всего: 162



Я предпочитаю записывать так как показал выше


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
AZDesign
Дата 24.6.2005, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 24.6.2005

Репутация: нет
Всего: нет



1) Очень нежелательно исправлять структуру БД в IBExpert или тому подобных.
Все что делается в БД можно записать в виде SQL-скрипта. Таким образом можно написать программу с комментариями, которая генерирует БД без наличия дополнительных инстументов.
Для примера смотри:
http://www.az-design.ru/Support/DataBase/SQL/mnDB_SQL.shtml

2) Login под которым пользователь вошел в БД доступен через переменную USERNAME, поэтому необязательно запрашивать его снова через тригер
PM MAIL   Вверх
StayAtHome
Дата 25.6.2005, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Домосед
**


Профиль
Группа: Участник
Сообщений: 456
Регистрация: 26.1.2004
Где: Украина

Репутация: нет
Всего: 16



Цитата(AZDesign @ 24.6.2005, 09:12)
Очень нежелательно исправлять структуру БД в IBExpert или тому подобных
Почему????
Цитата(AZDesign @ 24.6.2005, 09:12)
Все что делается в БД можно записать в виде SQL-скрипта. Таким образом можно написать программу с комментариями, которая генерирует БД без наличия дополнительных инстументов.
Конечно, но насколько это удобно и сколько для этого потребуется времени?
Цитата(AZDesign @ 24.6.2005, 09:12)
Login под которым пользователь вошел в БД доступен через переменную USERNAME, поэтому необязательно запрашивать его снова через тригер
А причем тут USERNAME? D триггере проверяется заполнение поля -- названия клиента а не пользовательское имя smile
PM MAIL WWW ICQ YIM   Вверх
Alex
Дата 25.6.2005, 01:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 7
Всего: 162



Цитата(AZDesign @ 24.6.2005, 11:12)
Очень нежелательно исправлять структуру БД в IBExpert или тому подобных.
Все что делается в БД можно записать в виде SQL-скрипта. Таким образом можно написать программу с комментариями, которая генерирует БД без наличия дополнительных инстументов

У меня БД более 80 таблиц, на разработку всей БД с помощью IBExpert'а потрачено месяца два хотел бы я посмотреть сколько вы будите это скриптом составлять...
Добавлено @ 01:17
AZDesign, насколько я понимаю, вы не очень хорошо знаете IBExpert, т.к. в нем есть возможность всю спроектированную БД сохранить в виде sql скрипта.


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
AZDesign
Дата 25.6.2005, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 24.6.2005

Репутация: нет
Всего: нет



Цитата(Alex @ 25.6.2005, 01:11)

У меня БД более 80 таблиц, на разработку всей БД с помощью IBExpert'а потрачено месяца два хотел бы я посмотреть сколько вы будите это скриптом составлять...

AZDesign, насколько я понимаю, вы не очень хорошо знаете IBExpert, т.к. в нем есть возможность всю спроектированную БД сохранить в виде sql скрипта.


1) Я знаю IBExpert, но после того как обнаружил в нем несметное количество ошибок, перешел на EMS Interbase Manager.
одна из глупейших ошибок IBExpert, кстати и у EMS при сохранении таблицы в SQL-скрипте он дополняет текстовые поля пробелами до заявленной длины. При сохранении БД ввиде скрипта он делает как ему проще, но совсем не думает как этот скрипт будет читать человек. Первая глава знаменитой книги Ван Тассела начинается словами - "ПОМНИТЕ: программы читаются людьми".

2) У меня в БД более 300 таблиц, более 200 процедур, более 150 триггеров. Разработка ведеться с 1998 года. Скрипт пишется в Wordе, что позволяет писать нормальные комментарии, использовать навигацию по гиперссылкам или закладкам, составлять оглавление, вести журнал изменений БД где главным образом записано ПОЧЕМУ были внесены изменения.
Весть скрипт занимает 6Mb в Worde (630 страниц, 50000 строк). Общее время редактирования 28425 минут (считает Word)

3) И теперь, совершенно недавно мне потребовалось в простой таблице ( 4 поля Integer, таблица пустая) добавить ОДНО поле, но оно должно входить первичный ключ. Я было попробовал вставить через EMS, но от этой таблицы зависят еще 15 таблиц и 32 процедуры. Теперь скажите мне - пока Вы удаляете все эти таблицы и процедуры, добавите поле, потом вернете на место таблицы и процедуры - сколько ошибок допустите?? Задача скрипта уменьшить количество ОШИБОК при исправлениях. Методы работы IBExpert, EMS меня замучили когда я работал с СУБД Paradox (еще ДОСовский вариант)

4) За это время (с 1998г) происходило два параллельных процесса :
- из этого проекта отпочковывались другие проекты путем копирования СКРИПТА и обрезки его по необходимости
- из других проектов аккумулировались различные идеи путем правки этого СКРИПТА
В результате проект теперь состоит из нескольких модулей, которые могут быть использованы в любом проекте, вместе с данными - Адреса, Товары, Персоналии, Юридические лица и прочее.

Поэтому время заполнения скрипта не главное в работе программиста, главное время нахождения и исправления ошибок.
Вы не считаете время написания программы на Паскале, C+ или другом языке. И наверное знаете, что оно пренебрежимо мало по сравнению с временем проектирования.

Кстати, не забывайте что есть волшебные клавиши Ctrl+C, Ctrl+X,Ctrl+V
PM MAIL   Вверх
Alex
Дата 25.6.2005, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 7
Всего: 162



Цитата(AZDesign @ 25.6.2005, 10:29)
Я знаю IBExpert, но после того как обнаружил в нем несметное количество ошибок, перешел на EMS Interbase Manager.

Учитывая тот факт, что разработчик IBExpert русскоговорящий, и очень быстро и грамотно отвечает на письма, любая найденная ошибка исправляется в течение нескольких дней.

Цитата(AZDesign @ 25.6.2005, 10:29)
одна из глупейших ошибок IBExpert, кстати и у EMS при сохранении таблицы в SQL-скрипте он дополняет текстовые поля пробелами до заявленной длины

Бр, что за бред. А поля у вас не char случайно?

Цитата(AZDesign @ 25.6.2005, 10:29)
Теперь скажите мне - пока Вы удаляете все эти таблицы и процедуры, добавите поле, потом вернете на место таблицы и процедуры - сколько ошибок допустите?

И кто вам сказал, что я это не сделаю скриптом?

PS:
Универсальное средство написать нельзя. Но говорить что "Эксперты" это плохо и пользоваться ими нельзя это тоже не правильно. В 80% случаях они упрощали работу. Мы почему-то не пишем тексты программ в блокноте и не отправляем на сборку и компиляцию, а пользуемся нормальными средами разработки.


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
AZDesign
Дата 28.6.2005, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 24.6.2005

Репутация: нет
Всего: нет



Цитата(Alex @ 25.6.2005, 10:31)
Универсальное средство написать нельзя. Но говорить что "Эксперты" это плохо и пользоваться ими нельзя это тоже не правильно. В 80% случаях они упрощали работу. Мы почему-то не пишем тексты программ в блокноте и не отправляем на сборку и компиляцию, а пользуемся нормальными средами разработки.


А я не говорил, что "Эксперты" это плохо и пользоваться ими нельзя. Просто за многие годы я научился находить методы работы, которые минимизируют количество ошибок. И сам пользуюсь EMS Meneger достаточно много, но не для коррекции структуры БД. Отладка отдельных процедур или запросов - это ДА. Но у меня должен сохраняться проект, который может быть заново собран используя только инструменты самой СУБД.
PM MAIL   Вверх
Гость_Владимир
Дата 15.9.2005, 02:12 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Нормальные средства разработки программ голоа+руки+бумажка.
Лепление проги прямо за клавой приводит к экономии 1 минуты при вводе ценой 1 часа при отладке.
И это еще хорош, а если из-за не продуманности ошибка выскакивает в 1 случае из 100 - тогда она вылезет при эксплуатации и горе автору.
  Вверх
SergeBS
Дата 21.9.2005, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1111
Регистрация: 10.6.2005
Где: Владимир

Репутация: нет
Всего: 22



Гость_Владимир
Цитата

Нормальные средства разработки программ голоа+руки+бумажка.

Ну спасибо. Еще перфокарты вспомни. Правильнее (ИМХО):
1. Нормальные средства разработки ИДЕОЛОГИИ программы: голова+руки+бумажка.
Чертим квадратики, стрелочки и прочее. И то, если ни разу такого не делал.
А если делал: берем готовые "кирпичики" (из головы и готовых проектов) и чуть подтачиваем. Добавляем бантиков по вкусу smile .
2. Базы данных - это не только программа. А ручками рисовать все взаимосвязи - бумаги не хватит. На это есть UML и всякие ErWinы, EnterPrise Manager, IBExpert и т.п. Хотя начиная с 0 - эскизик на бумажке не помешает. С названиями объектов и стрелочками связей. Но чтобы ручками хотя бы структуру таблицы рисовать - время зря терять.

StayAtHome
Насчет скобок - из какой-то книжки: не бойтесь "лишних" скобок. Лучше десяток "лишних" скобок, чем две пропущенных.
У alex скобки повышают читаемость. А что лишние - так компилятор их покоцает и все.
И точно ошибки нет. Я сознательно выбрал способ именно как у него.

AZDesign
Цитата

Поэтому время заполнения скрипта не главное в работе программиста, главное время нахождения и исправления ошибок.
Вы не считаете время написания программы на Паскале, C+ или другом языке. И наверное знаете, что оно пренебрежимо мало по сравнению с временем проектирования.

Я бы так не сказал. При сопровождении готового решения проектировать уже практически нечего. И главное время уже занимает увеличение эффективности работы операторов вставкой всяких "умных бантиков". И соответственно - как раз написание программы.
Но мы явно из разных сфер деятельности. Текст навевает на нечто типа жутко навороченной торгово-складской системы. Почему жутко - слишком много (для меня) таблиц. Хотя я знаю одну систему, в которой под 200 dbf-ников. Удивительно, но она работает.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Interbase"
Alex

Обязательно указание:

1. Версию InterBase (Firebird, Yaffil)

2. Способа доступа (ADO, BDE, IBX и т.д.)

  • КАК ПРАВИЛЬНО ОФОРМИТЬ КОД - ЗДЕСЬ
  • КАК ПРАВИЛЬНО УКАЗАТЬ ТЕКСТ ОШИБКИ - ЗДЕСЬ
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • FAQ раздела лежит здесь!

Если Вам понравилась атмосфера форума, заходите к нам чаще! С Уважением, Akella.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Firebird, Interbase | Следующая тема »


 




[ Время генерации скрипта: 0.0843 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.