En busca del registro deseado

Post Reply
jaba
Posts: 109
Joined: Tue Dec 12, 2006 12:39 am
Location: CALI COLOMBIA

En busca del registro deseado

Post by jaba »

Hola a todos en el Foro
Antonio
Recurro a ti o a cualquier miembro del foro nuevamente para solicitar una ayuda, he intentado organizar el código para hacer búsqueda del registro requerido, tu sabes bien que estoy nuevo en esto y lo he intentado hacer al estilo clipper con SEEK pero no he tenido buenos resultado se abre el dialogo sin el registro deseado.

Cordialmente

Jairo Barbosa

Antonio disculpa mi descuido ya que no me di cuenta que estaba en el foro otro foro
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Jairo,

Muéstranos el código de cómo lo estás haciendo y lo revisamos
regards, saludos

Antonio Linares
www.fivetechsoft.com
jaba
Posts: 109
Joined: Tue Dec 12, 2006 12:39 am
Location: CALI COLOMBIA

Post by jaba »

Antonio Linares wrote:Jairo,

Muéstranos el código de cómo lo estás haciendo y lo revisamos
Gracias por tu colaboracion
//Control de entradas Serviaire
#include "FiveWin.ch"


static oWnd, oBrush

main()
//----------------------------------------------------------------------------//

function Main()

local oBrush
local oIco, oBar

*
SET DELETED ON // para que no aparezcan los registros que borras !!!
*

SET 3DLOOK ON
DEFINE BRUSH oBrush STYLE BRICKS

DEFINE ICON oIco FILE "c:\FWH\icons\car.ico"

DEFINE WINDOW oWnd FROM 1, 1 TO 22, 75 ;
TITLE "Control de servicios Serviaire Ltda" ;
MENU BuildMenu() ;
COLOR "W+/B" BRUSH oBrush ;
ICON oIco


SET MESSAGE OF oWnd ;
TO FWVERSION + ", " + FWCOPYRIGHT CENTERED KEYBOARD

ACTIVATE WINDOW oWnd

return nil

//----------------------------------------------------------------------------//

function BuildMenu()

local oMenu

MENU oMenu
MENUITEM "&Informacion"
MENU
MENUITEM "&Acerca de..." ;
ACTION MsgInfo( "Este trabajo esta escrito en FiveWin ";
+CRLF + FWCOPYRIGHT ) ;
MESSAGE "Informacion acerca de esta aplicacion"

SEPARATOR

MENUITEM "&Salir..." ;
ACTION If( MsgYesNo( "Want to end ?" ),oWnd:End(),) ;
MESSAGE "Salir de la aplicacion"
ENDMENU

MENUITEM "&Archivos"
MENU
MENUITEM "&Entradas..." ;
ACTION Entradas2() ;
MESSAGE "Control de entradas"
MENUITEM "&Buscar" ;
ACTION Busqueda() ;
MESSAGE "Busqueda por placa y por # OT"
ENDMENU

MENUITEM "&Utils"
MENU
MENUITEM "&Calculator..." ;
ACTION WinExec( "Calc" ) ;
MESSAGE "Run Windows calculator"

MENUITEM "C&alendar..." ;
ACTION WinExec( "Calendar" ) ;
MESSAGE "Run Windows calendar"

MENUITEM "&Some fun..." ;
ACTION WinExec( "Sol" ) ;
MESSAGE "Play a game..."
ENDMENU
ENDMENU

return oMenu

//----------------------------------------------------------------------------//

function Entradas2()


local oDlg
local cPlaca
local cFecha
local cEmpresa
local cNombre
local cApellido
local cTel_Fijo
local cTel_Mobil
local cMarca
local cColorr
local cLinea
local cOt
local cIngreso

cPlaca :=space(9)
cFecha :=date()
cEmpresa :=space(36)
cNombre :=space(15)
cMarca :=cApellido:=space(15)
cTel_Fijo :=space(9)
cTel_Mobil :=space(11)
cColorr :=space(10)
cLinea :=space(18)
cOt :=space(7)
cIngreso :=space(15)
cRegis :=space(15)
aItems := {" ","A/C Nuevo","Servicio","Garantia"}

if ! File( "clientes.dbf" )
DbCreate( "Clientes.dbf", { { "Placa", "C", 9, 0 },;
{ "Fecha", "D", 12, 0 },;
{ "Empresa", "C", 25, 0 },;
{ "Nombre", "C", 15, 0 },;
{ "Apellido", "C", 15, 0 },;
{ "Tel_Fijo", "C", 9, 0 },;
{ "Tel_Mobil", "C", 11, 0 },;
{ "Marca", "C", 15, 0 },;
{ "Colorr", "C", 10, 0 },;
{ "Linea", "C", 18, 0 },;
{ "Ot", "C", 7, 0 },;
{ "Ingreso", "C", 15, 0 }})
endif


USE Clientes Alias Clientes NEW// EXCLUSIVE
INDEX ON Clientes->Placa TO Clipla
SET INDEX TO Clipla
GO TOP

SET DATE FRENCH
cRegis :=Recno()

DEFINE DIALOG oDlg RESOURCE "clientes" TITLE "Entrada Servicios Serviaire"

REDEFINE GET getcregis VAR cRegis ID 390 OF oDlg
REDEFINE GET getPlaca VAR cPlaca ID 110 OF oDlg UPDATE PICTURE"!!!999";
VALID (Clientes->Placa:=cPlaca,.T.)
REDEFINE GET getFecha VAR cFecha ID 120 OF oDlg UPDATE ;
VALID (Clientes->Fecha:=cFecha,.T.)
REDEFINE GET getEmpresa VAR cEmpresa ID 130 OF oDlg UPDATE ;
VALID (Clientes->Empresa:=cEmpresa,.T.)
REDEFINE GET getNombre VAR cNombre ID 140 OF oDlg UPDATE ;
VALID (Clientes->Nombre:=cNombre,.T.)
REDEFINE GET getApellido VAR cApellido ID 150 OF oDlg UPDATE ;
VALID (Clientes->Apellido:=cApellido,.T.)
REDEFINE GEt getTel_Fijo VAR cTel_Fijo ID 160 OF oDlg UPDATE ;
VALID (Clientes->Tel_Fijo:=cTel_fijo,.T.)
REDEFINE GET getTel_Mobil VAR cTel_Mobil ID 170 OF oDlg UPDATE ;
VALID (Clientes->Tel_Mobil:=cTel_Mobil,.T.)
REDEFINE GET getmarca VAR cMarca ID 180 OF oDlg UPDATE ;
VALID (Clientes->Marca:=cMarca,.T.)
REDEFINE GET getColorr VAR cColorr ID 190 OF oDlg UPDATE ;
VALID (Clientes->Colorr:=cColorr,.T.)
REDEFINE GET getLinea VAR cLinea ID 200 OF oDlg UPDATE ;
VALID (Clientes->Linea:=cLinea,.T.)
REDEFINE GET getOt VAR cOt ID 210 OF oDlg UPDATE ;
VALID (Clientes->Ot:=cOt,.T.)
**** ojo al tratamiento de este combobox
IF EMPTY(cIngreso) .OR. ; // si el campo esta vacío o
ASCAN(aItems,cIngreso) == 0 // el contenido no consta en elArray de
cIngreso := aItems[1] // opciones

ENDIF

REDEFINE COMBOBOX getIngreso VAR cIngreso ;
ITEMS aItems ID 117 of oDlg VALID (Clientes->Ingreso:=cIngreso,.T.)

