FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Busqueda SQL
Posts: 198
Joined: Fri Nov 18, 2005 07:34 PM
Busqueda SQL
Posted: Thu Jul 12, 2018 11:04 PM

Para ingresar un registro en una Tabla SQL hago:

oRecordSet:Addnew()
oRecordSet:Fields("Bill_num"):value := alltrim(Var1)
oRecordSet:Update()

Para borrar:
oRecordSet:Delete()
oRecordSet:Requery()

Como seria para buscar la Variable xRFC ??
oRecordSet:Find( xRfc, If( lContinue, 1, 0 ) ) //Asi marca error

Gracias

Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: Busqueda SQL
Posted: Fri Jul 13, 2018 12:02 AM
Servicomver:

Con ADO puro

Code (fw): Select all Collapse
聽 聽 聽 聽 聽 聽 oRsCli:Find("CLI_CLI = " + "'" + STR(nIrA,5,0) + "'" )


CLI_CLI es el campo en el recordset y nIrA es el n煤mero a localizar

Por el lContinue supongo que quieres que te muestre todos los iguales,
si es as铆 debes utilizar FILTER

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
Posts: 198
Joined: Fri Nov 18, 2005 07:34 PM
Re: Busqueda SQL
Posted: Fri Jul 13, 2018 02:08 AM

Gracias, lo intentare asi, saludos

Posts: 2706
Joined: Fri Oct 07, 2005 01:50 PM
Re: Busqueda SQL
Posted: Fri Jul 13, 2018 04:03 PM

Generally when you use the oRs:Find ... you have to re-wind the record pointer to the top of the table .. oRs:MoveFirst(), then issue your oRs:Find... there is no need to issue a re-query if you are using the same recordset for your updates and deletions..

Rick Lipkin

Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: Busqueda SQL
Posted: Fri Jul 13, 2018 04:46 PM

Servicomver:

Ya entrados en gastos, te recomiendo que no uses la funci贸n oRs:AddNew() + oRs:Update(), mas adelante
te puedes encontrar con peque帽os problemas, en su lugar utiliza los comandos INSERT INTO y UPDATE.

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
Posts: 198
Joined: Fri Nov 18, 2005 07:34 PM
Re: Busqueda SQL
Posted: Fri Jul 13, 2018 07:29 PM

Gracias por su ayuda, estoy iniciando con la programaci贸n con sql, una pregunta:
Lo que intento hacer es buscar en una tabla un Valor de una variable XRFC
Como obtengo el valor de la respuesta ?
Para saber si la encontr贸 o no ?
Si mi variable es de 14 Caracteres y en la tabla de SQL tiene 255 tengo que hacer algun TRIM al campo SQL ?
Gracias, espero haberme explicado

Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: Busqueda SQL
Posted: Fri Jul 13, 2018 08:00 PM

Servicomver:

Como dec铆a Jack el destripador, vamos por partes:

Primero, vamos a diferenciar entre Tabla y RecordSet, la tabla la tienes en el servidor
mientras que el recordset es una copia de la tabla que ya tienes en tu PC.

Para acceder a una tabla (Servidor) necesariamente tienes que usar el comando SELECT
mismo que te deja un RecordSet (copia) en tu PC, en el comando select puedes usar el
m茅todo WHERE para filtrar la tabla y que el recordset solo tenga el resultado del filtro.

Ahora si ya tienes el recordset, puedes usar las funciones oRsFind() o oRsFilter() pero
insisto es ya sobre el recordset.

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
Posts: 198
Joined: Fri Nov 18, 2005 07:34 PM
Re: Busqueda SQL
Posted: Fri Jul 13, 2018 08:37 PM

Armando, muchisimas gracias por tu tiempo, te mando lo que estoy tratando de hacer...(Si logr茅 conectarme, a帽adir y eliminar datos )

oCone :=tOleAuto():new("ADODB.connection")
oCone:Open( "DRIVER={MySQL ODBC 3.51 Driver};" + ;
"server=" + cServer + ;
";database=" + cDatabase + ;
";uid=" + cUser + ;
";port=" + cPort + ;
";pwd=" + cPass )
xRfc:="XAXX010101XXX"

If Empty(oCone)
MsgAlert(" No se pudo establecer la conexion con la Base de Datos..","Atencion")
Return(Nil)
Else
MsgAlert(" Se establecio la Conexion Con La Base De Datos..","Atencion")
oRecordSet := TOleAuto():New("adodb.recordset")
oRecordSet:ActiveConnection(oCone)
oRecordSet:Source := "Select * from clientes Order by RFC"
oRecordSet:CursorType := 1 // opendkeyset
oRecordSet:CursorLocation := 3 // local cache
oRecordSet:LockType := 3 // lockoportunistic
oRecordSet:Open()
oRecordSet:MoveFirst()
oRecordSet:Find("RFC = " + "'" + xRfc + "'" )
//Aqui es donde necesito saber si encontr贸 xRfc o no
// y Luego tomar el valor encontrado (Nombre, Domicilio, etc)

