El lío que tienes es
mantener la relación entre el ListView y los registros de la BBDD. Para ello en el propio ListView puedes guardar la clave primaria de la BBDD.
Al rellenar el ListView con los registros del Query, tendrás un bucle, pues dentro de ese bucle añadirías :
Código Delphi
[-]
var v :TlistItem;
begin
while not tabla1.eof do
begin
v := listView1.Items.Add;
v.Caption := lo quesea;
v.SubItems[0].Objects[0] := Pointer(tabla1ClavePrimaria.AsInteger);
end;
Listview1.Items es de tipo TListItems, y cada uno de ellos es un TListItem. El TListItem tiene la propiedad SubItems, y ésta última si es de tipo TStrings, y por tanto, tiene su propiedad Objects donde guardar la clave primaria.
Yo la verdad, echo de menos el evento "onItemCheck", el ListView debería tenerlo
Saludos