Mi Sistema Web
Blog

\\ Inicio : Historico (invertir el orden)
Articulos en orden cronologico.
 
 
Por Admin (el 02/05/2012 @ 09:05:43, en Programación ASP 3.0, votado 8 veces)
Articulo (Votar) Comentarios Comentario (0)  Historico Historico  Imprimir Imprimir
 
Por Admin (el 02/05/2012 @ 08:59:11, en Programación ASP 3.0, votado 9 veces)
Function Description
CDate Converts a valid date and time expression to the variant of subtype Date
Date Returns the current system date
DateAdd Returns a date to which a specified time interval has been added
DateDiff Returns the number of intervals between two dates
DatePart Returns the specified part of a given date
DateSerial Returns the date for a specified year, month, and day
DateValue Returns a date
Day Returns a number that represents the day of the month (between 1 and 31, inclusive)
FormatDateTime Returns an expression formatted as a date or time
Hour Returns a number that represents the hour of the day (between 0 and 23, inclusive)
IsDate Returns a Boolean value that indicates if the evaluated expression can be converted to a date
Minute Returns a number that represents the minute of the hour (between 0 and 59, inclusive)
Month Returns a number that represents the month of the year (between 1 and 12, inclusive)
MonthName Returns the name of a specified month
Now Returns the current system date and time
Second Returns a number that represents the second of the minute (between 0 and 59, inclusive)
Time Returns the current system time
Timer Returns the number of seconds since 12:00 AM
TimeSerial Returns the time for a specific hour, minute, and second
TimeValue Returns a time
Weekday Returns a number that represents the day of the week (between 1 and 7, inclusive)
WeekdayName Returns the weekday name of a specified day of the week
Year Returns a number that represents the year

Conversion Functions

Function Description
Asc Converts the first letter in a string to ANSI code
CBool Converts an expression to a variant of subtype Boolean
CByte Converts an expression to a variant of subtype Byte
CCur Converts an expression to a variant of subtype Currency
CDate Converts a valid date and time expression to the variant of subtype Date
CDbl Converts an expression to a variant of subtype Double
Chr Converts the specified ANSI code to a character
CInt Converts an expression to a variant of subtype Integer
CLng Converts an expression to a variant of subtype Long
CSng Converts an expression to a variant of subtype Single
CStr Converts an expression to a variant of subtype String
Hex Returns the hexadecimal value of a specified number
Oct Returns the octal value of a specified number

Format Functions

Function Description
FormatCurrency Returns an expression formatted as a currency value
FormatDateTime Returns an expression formatted as a date or time
FormatNumber Returns an expression formatted as a number
FormatPercent Returns an expression formatted as a percentage

Math Functions

Function Description
Abs Returns the absolute value of a specified number
Atn Returns the arctangent of a specified number
Cos Returns the cosine of a specified number (angle)
Exp Returns e raised to a power
Hex Returns the hexadecimal value of a specified number
Int Returns the integer part of a specified number
Fix Returns the integer part of a specified number
Log Returns the natural logarithm of a specified number
Oct Returns the octal value of a specified number
Rnd Returns a random number less than 1 but greater or equal to 0
Sgn Returns an integer that indicates the sign of a specified number
Sin Returns the sine of a specified number (angle)
Sqr Returns the square root of a specified number
Tan Returns the tangent of a specified number (angle)

Array Functions

Function Description
Array Returns a variant containing an array
Filter Returns a zero-based array that contains a subset of a string array based on a filter criteria
IsArray Returns a Boolean value that indicates whether a specified variable is an array
Join Returns a string that consists of a number of substrings in an array
LBound Returns the smallest subscript for the indicated dimension of an array
Split Returns a zero-based, one-dimensional array that contains a specified number of substrings
UBound Returns the largest subscript for the indicated dimension of an array

String Functions

