Fecha actual Mié Jun 26, 2024 11:56 am

Todos los horarios son UTC + 1 hora [ DST ]




Nuevo tema Responder al tema  [ 11 mensajes ] 
Autor Mensaje
NotaPublicado: Jue May 24, 2007 7:10 pm 
Avatar de Usuario

Registrado: Mar Oct 11, 2005 6:58 pm
Mensajes: 138
Ubicación: España
Hola a todos:
Aqui os dejo un sencillo Metodo, para extraer y visualizar, el nombre de cada registro que esta compuesta una Base de Datos.

/*
* Evento OnClick.
*/
METHOD Button1OnClick( oSender ) CLASS TForm1

Local I, Nomvar
Use <BaseDatos>
Go Top
Skip-1
For I=1 To FCount()
Nomvar=Fieldname(I)
? Nomvar
Next
Close

return

Posdata:
No puedo poner un archivo ya compilado, por que no me deja colocar ninguna clase de archivo.

Un saludo
Fraguibo


Arriba
 Perfil  
Responder citando  
 Asunto:
NotaPublicado: Jue May 24, 2007 9:08 pm 
Avatar de Usuario

Registrado: Vie Oct 14, 2005 12:50 pm
Mensajes: 78
Ubicación: Girona
Fraguibo,

Mira, el código se puede depurar si almacenas en una variable el total de registros, y así en cada interacción del bucle no se repite la llamada a FCount()

Luego, no se porque haces un GoTop()... si cuando abrimos una DBF con USE se pone en el primer registro SIEMPRE, a menos que cambiemos a algún índice en ese caso SI es necesario hacer un DbGoTop()

Y... el Skip -1 ¿?¿? por que lo haces???


METHOD Button1OnClick( oSender ) CLASS TForm1

Local I, Nomvar ,nCount

nCount := FCount()
Use <BaseDatos>

For I=1 To nCount
Nomvar=Fieldname(I)
? Nomvar
Next
Close

return


Un Saludo,
Xevi.

_________________
Un Saludo,
Xevi.


Arriba
 Perfil  
Responder citando  
 Asunto:
NotaPublicado: Vie May 25, 2007 6:21 pm 
Avatar de Usuario

Registrado: Mar Oct 11, 2005 6:58 pm
Mensajes: 138
Ubicación: España
Xevi;
En primer lugar te agradeco tu observación, referente a por que no almaceno, todos los registro en una variable, para no tener que llamar a FCount(), cada vez que se ejecuta el bucle, pues lo hago para tener una variable y una linea de codigo "Menos".

Referente a por que utilizo Skip-1, pues por la sencilla razón de que al abrir la base de datos, se situa el puntero en el primer registro, pero no en la estructura, asi al hacer Skip-1 el puntero se situa directamente, en la estructura de la base de datos.

Si a demas de visualizar el nombre de los registros, quesieramos visualizar tambien el contenido de estos, entonces la mejor forma de hacerlo seria como tu lo expones.

Recibe un cordial saludo.

Fraguibo


Arriba
 Perfil  
Responder citando  
 Asunto:
NotaPublicado: Vie May 25, 2007 11:00 pm 
Avatar de Usuario

Registrado: Dom Oct 09, 2005 11:26 am
Mensajes: 362
Ubicación: Salamanca - España
Fraguibo escribió:
Xevi;
En primer lugar te agradeco tu observación, referente a por que no almaceno, todos los registro en una variable, para no tener que llamar a FCount(), cada vez que se ejecuta el bucle, pues lo hago para tener una variable y una linea de codigo "Menos".

Referente a por que utilizo Skip-1, pues por la sencilla razón de que al abrir la base de datos, se situa el puntero en el primer registro, pero no en la estructura, asi al hacer Skip-1 el puntero se situa directamente, en la estructura de la base de datos.

Si a demas de visualizar el nombre de los registros, quesieramos visualizar tambien el contenido de estos, entonces la mejor forma de hacerlo seria como tu lo expones.

Recibe un cordial saludo.

Fraguibo


Buffffffffffffffffffffffff!!!!!!!
....momento, por favor....

