Buscar un registro con ADORDD

Buscar un registro con ADORDD

Postby JoseLuis » Sun Mar 03, 2019 11:06 am

Buenos dias

Estoy con un tema que me tiene frito, no soy capaz de encontrar un dato mediante ADORDD en una tabla, siempre me da algun tipo de error, o simplemente no lo busca.
Tengo el siguiente codigo completo:
Code: Select all  Expand view  RUN
** ************************************
** ------------------------------------
** RUTINAS PARA LA GESTION DE Avisos
** ------------------------------------
** ************************************
#include "adordd.ch"
#include "FiveWin.ch"
#include "Report.ch"
#include "dtpicker.ch"
#include "ord.ch"
#include "calendar.ch"
#include "xbrowse.ch"
#include 'hbcompat.ch'
STATIC oReport
//-----------------------------------------
memvar Publicas
memvar ccomentario
memvar cincidencia
memvar cruta
memvar ccodpro
memvar cpro1
memvar cdomi1
memvar ctel1
FUNCTION Paginaweb()
local cTitulo
cTitulo:="Trato de albaranes en pagina web"
Publicas:cserver1:="Localhost"
Publicas:cUser1 :="root"
Publicas:cPassword1""
Publicas:cPuerto:="3306"
Publicas:cBase:="Base"
Publicas:cTabla:="podwin"

//-------------------
   trataweb(cTitulo)
   return nil
//-------------------

///////////// AVISOS EN INTERNET
static function trataweb(ctitulo)
local oDlg, oLbx,oBrw
LOCAL oServer
LOCAL oRs
local hdc :=CreateDc("DISPLAY","","")
local nHor:=GetDeviceCaps(hdc,8)
local nVer:=GetDeviceCaps(hdc,10)
local x1:=30
local y1:=30
local x2:=nver-160
local y2:=nHor-30
local oBar
IF ( oServer := ConectaP() ) != NIL  
  oRS = PodSet( oServer )
 DEFINE WINDOW oDlg MDICHILD ICON Publicas:oIco;
    OF Publicas:oWPpal;
    FROM x1,y1;
    TO x2,y2;
    COLOR CLR_BLACK,CLR_WHITE;
    PIXEL

  oDlg:cTitle:=cTitulo
  DEFINE BUTTONBAR oBar TOP 3D OF oDlg
    DEFINE BUTTON RESOURCE "CAMBIA" OF oBar NOBORDER MESSAGE "Subir Imagenes" ACTION (Subeimagen(oServer,oRs,oBrw),oDlg:Refresh());
            TOOLTIP "Subir Imagenes escaneadas"
    DEFINE BUTTON RESOURCE "SALIR"  OF oBar NOBORDER MESSAGE "Salir"       ACTION oDlg:END();
            TOOLTIP "Salir"
  @ 0, 0 xbrowse oBrw object oRS ;
    COLUMNS "no_pedido","no_manif","Fecha" ,"Fechapod"   ,"horapod" ,"webacces1" ,"Compania","Origen","Destino","Imagen","Importe","Segmer","Bultos" ;
    HEADERS "Orden"  ,"Albaran" ,"Fecha" ,"Fecha_ega"  ,"Hora_ega"  ,"Codigo"    ,"Nombre"  ,"Origen","Destino","Imagen","Importe","Refa"  ,"Bultos" ;
    COLSIZES 100,60,60,60,60,80,250,250,250,20,60,150,40 ;
    AUTOCOLS LINES CELL
    oBrw:lColDividerComplete:= .f.
    oBrw:nTop       := oDlg:nTop()
    oBrw:lKineticBrw    := .f.
    oBrw:nMarqueeStyle  := MARQSTYLE_HIGHLROW // Con cursor de todo el renglón
    oBrw:nBottom        := 152
    oBrw:nRight     := oDlg:nWidth()
    oBrw:nStretchCol    := STRETCHCOL_LAST
    oBrw:CreateFromCode()
    oDlg:oClient = oBrw
         ACTIVATE WINDOW oDlg    ;
         ON INIT oBrw:SetFocus() ;
         MAXIMIZED;
         ON RESIZE (oBrw:nWidth:=oDlg:nWidth-10,;
         oBrw:nHeight:=oDlg:nHeight-95,;
         oBrw:Refresh());
         VALID (oBrw:Close(),.t. )

 ENDIF


return nil

////-------------DESCARGA DE INTERNET
///////////////////////////////////
FUNCTION PodSet( oServer )

   LOCAL oRS, oError, cQry,cCant
   
   TRY
      oRS = CreateObject( "ADODB.RecordSet" )       
   CATCH oError
      ? "Ha fallado el inicio!!!"
      ShowError( oError )      
      RETURN NIL
   END   

   cQry = "SELECT NO_PEDIDO,NO_MANIF,FECHA,FECHAPOD,FIRMAPOD,HORAPOD,WEBACCES1,COMPANIA,ORIGEN,DESTINO,IMAGEN,IMPORTE,SEGMER,BULTOS FROM podwin ORDER BY no_pedido"
   oRS:cursorLocation = adUseClient
   oRS:lockType       = adLockOptimistic
   oRS:cursorType     = adOpenDynamic
   oRS:source         = cQry
   oRS:activeConnection =  oServer
   
   TRY
      oRS:open()
   CATCH oError
      ? "Ha fallado la orden de seleccion!!!"
      ShowError( oError )      
      RETURN NIL
   END   

return oRS

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

FUNCTION ConecTaP()
   LOCAL oServer   := NIL
   LOCAL cServer:=Publicas:cserver1  
   LOCAL cUser :=Publicas:cUser1    
   LOCAL cPassword :=Publicas:cPassword1
   LOCAL nPort    
   LOCAL cDBName  
   LOCAL nFlags    
   LOCAL oErr
   LOCAL cConString
   LOCAL lRet      := .T.
   LOCAL cTable

   nPort     := Publicas:cPuerto
   cDBName   := Publicas:cBase
   cTable    := Publicas:cTabla
   nFlags    := 0
   cConString := "Driver={MySQL ODBC 5.1 Driver}"    + ;
                 ";Server=" + cServer                + ;
                 ";DefaultDatabase=" + cDBName       + ;
                 ";Database=" + cDBName              + ;
                 ";Port=" + nPort                    + ;
                 ";User=" + cUser                    + ;
                 ";Password=" + cPassword            + ;
                 ";Option=3;"  
   

   TRY
     oServer := CreateObject( "ADODB.Connection" )    
   CATCH oErr
      ? "Ha fallado el inicio del Servidor!!!"
      ShowError( oErr )      
      RETURN NIL
   END  
   
   oServer:ConnecTionString := cConString
   
   TRY
     oServer:Open()
   CATCH oErr
     ? "Ha fallado la conexion con el servidor!!!"
     ShowError( oErr )
     RETURN NIL
   END  
   
RETURN oServer

//-----------------------------------------
Static function subeimagen(oServer,oRs,oBrw)
local oDlg,i,osay,oini,ofin,oboton,oboton1
local continua:=.F.
local aAlias
local cIni:= Date()
local cFin:= Date()
local norden,cAwb,cFile
aAlias:= cargaAlias()

dbUseArea(.T.,,Publicas:cUnidad+Publicas:cSubd+"\ALBARAN",aAlias[24],.T.)
    (aAlias[24])->(OrdSetFocus("Fecha"))
    (aAlias[24])->( dbGotop() )
  DEFINE DIALOG oDlg RESOURCE "DESDE" BRUSH Publicas:oBrush1 TRANSPARENT Font Publicas:oWPpal:ofont
    for i   = 10 to 11
        REDEFINE SAY osay ID i OF oDlg COLOR CLR_GREEN
    next i
    REDEFINE Dtpicker oini VAR cIni ID 101 OF oDlg
    REDEFINE Dtpicker ofin VAR cFin ID 102 OF oDlg
    REDEFINE BUTTON oboton ID 550   OF oDlg PROMPT "Aceptar" ;
        ACTION (Continua := .T., oDlg:End())
    REDEFINE BUTTON oboton1 ID 551 OF oDlg PROMPT   "Cancelar" ;
        ACTION (oDlg:End()) CANCEL
  ACTIVATE DIALOG oDlg CENTERED
  if Continua
    (aAlias[24])->(Ordscope(0,cIni))
    (aAlias[24])->(Ordscope(1,cFin))
    (aAlias[24])->(Dbgotop())
    do while !(aAlias[24])->(Eof())
    norden:=alltrim(str((aAlias[24])->Orden,7))
    cAwb:=PADL(norden,7,"0")
    cFile:=Publicas:cDocs+cAwb+".JPG"
    IF FILE(cFile)
        oRs:Seek("no_pedido="+norden)
        oRs:Fields("Imagen"):Value := 1
    ELSE
        oRs:Seek("no_pedido="+norden)
        oRs:Fields("Imagen"):Value := 0
    ENDIF
    (aAlias[24])->(Dbskip())
    enddo
    (aAlias[24])->(Ordscope(0,Nil))
    (aAlias[24])->(Ordscope(1,Nil))
  endif
    (aAlias[24])->(Dbclosearea())
return nil
 


Este proyecto lo estoy compilando en xharbour y creo que con la versión de Abril de 2011 de FWH, aunque tengo las posteriores, pero tengo tantas rutinas y librerías de terceros que no me merece la pena actualizar el proyecto.

A ver si algun alma caritativa me da la luz.

Un saludo
--------------------------
Saludos

Jose Luis
JoseLuis
 
Posts: 426
Joined: Thu Oct 19, 2006 12:28 pm
Location: Toledo

Re: Buscar un registro con ADORDD

Postby JoseLuis » Mon Mar 04, 2019 12:08 pm

Solamente añadir que todos los comandos como Movefirst, MoveLast, etc, funcionan perfectamente, sólamente el comando Seek, Find, Locate, que la verdad es que no sé si lo estoy haciendo del modo correcto.
--------------------------
Saludos

Jose Luis
JoseLuis
 
Posts: 426
Joined: Thu Oct 19, 2006 12:28 pm
Location: Toledo

Re: Buscar un registro con ADORDD

Postby gmart1 » Mon Mar 04, 2019 12:55 pm

Creo que necesitas añadir unas comillas simples, porque la variable norden es un String.
Code: Select all  Expand view  RUN
     oRs:Seek("no_pedido="+"'" + norden + "'")
gmart1
 
Posts: 80
Joined: Wed Oct 24, 2007 12:48 pm
Location: Alhaurin de la Torre (MALAGA)

Re: Buscar un registro con ADORDD

Postby JoseLuis » Mon Mar 04, 2019 1:14 pm

Buenas

Gracias por contestar

me da este error:
************************************************************
Application
===========
Path and name: C:\five\fuentes\gespaq08\gespaqn.Exe (32 bits)
Size: 1,456,128 bytes
Time from start: 0 hours 0 mins 38 secs
Error occurred at: 04/03/19, 14:06:53
Error description: Error ADODB.RecordSet/6 DISP_E_UNKNOWNNAME: SEEK
Args:
[ 1] = C no_pedido='1920645'
**************************************************************
Y ese número no lo debe encontrar, ya que no está en la base de datos Mysql,
pero no sé si el error es debido a que no lo encuentra, y entonces habría que hacer algo, o por el contrario es un error en la forma de construir el seek.

Saludos
--------------------------
Saludos

Jose Luis
JoseLuis
 
Posts: 426
Joined: Thu Oct 19, 2006 12:28 pm
Location: Toledo

Re: Buscar un registro con ADORDD

Postby gmart1 » Mon Mar 04, 2019 1:35 pm

Yo no uso ADORDD.
Para la búsqueda por una columna uso el método find de ADO.
Code: Select all  Expand view  RUN
  oRs:Find("no_pedido="+"'" + norden + "'")

Que se sitúa en la fila que cumpla la condición, si no se ha encontrado oRS:Eof es true.
No sé si te servirá.
Un saludo.
gmart1
 
Posts: 80
Joined: Wed Oct 24, 2007 12:48 pm
Location: Alhaurin de la Torre (MALAGA)

Re: Buscar un registro con ADORDD

Postby hmpaquito » Mon Mar 04, 2019 2:58 pm

Hola,


Ya se ve que por aquí sólo constestamos los que no usamos ADORDD.

A ver.

Yo no uso ADORDD, pero su uso es totalmente transparente.

Esto debe funcionar tal cual:
SELECT Articulos
SEEK cCodigo

Si no funciona es porque te falte poner algo al principio del programa. Creo que habia que poner la lista de indices que se iban a usar o algo asi.

En el github del proyecto habia informacion al respecto

Saludos
hmpaquito
 
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm

Re: Buscar un registro con ADORDD

Postby JoseLuis » Tue Mar 05, 2019 12:31 pm

Buenas

El caso es que como podeis ver en el código no es ADORDD, es ADO, lo que pasa es que estoy probando tanto con ADO como con ADORDD, y no ha manera de encontrar un dato, no soy capaz de construir un fuente que me busque.
hago de todo, añadir, reemplazar, borrar, etc, todo menos buscar. Quiero buscar en una tabla mysql un dato (en este caso un número) que se encuentra en una DBF, y en función de si lo encuentra o nó, que cambie el valor de otro campo de la tabla mysql por 0 o por 1.

Ya me estoy quemando :evil:
--------------------------
Saludos

Jose Luis
JoseLuis
 
Posts: 426
Joined: Thu Oct 19, 2006 12:28 pm
Location: Toledo

Re: Buscar un registro con ADORDD

Postby gmart1 » Tue Mar 05, 2019 1:14 pm

Hola, si la búsqueda la haces por un campo numérico no necesitas las comillas simples.
Prueba a hacer
Code: Select all  Expand view  RUN
oRs:Find("no_pedido="+norden)
? oRs:Fields("no_pedido"):Value, oRs:Eof

Si lo ha encontrado te mostrará en pantalla el valor norden y .f. para el Eof.
En este caso mira a ver si te falta un oRs:Update() en
Code: Select all  Expand view  RUN
    oRs:Fields("Imagen"):Value := 1
    oRs:Update()
 

Un saludo.
gmart1
 
Posts: 80
Joined: Wed Oct 24, 2007 12:48 pm
Location: Alhaurin de la Torre (MALAGA)

Re: Buscar un registro con ADORDD

Postby Armando » Tue Mar 05, 2019 3:11 pm

José Luis

Intenta con

Code: Select all  Expand view  RUN

oRs:Find("no_pedido = " + "'" + STR(norden,7,0) + "'" )
 


Nota: el número 7 lo ajustas dependiendo del tipo de campo (TINY, INTEGER, SMALLINT, etc etc) y longitud que hayas definido al crear la tabla,
y recuerda que MySQL prácticamente todo lo almacena como alfabético.

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: Buscar un registro con ADORDD

Postby JoseLuis » Wed Mar 06, 2019 9:00 am

Buenas

Mi preguta es, ¿podría ser que no encuentra el dato por los espacios?
Es decir, el dato a buscar es "1234567", y en la tabla mysql los datos de esa columna son " 1234567".
he hecho:
Code: Select all  Expand view  RUN

        oRs:Find(trim("no_pedido")+" = " + "'" + norden + "'" )
 

y fallo en algo.
Luego para ver resultados con msginfo hago
Code: Select all  Expand view  RUN

    msginfo(oRs:Fields("no_pedido"):trim(value))
 

y me da error al compilar

Como podría poner trim, primero para que quite los espacios en la busqueda del dato en la tabla, y luego en Fields para ver si realmente quita los espacios.
--------------------------
Saludos

Jose Luis
JoseLuis
 
Posts: 426
Joined: Thu Oct 19, 2006 12:28 pm
Location: Toledo

Re: Buscar un registro con ADORDD

Postby Armando » Wed Mar 06, 2019 1:13 pm

José Luis:

Con el ejemplo que te puse, cual fue el resultado?

Asumo que no_pedido es un campo numérico.

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: Buscar un registro con ADORDD

Postby JoseLuis » Wed Mar 06, 2019 4:40 pm

Buenas

Como te hago referencia anteriormente, lo he probado, y como te digo, el campo es alfanumérico, y para que coincidan tengo que quitar los espacios.

Si pongo oRs:Find("no_pedido"..... etc, no lo encuentra, ya que no_pedido es " 1234537", y norden es "1234567", entonces no se donde poner el trim en el Find como te comento anteriormente, a fin de que busque en la columna no_pedido, pero que quite los espacios.

oRs:Find(Trim("no_pedido")...... no funciona
--------------------------
Saludos

Jose Luis
JoseLuis
 
Posts: 426
Joined: Thu Oct 19, 2006 12:28 pm
Location: Toledo

Re: Buscar un registro con ADORDD

Postby Armando » Wed Mar 06, 2019 5:01 pm

José luis:

El tipo de campo es importante, si es alfanumérico definitivamente es por
los espacios, primero se los quitas y despues haces la busqueda, así.

Code: Select all  Expand view  RUN

norden := ALLTRIM(norden)     // Primero le quitas los espacios

oRs:Find("no_pedido = " + "'" + norden + "'" )
 


Prueba y avisas.

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: Buscar un registro con ADORDD

Postby JoseLuis » Wed Mar 06, 2019 6:29 pm

Buenas

Gracias por contestar

Como te digo anteriormente, los espacios los tengo quitados en norden, el problema es que no se como quitarlos en "no_pedido", ya que es un campo de una tabla.
--------------------------
Saludos

Jose Luis
JoseLuis
 
Posts: 426
Joined: Thu Oct 19, 2006 12:28 pm
Location: Toledo

Re: Buscar un registro con ADORDD

Postby Armando » Wed Mar 06, 2019 6:39 pm

José Luis:

Ahh, entiendo.

Solo una idea, en lugar de tratar de quitar los espacios a no_pedido agrégalos
a npedido con PADL(), así igualas los valores.

Aunque en mi personal opinión, cuando los valores son alfanuméricos el control EDIT
lo debes poner con ajuste a la izquierda.

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

Next

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 70 guests