REDEFINE BUTTON oBt1 ID 112 OF oDlg ;
ACTION (IF ( !BOF(),DBGOTOP(),),; // |<--
getPlaca:cText := Clientes->Placa,;
getFecha:cText := Clientes->Fecha,;
getEmpresa:cText := Clientes->Empresa,;
getNombre:cText := Clientes->Nombre,;
getApellido:cText := Clientes->Apellido,;
getTel_Fijo:cText := Clientes->Tel_Fijo,;
getTel_Mobil:cText := Clientes->Tel_Mobil,;
getMarca:cText := Clientes->Marca,;
getColorr:cText := Clientes->Colorr,;
getLinea:cText := Clientes->Linea,;
getOt:cText := Clientes->Ot,;
cIngreso :=IIF(EMPTY(Clientes->Ingreso),aItems[1],Clientes->Ingreso),;
getIngreso:refresh())


REDEFINE BUTTON oBt1 ID 113 OF oDlg ; // <--
ACTION ( DbSkip( -1 ),;
If( BoF(), MsgInfo( "Inicio del Archivo" ),),;
getPlaca:cText := Clientes->Placa,;
getFecha:cText := Clientes->Fecha,;
getEmpresa:cText := Clientes->Empresa,;
getNombre:cText := Clientes->Nombre,;
getApellido:cText := Clientes->Apellido,;
getTel_Fijo:cText := Clientes->Tel_Fijo,;
getTel_Mobil:cText := Clientes->Tel_Mobil,;
getMarca:cText := Clientes->Marca,;
getColorr:cText := Clientes->Colorr,;
getLinea:cText := Clientes->Linea,;
getOt:cText := Clientes->Ot,;
cIngreso :=IIF(EMPTY(Clientes->Ingreso),aItems[1],Clientes->Ingreso),;
getIngreso:refresh())


REDEFINE BUTTON oBt1 ID 114 OF oDlg ;//-->
ACTION ( DbSkip( 1 ),;
If( EoF(), DbSkip(1),),;
If( EoF(), MsgInfo( "Fin del Archivo" ),),;
getPlaca:cText := Clientes->Placa,;
getFecha:cText := Clientes->Fecha,;
getEmpresa:cText := Clientes->Empresa,;
getNombre:cText := Clientes->Nombre,;
getApellido:cText := Clientes->Apellido,;
getTel_Fijo:cText := Clientes->Tel_Fijo,;
getTel_Mobil:cText := Clientes->Tel_Mobil,;
getMarca:cText := Clientes->Marca,;
getColorr:cText := Clientes->Colorr,;
getLinea:cText := Clientes->Linea,;
getOt:cText := Clientes->Ot,;
cIngreso :=IIF(EMPTY(Clientes->Ingreso),aItems[1],Clientes->Ingreso),;
getIngreso:refresh())

REDEFINE BUTTON oBt1 ID 115 OF oDlg ; //-->|
ACTION ( IF (!EOF(),DBGOBOTTOM(),),;
getPlaca:cText := Clientes->Placa,;
getFecha:cText := Clientes->Fecha,;
getEmpresa:cText := Clientes->Empresa,;
getNombre:cText := Clientes->Nombre,;
getApellido:cText := Clientes->Apellido,;
getTel_Fijo:cText := Clientes->Tel_Fijo,;
getTel_Mobil:cText := Clientes->Tel_Mobil,;
getMarca:cText := Clientes->Marca,;
getColorr:cText := Clientes->Colorr,;
getLinea:cText := Clientes->Linea,;
getOt:cText := Clientes->Ot,;
cIngreso :=IIF(EMPTY(Clientes->Ingreso),aItems[1],Clientes->Ingreso),;
getIngreso:refresh() )

REDEFINE BUTTON oBt1 ID 223 OF oDlg ; //-->||
ACTION (DBGOBOTTOM(),;
If(!EOF(), DbSkip(1),),;
getPlaca:cText := Clientes->Placa,;
getFecha:cText := Clientes->Fecha,;
getEmpresa:cText := Clientes->Empresa,;
getNombre:cText := Clientes->Nombre,;
getApellido:cText := Clientes->Apellido,;
getTel_Fijo:cText := Clientes->Tel_Fijo,;
getTel_Mobil:cText := Clientes->Tel_Mobil,;
getMarca:cText := Clientes->Marca,;
getColorr:cText := Clientes->Colorr,;
getLinea:cText := Clientes->Linea,;
getOt:cText := Clientes->Ot,;
cIngreso :=IIF(EMPTY(Clientes->Ingreso),aItems[1],Clientes->Ingreso),;
getIngreso:refresh() )