Ahora!!!!!, hola foro....
...ya...

Lo que te dice Xevi sobre el FCount() es ACERTADISIIIISIIIMO, ya que debes de entender que al programar es MAS importante la optimización de codigo PARA SU EJECUCION, que la comodidad al escribir código
: "pues lo hago para tener una variable y una linea de codigo "Menos""

Aclarando TU lógica: es MAS importante hacer:

FOR n := 1 TO FCount()
....

y que la máquina haga una llamada a FCount() tantas veces como campos tenga la tabla y siempre para recibir EL MISMO VALOR.

y no como se debe codificar

LOCAL nCount

nCount := FCount()

FOR n := 1 TO nCount
.....

PORQUE CREAMOS UNA variable y ESCRIBIMOS algo más de código... :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock:


"Referente a por que utilizo Skip-1, pues por la sencilla razón de que al abrir la base de datos, se situa el puntero en el primer registro, pero no en la estructura, asi al hacer Skip-1 el puntero se situa directamente, en la estructura de la base de datos"

A ver, que esta parte ya es..., es.... ess si.... es... bufff.. bueno... eso... que es... bufff, a ver... como explicarlo.... :oops: :oops:

Esta ya es p'a nota.... ¿donde has leido lo anterior?

A ver Fraguibo, SKIP -1 estando el el primer registro ES UNO (a lo mejor haciendo un bucle... consigues posicionarte en... EN EL PRIMER REGISTRO :lol: ), lo que dices de la estructura, perdona pero para 'acceder' a la estructura de una tabla NO TIENES que estar en nigun registro en concreto... bueno, FIJATE!!! que además puedes acceder a la estructura de una tabla AUNQUE NO TENGA REGISTROS (supongo que estos casos no haces Skip -1 :lol: )

Fraguibo, prueba a acceder a la estructura de la tabla EN CUALQUIER momento y situación de la misma... ¡¡¡FUNCIONARÁ!!!!

Existe 'un truco' que consiste en hacer un SKIP (+1) cuando estas en el ultimo registro y entonces te posicionas en lo que se ha llamado 'el registro fantasma' y en esa situación puedes inicializar variables con los valores de los campos 'vacios' (en blanco), pero esto a lo mejor es otra historia...

Para Xevi.... JOVEN encantado de seguir 'oyendote' por estos foros... siempre seras bienvenido y te animo a que participes mas....

Un salutote P'A T'OOOSSSSSSSSSSSSSSS

_________________
Un saludo.
Jesús P. Melgar Velasco


Arriba
 Perfil  
Responder citando  
NotaPublicado: Vie Jun 01, 2007 2:05 pm 

Registrado: Jue Jul 20, 2006 8:36 pm
Mensajes: 143
Ubicación: Bilbao
se llama optimizacion de tiempos.
gastas 4 bytes de memoria pero te ahorras 19999 consultas en una base de 20000 registros...

de todas formas hay un bug bastante grande... haces el fcount antes del use...co lo cual usas otro fcount de la base anterior

_________________
(C) Josu Udaondo...el fiera de clipper 5
Bilbao 2006


Arriba
 Perfil  
Responder citando  
NotaPublicado: Vie Jun 01, 2007 4:36 pm 
Avatar de Usuario

Registrado: Dom Oct 09, 2005 11:26 am
Mensajes: 362
Ubicación: Salamanca - España
ironmansp escribió:
de todas formas hay un bug bastante grande... haces el fcount antes del use...co lo cual usas otro fcount de la base anterior


Mu bueno el detalle, Josu!!!!!!!!!!!
:lol:
:lol:
:lol:

_________________
Un saludo.
Jesús P. Melgar Velasco


Arriba
 Perfil  
Responder citando  
 Asunto:
NotaPublicado: Dom Jun 03, 2007 10:46 pm 
Avatar de Usuario

Registrado: Mar Oct 11, 2005 6:58 pm
Mensajes: 138
Ubicación: España
Josu y jesus;
Si repasais bien la forma en que yo lo expuse vereis que yo NO he cometido ningu BUG, ya que el cometio el error fue Xevi que trato de corregirme la forma en que yo la habia expuesto.

