Lotus Approach - Encontrar el numero mayor

 
Vista:

Encontrar el numero mayor

Publicado por fenix (97 intervenciones) el 12/02/2009 18:25:24
Saludos a Tod@s.

Alguien me puede ayudar. Tengo una tabla con unos 5000 reg y continua creciendo. Lo que necesito es encontrar el numero mayor contenido en un campo llamado gestion.

En otros plataformas existen funciones para ello como MAX(), en approch no he podido encontrar algo equivalente.

EJEMPLO:
miNumMayor=0
miNumMayor = MAX(23,55,98,2)
PRINT miNumMayor
98

Espero me puedan ayudar.

Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Encontrar el numero mayor

Publicado por Ricardo Rodríguez (114 intervenciones) el 12/02/2009 23:26:51
Lo que haría es una macro más o menos así, Registro >Ultimo, y asi siempre llegaré al último registro y puedo saber el #.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Encontrar el numero mayor

Publicado por Manolo (140 intervenciones) el 13/02/2009 12:36:10
Hola Fenix:
Esto funciona perfectamente con cualquier campo de cualquier .dbf
Un SELECT ordenado por el campo que quieras, accedes al último
registro, y ya tienes el valor más alto. Infinitamente más
rápido que cualquier barrido de registros. Es instantáneo.
Puedes copiar y pegar y cambiar sólo la ruta, el archivo y el
nombre del campo.
Crea un botón, abre la edición de scripts
y pega la secuencia en el evento 'Click' del botón que acabas de crear.

'================== secuencia de instrucciones
DIM QRY As Query
DIM RST As ResultSet
DIM CON As Connection
DIM Path As String
DIM File As String

CD=chr(34) 'comillas dobles
Path="ruta completa a la carpeta del archivo" 'tu ruta
File="archivo.dbf" 'tu archivo
Set CON = New Connection
Set QRY = New Query
Set RST = New ResultSet
CON.ConnectTo("dBASE IV")
Set QRY.Connection = CON
QRY.TableName = Path + File
Set RST.Query = QRY

Table = Path + File
QRY.SQL = "SELECT *" & " FROM " & CD & Table & CD & " ORDER BY gestion"
Set RST.Query = QRY
RST(2).Execute

RST(2).LastRow
Messagebox "El último número es:" & RST(2).GetValue("gestion")
'=================== fin de la secuencia

'en la cláusula ORDER BY tienes que poner el nombre de campo del .dbf
'en la función GETVALUE del RST(ResultSet) es también el nombre de campo del .dbf

Suerte.
Un saludo.

Manolo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Encontrar el numero mayor

Publicado por fenix (97 intervenciones) el 13/02/2009 17:30:50
Hay te cuento del reusltado.

Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Encontrar el numero mayor

Publicado por fenix (97 intervenciones) el 13/02/2009 20:55:36
Hola Manolo.
Aplique la rutina y me funciono muy bien. En las pruebas me di cuenta que no era suficiente en contrar el numero mayor, sino que tambien debe ser mayor del año en curso. He probado agregarle el WHERE al SQL, pero no logro hacer que funcione.
Espero me podas ayudar señalandome donde estan mis errores.

Sub NewGestion
Dim QRY As Query
Dim RST As ResultSet
Dim CON As Connection
Dim Path As String
Dim File As String

CD=Chr(34) 'comillas dobles
Path="C:RegisAred" 'tu ruta
File="lltc01.dbf" 'tu archivo
Set CON = New Connection
Set QRY = New Query
Set RST = New ResultSet
CON.ConnectTo("dBASE IV")
Set QRY.Connection = CON
QRY.TableName = Path + File
Set RST.Query = QRY

Table = Path + File
'----------------------------------------------------------------------------------------
QRY.SQL = "SELECT cod_lla, fec_lla" & " FROM " & CD & Table & CD & WHERE year(Today) = YEAR(Lltc01.fec_lla)" " ORDER BY fec_lla,val(cod_lla) "
' Mi campo cod_lla es de cadena(12), pero solo recibe caracteres numericos, por lo que le agrego el val() y que ordene como numero.

' QRY.SQL = "SELECT *" & " FROM " & CD & Table & CD & "WHERE YEAR(Lltc01.fec_lla) = 2009" &" ORDER BY fec_lla, cod_lla"
'-------------------------------------------------------------------------------------
Set RST.Query = QRY

RST.Execute

RST.LastRow

Messagebox "El número es:" & RST.GetValue("cod_lla") & " / " &RST.GetValue("fec_lla")
End Sub

Saludo Manolo desde El Salvador.

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Encontrar el numero mayor

Publicado por Manolo (140 intervenciones) el 16/02/2009 10:42:08
Hola Fenix:

Aparentemente, la SELECT está bien, pero yo creo que en Approach, la sentencia SELECT no es estándar. Yo no he conseguido que las funciones (YEAR(), NOW(), etc.) que se pueden utilizar en la cláusula WHERE trabajen. Me las arreglo para no tener que usarlas.
En tu caso tienes 2 soluciones:
Sol. 1.
- Añadirle a la BD un campo más (ano_fec_lla), cómo fórmula de modificación que sea solamente el año del campo que te interesa (no sirve un campo calculado), tiene que estar físicamente en la BD.
- Definir en una variable el año de la fecha actual: ANOFECHA = Year(Today())
- Construir la SELECT con estos 2 valores:
"SELECT.... WHERE ano_fec_lla = '" & ANOFECHA & "'"
(fíjate que el valor de la variable va encerrada entre comillas simples). Quedaría así:
SELECT ...... WHERE ano_fec_lla = '2009'

Sol. 2.
- Hacerlo con un Find + un Sort

'========== Sentencias
Dim fFind As New Find
fFind.And "Lltc01.fec_lla", "if(AÑO(Lltc01.fec_lla) = AÑO(HOY()))"
CurrentWindow.FindSort fFind

Dim sSort As New Sort
sSort.Add "Lltc01.cod_lla", LtsSortAscending
CurrentWindow.FindSort sSort

CurrentWindow.LastRecord
NumRecords = CurrentWindow.NumRecordsFound
'============== fin

Esto también es rápido y efectivo. No tienes que añadir ningún campo más a la BD. Pero por contra, para obtener el valor que te interesa, tendrás que cambiarte a una vista con BD principal Lltc01, en la que figure el campo que te interesa y obtenerlo así:

'============
VALORMASALTO = CurrentView.Body.COD_LLA.Text
'============

Y también tienes que tener en cuenta, que cuando necesites trabajar con todos los registros, tendrás que añadir:

'====================
CurrentWindow.FindAll
'====================

Para disponer de nuevo de todos los registros de la BD.

De nuevo, suerte.

Un saludo desde A Coruña, España

Manolo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Encontrar el numero mayor

Publicado por fenix (97 intervenciones) el 17/02/2009 16:09:54
Hola Manolo.

Me inclino por la Solucion 2. Ya que le veo potencial para otros filtros que necesito y estan sobre lo mismo.

De pronto me ha funcionado, a nocer por unos detalles que espero solventarlos.

Luego te cuento.

Gracias Nuevamente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar