Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.02.2014, 10:42   #11
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Будет, но только один раз. Срабатывает, один раз если запись найдена и ни разу если не найдена.
Нет, нет!
Когда я говорил, что при LOCATE обработчик не будет срабатывать, я имел в виду, что при locate не будет срабатывания множество раз (для каждой перебранной записи). Сработает только один раз, после позиционирования на нужной записи! Именно так оно и должно работать!!

а вот в случае цикла с этим будет просто катастрофа!


p.s. впрочем, мне кажется, что мы зря спорим, автор темы для себя уже нашёл работающий (пусть и кривой) вариант, он его устраивает, остаётся пожалеть пользователей программы и тему можно закрывать...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.02.2014, 11:27   #12
Toxa
Форумчанин Подтвердите свой е-майл
 
Аватар для Toxa
 
Регистрация: 01.12.2006
Сообщений: 514
По умолчанию

Цитата:
увидели сравнение ДВУХ полей?!!!
каюсь, проглядел, показалось идет сравнение в одном гриде

Цитата:
что-то сомневаюсь... Вы проверяли или это так, предположения?
проверял, на компонентах OracleDataSet от DOA, а он наследуется от TDataSet,
тут при Locate идет множество срабатываний события AfterScroll
Пишу на Delphi за еду
Toxa вне форума Ответить с цитированием
Старый 26.02.2014, 11:55   #13
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Сообщение от Toxa Посмотреть сообщение
проверял, на компонентах OracleDataSet от DOA, а он наследуется от TDataSet,
тут при Locate идет множество срабатываний события AfterScroll
Какой-то прикол, так не должно быть, возможно разработчики компонента начудили.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 26.02.2014, 13:50   #14
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Toxa Посмотреть сообщение
каюсь, проглядел, показалось идет сравнение в одном гриде


проверял, на компонентах OracleDataSet от DOA, а он наследуется от TDataSet,
тут при Locate идет множество срабатываний события AfterScroll
Категорически не согласен!
Я не знаю, что у Вас там творилось в вашем проекте.

Но я не поленился сделать с нуля новый проект (благо Oracle крутится под рукой и DOA есть лицуха!).
проверил.

Так вот - это НЕ ТАК!
Событие AfterScroll срабатывает ТОЛЬКО после установки на запись.
Т.е. в случае успешного LOCATE - 1 (ОДИН) раз, в случае неуспешного - ни разу!

немножко технических деталей.
клиент Oracle 10.2.0
DOA // Version 4.1.1 (February 22, 2008)


проект был такой:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Db, Grids, DBGrids, StdCtrls, OracleData, Oracle;

type
  TForm1 = class(TForm)
    OracleSession1: TOracleSession;
    OracleDataSet1: TOracleDataSet;
    Label1: TLabel;
    DBGrid1: TDBGrid;
    DataSource1: TDataSource;
    btGoTop: TButton;
    btLocate: TButton;
    Label2: TLabel;
    edEQ_ID: TEdit;
    procedure FormCreate(Sender: TObject);
    procedure OracleDataSet1AfterScroll(DataSet: TDataSet);
    procedure btGoTopClick(Sender: TObject);
    procedure btLocateClick(Sender: TObject);
  private
    CountScroll : integer;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
  CountScroll := 0;
  OracleSession1.Connected := True;
  OracleDataSet1.Open;
end;

procedure TForm1.OracleDataSet1AfterScroll(DataSet: TDataSet);
begin
  Inc(CountScroll);
  Label1.Caption := IntToStr(CountScroll);
  Application.ProcessMessages;
end;


procedure TForm1.btGoTopClick(Sender: TObject);
begin
  OracleDataSet1.First;
end;

procedure TForm1.btLocateClick(Sender: TObject);
var _id : double;
begin
  _id := StrToFloat( edEQ_ID.Text );
  if not OracleDataSet1.Locate('EQ_ID', _id ,[]) then ShowMessage('Not found');
end;

end.

исходный код проекта я могу выложить.
НО! Как Вы понимаете, без БД Oracle он не заработает.
Поэтому, если есть желание, могу работу проекта показать на видео...


Успехов и безбажного Вам кода!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.02.2014, 14:11   #15
Toxa
Форумчанин Подтвердите свой е-майл
 
Аватар для Toxa
 
Регистрация: 01.12.2006
Сообщений: 514
По умолчанию

решил перепроверить, сделал тестовое приложение
теперь я понял как я ошибался, и косился в сторону не виновного, проблема оказалась не в DOA, а в cxGrid от DevExpress, он занимается вредительством
Пишу на Delphi за еду
Toxa вне форума Ответить с цитированием
Старый 26.02.2014, 14:32   #16
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Toxa Посмотреть сообщение
решил перепроверить, сделал тестовое приложение
теперь я понял как я ошибался, и косился в сторону не виновного, проблема оказалась не в DOA, а в cxGrid от DevExpress, он занимается вредительством

вот, правильно сделали, что нашли вредителя!
Теперь Вы знаете, что от него ждать.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.03.2014, 22:48   #17
Muramidaza
Пользователь
 
Регистрация: 08.01.2014
Сообщений: 53
По умолчанию

Спасибо за пример с Locate - только из него понял как с ним работать. Мой код кстати работал хорошо, но цикл как то некрасиво смотрелся, хотя и вроде глюков не обнаружилось. Обработчика на это событие не будет.
Muramidaza вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Установить курсор Михаил Юрьевич БД в Delphi 3 25.02.2012 12:29
установить курсор в TextBox segail Microsoft Office Excel 4 12.09.2010 18:46
Установить курсор в DBGrid nusik Общие вопросы Delphi 5 06.05.2009 22:14
Программно создать курсор SeregaIRK Компоненты Delphi 1 19.09.2008 09:06
Программно установить курсор мыши в браузере IE, и кликнуть в окне браузера Vladimir K. Общие вопросы Delphi 13 19.01.2008 17:07