Dúvida básica em recordset: nr do record atual
Moderador: Moderadores
Dúvida básica em recordset: nr do record atual
Pessoal, estou com uma dúvida básica sobre recordset (que só comecei a usar há pouco tempo), pesquisei tudo na internet e aqui no fórum, mas não achei.
A dúvida é simples: como pego o nr atual do record? Sei que consigo pegar o nr total de records com oRs:recordcount(). Mas eu quero o atual (ao estilo recno() do Harbour). É possível?
A dúvida é simples: como pego o nr atual do record? Sei que consigo pegar o nr total de records com oRs:recordcount(). Mas eu quero o atual (ao estilo recno() do Harbour). É possível?
Inacio de Carvalho Neto
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Dúvida básica em recordset: nr do record atual
Sim e não.
Diferente do Harbour, o RecNo() é o número sequencial dentro do recordset.
Inclusive se aplicar filtro, a numeração fica apenas na parte filtrada, não existe "pular RecNo()"
rs:AbsolutePosition = posição atual
rs:Move( nNumero, nDirecao ) = move n registros a partir do início/final/ou posição atual (parecido com o fSeek() do Harbour)
Diferente do Harbour, o RecNo() é o número sequencial dentro do recordset.
Inclusive se aplicar filtro, a numeração fica apenas na parte filtrada, não existe "pular RecNo()"
rs:AbsolutePosition = posição atual
rs:Move( nNumero, nDirecao ) = move n registros a partir do início/final/ou posição atual (parecido com o fSeek() do Harbour)
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
Dúvida básica em recordset: nr do record atual
Olá!
Na verdade, FSeek( h, n ) ou FSeek( h, -n ) posiciona o ponteiro do arquivo com handle h para a frente ou para trás n bytes, sem ler o conteúdo.
oRs:move( n, direção ) é equivalente ao DbSkip( n ) ou DbSkip( -n ).
Na verdade, FSeek( h, n ) ou FSeek( h, -n ) posiciona o ponteiro do arquivo com handle h para a frente ou para trás n bytes, sem ler o conteúdo.
oRs:move( n, direção ) é equivalente ao DbSkip( n ) ou DbSkip( -n ).
[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Dúvida básica em recordset: nr do record atual
Não é não. Tá mais pra FSeek() mesmo, porque depende do parâmetro.alxsts escreveu: Na verdade, FSeek( h, n ) ou FSeek( h, -n ) posiciona o ponteiro do arquivo com handle h para a frente ou para trás n bytes, sem ler o conteúdo.
oRs:move( n, direção ) é equivalente ao DbSkip( n ) ou DbSkip( -n ).
https://www.w3schools.com/asp/met_rs_move.asp
Com isso, você pode pular registros, ou ir diretamente a um determinado registro.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
Dúvida básica em recordset: nr do record atual
Olá!
Pra mim está bem claro:
FSeek() move bytes:
Pra mim está bem claro:
FSeek() move bytes:
rs:move() move registros:Changes the position of the file pointer.
Syntax
FSeek( <nFileHandle>, <nBytes>, [<nOrigin>] ) --> nPosition
Arguments
<nFileHandle>
This is a numeric file handle returned from function FOpen(), FCreate(), or HB_FCreate().
<nBytes>
This is a numeric value specifying the number of bytes to move the file pointer. It can be a positive or negative number. Negative numbers move the file pointer backwards (towards the beginning of the file), positive values move it forwards. The value zero is used to position the file pointer exactly at the location specified with <nOrigin>.
<nOrigin>
Optionally, the starting position from where to move the file pointer can be specified. #define constants are available in the FILEIO.CH file that can be used for <nOrigin>. Start positions for moving the file pointer Constant Value Description
FS_SET *) 0 Start at the beginning of the file
FS_RELATIVE 1 Start at the current file pointer position
FS_END 2 Start at the end of the file
*) default
Return
The function returns a numeric value. It is the new position of the file pointer, counted from the beginning of the file (position 0).
ADO Move Method
The Move method moves the record pointer in a Recordset object.
Note: This method can be used on all Recordset objects.
Syntax
objRecordset.Move numrec,start
Parameter Description
numrec Required. Specifies how many records the record pointer will move.
Example: If this parameter is set to 3, the record pointer moves 3 records forward.
Example: If this parameter is set to -3, the record pointer moves 3 records backward
start Optional. Where to start. Can be a bookmark or a BookmarkEnum value
BookmarkEnum
Constant Value Description
adBookmarkCurrent 0 Starts at the current record
adBookmarkFirst 1 Starts at the first record
adBookmarkLast 2 Starts at the last record
[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Dúvida básica em recordset: nr do record atual
Então... Fseek() e Move() movem conforme posição informada, a diferença é que fSeek() faz isso em bytes, e Move() faz isso em registros.
Isso acaba sendo melhor comparação do que SKIP, que apenas move pra frente ou pra trás.
Talvez você esteja considerando apenas o fato de mover ou não registros.
Eu estou considerando o fato de mover a partir de determinada posição, sem considerar que podem ser registros ou bytes.
Apenas usamos pontos de vista diferentes pra fazer a comparação.
- eu usei como referência o tipo de movimento, não importa se registro ou byte
- você usou como referência mover registros, não importa o tipo de movimento
Isso acaba sendo melhor comparação do que SKIP, que apenas move pra frente ou pra trás.
Talvez você esteja considerando apenas o fato de mover ou não registros.
Eu estou considerando o fato de mover a partir de determinada posição, sem considerar que podem ser registros ou bytes.
Apenas usamos pontos de vista diferentes pra fazer a comparação.
- eu usei como referência o tipo de movimento, não importa se registro ou byte
- você usou como referência mover registros, não importa o tipo de movimento
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
Dúvida básica em recordset: nr do record atual
Olá!
Ok, vamos em frente, cada um com seu ponto de vista.
Ok, vamos em frente, cada um com seu ponto de vista.
[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Dúvida básica em recordset: nr do record atual
Assim, os pontos de vista ficam mais claros, talvez.
SKIP n, move n registros pra frente
SKIP -n, move n registros pra trás
FSeek( handle, n, PosAtual ) move n nbytes pra frente
FSeek( nHandle, -n, PosAtual ) move nbytes pra trás
FSeek( nHandle, n, Posinicio ) move n bytes pra frente a partir do início
Fseek( nHandle, -n, Posfim ) move n bytes pra trás a partir do final
Move( n, PosAtual ) move n Registros pra frente
Move( n, -PosAtual ) move n Registros pra trás
Move( n, PosInicio ) move n Registros pra frente a partir do início
Move( n, PosFinal ) move n Registros pra trás a partir do final
Então.... Move() faz movimento por registros, igual SKIP
Mas... a forma de movimentar é igual FSeek(), podendo ser do início/final/posição atual
No caso do post, pra ir para um registro, vai usar o move a partir do início.
E obter o registro é absolute position.
Como eu já disse, no ADO, o número é com relação à consulta, e não na base de dados.
ORDER BY CODIGO, o registro 1 vai ser o primeiro código
ORDER BY NOME, o registro 1 vai ser o primeiro nome
E se no resultado fizer um filtro, SORT, etc... a numeração vai seguir a sequência do resultado, sempre começando no 1.
SKIP n, move n registros pra frente
SKIP -n, move n registros pra trás
FSeek( handle, n, PosAtual ) move n nbytes pra frente
FSeek( nHandle, -n, PosAtual ) move nbytes pra trás
FSeek( nHandle, n, Posinicio ) move n bytes pra frente a partir do início
Fseek( nHandle, -n, Posfim ) move n bytes pra trás a partir do final
Move( n, PosAtual ) move n Registros pra frente
Move( n, -PosAtual ) move n Registros pra trás
Move( n, PosInicio ) move n Registros pra frente a partir do início
Move( n, PosFinal ) move n Registros pra trás a partir do final
Então.... Move() faz movimento por registros, igual SKIP
Mas... a forma de movimentar é igual FSeek(), podendo ser do início/final/posição atual
No caso do post, pra ir para um registro, vai usar o move a partir do início.
E obter o registro é absolute position.
Como eu já disse, no ADO, o número é com relação à consulta, e não na base de dados.
ORDER BY CODIGO, o registro 1 vai ser o primeiro código
ORDER BY NOME, o registro 1 vai ser o primeiro nome
E se no resultado fizer um filtro, SORT, etc... a numeração vai seguir a sequência do resultado, sempre começando no 1.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Dúvida básica em recordset: nr do record atual
O move eu já conhecia e usava.
O que eu precisava mesmo era o AbsolutePosition, que resolveu meu problema.
Muito obrigado.
O que eu precisava mesmo era o AbsolutePosition, que resolveu meu problema.
Muito obrigado.
Inacio de Carvalho Neto