Function Description
InStr Returns the position of the first occurrence of one string within another. The search begins at the first character of the string
InStrRev Returns the position of the first occurrence of one string within another. The search begins at the last character of the string
LCase Converts a specified string to lowercase
Left Returns a specified number of characters from the left side of a string
Len Returns the number of characters in a string
LTrim Removes spaces on the left side of a string
RTrim Removes spaces on the right side of a string
Trim Removes spaces on both the left and the right side of a string
Mid Returns a specified number of characters from a string
Replace Replaces a specified part of a string with another string a specified number of times
Right Returns a specified number of characters from the right side of a string
Space Returns a string that consists of a specified number of spaces
StrComp Compares two strings and returns a value that represents the result of the comparison
String Returns a string that contains a repeating character of a specified length
StrReverse Reverses a string
UCase Converts a specified string to uppercase

Other Functions

Function Description
CreateObject Creates an object of a specified type
Eval Evaluates an expression and returns the result
GetLocale Returns the current locale ID
GetObject Returns a reference to an automation object from a file
GetRef Allows you to connect a VBScript procedure to a DHTML event on your pages
InputBox Displays a dialog box, where the user can write some input and/or click on a button, and returns the contents
IsEmpty Returns a Boolean value that indicates whether a specified variable has been initialized or not
IsNull Returns a Boolean value that indicates whether a specified expression contains no valid data (Null)
IsNumeric Returns a Boolean value that indicates whether a specified expression can be evaluated as a number
IsObject Returns a Boolean value that indicates whether the specified expression is an automation object
LoadPicture Returns a picture object. Available only on 32-bit platforms
MsgBox Displays a message box, waits for the user to click a button, and returns a value that indicates which button the user clicked
RGB Returns a number that represents an RGB color value
Round Rounds a number
ScriptEngine Returns the scripting language in use
ScriptEngineBuildVersion Returns the build version number of the scripting engine in use
ScriptEngineMajorVersion Returns the major version number of the scripting engine in use
ScriptEngineMinorVersion Returns the minor version number of the scripting engine in use
SetLocale Sets the locale ID and returns the previous locale ID
TypeName Returns the subtype of a specified variable
VarType Returns a value that indicates the subtype of a specified variable
Articulo (Votar) Comentarios Comentario (0)  Historico Historico  Imprimir Imprimir
 
Por Admin (el 02/03/2012 @ 08:55:55, en Excel, votado 76 veces)
Cuando desea inserta una nueva columna en una hoja de Excel 2007 aparece el error "No se puede desplazar objetos fuera de la hoja" .

Para solucioanr el problema siga los pasos que se explican a continuación:

1.Logo Office
2.Opciones de Excel
3.Avanzadas
4.Mostrar Opciones para este libro:
5.Para objetos mostrar:"
6.MARCAR "Todo"

¿Por qué aparece "No se puede desplazar objetos fuera de la hoja" cuando oculta columnas o filas?

Por qué aparece No se puede desplazar objetos fuera de la hoja cuando oculta columnas o filas_ppalEste mensaje se produce debido a 2 cosas:

1. Se insertan objetos o comentarios al final de la cuadrícula de las hojas.

2. La opción “No mover ni cambiar tamaño con celdas” está seleccionada en la ventana del formato del objeto. Esta opción está activa de forma predeterminada.

Por qué aparece No se puede desplazar objetos fuera de la hoja cuando oculta columnas o filas_image1

Por ejemplo, si ha incluido un comentario en la celda XFC1 y la opción No mover ni cambiar tamaño con celdas está seleccionada, el mensaje aparece al intentar ocultar tres o más columnas en algún lugar de la hoja entre la primera columna y la columna que contiene el borde izquierdo del comentario de celda.

Cómo solucionarlo?

1. Para cualquier tipo de objeto, selecciónelo y haga clic derecho en “Tamaño y Propiedades”

Por qué aparece No se puede desplazar objetos fuera de la hoja cuando oculta columnas o filas_image2

2. En la ficha Propiedades, en Posicionamiento del objeto, haga clic en Mover y cambiar tamaño con celdas.

Por qué aparece No se puede desplazar objetos fuera de la hoja cuando oculta columnas o filas_image3

Nota: Tenga presente que estos 2 pasos funcionarán para cualquier tipo de objeto, desde un comentario, una forma y un SmartArt.
Articulo (Votar) Comentarios Comentario (0)  Historico Historico  Imprimir Imprimir
 
Por Admin (el 01/03/2012 @ 09:28:58, en HTML, votado 63 veces)
En primer lugar creamos el formulario con los botones que ejecutarán las acciones:



