Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (до версии 2009) - часть 6

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125

Открыть новую тему     Написать ответ в эту тему

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Продолжение темы Вопросы по Delphi (до версии 2009) - часть 5

Познаем сами, помогаем другим...
Обсуждаем вопросы, не связанные с юникоидными версиями Delphi - для этого есть соответствующая тема (см. ссылки ниже).


 
Правила топика:
    Прежде чем спрашивать:
  1. Желательно изучить вопрос, попытаться найти ответ в прилагаемых мануалах, хелпах и анализируя исходники.
  2. Выполнить поиск по топику (открыть "Версия для печати" и поискать ответ там).
  3. Применить фильтр по разделу "Прикладное программирование". Ответы на многие старые вопросы могли быть даны в отдельных темах.
  4. Продумайте вопрос. На поверхностные вопросы вы получите поверхностные ответы, или вообще ответов не получите.
  5. Желательно указывать версии используемого компилятора и операционной системы.
    Прежде чем отвечать:
  1. Если не можете помочь, не мешайте.
  2. Если уж вы отвечаете на вопрос, давайте ответ по сути.
  3. Если вы не уверены, так и говорите! Ошибочный, но авторитетно звучащий ответ хуже, чем отсутствие ответа.
  4. Задавайте дополнительные вопросы, чтобы получить больше информации.
  • Отсутствие ответа не равносильно игнорированию - иногда участники форума просто не знают ответ. Повторная посылка вопроса не приветствуется. Посты типа "неужели никто не знает ответа..." или "может мне все-таки кто-нибудь ответит" недопустимы.  
  • Все большие куски кода (более 5 строк) оформляем в тег [morе] дабы уменьшить размер поста. FAQ по тегу [morе].


    Некоторые "родственные" топики:
     
  • Вопросы по Delphi (версии 2009-2010 Weaver)
  • Вопросы по компонентам для Delphi, C++ Builder
  • Использование DevExpress
  • Вопросы по Ehlib
  • Компоненты и утилиты для Delphi/BCB/FreePascal/Lazarus - только Open Source
  • Коммерческие компоненты и утилиты для Delphi/BCB
  • кабак программистов :)
     
    См. также: Некоторые полезные ресурсы о Delphi
     
    И старайтесь, чтобы ваш код не попал сюда :)

  • Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 05:13 19-05-2010 | Исправлено: akaGM, 02:33 15-07-2020
    akaGM

    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Grande

    Код:
    var
      Form1: TForm1;
     
    type
      TMyForm = TForm;
     
    var
      MyForm : TMyForm;
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      MyForm := TMyForm.Create(Self);
      MyForm.Parent := Self;
      MyForm.Top := 50;
      MyForm.Left := 50;
      MyForm.Caption := 'Test';
      MyForm.Color := clRed;
    end;
     
    procedure TForm1.FormClick(Sender: TObject);
    begin
      MyForm.Show;
    end;

    ну как-то так...

    Всего записей: 24114 | Зарегистр. 06-12-2002 | Отправлено: 17:31 07-06-2012 | Исправлено: akaGM, 19:19 07-06-2012
    Grande



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    akaGM
    Это понятно. Меня интересовало, почему не срабатывало событие OnCreate формы frmFrame.
    Что-то я стормозил По-моему, OnActivate будет срабатывать всякий раз при получении фокуса ввода...
    Надо подумать.

    Всего записей: 588 | Зарегистр. 18-09-2003 | Отправлено: 07:28 08-06-2012 | Исправлено: Grande, 07:45 08-06-2012
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Grande
    Если в dfm-ке OnCreate не прописан, то вручную его задавать будет уже слишком поздно. Так что остаются стандартные техники с переопределением методов в наследниках.

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 17:03 08-06-2012
    Grande



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Frodo_Torbins
    Ну, в общем-то, я так в конце концов и сделал

    Всего записей: 588 | Зарегистр. 18-09-2003 | Отправлено: 08:51 09-06-2012
    SevereK20

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите, пожалуйста... имеется программа на делфи и бд на Firebird 2.5
    В программе есть DbGrid, в котором выводятся все записи таблицы. Выводятся стандартно - транзакция-датасет-датасоурс-dbgrid.
    Параметры транзакции для вывода следующие:
    isc_tpb_read
    isc_tpb_read_committed
    isc_tpb_nowait
    isc_tpb_rec_version
     
    Как сделать так, чтобы при добавлении/измении записи после того как изменения подтверждены(commit) транзакция автоматически обновлялась и были видны новые данные? На данный момент в DBGrid записи обновляется только если закрыть/открыть датасет. Есть идея сделать это через триггер, но по-моему выглядеть это будет тупо и существуют другие методы решения...
    Подскажите, пожалуйста..

    Всего записей: 7699 | Зарегистр. 07-05-2010 | Отправлено: 13:31 09-06-2012
    ant0ni02004

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SevereK20
    лучше будет делать dataSet.Refresh  
    многие компоненты доступа к данным это позволяют, в т.ч. обновить отдельно взятую запись

    Всего записей: 442 | Зарегистр. 26-10-2004 | Отправлено: 22:20 09-06-2012
    SevereK20

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    лучше будет делать dataSet.Refresh  
    многие компоненты доступа к данным это позволяют, в т.ч. обновить отдельно взятую запись  

    после DataSet.Refresh и DataSet.RefreshSQL все ранво отображаются старые данные......

    Всего записей: 7699 | Зарегистр. 07-05-2010 | Отправлено: 02:14 10-06-2012
    ant0ni02004

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SevereK20
    а какие компоненты доступа к данным используются? может не умеют просто

    Всего записей: 442 | Зарегистр. 26-10-2004 | Отправлено: 03:10 10-06-2012
    salexn1



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SevereK20
    Уже было переломано много копий насчет данного вопроса.  
    Автоматом это не получится, нужно рефрешить по таймеру, но тогда возникает вопрос: как часто? Т.к. при частом рефреше положишь и сервер и сетку. И таких концернов очень много. В итоге идея остается одна - пусть юзер сам рефрешит  

    Всего записей: 502 | Зарегистр. 21-02-2008 | Отправлено: 09:32 10-06-2012
    ant0ni02004

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SevereK20
    salexn1
    Если речь об таком обновлении - то лучше по таймеру.  
    Вариант №2 - через триггер event пускать, а на клиентах обновлять по его приходу. Но автоматическое обновление штука сложная, нужно учитывать что юзер может как раз в это время работать с данными и рефреш будет неуместен.

    Всего записей: 442 | Зарегистр. 26-10-2004 | Отправлено: 17:54 10-06-2012
    XPerformer



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ant0ni02004

    Цитата:
     Но автоматическое обновление штука сложная, нужно учитывать что юзер может как раз в это время работать с данными и рефреш будет неуместен.

    Наверное, лучше повесить рефреш на OnIdle +  проверка на то, что пользователь находится в режиме редактирования + таймер - оптимальный вариант
    Хотя кнопка Рефреш на форму устраивает даже неискушенных пользователей, как правило

    Всего записей: 2536 | Зарегистр. 20-06-2011 | Отправлено: 22:43 10-06-2012
    SevereK20

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    а какие компоненты доступа к данным используются? может не умеют просто

    FIBPlus обычный Dataset..
    да, похоже лучшим вариантом будет обновление по таймеру..

    Всего записей: 7699 | Зарегистр. 07-05-2010 | Отправлено: 23:04 10-06-2012
    salexn1



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SevereK20
    Нет, не лучший. Скажем Вы выставите обновлять каждую минуту, а то и 30 секунд. За час может не внестись ни одного обновления, а вы со своими юзерами будете дергать N-таблиц просто так... Если количество таблиц, которые нужно рефрешить будет велико - все, абзац серверу и сетке.
     

    Всего записей: 502 | Зарегистр. 21-02-2008 | Отправлено: 23:25 10-06-2012
    SevereK20

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    salexn1
    В базе всего 2 человека работать будут.  
    Причем данные в самой таблице редактировать будет нельзя.
    Т.е. по двойному клику по записе будет открывать окно редактирования заказа. Поэтому ничего смертельного нет. Я думал есть какое-то свойство у DataSet'а... оказывалось, ошибся.
    Помозгую еще как лучше будет.. Триггер afterupdate вариант неплохой тоже, его как варинант расцениваю тоже.

    Всего записей: 7699 | Зарегистр. 07-05-2010 | Отправлено: 01:48 11-06-2012
    SevereK20

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Написал ради интереса в поддержку Devrace...если интересно кому, ответили следующее  
    "1. Нужно использовать обязательно 2 транзакции - одну на только-чтение, другая только-запись (смотрите примеры как).
    2. Включить на датасете использование кэша . если этого не сделать, отображать будет, но тогда запоминать позицию курсора нужно ручками, через букмарки.
    3. по таймеру делать FullRefresh датасета. (если без кэша, то перед этим запомнить букмарк, а после восстановить).
     
    ПС: Все это есть в примерах. Если у вас не лицензионная версия, то их найти можно на сайте."

    Всего записей: 7699 | Зарегистр. 07-05-2010 | Отправлено: 09:42 11-06-2012
    eddoc



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SevereK20

    Цитата:
     перед этим запомнить букмарк, а после восстановить

     
    не используйте букмарки, они ненадежны. Запоминайте ПК записи, по ней можно будет восстановить позицию или перейти на предыдущую, если текущая была удалена (дядя Толя Подгорецкий об этом на скруле хорошо написал).

    Всего записей: 328 | Зарегистр. 25-11-2007 | Отправлено: 17:34 11-06-2012
    XPerformer



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    eddoc

    Цитата:
    не используйте букмарки, они ненадежны.  

    Чем же они не надежны?
    Только в FireBird или вообще?

    Всего записей: 2536 | Зарегистр. 20-06-2011 | Отправлено: 23:56 11-06-2012
    SevereK20

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    eddoc
    Я наоборот буквально вчера букмарки освоил - очень понравилось - удобно их использовать. Чем они могут быть ненадежны?

    Всего записей: 7699 | Зарегистр. 07-05-2010 | Отправлено: 09:57 12-06-2012
    salexn1



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SevereK20
    После Close/Open букмарки будут не валидны, а ID (PK) - всегда останется валидным

    Всего записей: 502 | Зарегистр. 21-02-2008 | Отправлено: 10:56 12-06-2012
    XPerformer



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    salexn1
    Ну да, это аргумент
    Но не понимаю, как же позиционироваться по ПК, особенно если учесть для отображения в гриде датасет чаще всего отсортирован совсем не по ПК?

    Всего записей: 2536 | Зарегистр. 20-06-2011 | Отправлено: 11:02 12-06-2012
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (до версии 2009) - часть 6


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru