FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin for Harbour/xHarbour How to copy a row of a rowset
Posts: 1067
Joined: Wed Nov 09, 2005 02:17 AM
How to copy a row of a rowset
Posted: Wed Mar 25, 2020 08:54 PM

Hi Guys,

I have a rowset oRs that have a lot of rows.
I wanted to copy only one row/record of oRs to a new rowset(oRL). Is It possible ?

Sds,
Vilian F. Arraes
vilian@vfatec.com.br
Belém-Pa-Brazil
Posts: 883
Joined: Tue Oct 11, 2005 11:57 AM
Re: How to copy a row of a rowset
Posted: Thu Mar 26, 2020 02:39 PM

Simple, use MYSQL

INSERT INTO clientes SELECT * FROM personas WHERE id='42431-01'

Hope it helps
From Chile
Adolfo

;-) Ji,ji,ji... buena la cosa... "all you need is code"

http://www.xdata.cl - Desarrollo Inteligente
----------
Asus TUF F15, 32GB Ram, 2 * 1 TB NVME M.2, GTX 1650
Posts: 1067
Joined: Wed Nov 09, 2005 02:17 AM
Re: How to copy a row of a rowset
Posted: Thu Mar 26, 2020 03:13 PM

Thank you,

But I don't want insert a new record. I want create a new rowset from a line of previous rowset.

Sds,
Vilian F. Arraes
vilian@vfatec.com.br
Belém-Pa-Brazil
Posts: 1816
Joined: Wed Oct 26, 2005 02:49 PM
Re: How to copy a row of a rowset
Posted: Thu Mar 26, 2020 03:42 PM
Una idea

Code (fw): Select all Collapse
//RsToHash( oRs, [nRows], [nStart], [aFields] ) 
hPrueba := RsToHash( oRsFtr, 1, 1 ) 
xbrowse( hPrueba )
Saludos
LEANDRO AREVALO
BogotĂĄ (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 25.01 ] [ xHarbour 64 bits) ]
Posts: 1067
Joined: Wed Nov 09, 2005 02:17 AM
Re: How to copy a row of a rowset
Posted: Thu Mar 26, 2020 04:41 PM

Thanks Leandro,
It's almost what I wanted. But in your code you are creating a hash and I wanted created a new rowset.

Sds,
Vilian F. Arraes
vilian@vfatec.com.br
Belém-Pa-Brazil
Posts: 1816
Joined: Wed Oct 26, 2005 02:49 PM
Re: How to copy a row of a rowset
Posted: Thu Mar 26, 2020 06:24 PM
Otra idea :-)
Code (fw): Select all Collapse
RsGetRows( oRs, [nRows], [nStart], [aFields] )
Saludos
LEANDRO AREVALO
BogotĂĄ (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 25.01 ] [ xHarbour 64 bits) ]
Posts: 1067
Joined: Wed Nov 09, 2005 02:17 AM
Re: How to copy a row of a rowset
Posted: Thu Mar 26, 2020 07:32 PM

It's also returning an array and I wanted a object

Sds,
Vilian F. Arraes
vilian@vfatec.com.br
Belém-Pa-Brazil
Posts: 1487
Joined: Tue Jun 14, 2016 07:51 AM
Re: How to copy a row of a rowset
Posted: Thu Mar 26, 2020 07:36 PM

nTotal := oCn:QueryResult( "SELECT SUM(SALARY) FROM CUSTOMER" )

Read field values of a row into an array
CODE: SELECT ALL EXPAND VIEW

cList := "ID,FIRST,LAST,CITY,SALARY"
aRow := oCn:QueryResult( "SELECT " + cList + " FROM CUSTOMER WHERE ID = 100" )

Copy the same values to another row at ID = 150:
CODE: SELECT ALL EXPAND VIEW

// modify/edit any values of the aRow
aRow[ 1 ] := 150 // do not change for saving to same row
oCn:Insert( "customer", cList, aRow, .t. ) // .T. indicates update if primary key exists

Copy present values of a row and append as new record
CODE: SELECT ALL EXPAND VIEW

aRow := oCn:QueryResult( "SELECT * FROM CUSTOMER WHERE ID = 100" )
aRow[ 1 ] := 0
oCn:Insert( "customer", nil, aRow ) // fwh 16.11. aFields can be nil

Maybe this can help : Examples from this link :

viewtopic.php?f=3t=32737