Enseguida generamos el código javascript para manejar los eventos:

Articulo (Votar) Comentarios Comentario (0)  Historico Historico  Imprimir Imprimir
 
Por Admin (el 26/01/2012 @ 13:32:35, en Programación ASP 3.0, votado 44 veces)

Uno de los datos por los cuales podemos identificar a un usuario es mediante su ID de sesión. Una sesión se establece por el usuario cada vez que este utiliza un navegador nuevo para acceder a nuestra web. El valor del ID de sesión es asignado automáticamente por el servidor web.

Si queremos acceder al ID de sesión dentro de nuestro programa ASP tenemos que utilizar el objeto Session, en concreto el campo SessionID. Lo podemos visualizar de la siguiente forma:



Hay que tener especial cuidado con este identificativo, que aunque nos puede servir para muchas cosas, podría repetirse en el tiempo. Ya que ante una eventual caída o reinicio del servidor web, este, puede volver a generar ID repetidos. Si bien, tiene una gran utilidad a la hora de saber como el usuario ha ido navegando por nuestro website.

Articulo (Votar) Comentarios Comentario (0)  Historico Historico  Imprimir Imprimir
 
Por Admin (el 26/01/2012 @ 13:04:03, en Programación ASP 3.0, votado 66 veces)
Lo primero que debemos de hacer es recoger la fecha del servidor. En este caso utilizamos la función Now() de ASP para que nos de la fecha actual del servidor.

Lo siguiente será el pasar esa fecha a una rutina Javascript. Para ello lo que hacemos es montar la rutina Javascript "al vuelo". Es decir, el código de la rutina Javascript que se ejecutará en el cliente llevará parte de código de servidor. El servidor antes de devolver la página al cliente tendrá ya una rutina pura y dura Javascript.

Veamos como quedaría:


 <script type="text/javascript">
// Recogemos la fecha del servidor.
var fecha = "<%=Now()%>";
// Pasamos la fecha a javascript
var fecha_js = new Date(fecha);
script>

El ejemplo de crear un reloj en javascript lo que hacía era poner un Timer que lanzaba cada segundo una función, la cual, solicitaba la fecha actualizada. Si hicieramos eso volveríamos a tener la fecha del cliente y no la del servidor. Es por ello que lo que tendremos que hacer es el control manual de la fecha, es decir, incrementar nosotros mismos la fecha, segundo a segundo.

Para incrementar la fecha lo primero que tenemos que hacer es obtener los segundos con getSeconds(), minutos con getMinutes() y hora del servidor con getHours().


var segundos = fecha_js.getSeconds();
var hora = fecha_js.getHours();
var minutos = fecha_js.getMinutes();

Y en la función que se ejecute cada segundo (mejor dicho, cada 1000 milésimas) deberemos de seguir el siguiente algoritmo:


segundos++;
if (segundos == 60) {
segundos = 0;
minutos++;
if (minutos == 60) {
minutos = 0;
hora++;
if (hora == 24) {
hora = 0;
}
}
}

Es sencillo. Si llegamos a 60 segundos es que ha pasado un minuto. Incrementamos el minuto y ponemos el segundero a 0. Cuando lleguemos a 60 minutos es que ha pasado una hora. Incrementamos la hora y ponemos el minutero a 0. Y por último, cuando lleguemos a 24 horas, ponemos estas a 0.

Lo último del script será poner los datos en un campo input de un formulario. Como siempre, con getElementById()


document.getElementById("hora").value = " " + hora + ":" + minutos + ":" + segundos;


Y volver a ejecutar la función de paso de un segundo:


window.setTimeout("mostrar()",1000);



Ya tenemos el reloj de nuestro servidor.

Articulo (Votar) Comentarios Comentario (0)  Historico Historico  Imprimir Imprimir
 
Por Admin (el 04/01/2012 @ 12:34:04, en SQL Server, votado 79 veces)
Veamos cómo optimizar el procedimiento almacenado con simples cambios en el código.

