Domanda

Vorrei cambiare il comportamento del pulsante Inserisci sulla barra DBNavigator di serie, da un inserto set di dati da aggiungere.

ho potuto intrappolare il pulsante di scatto in caso BeforeAction, fare l'accodamento, ecc; e poi in caso OnClick interrompere l'inserto originale, ma questo sembra un po 'di hack. Un'idea migliore? Sto usando D6 (500.000 km l'orologio, e ancora forte ...).

Grazie per qualsiasi consiglio

Saluti,

PhilW.

È stato utile?

Soluzione

Si potrebbe derivare la propria classe da TDBNavigator e sovrascrivere il metodo BtnClick. O, per una soluzione rapida e sporca, si potrebbe cambiare gestore click del pulsante di inserimento in fase di esecuzione, per esempio:.

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;

Altri suggerimenti

Non v'è alcuna differenza nella maggior parte dei database tra inserto e aggiungere. Facendo un inserto fisico significherebbe effettivamente spostare tutti i dati, iniziando con il posto sarebbe inserita la nuova riga, ridurre le dimensioni di una riga, e quindi scrivendo che nuova riga nel posto appena aperto. Questo sarebbe molto lenta a causa di tutte le attività del disco.

Database anziché fare un accodamento, che scrive i dati alla fine del file fisico, e l'ordine di indice controlla il modo in cui la fila sembra essere posizionata nella posizione corretta nel file.

Quindi, per la maggior parte gli effetti, probabilmente stai già ricevendo un accodamento al posto di un inserto, a prescindere dal metodo utilizzato o quello che il pulsante sul DBNavigator dice. E 'l'indice che fa sembrare il contrario.

È possibile verificare che per la validità con la creazione di un database senza un indice, e prova a fare entrambi un inserto e un accodamento un paio di volte, esaminando attentamente i dati dopo ogni operazione.

@TOndrej: Grande! Non avevo apprezzato questa tecnica. Grazie!

@Ken Bianco: Capisco il tuo punto, ma visivamente ai miei utenti si fa la differenza - l'DBNavigator controlla una DBGrid in cui, nella maggior parte dei casi, c'è un sacco di righe non utilizzate nella griglia. Sembra essere più coerente di avere nuovi record visualizzati nella parte inferiore della griglia piuttosto che appena sopra dove mai il record corrente è in quel momento. Ma grazie per la risposta.

Saluti, PhilW.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top