Jesus segun el manual de clipper de que dispòngo yo, pues para una correcta programación, deberia de colocarse de siguiente forma, para no tener que realizar una consulta cada vez del bucle a la base de datos:

Local x, I
Use <Base Datos>
x:=FCount()
If For I=1 To nCount
Nomvar=Fieldname(I)
? Nomvar
Next
Close

Os doy las gracias a todos por corregirme, un saludo para todos.

Fraguibo


Arriba
 Perfil  
Responder citando  
 Asunto:
NotaPublicado: Dom Jun 03, 2007 10:48 pm 
Avatar de Usuario

Registrado: Mar Oct 11, 2005 6:58 pm
Mensajes: 138
Ubicación: España
Josu y jesus;
Si repasais bien la forma en que yo lo expuse vereis que yo NO he cometido ningu BUG, ya que el cometio el error fue Xevi que trato de corregirme la forma en que yo la habia expuesto.

Jesus segun el manual de clipper de que dispòngo yo, pues para una correcta programación, deberia de colocarse de siguiente forma, para no tener que realizar una consulta cada vez del bucle a la base de datos:

Local x, I
Use <Base Datos>
x:=FCount()
If For I=1 To x
Nomvar=Fieldname(I)
? Nomvar
Next
Close

Os doy las gracias a todos por corregirme, un saludo para todos.

Fraguibo


Arriba
 Perfil  
Responder citando  
 Asunto:
NotaPublicado: Lun Jun 04, 2007 6:33 pm 
Avatar de Usuario

Registrado: Dom Oct 09, 2005 11:26 am
Mensajes: 362
Ubicación: Salamanca - España
Fraguibo escribió:
Josu y jesus;
Si repasais bien la forma en que yo lo expuse vereis que yo NO he cometido ningu BUG, ya que el cometio el error fue Xevi que trato de corregirme la forma en que yo la habia expuesto.

Jesus segun el manual de clipper de que dispòngo yo, pues para una correcta programación, deberia de colocarse de siguiente forma, para no tener que realizar una consulta cada vez del bucle a la base de datos:

Local x, I
Use <Base Datos>
x:=FCount()
If For I=1 To x
Nomvar=Fieldname(I)
? Nomvar
Next
Close

Os doy las gracias a todos por corregirme, un saludo para todos.

Fraguibo


Hola Fraguibo.

De acuerdo con el codigo que expones (el if delante del for no sirve...)

Un abrazote y a seguir 'leyendonos' por estos foros!!!!

_________________
Un saludo.
Jesús P. Melgar Velasco


Arriba
 Perfil  
Responder citando  
 Asunto:
NotaPublicado: Jue Jun 07, 2007 10:04 pm 

Registrado: Jue Ene 26, 2006 9:28 pm
Mensajes: 74
Asi tambien podria valer ¿no?

Local aCampos

Use <Base Datos>
aCampos := dbstruct()
aeval( aCampos, { | nValor | QOUT( nValor[1] ) } )
Close

Un Saludo


Arriba
 Perfil  
Responder citando  
 Asunto:
NotaPublicado: Jue Jun 07, 2007 10:51 pm 
Avatar de Usuario

Registrado: Dom Oct 09, 2005 11:26 am
Mensajes: 362
Ubicación: Salamanca - España
JMorales escribió:
Asi tambien podria valer ¿no?

Local aCampos

Use <Base Datos>
aCampos := dbstruct()
aeval( aCampos, { | nValor | QOUT( nValor[1] ) } )
Close

Un Saludo


Totalmente válido... pero... un poco mas dificil de manejar.....

_________________
Un saludo.
Jesús P. Melgar Velasco


Arriba
 Perfil  
Responder citando  
Mostrar mensajes previos:  Ordenar por  
Nuevo tema Responder al tema  [ 11 mensajes ] 

Todos los horarios son UTC + 1 hora [ DST ]


No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro
No puede enviar adjuntos en este Foro

Buscar:
Saltar a:  
cron