Incluir SET NOCOUNT ON:
Con cada
sentencia SELECT y DML, el servidor SQL devuelve un mensaje que indica el número de filas afectadas por esa declaración. Esta información es sobre todo útil para depurar el código, pero es inútil después de eso. Mediante el establecimiento de SET NOCOUNT ON, se puede desactivar la función de devolución de esta información adicional. Para los procedimientos almacenados que contienen varias declaraciones o contener Transact-SQL lazos, establecer SET NOCOUNT en ON puede proporcionar un aumento de rendimiento significativo, porque el tráfico de red se reduce considerablemente.

CREATE PROC dbo.ProcName
AS
SET
NOCOUNT ON;
--Procedure code here
SELECT column1 FROM dbo.TblTable1
-- Reset SET NOCOUNT to OFF
SET NOCOUNT OFF;
GO

Use el nombre de esquema con el nombre del objeto:
El nombre del objeto
está calificado si se utiliza con el nombre de esquema. Nombre de esquema debe ser utilizado con el nombre del procedimiento almacenado y con todos los objetos de referencia dentro del procedimiento almacenado. Esta ayuda directa en encontrar el plan de cumplimiento en lugar de buscar los objetos en el esquema de otras posibles antes de decidirse a utilizar un plan almacenado en caché, si está disponible. Este proceso de búsqueda y decidir un esquema de un objeto conduce a compilar el procedimiento almacenado de bloqueo y disminuye el rendimiento del procedimiento almacenado. Por lo tanto, siempre se refieren los objetos con nombre completo en el procedimiento almacenado como

SELECT * FROM dbo.MyTable -- Preferred method
-- Instead of
SELECT * FROM MyTable -- Avoid this method
--And finally call the stored procedure with qualified name like:
EXEC dbo.MyProc -- Preferred method
--Instead of
EXEC MyProc -- Avoid this method

No utilice el prefijo "sp_" en el nombre del procedimiento almacenado:
Si un nombre de procedimiento almacenado comienza con "sp_", a continuación, busca el servidor SQL por primera vez en la base de datos maestra y luego en la base de datos actual período de sesiones. Búsqueda en la base de datos principal causa sobrecarga adicional e incluso un mal resultado si otro procedimiento almacenado con el mismo nombre se encuentra en la base de datos maestra.

Use IF EXISTS (SELECT 1) en lugar de (SELECT *):
Para comprobar
la existencia de un registro de otra tabla, se utiliza la cláusula IF EXISTS. La cláusula IF EXISTS devuelve verdadero si se devuelve el valor de una declaración interna, ya sea un único valor "1" o todas las columnas de un registro o registros completos. La salida del comando interno no se utiliza. Por lo tanto, para reducir al mínimo los datos para el procesamiento y transferencia de la red, debemos utilizar "1" en la cláusula SELECT de una declaración interna, como se muestra a continuación:


IF EXISTS (SELECT 1 FROM sysobjects
WHERE name = 'MyTable' AND type = 'U')

Utilice el procedimiento almacenado sp_executesql en lugar de la instrucción EXECUTE:
El procedimiento almacenado sp_executesql admite parámetros. Por lo tanto, utilizando el procedimiento almacenado sp_executesql en lugar de la instrucción EXECUTE mejorar la reutilización de código. El plan de ejecución de una instrucción dinámica puede ser reutilizado sólo si todos y cada personaje, incluido el caso, el espacio, los comentarios y los parámetros, es el mismo para dos estados. Por ejemplo, si ejecuta el lote a continuación:


DECLARE @Query VARCHAR(100)
DECLARE @Age INT
SET
@Age = 25
SET @Query = 'SELECT * FROM dbo.tblPerson WHERE Age = ' + CONVERT(VARCHAR(3),@Age)
EXEC (@Query)

Si volvemos a ejecutar el lote anterior con un valor diferente edad @, entonces el plan de ejecución de sentencia SELECT creado por @ Edad = 25 no se pueden reutilizar. Sin embargo, si escribimos el lote de arriba como se indica a continuación,

DECLARE @Query NVARCHAR(100)
SET @Query = N'SELECT * FROM dbo.tblPerson WHERE Age = @Age'
EXECUTE sp_executesql @Query, N'@Age int', @Age = 25

el plan compilado de esta sentencia SELECT se puede reutilizar para diferentes valores del parámetro @ Edad. La reutilización del plan existente cumplimiento dará lugar a un mejor desempeño.

