Как изменить поведение компонента TDBNavigator?

Ниже для BigQuery Standard SQL

#standardSQL
SELECT 
  DATE(TIMESTAMP_MICROS(event_info.timestamp_usec)) day,
  COUNT(address) AS total_recipients  
FROM `project.dataset.gmail_log`, 
UNNEST(message_info.destination) AS destination
WHERE EXISTS (SELECT 1 FROM UNNEST(message_info.message_set) WHERE type = 8)
GROUP BY day  

будет возвращаться ежедневное общее количество получателей в формате ниже

Row day         total_recipients     
1   2019-01-10  100  
2   2019-01-11  100  
3   2019-01-12  100  
4   2019-01-13  100  
5   2019-01-14  100    
6
задан PhilW 11 February 2009 в 11:25
поделиться

3 ответа

Вы могли получить свой собственный класс из TDBNavigator и переопределить метод BtnClick. Или для быстрой и грязной фиксации Вы могли изменить обработчик щелчков кнопки вставки во времени выполнения, например:

type
  THackDBNavigator = class(TDBNavigator);

procedure TForm1.DBNavigatorInsertClick(Sender: TObject);
var
  DBNavigator: TDBNavigator;
begin
  DBNavigator := ((Sender as TControl).Parent as TDBNavigator);
  if Assigned(DBNavigator.DataSource) and (DBNavigator.DataSource.State <> dsInactive) then
  begin
    if Assigned(DBNavigator.BeforeAction) then
      DBNavigator.BeforeAction(DBNavigator, nbInsert);

    DBNavigator.DataSource.DataSet.Append;

    if Assigned(DBNavigator.OnClick) then
      DBNavigator.OnClick(DBNavigator, nbInsert);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  THackDBNavigator(DBNavigator1).Buttons[nbInsert].OnClick := DBNavigatorInsertClick;
end;
10
ответ дан 9 December 2019 в 22:40
поделиться

Нет никакого различия в большинстве баз данных между вставкой, и добавить. Выполнение фактической физической вставки означало бы на самом деле перемещать все данные, начиная с места, новая строка будет вставлена, вниз размер одной строки, и затем пишущий что новая строка в недавно открытом месте. Это было бы очень медленно из-за всей активности диска.

Базы данных вместо этого делают добавление, которое пишет данные в конец физического файла, и индексный порядок управляет способом, которым строка, кажется, расположена в корректное место в файле.

Таким образом для большинства намерений и целей, Вы, вероятно, уже получаете добавление вместо вставки, независимо от которого метода Вы используете или что говорит кнопка на DBNavigator. Это - индекс, который заставляет его появиться иначе.

Можно проверить, что для законности путем создания базы данных без индекса, и пытаются делать и вставку и добавление несколько раз, исследуя данные тщательно после каждой операции.

1
ответ дан 9 December 2019 в 22:40
поделиться

@TOndrej:Отлично! я не ценил эту технику.Спасибо!

Белый @Ken: Я понимаю Вашу точку, но визуально моим пользователям это имеет значение - DBNavigator управляет DBGrid где, в большинстве случаев, существует много неиспользованных строк в сетке. Это, кажется, более последовательно, чтобы иметь новые записи, появляются у основания сетки скорее затем чуть выше, где когда-либо текущая запись в тот момент. Но спасибо за Ваш ответ.

С уважением, PhilW.

0
ответ дан 9 December 2019 в 22:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: