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

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

Postby leandro » Fri Jan 19, 2024 2:03 am

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  RUN

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  RUN

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


Devuelve el siguiente error:
Code: Select all  Expand view  RUN

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?
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Embarcadero C++ 7.60 for Win32 ] [ FiveWin 23.07 ] [ xHarbour 1.3.0 Intl. (SimpLex) (Build 20230914) ]
User avatar
leandro
 
Posts: 1676
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia

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

Postby Armando » Fri Jan 19, 2024 3:12 am

Leandro:

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

Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
Armando
 
Posts: 3229
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

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

Postby cmsoft » Fri Jan 19, 2024 12:40 pm

Leandro:
Sin conocer ADO te consulto, de que tipo de datos son cFcEn y cFcDc?
Te pregunto por si incluyes en ellas las comillas
User avatar
cmsoft
 
Posts: 1291
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

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

Postby JoseAlvarez » Fri Jan 19, 2024 2:57 pm

leandro,

Yo hago las busquedas por 2 o mas campos asi:

Code: Select all  Expand view  RUN
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.
"Los errores en programación, siempre están entre la silla y el teclado..."

Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin

Carora, Estado Lara, Venezuela.
User avatar
JoseAlvarez
 
Posts: 797
Joined: Sun Nov 09, 2014 5:01 pm

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

Postby leandro » Fri Jan 19, 2024 7:52 pm

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.
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Embarcadero C++ 7.60 for Win32 ] [ FiveWin 23.07 ] [ xHarbour 1.3.0 Intl. (SimpLex) (Build 20230914) ]
User avatar
leandro
 
Posts: 1676
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia

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

Postby leandro » Fri Jan 19, 2024 7:54 pm

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.
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Embarcadero C++ 7.60 for Win32 ] [ FiveWin 23.07 ] [ xHarbour 1.3.0 Intl. (SimpLex) (Build 20230914) ]
User avatar
leandro
 
Posts: 1676
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia

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

Postby audisys » Fri Jan 19, 2024 10:05 pm

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  RUN

  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]) )
 
José David Angulo
Auditoria y Sitemas Ltda.
Cartagena Colombia
audisys
 
Posts: 49
Joined: Wed Apr 18, 2007 6:01 pm
Location: Cartagena - Colombia

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

Postby Maurizio » Mon Jan 22, 2024 8:27 am

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 "
User avatar
Maurizio
 
Posts: 825
Joined: Mon Oct 10, 2005 1:29 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 71 guests