Domanda

Usando TDataSet.FindKey è possibile individuare i record. Quando risulta in True cursore set di dati sarà posizionato sul record trovato. Quando il risultato è False il cursore non si sposta. Ciò si traduce nei dati del record prima di FindKey in emissione di essere visualizzati nei data componenti avveduto.

Come faccio a codificare il risultato di FindKey per restituire un record vuoto?

    if Not tblSomeTable.FindKey([SomeSearchData]) then
    begin
        < code to return empty or move data cursor to neutral position >
    end;

Aggiornamento: (atteso qualche giorno prima di scegliere la risposta giusta, come credo che sia la consuetudine e non wan per scoraggiare ulteriori commenti.) Ci sono stati diversi suggerimenti su come affrontare questa situazione anche se credo la risposta corretta era di Marcelo nel senso che non è possibile avere un cursore sia su un record. Diverse soluzioni sono state suggerite. Ho scelto uno dei miei. E 'andato qualcosa di simile:

    If Not tblSomeTable.FindKey([SomeSearchData]) then
    begin
        tblSomeTable.FindKey([-1,2010]);
    end

Quello che ho fatto è creare un manichino, record vuoto con un indice che i dati effettivi non possono mai essere, vale a dire: il primo valore dell'indice non sarà mai -1. Se la ricerca iniziale si presenta vuota allora la FindKey sarà posizionare il cursore in questo disco vuoto. Ciò fornirà l'effetto visivo che cercavo.

È stato utile?

Soluzione

Questo non è possibile per quanto ne so. Il cursore deve sempre essere su un disco a meno Bof e Eof sono entrambi true (insieme di dati vuoto).

Altri suggerimenti

TDataSet non ha una "posizione neutra". Ma come sempre si hanno poche opzioni:

  1. Imposta insieme di dati in inserimento / aggiunta la modalità di registrazione. Così, i controlli e il codice vedranno record vuoto. Fate attenzione, come qualcosa può incidentalmente assegnare i dati a un campo e poi il nuovo record può essere inviato a DB.
  2. A seconda dei componenti di accesso ai dati, si utilizza, è possibile impostare set di dati in modalità cache aggiornamenti, inserto e post nuovo record vuoto nel set di dati, e contrassegnare tutti i cambiamenti applicati. Quindi assegnare un filtro, normalmente respingendo questo record vuoto. Poi nel codice devi attivare il filtro sopra, in modo che rifiuterà tutti i record, escludendo questo vuoto.
  3. Si consideri per scollegare il TDataSource dal set di dati e poi ricollegarlo.

Nota certo, ma probabilmente non ci può essere inventata alcuni altri approcci:)

Ciao,

uso SetRange invece di FindKey.

tblSomeTable.SetRange([SomeSearchData],[SomeSearchData]);
try
  while not tblSomeTable.Eof do begin
    <do something with the Record>
    tblSomeTable.Next;
  end;
finally
  tblSomeTable.CanelRange;
end;

Quando i criteri assicura che il massimo di record corrispondenti è uno si recupera con la dichiarazione di cui sopra zero o un record.

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