Endif

Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: Busqueda SQL
Posted: Fri Jul 13, 2018 08:41 PM

Victor:

Ah铆 la llevas pero vas picando chueco, dame un correo y te env铆o algo.

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
Posts: 198
Joined: Fri Nov 18, 2005 07:34 PM
Re: Busqueda SQL
Posted: Fri Jul 13, 2018 08:43 PM

servicomver@hotmail.com

Te lo agradezco bastante

Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: Busqueda SQL
Posted: Sat Jul 14, 2018 09:44 AM
Safest way to delete and reposition on next record in the sorted order:
Code (fw): Select all Collapse
 聽 WITH OBJECT oRs
聽 聽 聽 if :RecordCount() > 0
聽 聽 聽 聽 聽n 聽:= :AbsolutePosition
聽 聽 聽 聽 聽TRY
聽 聽 聽 聽 聽 聽 :Delete()
聽 聽 聽 聽 聽CATCH
聽 聽 聽 聽 聽 聽 :CancelUpdate()
聽 聽 聽 聽 聽 聽 :ReQuery()
聽 聽 聽 聽 聽END
聽 聽 聽 聽 聽if :RecordCount() > 0
聽 聽 聽 聽 聽 聽 :AbsolutePosition := Max( 1, Min( n, :RecordCount() ) )
聽 聽 聽 聽 聽endif
聽 聽 聽 endif
聽 聽END


If you are browsing the recorset with XBrowse, then simply call
Code (fw): Select all Collapse
oBrw:Delete()

This takes care of all issues.
Regards



G. N. Rao.

Hyderabad, India
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: Busqueda SQL
Posted: Sat Jul 14, 2018 10:20 AM
Code (fw): Select all Collapse
oCn   := FW_OpenAdoConnection( { "MYSQL", cServer, cDatabase, cUser, cPassword }, .t. )
if oCn == nil
   ? "connection fail"
   return nil
endif

xRfc  :="XAXX010101XXX" 

// for exact seek
cSeek := "rfc='" + xRfc + "'"
// for soft seek
cSeek := "rfc like '" + xRfc + "*'"

oRs   := FW_OpenRecordSet( oCn, "select * from clients order by rfc" )
oRs:Find( cSeek, 0, 1, 1 )
if oRs:Eof()
   ? "Not Found"
   oRs:MoveFirst()
else
   ? oRs:Fields( "Name" ):Value, oRs:Fields( "Address" ):Value
endif
Regards



G. N. Rao.

Hyderabad, India
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: Busqueda SQL
Posted: Sat Jul 14, 2018 10:39 AM
Armando wrote:Servicomver:

Ya entrados en gastos, te recomiendo que no uses la funci贸n oRs:AddNew() + oRs:Update(), mas adelante
te puedes encontrar con peque帽os problemas, en su lugar utiliza los comandos INSERT INTO y UPDATE.

Saludos

I have been using ADO from the time it was released by Microsoft. Used with Oracle, MsSql, MySql, Access, Dbf, Foxpro, etc.
I never faced any issues with AddNew().
I can say that Update() and AddNew() methods are as robust as UPDATE and INSERT commands.
In addition, it is advisable to use Update() and AddNew() but not direct UPDATE / INSERT commands to avoid the need to Requery() everytime. Note: Requery() puts lot of strain on server and network traffic. Good programming practice is to avoid requery() unless essential.

One commonly used method is:
Code (fw): Select all Collapse
oRs:AddNew()
// assign field values
oRs:Update()

Better method is:
Code (fw): Select all Collapse
oRs:AddNew( ArrayOfFieldNamesOrNumbers, ArrayOfValues )

In this case we can use normal Harbour values.

Note: Always use these methods within TRY/CATCH.
Regards



G. N. Rao.

Hyderabad, India
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: Busqueda SQL
Posted: Sat Jul 14, 2018 02:15 PM

Mr. Rao:

I mean with DB2 data base there are problems.

Regards

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
Posts: 52
Joined: Wed Jun 20, 2007 04:22 PM
Re: Busqueda SQL
Posted: Thu Jul 26, 2018 05:19 PM

Hola que tal, Aprovechando esta consulta y aplicando los ejemplos del foro, a que se debe que teniendo:
nCuenta:=105874
oRs:Source := "Select * from ejemplo WHERE Socio = + '&nCuenta' Order by Socio"
nFind:=(oRs:RecordCount) //para saber si esta o no el numero de cuenta del socio

Asi me pone como resultado: 1 (si lo encuentra, ya que es c贸digo 煤nico)

Pero se tomo el dato de un campo de una base de datos SOCIOS ALIAS aSocios
nCuenta:=aSocios->Cuenta
oRs:Source := "Select * from ejemplo WHERE Socio = + '&nCuenta' Order by Socio"
nFind:=(oRs:RecordCount) //para saber si esta o no el numero de cuenta del socio
(Claro, seleccionando el mismo socio con n煤mero de cuenta: 105874)
El resultado es: 0 (no lo encuentra)
A que se debe ?