REDEFINE BUTTON oBt1 ID 116 OF oDlg ACTION oDlg:End()

REDEFINE BUTTON oBt1 ID 118 OF oDlg ACTION AgregarNuevo(cPlaca)
REDEFINE BUTTON oBt1 ID 111 OF oDlg ACTION BorraRegistro() //Aqui puedes
//recargar las variables
ACTIVATE DIALOG oDlg on init (IgualaVariable(),BloqueaGets())


USE
return NIL

FUNCTION AgregarNuevo()

cPlaca :=Clientes->Placa

SET DELETED OFF
IF MsgYesNo("Agregar Nueva Entrada","Decida")
SELE Clientes
GO TOP
IF DBSEEK(cPlaca)
IF DELETED()
RECALL
ENDIF
ELSE
APPEND BLANK
Clientes->Placa := cPlaca
ENDIF
ActivaGets()
ENDIF
SET DELETED ON

RETURN NIL

FUNCTION BorraRegistro()
LOCAL nReg := Recno() -1

IF MsgYesNo("Borrar Registro","Confirme")
DELETE
ENDIF

DBGOTO( nReg ) // para colocarse un registro previo al que se ha borrado

// Aquí es otro lugar que puedes volver a refrescar los GET

RETURN NIL

FUNCTION BloqueaGets()

getPlaca:disable()
getFecha:disable()
getEmpresa:disable()
getNombre:disable()
getApellido:disable()
getTel_Fijo:disable()
getTel_Mobil:disable()
getmarca:disable()
getColorr:disable()
getLinea:disable()
getOt:disable()
getIngreso:disable()

RETURN NIL

FUNCTION ActivaGets()

getPlaca:enable()
getFecha:enable()
getEmpresa:enable()
getNombre:enable()
getApellido:enable()
getTel_Fijo:enable()
getTel_Mobil:enable()
getmarca:enable()
getColorr:enable()
getLinea:enable()
getOt:enable()
getIngreso:enable()

RETURN NIL
FUNCTION IgualaVariable()

cPlaca := Clientes->Placa
cFecha := Clientes->Fecha
cEmpresa := Clientes->Empresa
cNombre := Clientes->Nombre
cApellido := Clientes->Apellido
cTel_Fijo := Clientes->Tel_Fijo
cTel_Mobil:= Clientes->Tel_Mobil
cMarca := Clientes->Marca
cColorr := Clientes->Colorr
cLinea := Clientes->Linea
cOt := Clientes->Ot
cIngreso := Clientes->Ingreso
RETURN NIL
//----------------------------------------------------------------------------//
FUNCTION Busqueda()


use clientes

cPlaca := Clientes->Placa

DEFINE DIALOG oDlg RESOURCE "Busqueda" TITLE "Busqueda por Placa y OT"

IF EMPTY(cPlaca) .OR. ; // si el campo esta vacío o
ASCAN(cPlaca) == 0 // el contenido no consta en elArray de opciones

ENDIF

REDEFINE GET getPlaca VAR cPlaca ;
ID 390 of oDlg UPDATE PICTURE"!!!999" VALID( busq(cPlaca))


REDEFINE BUTTON oBt1 ID 4001 OF oDlg ACTION busq(cPlaca)


ACTIVATE DIALOG oDlg


function busq(cPlaca)
USE Clientes Alias Clientes
INDEX ON Clientes->Placa TO Clipla
SET INDEX TO Clipla
GO TOP
cPlaca :=Clientes->Placa
seek(cPlaca)
if found()
entradas2(cPlaca)
endif

return found()

La idea es que con un pequeño dialogo busque por placa o por ot y al ejecutar enter se abra el dialogo entradas2() mostrando el registro solicitado

