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

RusFAQ.ru: Программирование на Delphi


Информационный Канал Subscribe.Ru


RusFAQ.ru: Программирование на C++ Builder / Delphi

Выпуск № 292
от 21.02.2004, 01:40

Администратор:
Имя: Калашников О.А.
URL: Информационный ресурс
ICQ: 68951340
Россия, Москва
О рассылке:
Задано вопросов: 1350
Отправлено ответов: 2960
Активность: 219.2 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

sir henry
Статус: Профессиональный
Общий рейтинг: 160.81
[Подробней >>]
Boriss
Статус: Профессиональный
Общий рейтинг: 153.45
URL: Программирование на Паскале
[Подробней >>]
kvINT
Статус: Профессиональный
Общий рейтинг: 103.93
Телефон: (34369)6-24-47
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 1338. Ув. эксперты! Вопрос по InterBase. Требуется вызвать в триггере при вставке записи произвести измене... (ответов: 1)
Вопрос № 1339. Здравствуйте эксперты ! Помогите пожалуйста. Никак не могу разобраться с объектами. Создаю следующий... (ответов: 2)
Вопрос № 1340. Здравствуйте! Поправка к вопросу № 1338. Меня не правильно поняли. Попытаюсь уточнить. ЧрЕзВыЧаЙнО у... (ответов: 2)

Вопросов: 3, ответов: 5


 Вопрос № 1338

Ув. эксперты!
Вопрос по InterBase.
Требуется вызвать в триггере при вставке записи произвести изменения в других таблицах, возможно, сделать кое-какие изменения в данной таблице, НО НИЧЕГО НЕ ВСТАВЛЯТЬ. Как это реализовать?
Я попробовал сделать это при помощи исключений – вначале сделать всё, что нужно, а затем вызвать исключение. Беда в том, что в этом случае происходит откат транзакции и изменения не сохраняются. Можно ли подтвердить (и как это можно сделать) текущую транзакцию прямо в тексте триггера, а только потом вызывать исключение?
С уважением, Валерий



Вопрос отправлен: 15.02.2004, 14:36
Отправитель: Lerry

[Следующий вопрос >>] [Список вопросов]

Отвечает sir henry

Добрый день, Lerry!
Под вставкой Вы подразумеваете INSERT?
В таком случае, Вы создаете триггер, который начинает работу ДО вставки новых записей:
CREATE TRIGGER ИмяТриггера FOR ИмяТаблицы BEFORE INSERT
AS
BEGIN
<Делаете то, что Вам нужно>
END
На случай, если Вы решаете вставлять или не вставлять новую запись по каким-то особым признакам вновь вставляемой записи, есть переменные OLD.ИмяТаблицы и NEW.ИмяТаблицы (старая запись в таблице, новая запись, которая будет). Т.е. их можно сравнивать между собой и тогда решать, что Вам нужно сделать.

Ответ отправлен: 16.02.2004, 11:43
Отправитель: sir henry


 Вопрос № 1339

Здравствуйте эксперты !
Помогите пожалуйста. Никак не могу разобраться
с объектами. Создаю следующий объект и все что с ним
связано:
const
MaxOperatorsNum = 100;
type
TOperatorStatus = (Main,Simple);
TOperatorID = class(TObject)
OperatorName: String;
OperatorPassword: String;
OperatorStatus: TOperatorStatus;
constructor Create;
end;
TOperatorIDFile = file of TOperatorID;
TOperatorIDArray = array[1..MaxOperatorsNum] of TOperatorID;
//
var
OperatorIDFile: TOperatorIDFile;
OperatorIDArray: TOperatorIDArray;
конструктор такой
constructor TOperatorID.Create;
begin
inherited Create;
end;
по кнопке заполняю первый элемент массива и хочу записать в файл
OperatorIDArray[1]:=TOperatorID.Create;
OperatorIDArray[1].OperatorName:='james bond';
OperatorIDArray[1].OperatorPassword:='12345';
OperatorIDArray[1].OperatorStatus:=Main
// сохраняем в файл
AssignFile(OperatorIDFile,'d:operator.dat');
Rewrite(OperatorIDFile);
Write(OperatorIDFile,OperatorIDArray[1]);
CloseFile(OperatorIDFile);
OperatorIDArray[1].Free;
Дельфи3 не ругается, но в файл пишет все время одну и ту же фигню
↓┴
В чем дело ?
Заранее спасибо.




Вопрос отправлен: 17.02.2004, 22:37
Отправитель: Радик (rdk78@nightmail.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Boriss

Добрый день, Радик!
Это для Вас фигня :)), а для машины - это родное. И Вы видидите, то, что захотели - а захотели записать всю начинку объекта -> загляните в главу "Объект" хорошего учебника - там обязательно есть диаграмма и описание внутренней структуры объекта (ВЫ ПИШЕТЕ В ФАЙЛ ИМЕННО ЕЕ!). Там хранятся указатель на класс (после Self), и таблицы вирутальных, динамических методов - Вы их не создаете, но есть есть в TObject.

Ответ отправлен: 18.02.2004, 10:17
Отправитель: Boriss


Отвечает sir henry

Приветствую Вас, Радик!
Если я Вас правильно понял, вы открываете файл для просмотра текстов и он Вам показывает всякую фигню вместо текста? Так ничего другого он Вам никогда и не покажет, програмируй Вы хоть на ТР, хоть на Дельфи7 :). Ведь файл-то Ваш не текстовый. Если хотите просматривать записаную информацию как текст, то записывайте элементы Вашего объекта в ТЕКСТОВЫЙ ФАЙЛ, а не в типизированый.

Ответ отправлен: 18.02.2004, 10:33
Отправитель: sir henry


 Вопрос № 1340

Здравствуйте!
Поправка к вопросу № 1338. Меня не правильно поняли. Попытаюсь уточнить.
ЧрЕзВыЧаЙнО утрирую. Пусть имеется таблица tbl_Dummy. В ней имеется запись «1, Яблоко». Имеется триггер для этой таблицы trg_tbl_Dummy_bi0 (before insert). От триггера требуется следующее. Когда я вставляю в таблицу, скажем, запись «2, Слива», требуется изменить запись «1, Яблоко» на «1, Груша», а запись «2, Слива» не вставлять вовсе!
Как это реализовать? Я могУ установить, вставляется ли «Слива» или нет и изменить первую запись. Но как НЕ ДОПУСТИТЬ вставки самой «Сливы»?
С уважением…



Вопрос отправлен: 18.02.2004, 01:34
Отправитель: Lerry

[Следующий вопрос >>] [Список вопросов]

Отвечает sir henry

Приветствую Вас, Lerry!
Вставте в триггер AFTER INSERT команду модефикации нужной записи:
UPDATE таблица SET поле = "Груша" WHERE признак_модифицируемой_записи;
и команду удаления только что созданой:
DELETE FROM таблица WHERE признак_только-что_вставленой_записи;
А вообще-то непонятно зачем это. Вы любите сложности? Так заблокируйте добавление записи при определенных условиях или для определенного пользователя.

Ответ отправлен: 18.02.2004, 11:03
Отправитель: sir henry


Отвечает kvINT

Доброе время суток, Lerry!
создай триггер после вставки с таким кодом
delete from tblDummy where id = new.id;


Ответ отправлен: 19.02.2004, 14:27
Отправитель: kvINT



Форма отправки вопроса

Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

(C) 2002-2003 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


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


Получить ответов:


 Выбор рассылки

Программисту
Assembler (24)
C / C++ (16)
Perl (3)
Builder / Delphi (19)
Pascal (20)
Basic / VBA (7)
Java / JavaScript (3)
PHP (13)
Криптография (6)
WinAPI (11)
Радиоэлектроника (7)
Пользователю
Windows 95/98/Me (39)
Windows NT/2000/XP (53)
"Железо" (33)
Поиск информации (14)
Администратору
Windows NT/2000/XP (28)
Linux / Unix (9)
Юристу
Гражданское право (16)
Семейное право (11)
Трудовое право (12)
КоАП (10)

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




Задать вопрос | Регистрация эксперта | Поиск в базе | Чат | Форумы | Новости
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование
Профессиональная WEB-Студия B.I.T.


Яндекс цитирования
© 2001-2004 Россия, Москва. Авторское право: Калашников О.А.

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное