"select descripcion, direccion, otra_mas from mitabla where codigo='001' limit 1"
...
..
.
cDatos := "8999828982"
nRow := MySeek(oProduc, cDato, nCol)
.
..
...
donde:
oProduc es el contenedor de datos xargado mediante uns SELECT....... ajustar para Eagle, TMySQL, SQLRD etc etc
cDatos es el datos que debemos ubicar
nCol es la columna del contenedor de datos en la que haremos la busqueda.
//-----------------------------------------------------------------------------------------------
Function MySeek(oProduc, cDato, nCol)
local nLen, nRec1, lOk, cCampo, nRow
local nLimIn, nLimSu, nMedio
If oProduc:RecCount() = 0 // si el contenedor esta vacio,,, retornamos 0
Return(0)
EndIf
cDato := ALLTRIM(cDato)
nLen := LEN(cDato) // tomamos la longitud del dato a buscar
nRec1 := oProduc:Recno() // ubicamos el puntero inicial del contenedor
lOk := .f.
nLimIn := 1 // limite inferior 1
nLimSu := oProduc:RecCount() // limite superior numero de registros del contenedor
oProduc:GoTop() // nos ubicamos en el 1er registro
WHILE nLimIn + 1 <> nLimSu // hacemos el while entre los limires inferior y superior
nMedio := INT( (nLimIn + nLimSu) / 2 + 0.5) // tomamos el medio relativo del contenedor
oProduc:GoTo(nMedio) // nos reubicamos al medio relativo
cCampo := SUBSTR(oProduc:FieldGet(nCol),1, nLen) ) // tomamos el dato
IF cCampo == cDato // establecemos la comparacion y recalculamos loslimites si no hallamos el dato
lOk := .t.
EXIT
EndIf
If cDato < cCampo
nLimIn := nLimIn
nLimSu := nMedio
EndIf
If cDato > cCampo
nLimIn := nMedio
nLimSu := nLimSu
EndIf
ENDDO
If !lOk
oProduc:GoTo(nRec1)
nRow := 0
Else
nRow := oProduc:Recno()
EndIf
Return(nRow)
function xSeek( nFolio )
local lBusqueda := .f.
nFolio := str(nFolio)
nFolio := ltrim(nFolio)
cSeek :=;
oMysql:Query( "SELECT codigo,nombre FROM facturas WHERE folio = " + nFolio )
lBusqueda := iif( cSeek:recCount() != 0, .t., .f.)
cSeek:end()
cSeek := NIL
return lBusqueda
Return to FiveWin para Harbour/xHarbour
Users browsing this forum: russimicro, SantaCroya and 36 guests