Acepto todo tipo de criticas y sugerencias que me fortalezcan en FWH

Cordialmente
Jairo
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Jairo,

Por favor envíame por email el fichero RC que estás usando, gracias
regards, saludos

Antonio Linares
www.fivetechsoft.com
jaba
Posts: 109
Joined: Tue Dec 12, 2006 12:39 am
Location: CALI COLOMBIA

Post by jaba »

Antonio Linares wrote:Jairo,

Por favor envíame por email el fichero RC que estás usando, gracias
Antonio te envìe el Rc po tu email

Un abrazo
Muy agradecido por tus explicasiones

Jairo Barbosa
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Jairo,

Te hemos enviado tu PRG modificado y funcionando correctamente
regards, saludos

Antonio Linares
www.fivetechsoft.com
jaba
Posts: 109
Joined: Tue Dec 12, 2006 12:39 am
Location: CALI COLOMBIA

Post by jaba »

Antonio Linares wrote:Jairo,

Te hemos enviado tu PRG modificado y funcionando correctamente
Antonio

Gracias Antonio por tus explicaciones, la busqueda del registro deseado funciono muy bien, es fabuloso la forma como se logra, en verdad es gratificante haber aprendido ese punto, solo quda un interrogante, cuando llamo el registro es correcto y muy rapido, pero la informacion que se introdujo por el combobox no aparece en la informacion que trae del registro solicitado, por favor aconsejame como puedo soliccionar este pequeño problemita.

Cordialmente

Jairo Barbosa
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Jairo,

te refieres al combobox de "ingreso" ?

En el PRG faltaba la "@" antes de la variable:

Code: Select all

IgualaVariable( @cPlaca, @cFecha, @cEmpresa,; 
                @cNombre, @cMarca, @cTel_Fijo,;
                @cTel_Mobil, @cColorr, @cLinea,;
                @cOt, @cIngreso, @cRegis, @aItems )
regards, saludos

Antonio Linares
www.fivetechsoft.com
jaba
Posts: 109
Joined: Tue Dec 12, 2006 12:39 am
Location: CALI COLOMBIA

Post by jaba »

Antonio Linares wrote:Jairo,

te refieres al combobox de "ingreso" ?

En el PRG faltaba la "@" antes de la variable:

Code: Select all

IgualaVariable( @cPlaca, @cFecha, @cEmpresa,; 
                @cNombre, @cMarca, @cTel_Fijo,;
                @cTel_Mobil, @cColorr, @cLinea,;
                @cOt, @cIngreso, @cRegis, @aItems )
Revisare si me falta igualar la variable te lo comentare cuando lo ensaye pero lo que sale en ese campo es el contenido del array y no lo que se encuentra en el dbf
Gracias ne nuevo
jaba
Posts: 109
Joined: Tue Dec 12, 2006 12:39 am
Location: CALI COLOMBIA

Post by jaba »

jaba wrote:
Antonio Linares wrote:Jairo,

te refieres al combobox de "ingreso" ?

En el PRG faltaba la "@" antes de la variable:

Code: Select all

IgualaVariable( @cPlaca, @cFecha, @cEmpresa,; 
                @cNombre, @cMarca, @cTel_Fijo,;
                @cTel_Mobil, @cColorr, @cLinea,;
                @cOt, @cIngreso, @cRegis, @aItems )
Revisare si me falta igualar la variable te lo comentare cuando lo ensaye pero lo que sale en ese campo es el contenido del array y no lo que se encuentra en el dbf
Gracias ne nuevo
Antonio
Ya lo encontre!! Muchas gracias cuando coloque el @ no se arreglo pero el pequeño array que tre coloco a continuacion cambie el 0 por uno y mire que logica tiene, claro ya lo esta mostrando.

IF EMPTY(cIngreso) .OR. ; // si el campo esta vacío o
ASCAN(aItems,cIngreso) == 0 // el contenido no consta en elArray de
cIngreso := aItems[1] // opciones

Un abrazo

Jairo Barbosa
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Bien :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
Post Reply