Trate de evitar el uso de cursores de SQL Server siempre que sea posible:
El cursor
utiliza una gran cantidad de recursos para la carga de procesamiento para mantener la posición del registro actual en un conjunto de registros y esto disminuye el rendimiento. Si tenemos que procesar los registros uno por uno en un bucle, entonces debemos utilizar la cláusula WHILE. Siempre que sea posible, se debe reemplazar el enfoque basado en cursor con SET enfoque. Debido a que el motor de SQL Server está diseñada y optimizada para llevar a cabo basado en conjuntos operación muy rápida. Una vez más, por favor, tenga en cuenta el cursor es también una especie de bucle while.

Mantenga la transacción lo más corta posible:
La duración de la transacción afecta el bloqueo y los interbloqueos. Bloqueo exclusivo no se libera hasta el final de la transacción. En el nivel superior de aislamiento, los bloqueos compartidos también son mayores con la transacción. Por lo tanto, las transacciones largas medios seguros durante más tiempo y cerraduras para las vueltas más tiempo en el bloqueo. En algunos casos, el bloqueo también se convierte en callejones sin salida. Por lo tanto, para una ejecución más rápida y menos bloqueo, la transacción debe ser lo más corto posible.

Utilice try-catch para el manejo de errores:
Antes de
códigos de SQL Server versión 2005 para el tratamiento de errores, hubo una gran porción de código en sí, porque una declaración de comprobación de errores fue escrito después de cada sentencia T-SQL. Más código siempre consume más recursos y tiempo. En SQL Server 2005, una manera sencilla se introduce una nueva con el mismo propósito. La sintaxis es la siguiente:


BEGIN TRY
--Your t-sql code goes here
END TRY
BEGIN CATCH
--Your error handling code goes here
END CATCH


Articulo (Votar) Comentarios Comentario (0)  Historico Historico  Imprimir Imprimir
 
Por Admin (el 04/01/2012 @ 08:30:31, en Programación ASP 3.0, votado 42 veces)
Siempre he tenido problemas con las fechas en asp y access.
he visto muchas formas de arreglarlo, por ejemplo separando dia-mes-año, pero hasta hace poco no había encontrado ninguna que funcionara SIEMPRE en CUALQUIER servidor, con cualquier versión de access.

el problema es al ingresar la fecha en access.
Access configura las fechas según la configuración regional de donde esta instalado.
ejemplo : access en español.
si le introduces la fecha 3/15/2003. esta fecha en español no existe, por lo tanto lo más logico sería que devuelva un error. Pero el access al ver que esta fecha no existe deduce que no hemos equivocado y la corige sin avisar en 15/03/2003.

por lo tanto funciona a veces bien (2 numero<12) pero a veces mal.

la solución a eso es usar un formato de fecha UNICO que el access no puede interpretar.
ese formato es AAAA/MM/DD.
si pasamos la fecha en ese formato nunca la podrá modificar.. si es correcta la ingresa en la base, y sino sale error.

para hacer eso aqui teneís un función en VBscript.

<%
Function FechaGenerica(fecha)
    If IsDate(fecha) = True Then
       DIM dteDay, dteMonth, dteYear
       dia = Day(fecha)
       mes = Month(fecha)
       ano = Year(fecha)
       FechaGenerica = ano & "/" & Right(Cstr(mes + 100),2) & "/" & Right(Cstr(dia + 100),2)
    Else
       FechaGenerica = Null
    End If
End Function
%>

