Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: СУБД и Delphi/Lazarus

  Все выпуски  

RusFAQ.ru: СУБД и Delphi


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / СУБД и Delphi

Выпуск № 313
от 25.04.2007, 08:05

Администратор:Gh0stik
В рассылке:Подписчиков: 316, Экспертов: 46
В номере:Вопросов: 3, Ответов: 4


Вопрос № 83227: Добрый день, уважаемые Эксперты! Пользуюсь IBExpert. Создаю две таблицы: Первая: M_ID - Integer //(первичный ключ) M_FAM - Varchar(30) //(Фамилия) M_IM - Varchar(30) //(Имя) M_AD - Integer //(Ссылка на вторую таблицу) Втор...
Вопрос № 83265: Здравствуйте. Необходимо выбрать из таблицы"А" все строки по полю "DATA" которые соответствуют условию: текущая дата в формате mm.yyyy(без числа) - значение из поля "DATA" в таком же формате = 5 лет. В БД зна...
Вопрос № 83277: Здравствуйте. Возникда такая ситуация, пытаюсь програмно задать столбцу некое значение (SQL Server 2000) DataServer.tlOutputtype_msg.Value:=2; тип столбца SmallInt. Программа запускается, а при нажатии на кнопку (задается параметр столбца), ...

Вопрос № 83.227
Добрый день, уважаемые Эксперты!
Пользуюсь IBExpert. Создаю две таблицы:
Первая:
M_ID - Integer //(первичный ключ)
M_FAM - Varchar(30) //(Фамилия)
M_IM - Varchar(30) //(Имя)
M_AD - Integer //(Ссылка на вторую таблицу)
Вторая:
A_ID - Integer // (первичный ключ = ссылка на M_AD из первой таблицы)
A_UL - Varchar(30) //(улица)
A_DOM - Varchar(10) //(дом)
Как практически в IBExppert-е организовать "каскадное" удаление записей? При удалении записи из первой таблицы что б удалялась соотв. запись из второй таблицы.
Такое каскадное удаление нужно делать на сервере IB или как то "обыгрывать" его в клиентском приложении (D7).

Приложение:

Отправлен: 19.04.2007, 09:51
Вопрос задал: Дмитрий Александрович (статус: 1-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Проходящий Мимо
Здравствуйте, Дмитрий Александрович!
Рекомендую создать для второй таблицы уникальный первичный ключ. Вообще-то Вы неправильно построили зависимости между таблицами, по Вашему примеру вторая таблица - главная, а первая - подчиненная.
Переделать нужно так:

Первая:
M_ID - Integer //(первичный ключ)
M_FAM - Varchar(30) //(Фамилия)
M_IM - Varchar(30) //(Имя)

Вторая:
A_ID - Integer // (первичный ключ)
A_UL - Varchar(30) //(улица)
A_DOM - Varchar(10) //(дом)
A_AD - Integer //(Ссылка на первую таблицу)

В IBExpert можно сделать в визуальном интерфейсе следующее (если он у Вас русифицирован):
1. в параметрах второй таблицы зайти на закладку "Ограничение" подзакладку "Внешние ключи"
2. Клавиша Ins (Новый внешний ключ)
3. В поле "На поле" задать A_AD
4. В поле "Внешняя таблица" задать имя главной таблицы М
5. В поле "Внешнее поле" задать M_ID - первичный ключ главной таблицы М
6. В поле "Правило удаления" задать CASCADE
7. Перейти на закладку "Поля", при вопросе сохранения сказать Да
8. Напротив записи A_AD в поле ВК появится ключик с буквой F

При помощи запроса можно сделать так:

ALTER TABLE А -- название зависимой таблицы
ADD CONSTRAINT FK_ A_AD -- название внешнего ключа
FOREIGN KEY (A_AD)
REFERENCES M (M_ID) -- название главной таблицы и ее перв. ключ
ON DELETE CASCADE; --удаляем каскадно все записи вторичной таблицы при удалении записи главной таблицы
Удачи!
---------
Carpe diem!
Ответ отправил: Проходящий Мимо (статус: 8-ой класс)
Ответ отправлен: 19.04.2007, 11:56
Оценка за ответ: 5
Комментарий оценки:
Огромное спасибо!


Вопрос № 83.265
Здравствуйте.
Необходимо выбрать из таблицы"А" все строки по полю "DATA" которые соответствуют условию:
текущая дата в формате mm.yyyy(без числа) - значение из поля "DATA" в таком же формате = 5 лет.
В БД значение поля "DATA" записано в формате дд.мм.гггг
Помогите пожалуйста составить SQL запрос.
Отправлен: 19.04.2007, 13:15
Вопрос задал: Шмаров Сергей (статус: 4-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: LanK
Здравствуйте, Шмаров Сергей!

Здравствуйте, Шмаров Сергей!

Какая БД?

Как правило это делается встроенными функциями Базы Данных.

Например, для MSSQL7 :
Month(date) - месяц
YEAR(date) - год
GETDATE() -- текущая дата

запрос в приложении (проверен на MSSQL7)

Приложение:

---------
Пусть все будет хорошо! Давайте жить дружно! :) И будет жить еще лучше!

Ответ отправил: LanK (статус: Студент)
Ответ отправлен: 19.04.2007, 13:44


Вопрос № 83.277
Здравствуйте. Возникда такая ситуация, пытаюсь програмно задать столбцу некое значение (SQL Server 2000)
DataServer.tlOutputtype_msg.Value:=2;
тип столбца SmallInt. Программа запускается, а при нажатии на кнопку (задается параметр столбца), возникает следующая ошибка:
EDataBaseError with message 'tlOutput cannot perform this operation on a closed dataset'

Подскажите пожалуйсто, в чем может быть дело?
Заранее огромное спасибо...
Отправлен: 19.04.2007, 14:30
Вопрос задал: Глеб (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Jakoni
Здравствуйте, Глеб!
попробуйте так
Но может я ошыбаюсь

Приложение:

Ответ отправил: Jakoni (статус: 1-ый класс)
Ответ отправлен: 19.04.2007, 14:38

Отвечает: din
Здравствуйте, Глеб!
Ответ дает самое исключение:
"EDataBaseError with message 'tlOutput cannot perform this operation on a closed dataset'"
Данная операция не применима для закрытого набора данных. Сделайте DataServer.Open;
---------
Есть только одно зло - невежество, и только одно благо - знания
Ответ отправил: din (статус: Практикант)
Ответ отправлен: 19.04.2007, 14:44


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Email: support@rusfaq.ru, тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.50 (beta) от 15.04.2007
Яндекс Rambler's Top100

В избранное