Los componentes db-aware (como el dbgrid) son componentes de visualización y sólo se usan -o se deberían usar- para mostrar datos, el trabajo de localización y actualización de datos lo debes realizar con los
datasets, mientras menos uses los componentes visuales para manipular datos, menos problemas tendrás, luego de muchos golpes en la cabeza entendí eso.
Una método que te permite hacer una búsqueda por más de un campo es Locate, trata de hacer lo siguiente:
Código:
datamodule1.productos.locate('codigo;nombre', [edit1.text, edit2.text], [loCaseInsensitive] );
espero te sirva.