Una última cosa. En sentencias SQL que actualizan bases Access, las fechas se pasan entre # #.
Por ejemplo: INSERT INTO tabla(fecha) VALUE(#"& var_fecha &"#)
Articulo (Votar) Comentarios Comentario (0)  Historico Historico  Imprimir Imprimir
 
Por Admin (el 02/01/2012 @ 13:25:55, en Programación ASP 3.0, votado 105 veces)

El siguiente ejemplo sirve para realizar una paginación de resultados extraídos de una base de datos a través de una consulta con ASP 3.0. La paginación brinda un aspecto diferente al mostrar un listado, mucho más profesional y cómodo para el usuario, seguramente les ha pasado de tener muchos registros y al mostrarlos tenian una página demasiado larga y lenta en cargar.

paginar.asp

<%
Dim mostrar       'cantidad de registros a mostrar por página
Dim cant_paginas      'cantidad de páginas que recibimos
Dim pagina_actual      'La página que mostramos
Dim registro_mostrado      'Contador utilizado para mostrar las páginas
Dim I        'Variable Loop

mostrar = 10 ' Pueden modificar este número para cambiar la cantidad de registros por página

' IF para saber que página mostrar
If Request.QueryString("page") = "" Then
pagina_actual = 1
Else
pagina_actual = CInt(Request.QueryString("page"))
End If

strsql = "SELECT * FROM tabla"

' Creamos la conexion a la base de datos
Set oConn = Server.CreateObject("ADODB.Connection")
oConn.Open StrConn

' Creamos el RecordSet y definimos la cantidad de registros a mostrar
Set RS = Server.CreateObject("ADODB.Recordset")
RS.PageSize = mostrar
RS.CacheSize = mostrar

' Abrimos la tabla...
RS.Open strSQL, oConn,3,1
'contamos las páginas que se formaron con la variable mostrar.
cant_paginas = RS.PageCount

' Si el pedido de página cae afuera del rango,
' lo modificamos para que caiga adentro
If pagina_actual > cant_paginas Then pagina_actual = cant_paginas
If pagina_actual < 1 Then pagina_actual = 1

' Si la cantidad de páginas da 0 es que no hay registros... por eso este IF
If cant_paginas = 0 Then
Response.Write "No hay registros..."
Else
' Nos movemos a la página elegida
RS.AbsolutePage = pagina_actual
' Mostramos el dato de que página estamos...
%>
<FONT SIZE="+1">Page <B><%= pagina_actual %></B> of <B><%= cant_paginas %></B></FONT>
<%
' Espacios
Response.Write "<BR><BR>" & vbCrLf
'iniciamos la tabla donde mostraremos todo
Response.Write "<TABLE BORDER=""1"">" & vbCrLf
' Mostramos los titulos de las columnas... (pueden sacar ese FOR para eliminar eso)
Response.Write vbTab & "<TR>" & vbCrLf
For I = 0 To RS.Fields.Count - 1
Response.Write vbTab & vbTab & "<TD><B>"
Response.Write RS.Fields(I).Name
Response.Write "<B></TD>" & vbCrLf
Next 'I
Response.Write vbTab & "</TR>" & vbCrLf

' Hacemos el bucle mostrando los datos del registro
registro_mostrado = 0
Do While registro_mostrado < mostrar And Not RS.EOF
Response.Write vbTab & "<TR>" & vbCrLf
For I = 0 To RS.Fields.Count - 1
Response.Write vbTab & vbTab & "<TD>"
Response.Write RS.Fields(I)
Response.Write "</TD>" & vbCrLf
Next 'I
Response.Write vbTab & "</TR>" & vbCrLf

' Sumamos 1 a los mostrados
registro_mostrado = registro_mostrado + 1
' Nos movemos al próximo registro...
RS.MoveNext
Loop

'listo...
Response.Write "</TABLE>" & vbCrLf
End If

' Cerramos y limpiamos...
RS.Close
Set RS = Nothing
oConn.Close
Set oConn = Nothing

' Ahora mostramos los enlaces a las otras páginas con el resto de los registros...
If pagina_actual > 1 Then
%>
<a href="./paginar.asp?eje=30&page=<%= pagina_actual - 1 %>">[<< Anterior]</a>
<%
End If

' mostramos la paginacion por numeros de página
For I = 1 To cant_paginas
If I = pagina_actual Then
%>
<%= I %>
<%
Else
%>
<a href="./paginar.asp?eje=30&page=<%= I %>"><%= I %></a>
<%
End If
Next 'I

If pagina_actual < cant_paginas Then
%>
<a href="./paginar.asp?eje=30&page=<%= pagina_actual + 1 %>">[Próximo >>]</a>
<%
End If
'Fin...
%>


Otro ejemplo es el siguiente:

Acceso a la base de datos

<%
'----- conectar
Set conn = Server.CreateObject("ADODB.Connection")
conn.open "dsnedit",,"ODBC;DATABASE=Editorial;UID=;PWD=;DSN=dsnedit"

'----- definir cadena sql
sql = "SELECT * FROM libros"
%>

Definiendo la paginación

Ahora si vamos a dar los primeros pasos en la paginación. El proceso consiste básicamente en establecer las propiedades que determinarán la cantidad de registros a mostrar y la página actual.

Definimos una variable con la cantidad de registros por página

<%
cantidadregistros=5
%>

A continuación vamos a determinar que página hay que mostrar y asignamos ese valor a una variable. Aquí aparece el primer parámetro que debemos pasar entre páginas, "paginaactual". Más adelante veremos como se pasa este parámetro.

<%
if request.querystring("paginaactual")<>"" then
mostrarpagina=request.querystring("paginaactual")
else
mostrarpagina=1
end if
%>

... y es el momento de abrir el recordset

<%
set rs=Server.CreateObject("ADODB.Recordset")
rs.cachesize=60
rs.open sql, conn, 3, 3
%>

Ya estamos en condiciones de realizar la paginación,

<%
rs.pagesize=cantidadregistros
maxpagina=cint(rs.pagecount)
maxregistros=cint(rs.pagesize)
rs.absolutepage=mostrarpagina
contreg=0
%>

Veamos en detalle que hemos hecho. Hemos establecido la propiedad pagesize del objeto recordset en 5 ("cantidadregistro"). Guardamos la cantidad de paginas y su tamaño en dos variables. Con absolutepage indicamos que página debe mostrarse. Por último inicializamos un contador que vamos a usar al mostrar los registros.

Mostrando las páginas

Llegó el momento de mostrar el resultado. En primer lugar vamos a determinar los valores "desde" y "hasta".

<%
if int(mostrarpagina)<>int(maxpagina) then '-- Si no es la última página.
hasta=mostrarpagina*5
desde=hasta-4
else
hasta=rs.recordcount
desde=(maxpagina*5)-4
end if
%>

Si en lugar de cinco registros quiere mostrar diez, sólo cambie los "5" por "10" y los "4" por "9".

Mostramos los valores recién calculados...

<%
response.write "Resultados : "
response.write desde & " a " & hasta & " de " & rs.recordcount & " encontrados."
%>

Y construimos el ciclo que muestra los registros,

<%
do while not rs.eof and contreg < maxregistros
response.write rs.fields("campo") & "
"
rs.movenext
contreg=contreg+1
loop
%>

Observe que ademas de controlar la propiedad eof, como se hace habitualmente, debemos verificar la cantidad de registros mostrados.


Construir los hipervínculos para moverse entre las páginas

Para terminar, sólo resta construir la lista de páginas y opcionalmente los hipervínculos "Anterior" y "Siguiente". Al terminar debemos tener algo como,

[<

Los hipervínculos de esta lista llaman, obviamente, a la misma pagina en la que estamos trabajando, por lo que podemos referirnos a la misma con una variable (lo que facilita la reutilización del código)

La variable "cero" se la agregaremos a las páginas 1 a 9. Si hay mas páginas asignamos a "cero" una cadena vacía.

A continuación, armamos la lista de hipervínculos. En primer lugar, si no estamos en la primer página guardamos en una variable el link "Anterior". En segundo lugar, guardamos en la variable la lista de páginas con un ciclo For...Next. Finalmente, si no estamos en la última página agregamos a la variable el link "Siguiente".
Paginación

<%

cero="0"
nombrescript=request.servervariables("script_name")
if int(mostrarpagina)<>1 then '--si no es la primer página mostrar botón atrás
ref="[<< Anterior] "
end if

for contador=1 to maxpagina

If contador>9 then
cero=""
end if

ref=ref & "  ref=ref & "'>" & cero & contador & ""
else
ref=ref & "'>" & cero & contador & ""
end if

next

if int(mostrarpagina)<>int(maxpagina) then '-- si no es la última página
' mostrar botón siguiente

ref=ref & " [Siguiente >>]"

end if

response.write ref
%>

Si observa detenidamente el código, se dará cuenta de que he incluido un parámetro "buscar". Al principio, cuando construí la consulta sql, simplemente accedí a una tabla entera, por lo que en este ejemplo no haría falta ese parámetro. No obstante, es muy probable que Ud. quiera paginar los resultados de una búsqueda. En ese caso, es importante que recuerde pasar entre las distintas páginas de resultados todos los parámetros necesarios.

Articulo (Votar) Comentarios Comentario (0)  Historico Historico  Imprimir Imprimir
 
Por Admin (el 02/01/2012 @ 13:20:21, en Programación ASP 3.0, votado 47 veces)
Para hablar del Global.ASA es necesario que recordemos o aclaremos previamente un par de conceptos como son las aplicaciones y las sesiones.

Aplicaciones y sesiones

Una aplicación se puede entender como más o menos lo que es un sitio web. Los dominios de la aplicación son el directorio raíz y los subdirectorios de esta. En un servidor web como PWS tenemos una aplicación en la raíz del servidor, y por cada directorio virtual que creemos tendremos otra aplicación.

El funcionamiento de las aplicaciones está ligado al de las sesiones. Las aplicaciones son globales a todo el sitio y las sesiones son particulares de cada usuario. Concretamente funcionan con este proceso:
  • La aplicación está parada, así como las sesiones, porque no hay ningún usuario dentro.
  • La aplicación se pone en marcha cuando entra el primer usuario.
  • El primer usuario pone en marcha una sesión
  • Los siguientes usuarios ya tienen en marcha la aplicación, con lo que solo desatan la creación de una sesión cada uno.
  • Con cada usuario que abandona la página (para ello se pasa 20 minutos o más sin consultar ninguna otra página), se cierra su sesión.
  • Con el último usuario que sale se cierra la aplicación.
Se pueden crear variables de aplicación y de sesión en cualquier momento. Remarcamos, las variables aplication van a ser comunes para todos los recursos de la aplicación, todos los usuarios, etc. todos acceden a la misma variable. Las variables de sesión son locales a cada usuario, por lo tanto cada usuario tiene una copia de la variable sesión distinta de la de otro usuario, que puede tener valores distintos.

Para crear variables de aplicación

Application("nombreDeVariable") = valor

Para asegurarse exclusión mutua al acceder a una variable de aplication se utilizan los métodos lock y unlock, de esta manera:

Application.lock
Application("nombreDeVariable") = valor
Application.unlock

Crear variables de sesión

Session("nombreDeVariable") = valor

Qué es el global.asa

Global.ASA nos va a servir para controlar los eventos principales asociados con el inicio y fin de la aplicación, así como con el inicio y fin de sesión. Dicho de otro modo, con global.asa podemos hacer cosas cuando se inicien y acaben las aplicaciones y las sesiones.

El global.asa se coloca en el directorio raíz de la aplicación y tiene la siguiente sintaxis

<SCRIPT LANGUAGE=VBScript RUNAT=server>

sub application_onStart()
'sentencias que se ejecutan al entrar el primer usuario
end sub

sub application_onEnd()
'sentencias a ejecutar al irse el último usuario
end sub

sub session_onStart()
'sentencias que se ejecutan cada vez que entra un usuario
end sub

sub session_onEnd()
'sentencias a ejecutar al irse el cada usuario
end sub

</SCRIPT>


Un detalle a destacar por su utilidad práctica es que si queremos sustituir nuestro global.asa por otro se tendrá que apagar el servicio y volver a encender, o incluso volver a arrancar el ordenador si lo anterior no funciona. Si no hacemos esto siempre tomará la versión antigua del global.asa, aunque se haya cambiado. Por esta misma razón, hay que tener cuidado que no tenga errores el archivo global.asa, pues nuestra página dará errores hasta que reiniciemos el servicio, con el consiguiente espacio de tiempo en el que estará el dominio caído.
Articulo (Votar) Comentarios Comentario (0)  Historico Historico  Imprimir Imprimir
 
Paginas: 1 2 3

© 2012 Derechos reservados. Mi Sistema Web
Hay  personas en linea

Palabras clave de busqueda
 


Titolo
¿Que lenguaje prefiere usar?

 ASP
 PHP
 ASP.NET
 JAVA


20/05/2012 @ 10:27:10 a.m.
Ejecutado en 397 ms