Analiza el uso de tu disco duro

Una de las máquinas que usamos aqué­ estaba presentando problemas de espacio en la unidad C. Debes saber lo complicado que esto puede ser. Estuve buscando qué podí­a borrar, pero ese trabajo es muy tedioso: tienes que ir de carpeta en carpeta, viendo cuántos Mb ocupa cada una, hasta que encuentras un archivo que puedas borrar y que realmente libere un espacio significativo del disco duro.

Toda esta tarea es más fácil con un programa que encontré navegando en Internet, llamado TreeSize Free V2.2.1, que puedes descargar de aquí­.

No tienes que instalarlo, puedes correr solamente el .exe, y es gratis.

Cuando lo abres, seleccionas una carpeta de tu disco duro (que puede ser el raí­z c:) y tu disco duro es analizado, carpeta por carpeta. El programa muestra, hasta arriba, las carpetas con más espacio ocupado en disco:

TreeSize Free V2.2.1

Ideal para encontrar los archivos culpables de que tu disco duro está saturado.

Si expandes alguna de las carpetas, podrás ver el mismo resumen para sus subcarpetas:

TreeSize Free V2.2.1

Gracias a este programa encontré un archivo de bitácora del sistema, que podí­a eliminar, y pesaba ¡3.5GB!

Eliminación múltiple de registros de un GridView mediante CheckBoxes

Este ejemplo funciona como cualquier interfaz de correo electrónico, tipo Hotmail.
La idea es que cuentas con un GridView que muestra muchos registros. El usuario tiene la opción de seleccionar uno o varios de esos registros marcando un CheckBox que aparece en cada renglón. Después oprime un botón etiquetado con algún texto como “Eliminar los registros marcados” y todos los registros que marcó se borran.

Se le ahorra tiempo al usuario al permitirle eliminar varios registros de un solo paso.

Primero necesitas añadir a tu GridView un CheckBox para cada renglón:

  1. <asp:GridView ID="GVComparativos" runat="server" AutoGenerateColumns="False"
  2.        DataSourceID="ODSComparativos" AllowPaging="True" CellPadding="5"
  3.        GridLines="None" PageSize="30" DataKeyNames="identificadorCoti">
  4.     <Columns>
  5.         <asp:BoundField DataField="PersNombre" HeaderText="Nombre"
  6.            SortExpression="PersNombre" ReadOnly="true" />
  7.         <asp:BoundField DataField="PersEmail" HeaderText="E-mail"
  8.            SortExpression="PersEmail" ReadOnly="true" />
  9.         <asp:TemplateField HeaderText="Eliminar">
  10.             <ItemTemplate>
  11.                 <asp:CheckBox ID="chkEliminar" runat="server" />
  12.             </ItemTemplate>
  13.         </asp:TemplateField>
  14.         <asp:CommandField ShowEditButton="True" EditText="Editar" CancelText="Cancelar" UpdateText="Aceptar" />
  15.     </Columns>
  16. </asp:GridView>
  17. <br/>
  18. <asp:LinkButton ID="EliminarMarcados" runat="server" CausesValidation="False"> Eliminar los registros seleccionados</asp:LinkButton>

Toma nota del TemplateField que contiene un CheckBox llamado chkEliminar. Lo usaremos en el siguiente código, que va en el evento Click del LinkButton llamado EliminarMarcados:

  1. Protected Sub EliminarMarcados_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles EliminarMarcados.Click
  2.     Dim ListaDeIdsMarcados As String = ""
  3.     'Recorrer los renglones del GridView
  4.     Dim i As Integer
  5.     For i = 0 To GVComparativos.Rows.Count - 1
  6.         Dim ElCheckBox As CheckBox = CType(GVComparativos.Rows(i).FindControl("chkEliminar"), CheckBox)
  7.         If ElCheckBox.Checked Then
  8.             'Aqui encontramos cada CheckBox marcado
  9.             'En este ejemplo los pongo en un string y los despliego
  10.             'Pero en un caso de la vida real, llamarias a una funcion que los
  11.             'eliminaria utilizando el ID, que se guarda en DataKeys
  12.             ListaDeIdsMarcados = ListaDeIdsMarcados & GVComparativos.DataKeys(i).Value & "<br/>"
  13.         End If
  14.     Next
  15.     Response.Write(ListaDeIdsMarcados)
  16. End Sub

Listo, parece algo muy avanzado pero se logra de una forma relativamente sencilla.

Mac Spaces en Windows

Si has trabajado en Mac, conocerás el concepto de “spaces”, que son diferentes espacios de trabajo. Puedes tener tus ventanas de chat en un espacio, y tus programas de productividad en otro. Al cambiar de un espacio a otro, todo lo que no estás usando en ese momento desaparece y te permite concentrarte más.

Este programa que te voy a presentar permite esa funcionalidad en Windows. Lo mejor de todo es que es ligero, funciona muy rápido y es gratis para uso personal.

Se llama Dexpot y lo puedes descargar de aquí­.

Tip: Instálalo en inglés porque si lo pones en español no se traduce completamente y aparecen unas palabras en alemán que no entenderás.

Palabras reservadas de SQL Server 2005

Las siguientes palabras son palabras reservadas (Reserved Keywords) para SQL Server 2005. Si vas a crear una tabla, columna, o algún otro elemento en tu base de datos, trata de no utilizar alguna de las siguientes palabras. Si por alguna razón lo haces, deberás utilizar los delimitadores “[” y “]” en tus sentencias.

Por ejemplo, si creas una tabla llamada Abort utilízala como sigue:

SELECT * From [Abort]

De lo contrario, generarás un error.

Las palabras reservadas son:

A
ABORT
ABS
ABSOLUTE
ACCESS
ACOS
ACQUIRE
ACTION
ACTIVATE
ADA
ADD
ADDFORM
ADMIN
AFTER
AGGREGATE
ALIAS
ALL
ALLOCATE
ALTER
AN
ANALYZE
AND
ANY
APPEND
ARCHIVE
ARCHIVELOG
ARE
ARRAY
ARRAYLEN
AS
ASC
ASCII
ASIN
ASSERTION
AT
ATAN
AUDIT
AUTHORIZATION
AVG
AVGU
BACKUP
BECOME
BEFORE
BEGIN
BETWEEN
BIGINT
BINARY
BIND
BINDING
BIT
BLOB
BLOCK
BODY
BOOLEAN
BOTH
BREADTH
BREAK
BREAKDISPLAY
BROWSE
BUFFERPOOL
BULK
BY
BYREF
CACHE
CALL
CALLPROC
CANCEL
CAPTURE
CASCADE
CASCADED
CASE
CAST
CATALOG
CCSID
CEILING
CHANGE
CHAR
CHARACTER
CHARTOROWID
CHECK
CLASS
CLOB
CHECKPOINT
CHR
CLEANUP
CLEAR
CLEARROW
CLOSE
CLUSTER
CLUSTERED
COALESCE
COBOL
COLGROUP
COLLATE
COLLATION
COLLECTION
COLUMN
COMMAND
COMMENT
COMMIT
COMPLETION
COMMITTED
COMPILE
COMPLEX
COMPRESS
COMPUTE
CONCAT
CONFIRM
CONNECT
CONNECTION
CONSTRAINT
CONSTRAINTS
CONSTRUCTOR
CONTAINS
CONTAINSTABLE
CONTENTS
CONTINUE
CONTROLFILE
CONTROLROW
CONVERT
COPY
CORRESPONDING
COS
COUNT
COUNTU
CREATE
CROSS
CUBE
CURRENT
CURRENT_DATE
CURRENT_PATH
CURRENT_ROLE
CURRENT_TIME
CURRENT_TIMESTAMP
CURRENT_USER
CURSOR
CVAR
CYCLE
DATA
DATABASE
DATAFILE
DATAHANDLER
DATAPAGES
DATE
DAY
DAYOFMONTH
DAYOFWEEK
DAYOFYEAR
DAYS
DBA
DBCC
DBSPACE
DEALLOCATE
DEC
DECIMAL
DECLARATION
DECLARE
DECODE
DEFAULT
DEFERRABLE
DEFERRED
DEFINE
DEFINITION
DEGREES
DELETE
DEPTH
DEREF
DELETEROW
DENY
DESC
DESCRIBE
DESCRIPTOR
DESTROY
DHTYPE
DESTRUCTOR
DETERMINISTIC
DICTIONARY
DIAGNOSTICS
DIRECT
DISABLE
DISCONNECT
DISK
DISMOUNT
DISPLAY
DISTINCT
DISTRIBUTE
DISTRIBUTED
DO
DOMAIN
DOUBLE
DOWN
DROP
DUMMY
DUMP
DYNAMIC
EACH
EDITPROC
ELSE
ELSEIF
ENABLE
END
ENDDATA
ENDDISPLAY
ENDEXEC
END-EXEC
ENDFORMS
ENDIF
ENDLOOP
EQUALS
ENDSELECT
ENDWHILE
ERASE
ERRLVL
ERROREXIT
ESCAPE
EVENTS
EVERY
EXCEPT
EXCEPTION
EXCEPTIONS
EXCLUDE
EXCLUDING
EXCLUSIVE
EXEC
EXECUTE
EXISTS
EXIT
EXP
EXPLAIN
EXPLICIT
EXTENT
EXTERNAL
EXTERNALLY
EXTRACT
FALSE
FETCH
FIELD
FIELDPROC
FILE
FILLFACTOR
FINALIZE
FINALIZE
FIRST
FLOAT
FLOOR
FLOPPY
FLUSH
FOR
FORCE
FORMDATA
FORMINIT
FORMS
FORTRAN
FOREIGN
FOUND
FREELIST
FREELISTS
FREETEXT
FREETEXTTABLE
FROM
FREE
FULL
FUNCTION
GENERAL
GET
GETCURRENTCONNECTION
GETFORM
GETOPER
GETROW
GLOBAL
GO
GOTO
GRANT
GRANTED
GRAPHIC
GREATEST
GROUP
GROUPING
GROUPS
HASH
HAVING
HOST
HELP
HELPFILE
HOLDLOCK
HOUR
HOURS
IDENTIFIED
IDENTITY
IGNORE
IDENTITYCOL
IF
IFNULL
IIMESSAGE
IIPRINTF
IMMEDIATE
IMPORT
IN
INCLUDE
INCLUDING
INCREMENT
INDEX
INDEXPAGES
INDICATOR
INITCAP
INITIAL
INITIALIZE
INITIALLY
INITRANS
INITTABLE
INNER
INOUT
INPUT
INSENSITIVE
INSERT
INSERTROW
INSTANCE
INSTR
INT
INTEGER
INTEGRITY
INTERFACE
INTERSECT
INTERVAL
INTO
IS
ISOLATION
ITERATE
JOIN
KEY
KILL
LABEL
LANGUAGE
LARGE
LAST
LATERAL
LAYER
LEADING
LEAST
LEFT
LESS
LENGTH
LEVEL
LIKE
LIMIT
LINENO
LINK
LIST
LISTS
LOAD
LOADTABLE
LOCAL
LOCALTIME
LOCALTIMESTAMP
LOCATOR
LOCATE
LOCK
LOCKSIZE
LOG
LOGFILE
LONG
LONGINT
LOWER
LPAD
LTRIM
LVARBINARY
LVARCHAR
MAIN
MANAGE
MANUAL
MAP
MATCH
MAX
MAXDATAFILES
MAXEXTENTS
MAXINSTANCES
MAXLOGFILES
MAXLOGHISTORY
MAXLOGMEMBERS
MAXTRANS
MAXVALUE
MENUITEM
MESSAGE
MICROSECOND
MICROSECONDS
MIN
MINEXTENTS
MINUS
MINUTE
MODIFIES
MINUTES
MINVALUE
MIRROREXIT
MOD
MODE
MODIFY
MODULE
MONEY
MONTH
MONTHS
MOUNT
MOVE
NAMED
NAMES
NATIONAL
NATURAL
NCHAR
NCLOB
NEW
NEXT
NHEADER
NO
NOARCHIVELOG
NOAUDIT
NOCACHE
NOCHECK
NOCOMPRESS
NOCYCLE
NOECHO
NOMAXVALUE
NOMINVALUE
NONCLUSTERED
NONE
NOORDER
NORESETLOGS
NORMAL
NOSORT
NOT
NOTFOUND
NOTRIM
NOWAIT
NULL
NULLIF
NULLVALUE
NUMBER
NUMERIC
OBJECT
NUMPARTS
NVL
OBID
ODBCINFO
OF
OFF
OFFLINE
OFFSETS
OLD
ON
ONCE
ONLINE
ONLY
OPEN
OPERATION
OPENDATASOURCE
OPENQUERY
OPENROWSET
OPTIMAL
OPTIMIZE
OPTION
OR
ORDER
ORDINALITY
OUT
OUTER
OUTPUT
OVER
OVERLAPS
OWN
PACKAGE
PAD
PARAMETER
PARAMETERS
PAGE
PAGES
PARALLEL
PART
PARTIAL
PATH
POSTFIX
PASCAL
PCTFREE
PCTINCREASE
PCTINDEX
PCTUSED
PERCENT
PERM
PERMANENT
PERMIT
PI
PIPE
PLAN
PLI
POSITION
POWER
PRECISION
PREFIX
PREORDER
PREPARE
PRESERVE
PRIMARY
PRINT
PRINTSCREEN
PRIOR
PRIQTY
PRIVATE
PRIVILEGES
PROC
PROCEDURE
PROCESSEXIT
PROFILE
PROGRAM
PROMPT
PUBLIC
PUTFORM
PUTOPER
PUTROW
QUALIFICATION
QUARTER
QUOTA
RADIANS
RAISE
RAISERROR
RAND
RANGE
RAW
READ
READS
READTEXT
REAL
RECURSIVE
REF
RECONFIGURE
RECORD
RECOVER
REDISPLAY
REFERENCES
REFERENCING
RELATIVE
REGISTER
RELEASE
RELOCATE
REMOVE
RENAME
REPEAT
REPEATABLE
REPEATED
REPLACE
REPLICATE
REPLICATION
RESET
RESETLOGS
RESOURCE
RESTORE
RESTRICT
RESULT
RESTRICTED
RESUME
RETRIEVE
RETURN
RETURNS
REUSE
REVOKE
RIGHT
ROLE
ROLES
ROLLBACK
ROLLUP
ROUTINE
ROW
ROWS
ROWCOUNT
ROWGUIDCOL
ROWID
ROWIDTOCHAR
ROWLABEL
ROWNUM
ROWS
RPAD
RRN
RTRIM
RULE
RUN
RUNTIMESTATISTICS
SAVE
SAVEPOINT
SCHEDULE
SCHEMA
SCN
SCREEN
SCROLL
SCOPE
SEARCH
SCROLLDOWN
SCROLLUP
SECOND
SECONDS
SECQTY
SECTION
SEGMENT
SELECT
SEQUENCE
SERIALIZABLE
SERVICE
SESSION
SESSION_USER
SET
SETS
SETUSER
SIN
SIMPLE
SIGN
SHUTDOWN
SHORT
SHARE
SHARED
SETUSER
SIZE
SLEEP
SMALLINT
SNAPSHOT
SOME
SORT
SOUNDEX
SPACE
SPECIFIC
SPECIFICTYPE
SQL
SQLEXCEPTION
SQLBUF
SQLCA
SQLCODE
SQLERROR
SQLSTATE
SQLWARNING
SQRT
START
STATE
STATEMENT
STATIC
STRUCTURE
STATISTICS
STOGROUP
STOP
STORAGE
STORPOOL
SUBMENU
SUBPAGES
SUBSTR
SUBSTRING
SUCCESSFUL
SUFFIX
SUM
SYSTEM_USER
SUMU
SWITCH
SYNONYM
SYSCAT
SYSDATE
SYSFUN
SYSIBM
SYSSTAT
SYSTEM
SYSTIME
SYSTIMESTAMP
TABLE
TABLEDATA
TABLES
TABLESPACE
TAN
TAPE
TEMP
TEMPORARY
TERMINATE
THAN
TEXTSIZE
THEN
THREAD
TIME
TIMEOUT
TIMESTAMP
TIMEZONE_HOUR
TIMEZONE_MINUTE
TINYINT
TO
TOP
TPE
TRACING
TRAILING
TRAN
TRANSACTION
TRANSLATE
TRANSLATION
TREAT
TRIGGER
TRIGGERS
TRIM
TRUE
TRUNCATE
TSEQUAL
TYPE
UID
UNCOMMITTED
UNDER
UNION
UNIQUE
UNKNOWN
UNNEST
UNLIMITED
UNLOADTABLE
UNSIGNED
UNTIL
UP
UPDATE
UPDATETEXT
UPPER
USAGE
USE
USER
USING
UUID
VALIDATE
VALIDPROC
VALIDROW
VALUE
VALUES
VARBINARY
VARCHAR
VARIABLE
VARIABLES
VARYING
VCAT
VERSION
VIEW
VOLUMES
WAITFOR
WEEK
WHEN
WHENEVER
WHERE
WHILE
WITH
WITHOUT
WORK
WRITE
WRITETEXT
YEAR
YEARS
ZONE

Cómo enviar un formulario cuando se oprima ENTER

Para que un formulario se enví­e cuando el visitante oprima la tecla ENTER, coloca esta lí­nea en el evento Load de tu página:

  1. BusquedaTextBox.Attributes.Add("onKeyPress", "javascript:if (event.keyCode == 13) __doPostBack('" & BusquedaBoton.UniqueID & "','')")

En mi ejemplo, BusquedaTextBox es una caja de texto y BusquedaBoton es un LinkButton.

Incluso yo tengo un buscador en un MasterPage y otro buscador distinto en una página heredada de él. Puse el código tanto en el MasterPage como en la página, y ambos funcionan bien.