2012-03-27 3 views
4

Ich möchte gerne sicherstellen, dass wenn eine Tabelle (in diesem Fall adotHours) Edit oder Insert-Modus eintritt und der Benutzer auf die Schaltfläche Speichern, aber versehentlich den gleichen Wert unter der Hours Spalte wie bereits gebucht eingegeben, erscheint eine Meldung Please enter another value, andernfalls wird ein anderer Code verwendet, wenn der Benutzer einen anderen Wert eingibt.Probleme mit adoTable

Ich habe die folgende Methode versucht, aber es funktioniert nicht, - was auch immer der Benutzer gibt die Nachricht Please enter another value erscheint.

procedure TfrmLabour.Button6Click(Sender: TObject); 
var 
    i,j, t: String; 
begin 
    Edit1.Text := adotHours['Hours']; 
    j := Edit1.Text; 
    adotHours.Post; 
    Edit2.Text := adotHours['Hours']; 
    t := Edit2.Text; 
    if t = j then 
    showmessage ('Please enter another value') 
    else begin..... 
end; 

während ich weiß, es ist nicht der eleganteste Code sein kann, war mein Denken, dass, sobald der Wert hatte adotHoursHours durch die angeschlossenen DBgrid geschrieben worden ist, wenn es ein anderer Wert ist vor t die neuen werden würde Wert und damit adotHours['Hours'] wäre anders und erlauben die else begin. Vorschläge?

Antwort

7

Versuchen Sie, den eingegebenen Wert anhand der Eigenschaft OldValue zu überprüfen.

adotHours.FieldByName('Hours').OldValue 
+2

Und überprüfen Sie OldValue innerhalb Vorpost Ereignis, viel einfacher und weniger Code als OP mit all den zusätzlichen Zuweisungen etc ... –

2

adotHours.FieldByName('Hours').NewValue wird Unassigned wenn der Feldwert nicht verändert wird. In diesem Fall enthält OldValue den (unmodifizierten) Wert.

0

Sie so etwas wie dies nutzen könnten:

if adotHours.FieldByName('ItemName').OldValue = 
    adotHours.FieldByName('ItemName').Value then 
    Showmessage(Please enter another value'); 

Aber was mich betrifft, wäre es besser, diesen Code zu setzen in Fall adotHours.BeforePost und rufen Sie die abort Verfahren, wenn Werte gleich sind - in anderen Fall, wenn Der Benutzer ändert den Wert und klickt auf eine andere Zeile im Raster - dies verursacht ein Post-in-Dataset und Sie verpassen möglicherweise Ihren Check-in-Button.