&

Marc Venken

Using: FWH 23.08 with Harbour
Posts: 1067
Joined: Wed Nov 09, 2005 02:17 AM
Re: How to copy a row of a rowset
Posted: Thu Mar 26, 2020 08:08 PM

Thanks,
I already read this topic and did not find what i need.

Sds,
Vilian F. Arraes
vilian@vfatec.com.br
Belém-Pa-Brazil
Posts: 1816
Joined: Wed Oct 26, 2005 02:49 PM
Re: How to copy a row of a rowset
Posted: Thu Mar 26, 2020 08:47 PM
En ese orden de ideas, ya tienes el objeto, lo Ășnico que hay que hacer es ubicarse sobre el registro a leer y llamar la linea completa, asĂ­:
Code (fw): Select all Collapse
oRow := oRs:Fields
Saludos
LEANDRO AREVALO
BogotĂĄ (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 25.01 ] [ xHarbour 64 bits) ]
Posts: 130
Joined: Sat Oct 08, 2005 09:38 PM
Re: How to copy a row of a rowset
Posted: Fri Mar 27, 2020 05:47 AM

oCurrentRs := oCn:Query( "SELECT * FROM CUSTOMER" )

oNewRow := oCn:Query( "SELECT * FROM CUSTOMER WHERE ID < 0" ) //Get an empty row (There is no customer has a negative id)

FOR nI=1 TO oCurrentRs:FCount()
oNewRow:FieldPut(nI, oCurrentRs:FieldGet(nI))
NEXT

Birol Betoncu
birol.betoncu@gmail.com
Using Harbour, FWH 19.05, BCC7
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: How to copy a row of a rowset
Posted: Fri Mar 27, 2020 09:29 PM
Code (fw): Select all Collapse
aRows := oRs:GetRows( 1, oRs:KeyNo )

This gives a two-dimensional array with a single row
Code (fw): Select all Collapse
{ { col1value, col2value, ... colNvalue } }


If you want to insert the data into another existing RowSet with identical structure, you can do it using oRs2:AddNew( aFields, aRows[ 1 ] ) }
But you can not create a new rowset in memory with this data.
A RowSet can be created ONLY by reading data from the MySql database via an sql query.

If you want to create an object, which works similary, holding this data, you can create TArrayData object
Code (fw): Select all Collapse
oData := TArrayData():New( aRows, oRs:aStructure )
Regards



G. N. Rao.

Hyderabad, India
Posts: 1067
Joined: Wed Nov 09, 2005 02:17 AM
Re: How to copy a row of a rowset(solved)
Posted: Fri Mar 27, 2020 11:23 PM

Thank you !

Sds,
Vilian F. Arraes
vilian@vfatec.com.br
Belém-Pa-Brazil
Posts: 230
Joined: Sat Apr 19, 2008 10:28 PM
Re: How to copy a row of a rowset
Posted: Tue Mar 31, 2020 10:02 AM
nageswaragunupudi wrote:
Code (fw): Select all Collapse
aRows := oRs:GetRows( 1, oRs:KeyNo )

This gives a two-dimensional array with a single row
Code (fw): Select all Collapse
{ { col1value, col2value, ... colNvalue } }


If you want to insert the data into another existing RowSet with identical structure, you can do it using oRs2:AddNew( aFields, aRows[ 1 ] ) }
But you can not create a new rowset in memory with this data.
A RowSet can be created ONLY by reading data from the MySql database via an sql query.

If you want to create an object, which works similary, holding this data, you can create TArrayData object
Code (fw): Select all Collapse
oData := TArrayData():New( aRows, oRs:aStructure )


Good morning,

In oRs:aStructure the field type for the “primary key” is “+” instead of “N”, so the “primary key” value is not copied properly in TdataArray

The solution is either modify TdataArray and add ‘+” as a field type, like “N”, “D”, “C”, etc. or put this in your code.


Code (fw): Select all Collapse
   aRows := oRs:GetRows(  )
   aStru := aclone( oRs:aStructure )
   aeval( aStru, { | aAr , n | iif( aAr[2]=='+' , aAr[2]:='N',nil)  } )
   oData := TArrayData():New( aRows, aStru )


Regards
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: How to copy a row of a rowset
Posted: Tue Mar 31, 2020 10:42 AM

ok thanks

Regards



G. N. Rao.

Hyderabad, India

Continue the discussion