Page 1 of 1

oRs:Find() ado en dos campos, sobre xbrowse, como?

PostPosted: Fri Jan 19, 2024 2:03 am
by leandro
Hola buenas noches para todos

Cuando hacemos una búsqueda sobre un recorset con el metodo find(), en un campo funciona correctamente.
Code: Select all  Expand view

oBrwFt:goTop()
oRsFtr:Find("ll_consec="+alltrim(cFcEn))
oBrwFt:refresh()
 


Ahora nos surge la necesidad de buscar en dos campos a la vez, lo intentamos de la siguiente manera, pero sale error
Code: Select all  Expand view

oBrwFt:goTop()
oRsFtr:Find("ll_consec="+alltrim(cFcEn)+" AND ll_docume="+alltrim(cFcDc))
oBrwFt:refresh()
 


Devuelve el siguiente error:
Code: Select all  Expand view

Application
===========
   Path and name: C:\DLYMA\hymlyma.exe (32 bits)
   Size: 9,043,456 bytes
   Compiler version: xHarbour 1.3.0 Intl. (SimpLex) (Build 20231104)
   FiveWin  version: FWH 23.10
   C compiler version: Borland/Embarcadero C++ 7.7 (32-bit)
   Windows 8 64 Bits, version: 6.2, Build 9200

   Time from start: 0 hours 0 mins 16 secs
   Error occurred at: 18/01/2024, 20:59:27
   Error description: Error ADODB.RecordSet/6  DISP_E_UNKNOWNNAME: FIND
   Args:
     [   1] = C   ll_consec=60914 AND ll_docume=009

Stack Calls
===========
   Called from:  => TOLEAUTO:FIND( 0 )
   Called from: z:\prg\R32_fact.prg => SERVICIONOTARIAS( 15675 )
   Called from: z:\prg\R32_fact.prg => (b)FFACTURAS( 607 )
   Called from: .\source\classes\URLLINK.PRG => TURLLINK:LBUTTONDOWN( 180 )
   Called from: .\source\classes\CONTROL.PRG => TCONTROL:HANDLEEVENT( 1848 )
   Called from: .\source\classes\URLLINK.PRG => TURLLINK:HANDLEEVENT( 168 )
   Called from: .\source\classes\WINDOW.PRG => _FWH( 3651 )
   Called from:  => WINRUN( 0 )
   Called from: .\source\classes\WINDOW.PRG => TMDIFRAME:ACTIVATE( 1113 )
   Called from: z:\prg\R32_menu.prg => VTNAPRINCIPAL( 895 )
   Called from: z:\prg\R32_menu.prg => MAIN( 141 )
 


Alguien sabe como se debe hacer la busqueda sobre un recorset en dos campos?

Re: oRs:Find() ado en dos campos, sobre xbrowse, como?

PostPosted: Fri Jan 19, 2024 3:12 am
by Armando
Leandro:

Podrías hacerlo desde el SELECT con la clausula LIKE, no se si te sirva?

Saludos

Re: oRs:Find() ado en dos campos, sobre xbrowse, como?

PostPosted: Fri Jan 19, 2024 12:40 pm
by cmsoft
Leandro:
Sin conocer ADO te consulto, de que tipo de datos son cFcEn y cFcDc?
Te pregunto por si incluyes en ellas las comillas

Re: oRs:Find() ado en dos campos, sobre xbrowse, como?

PostPosted: Fri Jan 19, 2024 2:57 pm
by JoseAlvarez
leandro,

Yo hago las busquedas por 2 o mas campos asi:

Code: Select all  Expand view
cQuery := "SELECT * from "+cTabla+" WHERE CONCAT (descripcion, codigo_fabrica)  LIKE '%"+cSeek+"%'  ORDER BY descripcion;"


la variable cSeek es un input donde el usuario ingresa bien sea la descipcion o el codigo a buscar.
creo que puede servirte.

Re: oRs:Find() ado en dos campos, sobre xbrowse, como?

PostPosted: Fri Jan 19, 2024 7:52 pm
by leandro
Armando y José, muchas gracias por las respuestas, pero necesitamos hacer la búsqueda sobre el recorset, ya que luego de eso se genera una acción que crea un objeto con base en la información del row, específicamente el que esta seleccionado.

Cesar
Son el código de comprobante y el numero de una factura. Ya también probamos colocándolo dentro de comillas pero devuelve el mismo error.

Re: oRs:Find() ado en dos campos, sobre xbrowse, como?

PostPosted: Fri Jan 19, 2024 7:54 pm
by leandro
De momento encontramos la solución, para el proceso nuevo, buscando sobre el campo del id de la tabla de las facturas.

Pero la verdad es que nos gustaría también incluir la búsqueda por los dos campos, para hacer otro tipo de procesos.

Re: oRs:Find() ado en dos campos, sobre xbrowse, como?

PostPosted: Fri Jan 19, 2024 10:05 pm
by audisys
Hola Leandro,

Se me ocurre que conviertas a un Hash el recordset
algo así, esta hecho al vuelo no se si funciona.


Code: Select all  Expand view

  cBusqueda:="ll_consec="+alltrim(cFcEn)
  hhash    :={ => }
 
  oRs:MoveFirst() /// Voy al primero
 
 for i=0 to oRs:fields:count-1
     cCampo:=oRs:fields(i):name
     uValue:=oRs:fields(i):value
     hhash[cCampo]:=uValue
 next i

   Msginfo( hhash[cBusqueda]) )
 

Re: oRs:Find() ado en dos campos, sobre xbrowse, como?

PostPosted: Mon Jan 22, 2024 8:27 am
by Maurizio
Hello
ors:Find() only works with one field.

If I need more fields use the Filter function

oRs:Filter = "ll_consec="+alltrim(cFcEn)+" AND ll_docume="+alltrim(cFcDc)
IF oRs:RecordCount() == 0

ENDIF
oRs:Filter := "
Maurizio "