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

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


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

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

Выпуск № 834
от 09.06.2007, 15:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 470, Экспертов: 86
В номере:Вопросов: 3, Ответов: 11


Вопрос № 89879: Здравствуйте, господа эксперты! Обстоятельства заставляет меня изучать СУБД. Я раньше делал кое-какие проекты на файл-серверной основе на DBase, Paradox. Теперь необходимо перейти на клиент-сервер. Изучаю Interbase. Теперь собственно вопрос:<...
Вопрос № 89911: Здравствуйте уважаемые эксперты. Вопрос такой: есть ли процедура которая позволяет мгновенно закончить функцию?...
Вопрос № 89923: Я пишу программу в ОС Windows XP Profesional с установленными Vista Transformation Pack 6.0 и Vista Inspirat. Как мне сделать так, чтобы отображение моего приложения в другой винде было с виставской темой?...

Вопрос № 89.879
Здравствуйте, господа эксперты!
Обстоятельства заставляет меня изучать СУБД. Я раньше делал кое-какие проекты на файл-серверной основе на DBase, Paradox. Теперь необходимо перейти на клиент-сервер. Изучаю Interbase.
Теперь собственно вопрос:

Приложение:

Отправлен: 03.06.2007, 23:34
Вопрос задал: Конрад Карлович Михельсон (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Примак Руслан Николаевич
Здравствуйте, Конрад Карлович Михельсон!

Дело в том, что событие AfterPost возникает уже после метода Post и сообщает, что запись уже внесена в БД. Теперь остается только зафиксировать эти данные транзакцией. Что вы и делаете CommitRetaining.

По поводу лишнего.
- Не совсем понятна причина использования вами ApplyUpdates.
- Избегайте использования в AfterPost применения конструкций Commit и Rollback, в некоторых случаях (зависящих от реализации программы) возможно зацикливание, причиной которых становятся действия производимые в AfterPost приводящие к новым AfterPost.
- Избегайте долгоиграющий транзакций Retaining, Все конечно же зависит от вашего приложения, но здесь больше минусов на самом деле чем плюсов. Используйте раздельные транзакции на чтение и запись. Транзакция на чтение может быть открыта уже подтвержденной и может находиться в открытом состоянии в течении работы всего приложения. Что-же касается транзакции на запись, то в большинстве случаев транзакция стартуется -> выполняются изменения -> Транзакция подтверждается с закрытием(либо откатывается).

Гарантированно вы не сможете сохранить запись, вы можете гарантированно знать, была ли вставлена запись или нет.

MyDataSet.Insert;
MyDataSet.Fields[0].AsInteger := IntValue;
MyDataSet.Fields[1].AsString := StrValue;

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
Здравствуйте уважаемые эксперты. Вопрос такой: есть ли процедура которая позволяет мгновенно закончить функцию?
Отправлен: 04.06.2007, 09:34
Вопрос задал: Левадны Тимур Русланович (статус: 1-ый класс)
Всего ответов: 8
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Ерёмин А.А.
Здравствуйте, Левадны Тимур Русланович!
Конечно! Это 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
Комментарий оценки:
Огромное спасибо


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

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

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

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

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала 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.52 от 02.05.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное