Constraints, DBGrids and TFields


I've got a couple of simple(?) problems implementing constraints within
a TDBGrid using TField (and its descendants).

My situation...

I have two tables, one is called Teachers, the other Ratings. Both are
Paradox 7 tables. Teachers has only one field 'Id' (A4, the key field).
The entries in this table are 'bill', 'john', 'mary', 'sharon','sue'.

Ratings has three fields : 'Mykey' (autoincrement, the key for this
table, but its only use is to allow me to define a maintained index on
the following field which is...), 'Id' (A4, with a maintained index
(id_indx)) and 'Rating' (integer). The entries in this table are of the

1 bill 4
2 mary 5
3 sue 2
4 john 3
5 sue 4
6 bill 1

The basic idea is that students rate teacher's performance on a scale
from 1 to 5 (1=bad 5=excellent). In the above excerpt, one student gave
Bill a 4 while another gave him a 1. Table1 (Teachers) contains the
names of the teachers while Table2 (Ratings) contains the ratings.
And now the constraints...
1) the ratings must lie between 1 and 5
2) teachers' names must come from the predefined list of teachers

I wish to enter the data using a TDBGrid using the appropriate
constraints. I've defined a TStringField (Id : Table2Id (type fkLookup))
and a TIntegerField (Rating : Table2Rating (type fkData)) to handle the
constraints. As yet, I'm not able to do so to my satisfaction. My
problems are twofold.

1) RATINGS : I can enforce the 1-5 restriction using either the Max/Min
values or CustomConstraint. The problem is that I'd like to IGNORE
keystrokes other than '1'..'5' (and backspace). If I were using
TDBEdits, that would be no problem; unwanted input would be ignored. But
as it stands now, I can type in a '9' then attempt to leave the field
and only then is the constraint applied. Can this be improved (to
OnChange level)?
2) ID : I'd like the behaviour of something like a TDBLookUpCombo (i.e
type in 's' and I get 'sharon' and if I then type in a 'u', I get 'sue',
but what I get is a lockup. I've probably got some settings wrong - I
set Fieldkind to fkLookup, LookUpDataSet to Table1, LookUpKeyField to
'Id', LookUpResultField to 'Id'. If I try to run the application using
these settings, I get a 'Lookup information for field Id is incomplete'
message. If I then set KeyFields to Id, the application runs, but the Id
field is empty (though the Ratings field isn't). Help!!!

Corrections and suggestions most welcome.

Greetings and salutations