En itemchanged(...) harias algo como esto:
string ls_nombre, ls_telefono // Para ej. uso string el numero de fono
Choose Case dw_data.GetColumnName()
CASE 'Num.Cliente'
// Blanqueo los campos en caso de que haya datos de consulta anterior
dw_data.Object.Nombre[row] = ls_nombre
dw_data.Object.Telefono[row] = ls_telefono
// Bloqueo los campos para que no se ingresen datos
// Sugerencia: Los bloqueos de campos deben hacerse al iniciar el formulario
dw_data.Modify("tipovehic.Protect=1")
dw_data.Modify("marca.Protect=1")
// Busco en la BD si existe usando variable del sistema data
Select nombre, telefono into :ls_nombre, :ls_telefono
From clientes
Where codigo = :data
Using SQLCA;
if SQLCA.SQLCode = 100 then // Consulta Correcta pero sin información
messagebox('Atención','El Cliente No Existe',Exclamation!)
Elseif SQLCA.SQLCode = -1 then
messagebox('Error','Error en la sintaxis SQL',Exclamation!)
Else
dw_data.Object.Nombre[row] = ls_nombre
dw_data.Object.Telefono[row] = ls_telefono
// Activo los campos para su ingreso
dw_data.Modify("tipovehic.Protect=0")
dw_data.Modify("marca.Protect=0")
End if
Case 'otro campo si lo necesitas'
// Tu programación
End Choose
En mi caso asumo que la tabla se llama clientes y que los campos que pertenecen a ella son: