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.
Error al usar Metodo LOCATE con mas de 1 campo.
-
- Mensajes: 113
- Registrado: Lun Nov 13, 2006 5:29 am
Error al usar Metodo LOCATE con mas de 1 campo.
Buenas Tardes
Estos con una rutina para poder incorporar la informacion de la pocket ya
directamente a la base de datos en Oracle, pues bien uso el metodo locate,
pero no me esta evaluando cuando le paso mas de 2 campos a comparar. con uno
me funciona correcto. La informacion la leo de una tabla DBF. Existe algun
problema en este metodo al evaluar mas de 1 campo ?? Adjunto pantalla con el
error mostrado tambien; sin embargo luego de mostrar el error, el programa
continua con la rutina.
En espera de sus comentarios.
Adjunto parte del codigo.
------------------------------------------------------------ -----------------------------------------------------------
WITH OBJECT clsqldestino := TSQLTable():New()
:oDataSource := clSqlAdo
:cProcess := "GENERAL"
:nCursorType := adOpenDynamic
:nLockType := adLockOptimistic
:cTableName := ClPara5
:Create()
END
clsqldestino:lOpen:=.T.
Do While !eof()
IF CLPARA2='QUEJASD.CSV'
-- EN ESTA LINEA DA EL ERROR
clFOund=iif(CLSQLDESTINO:locate("CLIENTE='"+mCliente+"' AND
CODIGO='"+mCodigo+"'"),.t.,.f.)
--
ENDIF
......------------------------------------------------------ ------------------------------------------------------------ --
Attached files
Estos con una rutina para poder incorporar la informacion de la pocket ya
directamente a la base de datos en Oracle, pues bien uso el metodo locate,
pero no me esta evaluando cuando le paso mas de 2 campos a comparar. con uno
me funciona correcto. La informacion la leo de una tabla DBF. Existe algun
problema en este metodo al evaluar mas de 1 campo ?? Adjunto pantalla con el
error mostrado tambien; sin embargo luego de mostrar el error, el programa
continua con la rutina.
En espera de sus comentarios.
Adjunto parte del codigo.
------------------------------------------------------------ -----------------------------------------------------------
WITH OBJECT clsqldestino := TSQLTable():New()
:oDataSource := clSqlAdo
:cProcess := "GENERAL"
:nCursorType := adOpenDynamic
:nLockType := adLockOptimistic
:cTableName := ClPara5
:Create()
END
clsqldestino:lOpen:=.T.
Do While !eof()
IF CLPARA2='QUEJASD.CSV'
-- EN ESTA LINEA DA EL ERROR
clFOund=iif(CLSQLDESTINO:locate("CLIENTE='"+mCliente+"' AND
CODIGO='"+mCodigo+"'"),.t.,.f.)
--
ENDIF
......------------------------------------------------------ ------------------------------------------------------------ --
Attached files
-
- Mensajes: 113
- Registrado: Lun Nov 13, 2006 5:29 am
Error al usar Metodo LOCATE con mas de 1 campo.
Solo para agregar algo, antes de comenzar a desarrollar en Xailer el
software de Backoffice para la pocket PC, habia comenzado algo en Minigui y
xHarbour, lo que si recuerdo es que el metodo LOCATE de ado no me funciono
por lo que termine usando el metodo FIND, que si me permite evaluar varios
campos, podria ser posible agregar este metodo a la clase TSQLTABLE.
En espera de sus comentarios.
"Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
news:[email=465752db@ozsrv2.ozlan.local...]465752db@ozsrv2.ozlan.local...[/email]
> Buenas Tardes
>
> Estos con una rutina para poder incorporar la informacion de la pocket ya
> directamente a la base de datos en Oracle, pues bien uso el metodo
> locate, pero no me esta evaluando cuando le paso mas de 2 campos a
> comparar. con uno me funciona correcto. La informacion la leo de una tabla
> DBF. Existe algun problema en este metodo al evaluar mas de 1 campo ??
> Adjunto pantalla con el error mostrado tambien; sin embargo luego de
> mostrar el error, el programa continua con la rutina.
>
> En espera de sus comentarios.
>
> Adjunto parte del codigo.
>
> ------------------------------------------------------------ -----------------------------------------------------------
> WITH OBJECT clsqldestino := TSQLTable():New()
> :oDataSource := clSqlAdo
> :cProcess := "GENERAL"
> :nCursorType := adOpenDynamic
> :nLockType := adLockOptimistic
> :cTableName := ClPara5
> :Create()
> END
> clsqldestino:lOpen:=.T.
>
> Do While !eof()
> IF CLPARA2='QUEJASD.CSV'
>
> -- EN ESTA LINEA DA EL ERROR
> clFOund=iif(CLSQLDESTINO:locate("CLIENTE='"+mCliente+"' AND
> CODIGO='"+mCodigo+"'"),.t.,.f.)
> --
> ENDIF
> .....------------------------------------------------------- ------------------------------------------------------------ -
>
>
>
software de Backoffice para la pocket PC, habia comenzado algo en Minigui y
xHarbour, lo que si recuerdo es que el metodo LOCATE de ado no me funciono
por lo que termine usando el metodo FIND, que si me permite evaluar varios
campos, podria ser posible agregar este metodo a la clase TSQLTABLE.
En espera de sus comentarios.
"Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
news:[email=465752db@ozsrv2.ozlan.local...]465752db@ozsrv2.ozlan.local...[/email]
> Buenas Tardes
>
> Estos con una rutina para poder incorporar la informacion de la pocket ya
> directamente a la base de datos en Oracle, pues bien uso el metodo
> locate, pero no me esta evaluando cuando le paso mas de 2 campos a
> comparar. con uno me funciona correcto. La informacion la leo de una tabla
> DBF. Existe algun problema en este metodo al evaluar mas de 1 campo ??
> Adjunto pantalla con el error mostrado tambien; sin embargo luego de
> mostrar el error, el programa continua con la rutina.
>
> En espera de sus comentarios.
>
> Adjunto parte del codigo.
>
> ------------------------------------------------------------ -----------------------------------------------------------
> WITH OBJECT clsqldestino := TSQLTable():New()
> :oDataSource := clSqlAdo
> :cProcess := "GENERAL"
> :nCursorType := adOpenDynamic
> :nLockType := adLockOptimistic
> :cTableName := ClPara5
> :Create()
> END
> clsqldestino:lOpen:=.T.
>
> Do While !eof()
> IF CLPARA2='QUEJASD.CSV'
>
> -- EN ESTA LINEA DA EL ERROR
> clFOund=iif(CLSQLDESTINO:locate("CLIENTE='"+mCliente+"' AND
> CODIGO='"+mCodigo+"'"),.t.,.f.)
> --
> ENDIF
> .....------------------------------------------------------- ------------------------------------------------------------ -
>
>
>
-
- Mensajes: 113
- Registrado: Lun Nov 13, 2006 5:29 am
Error al usar Metodo LOCATE con mas de 1 campo.
Buenas Noches
Siguiendo con la busqueda con Ado, perdon por el mensaje anterior, el metodo
que acepta varios campos es el SEEK y no el FIND como incorrectamente habia
escrito, pero su uso (SEEK) depende del proveedor de la base de datos.
------------------------------------------------------------ ------------------------------------------------------------ -----------------------------------------
METHOD: Recordset::Seek
------------------------------------------------------------ --------------------
recordsetobject.Seek KeyValues, SeekOption
The Seek method uses the provider to search using indexes to find a Record
in a Recordset that matches the values specified in the KeyValues parameter.
If a match occurs, the current record pointer will point to the matching
record or where specified by the SeekOption parameter. If no match occurs,
the current record pointer will be placed at the end of the Recordset.
Very few providers support this method. The provider must support this
method and the use of indexes on the Recordset (see the Index property).
This method can only be used with server-side cursors.
------------------------------------------------------------ ------------------------------------------------------------ -----------------------------------------
He visto en los fuentes el metodo LOCATE en adorecords.prg y veo que invoca
el metodo FIND de ado, adjunto parte de un texto que he encontrado sobre
este metodo (solo para ilustrar mi problema con los demas usuarios del
foro). Existiria la posibilidad de agregar el metodo SEEK de ado, o en el
peor de los casos se que tendré que usar el metodo FILTER para determinar si
ya existe un registro en la base de datos antes de invocar el Metodo ADDNEW.
Saludos
------------------------------------------------------------ ------------------------------------------------------------ -----------------------------------------
METHOD: Recordset::Find
------------------------------------------------------------ --------------------
recordsetobject.Find Criteria, SkipRecords, SearchDirection, Start
The Find method is used to search a Recordset for a Record that matches the
search criteria (a search string). This method will work if the Recordset
supports bookmarks. If the search is successful, the current record pointer
will be moved to point to the first Record that matches. If the search
fails, the Recordset will point to either EOF or BOF.
There is one mandatory and three optional parameters.
The mandatory Criteria parameter is a string that defines the search
criteria. This string must contain one field (column) name, one comparison
operator, and a search value.
You can only search on one field (column).
The comparison operators in Criteria can only be one of the following:
= > >= < <= <> LIKE
You cannot use OR or AND.
------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------ ------------------
"Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
news:[email=46575476@ozsrv2.ozlan.local...]46575476@ozsrv2.ozlan.local...[/email]
> Solo para agregar algo, antes de comenzar a desarrollar en Xailer el
> software de Backoffice para la pocket PC, habia comenzado algo en Minigui
> y xHarbour, lo que si recuerdo es que el metodo LOCATE de ado no me
> funciono por lo que termine usando el metodo FIND, que si me permite
> evaluar varios campos, podria ser posible agregar este metodo a la clase
> TSQLTABLE.
>
> En espera de sus comentarios.
>
> "Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
> news:[email=465752db@ozsrv2.ozlan.local...]465752db@ozsrv2.ozlan.local...[/email]
>> Buenas Tardes
>>
>> Estos con una rutina para poder incorporar la informacion de la pocket ya
>> directamente a la base de datos en Oracle, pues bien uso el metodo
>> locate, pero no me esta evaluando cuando le paso mas de 2 campos a
>> comparar. con uno me funciona correcto. La informacion la leo de una
>> tabla DBF. Existe algun problema en este metodo al evaluar mas de 1 campo
>> ?? Adjunto pantalla con el error mostrado tambien; sin embargo luego de
>> mostrar el error, el programa continua con la rutina.
>>
>> En espera de sus comentarios.
>>
>> Adjunto parte del codigo.
>>
>> ------------------------------------------------------------ -----------------------------------------------------------
>> WITH OBJECT clsqldestino := TSQLTable():New()
>> :oDataSource := clSqlAdo
>> :cProcess := "GENERAL"
>> :nCursorType := adOpenDynamic
>> :nLockType := adLockOptimistic
>> :cTableName := ClPara5
>> :Create()
>> END
>> clsqldestino:lOpen:=.T.
>>
>> Do While !eof()
>> IF CLPARA2='QUEJASD.CSV'
>>
>> -- EN ESTA LINEA DA EL ERROR
>> clFOund=iif(CLSQLDESTINO:locate("CLIENTE='"+mCliente+"' AND
>> CODIGO='"+mCodigo+"'"),.t.,.f.)
>> --
>> ENDIF
>> .....------------------------------------------------------- ------------------------------------------------------------ -
>>
>>
>>
>
>
Siguiendo con la busqueda con Ado, perdon por el mensaje anterior, el metodo
que acepta varios campos es el SEEK y no el FIND como incorrectamente habia
escrito, pero su uso (SEEK) depende del proveedor de la base de datos.
------------------------------------------------------------ ------------------------------------------------------------ -----------------------------------------
METHOD: Recordset::Seek
------------------------------------------------------------ --------------------
recordsetobject.Seek KeyValues, SeekOption
The Seek method uses the provider to search using indexes to find a Record
in a Recordset that matches the values specified in the KeyValues parameter.
If a match occurs, the current record pointer will point to the matching
record or where specified by the SeekOption parameter. If no match occurs,
the current record pointer will be placed at the end of the Recordset.
Very few providers support this method. The provider must support this
method and the use of indexes on the Recordset (see the Index property).
This method can only be used with server-side cursors.
------------------------------------------------------------ ------------------------------------------------------------ -----------------------------------------
He visto en los fuentes el metodo LOCATE en adorecords.prg y veo que invoca
el metodo FIND de ado, adjunto parte de un texto que he encontrado sobre
este metodo (solo para ilustrar mi problema con los demas usuarios del
foro). Existiria la posibilidad de agregar el metodo SEEK de ado, o en el
peor de los casos se que tendré que usar el metodo FILTER para determinar si
ya existe un registro en la base de datos antes de invocar el Metodo ADDNEW.
Saludos
------------------------------------------------------------ ------------------------------------------------------------ -----------------------------------------
METHOD: Recordset::Find
------------------------------------------------------------ --------------------
recordsetobject.Find Criteria, SkipRecords, SearchDirection, Start
The Find method is used to search a Recordset for a Record that matches the
search criteria (a search string). This method will work if the Recordset
supports bookmarks. If the search is successful, the current record pointer
will be moved to point to the first Record that matches. If the search
fails, the Recordset will point to either EOF or BOF.
There is one mandatory and three optional parameters.
The mandatory Criteria parameter is a string that defines the search
criteria. This string must contain one field (column) name, one comparison
operator, and a search value.
You can only search on one field (column).
The comparison operators in Criteria can only be one of the following:
= > >= < <= <> LIKE
You cannot use OR or AND.
------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------ ------------------
"Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
news:[email=46575476@ozsrv2.ozlan.local...]46575476@ozsrv2.ozlan.local...[/email]
> Solo para agregar algo, antes de comenzar a desarrollar en Xailer el
> software de Backoffice para la pocket PC, habia comenzado algo en Minigui
> y xHarbour, lo que si recuerdo es que el metodo LOCATE de ado no me
> funciono por lo que termine usando el metodo FIND, que si me permite
> evaluar varios campos, podria ser posible agregar este metodo a la clase
> TSQLTABLE.
>
> En espera de sus comentarios.
>
> "Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
> news:[email=465752db@ozsrv2.ozlan.local...]465752db@ozsrv2.ozlan.local...[/email]
>> Buenas Tardes
>>
>> Estos con una rutina para poder incorporar la informacion de la pocket ya
>> directamente a la base de datos en Oracle, pues bien uso el metodo
>> locate, pero no me esta evaluando cuando le paso mas de 2 campos a
>> comparar. con uno me funciona correcto. La informacion la leo de una
>> tabla DBF. Existe algun problema en este metodo al evaluar mas de 1 campo
>> ?? Adjunto pantalla con el error mostrado tambien; sin embargo luego de
>> mostrar el error, el programa continua con la rutina.
>>
>> En espera de sus comentarios.
>>
>> Adjunto parte del codigo.
>>
>> ------------------------------------------------------------ -----------------------------------------------------------
>> WITH OBJECT clsqldestino := TSQLTable():New()
>> :oDataSource := clSqlAdo
>> :cProcess := "GENERAL"
>> :nCursorType := adOpenDynamic
>> :nLockType := adLockOptimistic
>> :cTableName := ClPara5
>> :Create()
>> END
>> clsqldestino:lOpen:=.T.
>>
>> Do While !eof()
>> IF CLPARA2='QUEJASD.CSV'
>>
>> -- EN ESTA LINEA DA EL ERROR
>> clFOund=iif(CLSQLDESTINO:locate("CLIENTE='"+mCliente+"' AND
>> CODIGO='"+mCodigo+"'"),.t.,.f.)
>> --
>> ENDIF
>> .....------------------------------------------------------- ------------------------------------------------------------ -
>>
>>
>>
>
>
-
- Mensajes: 113
- Registrado: Lun Nov 13, 2006 5:29 am
Error al usar Metodo LOCATE con mas de 1 campo.
Ok,
asi lo he dejado, solo para informacion del grupo .
------------------------------------------------------------ --------------------------------------------
IF CLPARA2='QUEJASD.CSV'
clFiltro="cliente='"+CLIENTE+"' and codigo='"+CODIGO+"' and
fecha='"+FECHA+"'"
ENDIF
clSqlDestino:filter("&clFiltro")
if clSqlDestino:Eof() .or. ClSqlDestino:bof()
clsqldestino:Addnew()
...Campos a Actualizar
clsqdestino:Update()
endif
------------------------------------------------------------ --------------------------------------------
Saludos
"Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
news:4657a138$[email=1@ozsrv2.ozlan.local...]1@ozsrv2.ozlan.local...[/email]
> Buenas Noches
>
> Siguiendo con la busqueda con Ado, perdon por el mensaje anterior, el
> metodo que acepta varios campos es el SEEK y no el FIND como
> incorrectamente habia escrito, pero su uso (SEEK) depende del proveedor de
> la base de datos.
>
> ------------------------------------------------------------ ------------------------------------------------------------ -----------------------------------------
> METHOD: Recordset::Seek
>
> ------------------------------------------------------------ --------------------
>
> recordsetobject.Seek KeyValues, SeekOption
>
> The Seek method uses the provider to search using indexes to find a Record
> in a Recordset that matches the values specified in the KeyValues
> parameter. If a match occurs, the current record pointer will point to the
> matching record or where specified by the SeekOption parameter. If no
> match occurs, the current record pointer will be placed at the end of the
> Recordset.
>
> Very few providers support this method. The provider must support this
> method and the use of indexes on the Recordset (see the Index property).
> This method can only be used with server-side cursors.
> ------------------------------------------------------------ ------------------------------------------------------------ -----------------------------------------
>
> He visto en los fuentes el metodo LOCATE en adorecords.prg y veo que
> invoca el metodo FIND de ado, adjunto parte de un texto que he encontrado
> sobre este metodo (solo para ilustrar mi problema con los demas usuarios
> del foro). Existiria la posibilidad de agregar el metodo SEEK de ado, o en
> el peor de los casos se que tendré que usar el metodo FILTER para
> determinar si ya existe un registro en la base de datos antes de invocar
> el Metodo ADDNEW.
>
> Saludos
>
> ------------------------------------------------------------ ------------------------------------------------------------ -----------------------------------------
> METHOD: Recordset::Find
>
>
> ------------------------------------------------------------ --------------------
>
> recordsetobject.Find Criteria, SkipRecords, SearchDirection, Start
>
> The Find method is used to search a Recordset for a Record that matches
> the search criteria (a search string). This method will work if the
> Recordset supports bookmarks. If the search is successful, the current
> record pointer will be moved to point to the first Record that matches. If
> the search fails, the Recordset will point to either EOF or BOF.
>
> There is one mandatory and three optional parameters.
>
> The mandatory Criteria parameter is a string that defines the search
> criteria. This string must contain one field (column) name, one comparison
> operator, and a search value.
>
> You can only search on one field (column).
>
> The comparison operators in Criteria can only be one of the following:
>
> = > >= < <= <> LIKE
>
> You cannot use OR or AND.
> ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------ ------------------
>
>
> "Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
> news:[email=46575476@ozsrv2.ozlan.local...]46575476@ozsrv2.ozlan.local...[/email]
>> Solo para agregar algo, antes de comenzar a desarrollar en Xailer el
>> software de Backoffice para la pocket PC, habia comenzado algo en Minigui
>> y xHarbour, lo que si recuerdo es que el metodo LOCATE de ado no me
>> funciono por lo que termine usando el metodo FIND, que si me permite
>> evaluar varios campos, podria ser posible agregar este metodo a la clase
>> TSQLTABLE.
>>
>> En espera de sus comentarios.
>>
>> "Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
>> news:[email=465752db@ozsrv2.ozlan.local...]465752db@ozsrv2.ozlan.local...[/email]
>>> Buenas Tardes
>>>
>>> Estos con una rutina para poder incorporar la informacion de la pocket
>>> ya directamente a la base de datos en Oracle, pues bien uso el metodo
>>> locate, pero no me esta evaluando cuando le paso mas de 2 campos a
>>> comparar. con uno me funciona correcto. La informacion la leo de una
>>> tabla DBF. Existe algun problema en este metodo al evaluar mas de 1
>>> campo ?? Adjunto pantalla con el error mostrado tambien; sin embargo
>>> luego de mostrar el error, el programa continua con la rutina.
>>>
>>> En espera de sus comentarios.
>>>
>>> Adjunto parte del codigo.
>>>
>>> ------------------------------------------------------------ -----------------------------------------------------------
>>> WITH OBJECT clsqldestino := TSQLTable():New()
>>> :oDataSource := clSqlAdo
>>> :cProcess := "GENERAL"
>>> :nCursorType := adOpenDynamic
>>> :nLockType := adLockOptimistic
>>> :cTableName := ClPara5
>>> :Create()
>>> END
>>> clsqldestino:lOpen:=.T.
>>>
>>> Do While !eof()
>>> IF CLPARA2='QUEJASD.CSV'
>>>
>>> -- EN ESTA LINEA DA EL ERROR
>>> clFOund=iif(CLSQLDESTINO:locate("CLIENTE='"+mCliente+"' AND
>>> CODIGO='"+mCodigo+"'"),.t.,.f.)
>>> --
>>> ENDIF
>>> .....------------------------------------------------------- ------------------------------------------------------------ -
>>>
>>>
>>>
>>
>>
>
>
asi lo he dejado, solo para informacion del grupo .
------------------------------------------------------------ --------------------------------------------
IF CLPARA2='QUEJASD.CSV'
clFiltro="cliente='"+CLIENTE+"' and codigo='"+CODIGO+"' and
fecha='"+FECHA+"'"
ENDIF
clSqlDestino:filter("&clFiltro")
if clSqlDestino:Eof() .or. ClSqlDestino:bof()
clsqldestino:Addnew()
...Campos a Actualizar
clsqdestino:Update()
endif
------------------------------------------------------------ --------------------------------------------
Saludos
"Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
news:4657a138$[email=1@ozsrv2.ozlan.local...]1@ozsrv2.ozlan.local...[/email]
> Buenas Noches
>
> Siguiendo con la busqueda con Ado, perdon por el mensaje anterior, el
> metodo que acepta varios campos es el SEEK y no el FIND como
> incorrectamente habia escrito, pero su uso (SEEK) depende del proveedor de
> la base de datos.
>
> ------------------------------------------------------------ ------------------------------------------------------------ -----------------------------------------
> METHOD: Recordset::Seek
>
> ------------------------------------------------------------ --------------------
>
> recordsetobject.Seek KeyValues, SeekOption
>
> The Seek method uses the provider to search using indexes to find a Record
> in a Recordset that matches the values specified in the KeyValues
> parameter. If a match occurs, the current record pointer will point to the
> matching record or where specified by the SeekOption parameter. If no
> match occurs, the current record pointer will be placed at the end of the
> Recordset.
>
> Very few providers support this method. The provider must support this
> method and the use of indexes on the Recordset (see the Index property).
> This method can only be used with server-side cursors.
> ------------------------------------------------------------ ------------------------------------------------------------ -----------------------------------------
>
> He visto en los fuentes el metodo LOCATE en adorecords.prg y veo que
> invoca el metodo FIND de ado, adjunto parte de un texto que he encontrado
> sobre este metodo (solo para ilustrar mi problema con los demas usuarios
> del foro). Existiria la posibilidad de agregar el metodo SEEK de ado, o en
> el peor de los casos se que tendré que usar el metodo FILTER para
> determinar si ya existe un registro en la base de datos antes de invocar
> el Metodo ADDNEW.
>
> Saludos
>
> ------------------------------------------------------------ ------------------------------------------------------------ -----------------------------------------
> METHOD: Recordset::Find
>
>
> ------------------------------------------------------------ --------------------
>
> recordsetobject.Find Criteria, SkipRecords, SearchDirection, Start
>
> The Find method is used to search a Recordset for a Record that matches
> the search criteria (a search string). This method will work if the
> Recordset supports bookmarks. If the search is successful, the current
> record pointer will be moved to point to the first Record that matches. If
> the search fails, the Recordset will point to either EOF or BOF.
>
> There is one mandatory and three optional parameters.
>
> The mandatory Criteria parameter is a string that defines the search
> criteria. This string must contain one field (column) name, one comparison
> operator, and a search value.
>
> You can only search on one field (column).
>
> The comparison operators in Criteria can only be one of the following:
>
> = > >= < <= <> LIKE
>
> You cannot use OR or AND.
> ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------ ------------------
>
>
> "Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
> news:[email=46575476@ozsrv2.ozlan.local...]46575476@ozsrv2.ozlan.local...[/email]
>> Solo para agregar algo, antes de comenzar a desarrollar en Xailer el
>> software de Backoffice para la pocket PC, habia comenzado algo en Minigui
>> y xHarbour, lo que si recuerdo es que el metodo LOCATE de ado no me
>> funciono por lo que termine usando el metodo FIND, que si me permite
>> evaluar varios campos, podria ser posible agregar este metodo a la clase
>> TSQLTABLE.
>>
>> En espera de sus comentarios.
>>
>> "Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
>> news:[email=465752db@ozsrv2.ozlan.local...]465752db@ozsrv2.ozlan.local...[/email]
>>> Buenas Tardes
>>>
>>> Estos con una rutina para poder incorporar la informacion de la pocket
>>> ya directamente a la base de datos en Oracle, pues bien uso el metodo
>>> locate, pero no me esta evaluando cuando le paso mas de 2 campos a
>>> comparar. con uno me funciona correcto. La informacion la leo de una
>>> tabla DBF. Existe algun problema en este metodo al evaluar mas de 1
>>> campo ?? Adjunto pantalla con el error mostrado tambien; sin embargo
>>> luego de mostrar el error, el programa continua con la rutina.
>>>
>>> En espera de sus comentarios.
>>>
>>> Adjunto parte del codigo.
>>>
>>> ------------------------------------------------------------ -----------------------------------------------------------
>>> WITH OBJECT clsqldestino := TSQLTable():New()
>>> :oDataSource := clSqlAdo
>>> :cProcess := "GENERAL"
>>> :nCursorType := adOpenDynamic
>>> :nLockType := adLockOptimistic
>>> :cTableName := ClPara5
>>> :Create()
>>> END
>>> clsqldestino:lOpen:=.T.
>>>
>>> Do While !eof()
>>> IF CLPARA2='QUEJASD.CSV'
>>>
>>> -- EN ESTA LINEA DA EL ERROR
>>> clFOund=iif(CLSQLDESTINO:locate("CLIENTE='"+mCliente+"' AND
>>> CODIGO='"+mCodigo+"'"),.t.,.f.)
>>> --
>>> ENDIF
>>> .....------------------------------------------------------- ------------------------------------------------------------ -
>>>
>>>
>>>
>>
>>
>
>
- ignacio
- Site Admin
- Mensajes: 9457
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Error al usar Metodo LOCATE con mas de 1 campo.
Fernado,
Estoy convencido que es simplemente un problema del driver ADO de Oracle que
sencillamente no lo soporta. Prueba a realizar un filtro.
Un saludo
"Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
news:[email=465752db@ozsrv2.ozlan.local...]465752db@ozsrv2.ozlan.local...[/email]
> Buenas Tardes
>
> Estos con una rutina para poder incorporar la informacion de la pocket ya
> directamente a la base de datos en Oracle, pues bien uso el metodo
> locate, pero no me esta evaluando cuando le paso mas de 2 campos a
> comparar. con uno me funciona correcto. La informacion la leo de una tabla
> DBF. Existe algun problema en este metodo al evaluar mas de 1 campo ??
> Adjunto pantalla con el error mostrado tambien; sin embargo luego de
> mostrar el error, el programa continua con la rutina.
>
> En espera de sus comentarios.
>
> Adjunto parte del codigo.
>
> ------------------------------------------------------------ -----------------------------------------------------------
> WITH OBJECT clsqldestino := TSQLTable():New()
> :oDataSource := clSqlAdo
> :cProcess := "GENERAL"
> :nCursorType := adOpenDynamic
> :nLockType := adLockOptimistic
> :cTableName := ClPara5
> :Create()
> END
> clsqldestino:lOpen:=.T.
>
> Do While !eof()
> IF CLPARA2='QUEJASD.CSV'
>
> -- EN ESTA LINEA DA EL ERROR
> clFOund=iif(CLSQLDESTINO:locate("CLIENTE='"+mCliente+"' AND
> CODIGO='"+mCodigo+"'"),.t.,.f.)
> --
> ENDIF
> .....------------------------------------------------------- ------------------------------------------------------------ -
>
>
>
Estoy convencido que es simplemente un problema del driver ADO de Oracle que
sencillamente no lo soporta. Prueba a realizar un filtro.
Un saludo
"Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
news:[email=465752db@ozsrv2.ozlan.local...]465752db@ozsrv2.ozlan.local...[/email]
> Buenas Tardes
>
> Estos con una rutina para poder incorporar la informacion de la pocket ya
> directamente a la base de datos en Oracle, pues bien uso el metodo
> locate, pero no me esta evaluando cuando le paso mas de 2 campos a
> comparar. con uno me funciona correcto. La informacion la leo de una tabla
> DBF. Existe algun problema en este metodo al evaluar mas de 1 campo ??
> Adjunto pantalla con el error mostrado tambien; sin embargo luego de
> mostrar el error, el programa continua con la rutina.
>
> En espera de sus comentarios.
>
> Adjunto parte del codigo.
>
> ------------------------------------------------------------ -----------------------------------------------------------
> WITH OBJECT clsqldestino := TSQLTable():New()
> :oDataSource := clSqlAdo
> :cProcess := "GENERAL"
> :nCursorType := adOpenDynamic
> :nLockType := adLockOptimistic
> :cTableName := ClPara5
> :Create()
> END
> clsqldestino:lOpen:=.T.
>
> Do While !eof()
> IF CLPARA2='QUEJASD.CSV'
>
> -- EN ESTA LINEA DA EL ERROR
> clFOund=iif(CLSQLDESTINO:locate("CLIENTE='"+mCliente+"' AND
> CODIGO='"+mCodigo+"'"),.t.,.f.)
> --
> ENDIF
> .....------------------------------------------------------- ------------------------------------------------------------ -
>
>
>
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
- ignacio
- Site Admin
- Mensajes: 9457
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Error al usar Metodo LOCATE con mas de 1 campo.
Fernando,
El método FIND de ADO sólo funciona con tablas de acceso directo,
básicamente DBFs y Access. Hace poco hubo un hilo al respecto en el cual se
explicaba su poca o nula utilidad.
Un saludo,
"Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
news:[email=46575476@ozsrv2.ozlan.local...]46575476@ozsrv2.ozlan.local...[/email]
> Solo para agregar algo, antes de comenzar a desarrollar en Xailer el
> software de Backoffice para la pocket PC, habia comenzado algo en Minigui
> y xHarbour, lo que si recuerdo es que el metodo LOCATE de ado no me
> funciono por lo que termine usando el metodo FIND, que si me permite
> evaluar varios campos, podria ser posible agregar este metodo a la clase
> TSQLTABLE.
>
> En espera de sus comentarios.
>
> "Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
> news:[email=465752db@ozsrv2.ozlan.local...]465752db@ozsrv2.ozlan.local...[/email]
>> Buenas Tardes
>>
>> Estos con una rutina para poder incorporar la informacion de la pocket ya
>> directamente a la base de datos en Oracle, pues bien uso el metodo
>> locate, pero no me esta evaluando cuando le paso mas de 2 campos a
>> comparar. con uno me funciona correcto. La informacion la leo de una
>> tabla DBF. Existe algun problema en este metodo al evaluar mas de 1 campo
>> ?? Adjunto pantalla con el error mostrado tambien; sin embargo luego de
>> mostrar el error, el programa continua con la rutina.
>>
>> En espera de sus comentarios.
>>
>> Adjunto parte del codigo.
>>
>> ------------------------------------------------------------ -----------------------------------------------------------
>> WITH OBJECT clsqldestino := TSQLTable():New()
>> :oDataSource := clSqlAdo
>> :cProcess := "GENERAL"
>> :nCursorType := adOpenDynamic
>> :nLockType := adLockOptimistic
>> :cTableName := ClPara5
>> :Create()
>> END
>> clsqldestino:lOpen:=.T.
>>
>> Do While !eof()
>> IF CLPARA2='QUEJASD.CSV'
>>
>> -- EN ESTA LINEA DA EL ERROR
>> clFOund=iif(CLSQLDESTINO:locate("CLIENTE='"+mCliente+"' AND
>> CODIGO='"+mCodigo+"'"),.t.,.f.)
>> --
>> ENDIF
>> .....------------------------------------------------------- ------------------------------------------------------------ -
>>
>>
>>
>
>
El método FIND de ADO sólo funciona con tablas de acceso directo,
básicamente DBFs y Access. Hace poco hubo un hilo al respecto en el cual se
explicaba su poca o nula utilidad.
Un saludo,
"Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
news:[email=46575476@ozsrv2.ozlan.local...]46575476@ozsrv2.ozlan.local...[/email]
> Solo para agregar algo, antes de comenzar a desarrollar en Xailer el
> software de Backoffice para la pocket PC, habia comenzado algo en Minigui
> y xHarbour, lo que si recuerdo es que el metodo LOCATE de ado no me
> funciono por lo que termine usando el metodo FIND, que si me permite
> evaluar varios campos, podria ser posible agregar este metodo a la clase
> TSQLTABLE.
>
> En espera de sus comentarios.
>
> "Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
> news:[email=465752db@ozsrv2.ozlan.local...]465752db@ozsrv2.ozlan.local...[/email]
>> Buenas Tardes
>>
>> Estos con una rutina para poder incorporar la informacion de la pocket ya
>> directamente a la base de datos en Oracle, pues bien uso el metodo
>> locate, pero no me esta evaluando cuando le paso mas de 2 campos a
>> comparar. con uno me funciona correcto. La informacion la leo de una
>> tabla DBF. Existe algun problema en este metodo al evaluar mas de 1 campo
>> ?? Adjunto pantalla con el error mostrado tambien; sin embargo luego de
>> mostrar el error, el programa continua con la rutina.
>>
>> En espera de sus comentarios.
>>
>> Adjunto parte del codigo.
>>
>> ------------------------------------------------------------ -----------------------------------------------------------
>> WITH OBJECT clsqldestino := TSQLTable():New()
>> :oDataSource := clSqlAdo
>> :cProcess := "GENERAL"
>> :nCursorType := adOpenDynamic
>> :nLockType := adLockOptimistic
>> :cTableName := ClPara5
>> :Create()
>> END
>> clsqldestino:lOpen:=.T.
>>
>> Do While !eof()
>> IF CLPARA2='QUEJASD.CSV'
>>
>> -- EN ESTA LINEA DA EL ERROR
>> clFOund=iif(CLSQLDESTINO:locate("CLIENTE='"+mCliente+"' AND
>> CODIGO='"+mCodigo+"'"),.t.,.f.)
>> --
>> ENDIF
>> .....------------------------------------------------------- ------------------------------------------------------------ -
>>
>>
>>
>
>
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
-
- Mensajes: 113
- Registrado: Lun Nov 13, 2006 5:29 am
Error al usar Metodo LOCATE con mas de 1 campo.
Buenas a todos, tal como le comente en un mensaje antes de este, al final me
toco usar un filtro para evaluar la existencia de un registro; al inicio
tenia un poco de duda sobre la velocidad pero al probar sobre una tabla de
mas de 400,000 registro y con una conexion remota al server el tiempo de
respuesta fue de menos de 1 segundo lo cual considero muy aceptable.
Espero que mis comentarios ayuden a otros usuarios que tambien piensen o
esten trabajando sobre un servidor de Oracle.
Saludos
"Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
news:46581e56$[email=1@ozsrv2.ozlan.local...]1@ozsrv2.ozlan.local...[/email]
> Fernado,
>
> Estoy convencido que es simplemente un problema del driver ADO de Oracle
> que sencillamente no lo soporta. Prueba a realizar un filtro.
>
> Un saludo
>
> "Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
> news:[email=465752db@ozsrv2.ozlan.local...]465752db@ozsrv2.ozlan.local...[/email]
>> Buenas Tardes
>>
>> Estos con una rutina para poder incorporar la informacion de la pocket ya
>> directamente a la base de datos en Oracle, pues bien uso el metodo
>> locate, pero no me esta evaluando cuando le paso mas de 2 campos a
>> comparar. con uno me funciona correcto. La informacion la leo de una
>> tabla DBF. Existe algun problema en este metodo al evaluar mas de 1 campo
>> ?? Adjunto pantalla con el error mostrado tambien; sin embargo luego de
>> mostrar el error, el programa continua con la rutina.
>>
>> En espera de sus comentarios.
>>
>> Adjunto parte del codigo.
>>
>> ------------------------------------------------------------ -----------------------------------------------------------
>> WITH OBJECT clsqldestino := TSQLTable():New()
>> :oDataSource := clSqlAdo
>> :cProcess := "GENERAL"
>> :nCursorType := adOpenDynamic
>> :nLockType := adLockOptimistic
>> :cTableName := ClPara5
>> :Create()
>> END
>> clsqldestino:lOpen:=.T.
>>
>> Do While !eof()
>> IF CLPARA2='QUEJASD.CSV'
>>
>> -- EN ESTA LINEA DA EL ERROR
>> clFOund=iif(CLSQLDESTINO:locate("CLIENTE='"+mCliente+"' AND
>> CODIGO='"+mCodigo+"'"),.t.,.f.)
>> --
>> ENDIF
>> .....------------------------------------------------------- ------------------------------------------------------------ -
>>
>>
>>
>
>
toco usar un filtro para evaluar la existencia de un registro; al inicio
tenia un poco de duda sobre la velocidad pero al probar sobre una tabla de
mas de 400,000 registro y con una conexion remota al server el tiempo de
respuesta fue de menos de 1 segundo lo cual considero muy aceptable.
Espero que mis comentarios ayuden a otros usuarios que tambien piensen o
esten trabajando sobre un servidor de Oracle.
Saludos
"Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
news:46581e56$[email=1@ozsrv2.ozlan.local...]1@ozsrv2.ozlan.local...[/email]
> Fernado,
>
> Estoy convencido que es simplemente un problema del driver ADO de Oracle
> que sencillamente no lo soporta. Prueba a realizar un filtro.
>
> Un saludo
>
> "Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
> news:[email=465752db@ozsrv2.ozlan.local...]465752db@ozsrv2.ozlan.local...[/email]
>> Buenas Tardes
>>
>> Estos con una rutina para poder incorporar la informacion de la pocket ya
>> directamente a la base de datos en Oracle, pues bien uso el metodo
>> locate, pero no me esta evaluando cuando le paso mas de 2 campos a
>> comparar. con uno me funciona correcto. La informacion la leo de una
>> tabla DBF. Existe algun problema en este metodo al evaluar mas de 1 campo
>> ?? Adjunto pantalla con el error mostrado tambien; sin embargo luego de
>> mostrar el error, el programa continua con la rutina.
>>
>> En espera de sus comentarios.
>>
>> Adjunto parte del codigo.
>>
>> ------------------------------------------------------------ -----------------------------------------------------------
>> WITH OBJECT clsqldestino := TSQLTable():New()
>> :oDataSource := clSqlAdo
>> :cProcess := "GENERAL"
>> :nCursorType := adOpenDynamic
>> :nLockType := adLockOptimistic
>> :cTableName := ClPara5
>> :Create()
>> END
>> clsqldestino:lOpen:=.T.
>>
>> Do While !eof()
>> IF CLPARA2='QUEJASD.CSV'
>>
>> -- EN ESTA LINEA DA EL ERROR
>> clFOund=iif(CLSQLDESTINO:locate("CLIENTE='"+mCliente+"' AND
>> CODIGO='"+mCodigo+"'"),.t.,.f.)
>> --
>> ENDIF
>> .....------------------------------------------------------- ------------------------------------------------------------ -
>>
>>
>>
>
>