In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Erro em TDbfDataSet:Seek()
- Marcelo Coelho Silva
- Mensajes: 269
- Registrado: Sab May 31, 2008 4:49 pm
- Ubicación: Brasil
- Contactar:
Erro em TDbfDataSet:Seek()
Senhores,
Ao utilizar o método Seek() do objeto TDbfDataSet encontramos uma falha.
Se o índice (utilizando CDX) for do tipo DATE e utilizarmos a busca por
SoftSeek (ex: oDbf:Seek( date(), .T. ), esta não funciona, ou seja, se a
Data a ser procurada não existir, ele retorna o ponteiro de registro a
posição original e retorna .F. .
Deveria (SoftSeek) colocar o penteiro de registro no registro mais perto
da busca e retornar .T. .
Aparentemente ele ignora a opção de SoftSeek.
Como posso fazer para contornar este problema ???
Obrigado,
Marcelo Coelho Silva
Brasil.
Ao utilizar o método Seek() do objeto TDbfDataSet encontramos uma falha.
Se o índice (utilizando CDX) for do tipo DATE e utilizarmos a busca por
SoftSeek (ex: oDbf:Seek( date(), .T. ), esta não funciona, ou seja, se a
Data a ser procurada não existir, ele retorna o ponteiro de registro a
posição original e retorna .F. .
Deveria (SoftSeek) colocar o penteiro de registro no registro mais perto
da busca e retornar .T. .
Aparentemente ele ignora a opção de SoftSeek.
Como posso fazer para contornar este problema ???
Obrigado,
Marcelo Coelho Silva
Brasil.
Att.
Marcelo Coelho Silva
Brasil.
Marcelo Coelho Silva
Brasil.
Erro em TDbfDataSet:Seek()
Voce ja tentou ordernar usando o formato aaaammdd (DtoS(dia), por exemplo)?
- Marcelo Coelho Silva
- Mensajes: 269
- Registrado: Sab May 31, 2008 4:49 pm
- Ubicación: Brasil
- Contactar:
Erro em TDbfDataSet:Seek()
Senhores,
Após mais alguns teste, verifiquei melhor e o SoftSeek esta funcionando,
porem o metodo :Seek() retorna o valor .F. .
Bastou eu tratar esta característica do :Seek() .
Desculpe-me a falha. O erro não existe.
Obrigado,
Marcelo Coelho Silva
Brasil.
Em 15/10/2011 09:20, Roberto escreveu:
> Voce ja tentou ordernar usando o formato aaaammdd
> (DtoS(dia), por exemplo)?
Após mais alguns teste, verifiquei melhor e o SoftSeek esta funcionando,
porem o metodo :Seek() retorna o valor .F. .
Bastou eu tratar esta característica do :Seek() .
Desculpe-me a falha. O erro não existe.
Obrigado,
Marcelo Coelho Silva
Brasil.
Em 15/10/2011 09:20, Roberto escreveu:
> Voce ja tentou ordernar usando o formato aaaammdd
> (DtoS(dia), por exemplo)?
Att.
Marcelo Coelho Silva
Brasil.
Marcelo Coelho Silva
Brasil.
Re: Erro em TDbfDataSet:Seek()
Señores buenas tardes he tratado de hacer funcionar softseek con dtos pero no funciona. Alguien me puede ayudar
adjunto segmento del programa
Siempre me retorna Falso y no se la razón el indice esta generado de la siguiente forma:
Strzero(Empresa,2)+ Dtos(fecha)
Si yo hago un debug al programa el texto a consultar es el siguiente 0120151101
With object ::oDbfHisTran
:OrdSetFocus( "Histran5" )
If ::oDbfHisTran:Seek(Strzero(appdata:pCodempre,2)+ DToS(::oDBFecIniTra:Value), .t. ) //LINEA CON EL PROBLEMA
Do while :Numdoc == Val(::oEdCodigo:Value) .and. :Empresa == appdata:pCodEmpre .and. !:Eof()
AAdd( aLines, {:Cuotas, :CodOpe, :NumOpe, :Monto, :Comision, :MonIva, :Monto+:Comision+:MonIva, ;
IIF(:Tipdoc = 6, "D","C")} )
:Skip()
Enddo
EndIf
End With
::oBrwHisTranAsi:aArrayData := aLines
Por favor su ayuda, he mandado otras consultas pero nunca me han contestado espero que esta si.
De antemano muchas gracias
Saludos
adjunto segmento del programa
Siempre me retorna Falso y no se la razón el indice esta generado de la siguiente forma:
Strzero(Empresa,2)+ Dtos(fecha)
Si yo hago un debug al programa el texto a consultar es el siguiente 0120151101
With object ::oDbfHisTran
:OrdSetFocus( "Histran5" )
If ::oDbfHisTran:Seek(Strzero(appdata:pCodempre,2)+ DToS(::oDBFecIniTra:Value), .t. ) //LINEA CON EL PROBLEMA
Do while :Numdoc == Val(::oEdCodigo:Value) .and. :Empresa == appdata:pCodEmpre .and. !:Eof()
AAdd( aLines, {:Cuotas, :CodOpe, :NumOpe, :Monto, :Comision, :MonIva, :Monto+:Comision+:MonIva, ;
IIF(:Tipdoc = 6, "D","C")} )
:Skip()
Enddo
EndIf
End With
::oBrwHisTranAsi:aArrayData := aLines
Por favor su ayuda, he mandado otras consultas pero nunca me han contestado espero que esta si.
De antemano muchas gracias
Saludos
Marcelo Coelho Silva escribió:Senhores,
Ao utilizar o método Seek() do objeto TDbfDataSet encontramos uma falha.
Se o índice (utilizando CDX) for do tipo DATE e utilizarmos a busca por
SoftSeek (ex: oDbf:Seek( date(), .T. ), esta não funciona, ou seja, se a
Data a ser procurada não existir, ele retorna o ponteiro de registro a
posição original e retorna .F. .
Deveria (SoftSeek) colocar o penteiro de registro no registro mais perto
da busca e retornar .T. .
Aparentemente ele ignora a opção de SoftSeek.
Como posso fazer para contornar este problema ???
Obrigado,
Marcelo Coelho Silva
Brasil.
Re: Erro em TDbfDataSet:Seek()
Si no recuerdo mal (disculpame pero hace años que no utilizo DBFs), DbSeek( ..., .t. ) devuelve .T. sólo si ha encontrado un registro "exacto". En cambio, si el resultado es "inexacto", el valor de retorno es .F.
Por lo tanto, si vas a hacer una búsqueda inexacta, nunca deberías tener en cuenta el valor de retorno. En su lugar, debes comprobar el valor de Eof().
Por lo tanto, si vas a hacer una búsqueda inexacta, nunca deberías tener en cuenta el valor de retorno. En su lugar, debes comprobar el valor de Eof().
Re: Erro em TDbfDataSet:Seek()
hola Jose :
Infomacion oficial sobre DBSeek y SOFTSEEK en Harbour
http://harbour.edu.pl/clipper/en/ng2ff8b.html
http://harbour.edu.pl/clipper/en/ngdd095.html
Saludos :
Jose Vte.
Infomacion oficial sobre DBSeek y SOFTSEEK en Harbour
http://harbour.edu.pl/clipper/en/ng2ff8b.html
http://harbour.edu.pl/clipper/en/ngdd095.html
Saludos :
Jose Vte.
Re: Erro em TDbfDataSet:Seek()
José Vicente,
gracias por los enlaces. Ya había visto la documentación de Clipper al respecto, y a mí no me quedaba del todo claro lo que devuelve DbSeek() cuando no encuenta un registro "exacto" pero sin llegar a irse a Eof(). De todos modos, siguiendo los enlaces que has puesto he llegado a esta otra documentación (http://harbour.edu.pl/harbour/api.html#dbseek) y ahí sí que queda más claro (las negritas y cursivas las he puesto yo):
gracias por los enlaces. Ya había visto la documentación de Clipper al respecto, y a mí no me quedaba del todo claro lo que devuelve DbSeek() cuando no encuenta un registro "exacto" pero sin llegar a irse a Eof(). De todos modos, siguiendo los enlaces que has puesto he llegado a esta otra documentación (http://harbour.edu.pl/harbour/api.html#dbseek) y ahí sí que queda más claro (las negritas y cursivas las he puesto yo):
Por lo tanto, esto confirma lo que he comentado en el otro mensaje... que si el valor de retorno es .F. sólo significa que no se ha encontrado un registro "exacto", pero sí que se puede haber encontrado un registro con un valor de clave mayor que el que se ha buscado.This function searches for the first record in a database file whose index key matches <expKey>. If the item is found, the function will return a logical true (.T.), the value of Found() wilI be a logical true (.T.), and the value of Eof() wilI be a logical false (.F.). If no item is found. then the function will return a logical false, the value of Found( ) will be a logical false (.F.), and the value of Eof() will be a logical true (.T.).
This function always "rewinds" the database pointer and starts the search from the top of the file.
If the SOFTSEEK flag is on or if <lSoftSeek> is set to a logical true (.T.) the value of Found() will be a logical false and Eof() will be false if there is an item in the index key with a greater value than the key expression <expKey>; at this point the record pointer will position itself on that record. However, if there is no greater key in the index, Eof() will return a logical true (.T.) value. If <lSoftSeek> is not passed, the function will look to the internal status of SOFTSEEK before performing the operation. The default of <lSoftSeek> is a logical false (.F.)
Re: Erro em TDbfDataSet:Seek()
He realizado muchas pruebas pero no funciona.
Ordenado con dtos, aaaammdd, diferentes formas de hacer los indices. pero nada no funciona.
Gracias por las respuestas.
Ojala alguien tenga una solución a este problema.
Saludos,
Ordenado con dtos, aaaammdd, diferentes formas de hacer los indices. pero nada no funciona.
Gracias por las respuestas.
Ojala alguien tenga una solución a este problema.
Saludos,
Re: Erro em TDbfDataSet:Seek()
No había visto el último comentario lo pruebo y les comento.
Gracias.
Pd.
Estoy comenzando con la migración a BD.
Saludos,
Gracias.
Pd.
Estoy comenzando con la migración a BD.
Saludos,
Re: Erro em TDbfDataSet:Seek()
La solución parece muy sencilla: sólo tienes que quitar el "IF" de la línea que has indicado que tenía el problema (y su "ENDIF" correspondiente). Es decir, tienes que llamar a Seek() pero sin preocuparte del valor de retorno. Como la siguiente línea es un "DO WHILE" donde ya compruebas el estado de Eof(), debería funcionar sin problemas.
- Carlos Ortiz
- Mensajes: 872
- Registrado: Mié Jul 01, 2009 5:44 pm
- Ubicación: Argentina - Córdoba
- Contactar:
Re: Erro em TDbfDataSet:Seek()
Efectivamente como dice Jose ahora recuerdo esos seek con softseek on (viene desde el año del ñaupa, no debes preocuparte por el valor de retorno) a lo mejor te retorna falso pero estas parado en un registro que si te sirve tener en cuenta.jfgimenez escribió:La solución parece muy sencilla: sólo tienes que quitar el "IF" de la línea que has indicado que tenía el problema (y su "ENDIF" correspondiente). Es decir, tienes que llamar a Seek() pero sin preocuparte del valor de retorno. Como la siguiente línea es un "DO WHILE" donde ya compruebas el estado de Eof(), debería funcionar sin problemas.
saludos
@dbfarma
www.dbfarma.com.ar
www.dbfarma.com.ar