Filtrar directamente desde un campo de un DW

Tengo un DW de captura, pero quiero que, al poner el numero de cliente me busque y cargue automáticamente el nombre y teléfono de otro registro que ya tengo previamente de ese mismo cliente, ya sea que lo haga mediante un itemchanger o un lose focus, mas no se como hacerlo, se filtrar registros pero mediante un sle, etc, pero no se hacerlo desde un mismo campo de mi DW.

2 respuestas

Respuesta

Tu datawidows debe tener como argumento el numcliente. Además tendrías que realizar una consulta sql para verificar si existe, si existe recuperas el datawindow con el argumento. La otra forma es recuperarlo mediante a consulta sql

Respuesta

¿Solo necesitas al ingresar el código en el campo? O también usando un botón de búsqueda.

Sólo quiero ingresar el código al campo, y que se ejecute con un item changed o de la forma que me recomienden (y si no encuentra nada en la BD, pues que me deje seguir capturando todos los campos).

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:

  • Codigo
  • Nombre
  • Telefono

Muchas gracias amigo,   ya copie tu código y puse los nombres de mis campos, pero desde el choose case me marca error,  mira estos son los errores que me marca:

En mi ejemplo el data windows se llama dw_data, ¿pero en tu programa como se llama? Ahí esta el primer error, en mi ejemplo use un campo llamado teléfono, ¿pero en tu tabla en la base de datos como se llama? Ahí está el segundo error.

Perdón je je. Se me barrio en eso... ya corregí los nombres de los campos, ya solo me marca el error largo, el "database C0038..." y estoy seguro que mi campo SI se llama teléfono, es varchar. No se porque puede estar marcando el error.

Ten presente que un campo en el dw tiene un nombre que el propio sistema te lo sugiere pero tu puedes cambiarlo en las propiedades del campo, abajo el ejemplo:

En mi BD el campo se llama Abreviatura pero yo en las propiedades del dw le cambie el nombre a documento. En tu caso mira que nombre tiene el campo telefono en el dw y ese es el que debes usar.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas