Вопрос № 89879: Здравствуйте, господа эксперты!
Обстоятельства заставляет меня изучать СУБД. Я раньше делал кое-какие проекты на файл-серверной основе на DBase, Paradox. Теперь необходимо перейти на клиент-сервер. Изучаю Interbase.
Теперь собственно вопрос:<...Вопрос № 89911: Здравствуйте уважаемые эксперты. Вопрос такой: есть ли процедура которая позволяет мгновенно закончить функцию?...Вопрос № 89923: Я пишу программу в ОС Windows XP Profesional с установленными Vista Transformation Pack 6.0 и Vista Inspirat.
Как мне сделать так, чтобы отображение моего приложения в другой винде было с виставской темой?...
Вопрос № 89.879
Здравствуйте, господа эксперты!
Обстоятельства заставляет меня изучать СУБД. Я раньше делал кое-какие проекты на файл-серверной основе на DBase, Paradox. Теперь необходимо перейти на клиент-сервер. Изучаю Interbase.
Теперь собственно вопрос:
Отвечает: Примак Руслан Николаевич
Здравствуйте, Конрад Карлович Михельсон!
Дело в том, что событие AfterPost возникает уже после метода Post и сообщает, что запись уже внесена в БД. Теперь остается только зафиксировать эти данные транзакцией. Что вы и делаете CommitRetaining.
По поводу лишнего.
- Не совсем понятна причина использования вами ApplyUpdates.
- Избегайте использования в AfterPost применения конструкций Commit и Rollback, в некоторых случаях (зависящих от реализации программы) возможно зацикливание, причиной которых становятся действия производимые в AfterPost приводящие к новым AfterPost.
- Избегайте долгоиграющий транзакций Retaining, Все конечно же зависит от вашего приложения, но здесь больше минусов на самом деле чем плюсов. Используйте раздельные транзакции на чтение и запись. Транзакция на чтение может быть открыта уже подтвержденной и может находиться в открытом состоянии в течении работы всего приложения. Что-же касается транзакции на запись, то в большинстве случаев транзакция стартуется -> выполняются изменения -> Транзакция подтверждается с закрытием(либо откатывается).
Гарантированно вы не сможете сохранить запись, вы можете гарантированно знать, была ли вставлена запись или нет.
try
MyDataSet.Post;
MyDataSet.Tranasction.Commit;
; //Здесь мы имеем случай когда запись однозначно вставилась
except
if MyDataSet.Tranasction.InTransaction then MyDataSet.Tranasction.Rollback;
; //Здесь случай - когда запись однозначно не вставилась
end;
- Избегайте вложенных try except
- По поводу раздельных транзакций - это невозможно реализовать с помощью стандартных компонентов, но можно решить с набором компонентов FIBPlus (на которые я бы советовал вам настоятельно перейти).
- Похоже, что проект намечается серьезный, поэтому я бы вам посоветовал потратить недельку отведенного вам времени на изучение материалов с ibase.ru - что-бы потом небыло мучительно больно ;)
Ответ отправил: Примак Руслан Николаевич (статус: 2-ой класс)
Ответ отправлен: 04.06.2007, 12:22 Оценка за ответ: 5 Комментарий оценки: Спасибо огромное! А то я запутался в академических пояснениях, где и то хорошо, и это вроде ничего... Искренней благодарностью: К.К. Михельсон
Вопрос № 89.911
Здравствуйте уважаемые эксперты. Вопрос такой: есть ли процедура которая позволяет мгновенно закончить функцию?
Отвечает: Ерёмин А.А.
Здравствуйте, Левадны Тимур Русланович!
Конечно! Это Exit; Только не забывайте выдавать хоть какое-то значение, если это функция.
--------- Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин А.А. (статус: Профессор) Россия, Тула WWW:Программирование на DELPHI ---- Ответ отправлен: 04.06.2007, 09:44 Оценка за ответ: 5 Комментарий оценки: Спасибо!
Отвечает: W@NDeReR
Здравствуйте, Левадны Тимур Русланович!
Если я правильно авс понял то моможет Exit; там где вы хотите чтобы функция прекратилась
--------- Опыт — дитя мысли, а мысль — дитя действия. Нельзя учиться по книгам.
Ответ отправил: W@NDeReR (статус: 4-ый класс)
Ответ отправлен: 04.06.2007, 09:49 Оценка за ответ: 5 Комментарий оценки: Спасибо
Отвечает: Лукьяненко Алексей Валериевич
Здравствуйте, Левадны Тимур Русланович!
Добавлю в мнениям предыдущих экспертов: если Вы используете процедуру Exit в блоке
try
...
Exit;
...
finally
...
end;
то имейте в виду, что секция finally выпонится в любом случае
Ответ отправил: Лукьяненко Алексей Валериевич (статус: 8-ой класс)
Ответ отправлен: 04.06.2007, 10:27 Оценка за ответ: 5 Комментарий оценки: Спасибо
Отвечает: Чрнавин Е. А.
Здравствуйте, Левадны Тимур Русланович!
abort, return
Ответ отправил: Чрнавин Е. А. (статус: 1-ый класс)
Ответ отправлен: 04.06.2007, 10:54 Оценка за ответ: 3 Комментарий оценки: Не могли бы вы описать их по поподробнее?
Отвечает: Градов Юрий Михайлович
Здравствуйте, Левадны Тимур Русланович!
Вопрос не совсем ясен.
В теле функции расположить Break, Exit по какому либо условию.
Допустим:
begin
for i:=1 to 1000 do
begin
if i=999 then Break;
end;
end;
Также воспользоваться Application.ProcessMessages, тогда можно прервать функцию,
например кнопкой на форме. Организовать поток, затем принудительно закрывать поток. Использовать блок try..except+обработка исключений.
--------- Глаза боятся - руки делают!
Ответ отправил: Градов Юрий Михайлович (статус: 10-ый класс)
Ответ отправлен: 04.06.2007, 14:41 Оценка за ответ: 5 Комментарий оценки: Напишите пажалуйста ещё примеры
Отвечает: Esi
Здравствуйте, Левадны Тимур Русланович!
Если я правильно понял, это команда: exit, которая позволяет выйти из любой процедуры в нужной строчке.
Ответ отправил: Esi (статус: 2-ой класс)
Ответ отправлен: 04.06.2007, 18:17 Оценка за ответ: 5 Комментарий оценки: Спасибо
Отвечает: Фадеев Юрий
Здравствуйте, Левадны Тимур Русланович!
Функция для мгновенного выхода с функции EXIT
Ответ отправил: Фадеев Юрий (статус: 1-ый класс)
Ответ отправлен: 05.06.2007, 08:42 Оценка за ответ: 5 Комментарий оценки: Спасибо
Отвечает: Sashok
Здравствуйте, Левадны Тимур Русланович!
Если вам надо аварийно выйти из функции используйте exit. Дня аварийного выхода из программы - halt.
Ответ отправил: Sashok (статус: 3-ий класс)
Ответ отправлен: 05.06.2007, 13:51 Оценка за ответ: 5 Комментарий оценки: Спасибо
Вопрос № 89.923
Я пишу программу в ОС Windows XP Profesional с установленными Vista Transformation Pack 6.0 и Vista Inspirat.
Как мне сделать так, чтобы отображение моего приложения в другой винде было с виставской темой?
Отправлен: 04.06.2007, 10:50
Вопрос задал: ISeT (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Градов Юрий Михайлович
Здравствуйте, ISeT!
Скачать компонент sxskincomponents_1.2.1 с сайта
http://www.saarixx.info/sxskincomponents/ru/,
там есть тема MilkVista_BLUE.
Подробное описание в архиве, есть примеры использования.
--------- Глаза боятся - руки делают!
Ответ отправил: Градов Юрий Михайлович (статус: 10-ый класс)
Ответ отправлен: 04.06.2007, 13:44 Оценка за ответ: 4 Комментарий оценки: Я имел ввиду уже готовое в готовом приложении тему винды оставить, на которой оно создавалось, я слышал, что надо как то в проекте прописать, и файлики виндовые в дир положить, тогда приложение будет одинаковым в разных оболочках и в разных осях, а так надо переделывать долго
Отвечает: Sashok
Здравствуйте, ISeT!
Используйте скины. Посмотрите на www.delphiworld.narod.ru, там есть статья с примерами и линк для скачивания специального компонента.
Ответ отправил: Sashok (статус: 3-ий класс)
Ответ отправлен: 05.06.2007, 13:47 Оценка за ответ: 4 Комментарий оценки: Огромное спасибо