Está en la página 1de 249

Visual Basic 6.0 y SQLServer 7.

0
ntroduccin......................................................................................................................................3
1 Visual Basic versin 6.0................................................................................................................4
1.1 Entorno de Visual Basic.........................................................................................................4
1.1.1 Exploracin del ambiente de V.B....................................................................................4
1.1.2 Barra de herramientas.....................................................................................................6
1.1.3 Herramienta de Objetos (ToolBox)..................................................................................7
1.1.4 Ventana de depuracin (Debuger)..................................................................................7
1.1.5 Ventana de proyecto (Explorer Window).........................................................................8
1.1.6 Ventana de presentacin de las Formas (Form Layout)..................................................8
1.1.7 Registro de componentes................................................................................................8
1.1.8 Registro de referencias ................................................................................................10
1.2 Conceptos Bsicos: Variables, dentificadores, Constantes, Tipos de datos, Eleccin del
tipo de variables..........................................................................................................................12
1.2.1 Declaracin de Variables...............................................................................................12
1.2.2 Alcance y Tiempo de vida de las Variables...................................................................12
1.2.3 Tipos de datos................................................................................................................14
1.2.4 Constantes....................................................................................................................17
1.2.5 Etiquetas.......................................................................................................................18
1.3 Operadores...........................................................................................................................19
1.4 Estructuras de control .........................................................................................................28
1.5 Procedimientos Sub y Funciones ........................................................................................34
1.6 Procedimientos con argumentos opcionales.........................................................................37
1.7 Arrays: estticos y dinmicos............................................................................................40
1.8 Funciones internas de VB ...................................................................................................42
1.9 Eventos, propiedades y Controles.......................................................................................48
1.10 Control de Errores .............................................................................................................59
1.11 Modelo de Objetos de Sistemas de Archivos (FSO)...........................................................64
1.12 Objetos del sistema de archivos: Drive, Folder y Files.......................................................72
1.13 Manejo de AP's..................................................................................................................78
1.14 nteractuar con Word y Excel..............................................................................................79
1.15 Activar Animacin en los procesos.....................................................................................83
2 Desarrollo de aplicaciones bajo el modelo C/S...........................................................................86
2.1 Modelo cliente / Servidor.......................................................................................................86
2.2 Que es ODBC.....................................................................................................................103
2.3 Conexiones Cliente Servidor............................................................................................105
2.4 Establecimiento de conexiones cliente-servidor.................................................................106
2.5 Estrategias de bloqueo.......................................................................................................107
3 SQL Server 7.0..........................................................................................................................108
3.1 Permisos.............................................................................................................................113
3.2 Utilizar las opciones de SQL Server...................................................................................114
3.2.1 Opciones SET..............................................................................................................115
3.2.2 Opciones de base de datos..........................................................................................118
3.2.3 Opciones de servidor....................................................................................................120
3.2.4 Sugerencias.................................................................................................................122
3.3.5 Opcin del nivel de compatibilidad de la base de datos...............................................123
3.3.6 Comportamiento cuando ARTHABORT y ARTHGNORE estn activadas................123
3.3 mplementacin y el mantenimiento de bases de datos.....................................................124
3.3.1 Componentes de una base de datos............................................................................124
3.3.2 Archivos y grupos de archivos......................................................................................125
3.3.2.2 Usar archivos y grupos de archivos...........................................................................126
3.3.3.3 Usar archivos y grupos de archivos para administrar el crecimiento de las bases de
datos.....................................................................................................................................128
3.3.4 Grupos de archivos de slo lectura..............................................................................128
3.3.4 Registros de transacciones..........................................................................................130
3.3.4.1 Operaciones no registradas......................................................................................130
3.3.4.2 Archivos de registro virtuales....................................................................................131
Material de estudio Pgina: 1 de 249
Visual Basic 6.0 y SQLServer 7.0
3.4 Crear Bases de datos ....................................................................................................143
3.5 Creacin de Tablas.............................................................................................................151
3.5.1 Restricciones PRMARY KEY......................................................................................153
3.5.2 Restricciones FOREGN KEY......................................................................................154
3.5.3 Restricciones de no duplicados (UNQUE)...................................................................155
3.5.4 Restricciones CHECK..................................................................................................156
3.5.5 Dfiniciones DEFAULT...................................................................................................157
3.5.6 Columnas de identificadores.......................................................................................157
3.5.7 SET ANS_NULLS (T-SQL)..........................................................................................158
3.5.8 EJEMPLOS..................................................................................................................160
3.6 Elementos de sintaxis de Transact-SQL.............................................................................166
1.5.1 Conversin de tipos de datos...........................................................................................166
1.5.2 Utilizar funciones.........................................................................................................173
1.5.3 Programar tareas en Transac-SQL .............................................................................174
1.5.4 Variables y parmetros.................................................................................................175
1.5.5 Control de flujo.............................................................................................................176
1.5.5.1 BEGN.END............................................................................................................176
1.5.5.2 GOTO........................................................................................................................177
1.5.5.3 F.ELSE..................................................................................................................177
1.5.5.4 RETURN...................................................................................................................178
1.5.5.5 CASE.........................................................................................................................180
1.6 Transacciones.....................................................................................................................181
1.6.1 Controlar las transacciones..........................................................................................181
1.6.2 Transacciones explcitas..............................................................................................183
1.6.3 Transacciones de confirmacin automtica.................................................................184
1.7 Cursores.............................................................................................................................185
1.7.1 Cursores de Transact-SQL...........................................................................................186
1.7.2 Tipos de cursores.........................................................................................................189
1.7.3 DECLARE CURSOR ..................................................................................................190
1.7.4 Bloqueo de cursores.....................................................................................................195
1.7.5 Obtener metadatos de cursores de servidor................................................................197
1.8 Procedimientos almacenados ............................................................................................198
1.8.1 Programar procedimientos almacenados.........................................................................200
1.8.1.1 Devolver datos de un procedimiento almacenado.....................................................205
1.8.1.2 Devolver datos mediante parmetros OUTPUT........................................................205
1.8.2.2 Devolver datos mediante un cdigo de retorno.........................................................206
1.8.2.3 Ejecutar un procedimiento almacenado....................................................................208
1.9 Trigger (Desencadenadores)..............................................................................................209
1.9.1 Type (Trigger) (SQL-DMO) (Propiedad).......................................................................210
1.9.2 Desencadenadores anidados (recursive).....................................................................210
1.9.3 CREATE TRGGER (Creacin de Disparadores).........................................................213
Anexos.........................................................................................................................................223
.1 SQL (Lenguaje Estructurado de Consultas " Structured Query Language)........................223
.2 Nomenclatura de Objetos....................................................................................................245
.3 Convenciones de nombres de variables para Visual Basic..................................................247
Material de estudio Pgina: 2 de 249
Visual Basic 6.0 y SQLServer 7.0
Introduccin
Con la aparicin de Windows 3.1, se increment sensiblemente la cantidad de usuarios adeptos a
este ambiente operativo. Sin embargo, los usuarios de perfil tcnico haban permanecido al
margen de la utilizacin de dicho ambiente, por no contar con una herramienta para desarrollar
sus aplicaciones.
Como una solucin para ello, surgi en Microsoft: Visual Basic. El sistema de programacin de
Visual Basic, permite desarrollar aplicaciones tiles y atractivas, que utilizan y explotan
completamente la interfase grfica del usuario (GU).
Visual Basic 6.0 hace ms productivo el uso de Microsoft Windows, ya que provee de
herramientas apropiadas para diferentes aspectos del desarrollo del GU. Se puede crear la
interfase grfica con slo dibujar objetos en una aplicacin en el mismo modo grfico, y definir las
propiedades de esos objetos, as como manejar su comportamiento escribiendo cdigo que
responda a los eventos que ocurren en la interfase.
Usando Visual Basic 6.0, se pueden crear poderosas aplicaciones que exploten las
caractersticas claves de Microsoft Windows, tales como:
Desarrollar aplicaciones slo para ambientes de 32 bits.
MD (Multiple-Document nterface) interfase de documentos mltiples.
La nueva tecnologa de Microsoft llamada OLE (Object Linking & Embedding).
El DDE (Dynamic Data Exchange).
El manejo de Grficos.
La posibilidad de extenderse aadiendo Custom Control y por llamada de procedimientos
en "Dynamic-Link Libraries" (DLLs).
La facilidad de poder generar un archivo ejecutable (.EXE), que use al tiempo de
ejecucin DLLs que pueden ser libremente distribuidos.
Creacin de controles personalizados Activex y clases.
Manejo de mltiples proyectos en forma simultnea.
Visual Basic es tan fcil de usar. El programa inicia con la pantalla elemental de Windows
nombrada Forma por sus creadores, y se utiliza una caja de herramientas similar a la de los
programas de dibujo, para aadir los controles: botones de comandos, textos, dibujos, entre otros
elementos. Cada programa puede tener tantos controles como requiera el usuario. Controlar el
tamao y la posicin de la Forma, es como hacer click con el mouse y arrastrar la ventana en
cualquier lugar de la pantalla.
Material de estudio Pgina: 3 de 249
Visual Basic 6.0 y SQLServer 7.0
1 VisuaI Basic versin 6.0
1.1 Entorno de Visual Basic
1.1.1 Exploracin del ambiente de V.B.
La versin de Visual Basic 6.0 est disponible en tres ediciones.
1. La edicin de aprendizaje
2. La edicin profesional.
3. La edicin empresarial.
La diferencia bsica entre las versiones, consiste en que se agregan herramientas (como:
SourseSafe "control de versiones de aplicaciones, Crystal Report "reporteador para VB, entre
otras) en cada versin, pero los ambientes de desarrollo son los mismos.
Con la nueva idea de mercado que ha implantado MicroSoft de incluir sus herramientas de
desarrollo ms populares en un paquete empresarial llamado Visual Studio 6.0 donde se incluyen
las siguientes herramientas de desarrollo en 6 discos:
Visual C++
Visual FoxPro
Visual Basic
Visual J++
Viasual nterdev
MSDN (Microsoft Development Network)
Para instalar VB se utiliza el Disco 1, el cual instala nternet Explorer 5.0 y a continuacin solicita
se seleccione las herramientas de desarrollo deseadas.
Para instalara la ayuda MSDN se utilizan los discos 3 y 4, ejecutando del disco 3 el programa de
instalacin. En la instalacin se solicita se seleccione las ayudas para las herramientas deseadas,
si slo se desea instalar la ayuda de VB se deber elegir esta opcin.
Material de estudio Pgina: 4 de 249
Visual Basic 6.0 y SQLServer 7.0
Al igual que otro lenguaje de programacin, Visual Basic requiere una comprensin de alguna
terminologa comn. La siguiente lista contiene algunos trminos usados en Visual Basic.
Termino en
IngIs
Termino en
EspaoI
Definicin
Design Time Tiempo de
Diseo
En cualquier momento cuando no se est ejecutando la
aplicacin.
Run Time Tiempo de
Ejecucin
Momento en que la aplicacin se est ejecutando
Form Forma Ventana personalizable para incrustar objetos, desplegar
dilogos
Control Control Representacin grfica de objetos (Botones, cajas de lista,
etc) que el usuario manipula para proveer informacin de a
la aplicacin.
Object Objeto Trmino genrico usado para describir cualquier cosa en
Visual Basic (Formas, controles, Activex, etc.)
Properties Propiedades Caractersticas de un objeto color, tamao, nombre, etc.
Methodos Mtodo Accin invocada que un objeto puede desarrollar
Events Evento Accin que desarrolla un objeto en forma automtica
provocada por el usuario al interactuar con la aplicacin,
sistema operativo o por la misma aplicacin.
Event-Driven
Programming
Programacin
orientada a
eventos
Cdigo que se ejecuta en respuesta a eventos invocados
(usuario, sistema operativo o la aplicacin). Esta difiere de
la programacin procedural donde el programa inicia en la
primera lnea de cdigo y seguida por las rutas de
ejecucin de cada lnea por el programa.
Material de estudio Pgina: 5 de 249
Visual Basic 6.0 y SQLServer 7.0
1.1.2 Barra de herramientas
La siguiente figura muestra el ambiente de desarrollo que se despliega en tiempo de diseo de
una aplicacin.
Material de estudio Pgina: 6 de 249
ToolBo
x
Ventana
de
depuraci
n
(Debugg
er)
Barra de
herramientas
(Toolbar)
Ventana
de
Propieda
des
Explorad
or
De
proyecto
Ventana de
Posicin
del
formulario
Formulari
o
Cdigo
Visual Basic 6.0 y SQLServer 7.0
La barra de herramientas (toolbar) contiene botones para muchas de los rdenes ms comnes
usadas en VB, como para abrir la ventana del explorador del proyecto, el depurador, la
presentacin de formas, etc., as como otros elementos en el ambiente de desarrollo.
El Toolbar puede personalizarse para que contenga los botones que deseamos as como la
posicin donde se desplegarn.
Pulse el botn derecho en el Toolbar y seleccione la opcin de personalizar: elija las opciones
deseadas en cada una de las pestaas para que aparezcan en la barra de herramientas.
El ToolBar tambin puede ser desplazado en el rea de la pantalla. Para realizar esta operacin
de click izquierdo y sin dejar de pulsarlo arraste el toolbar hasta la posicin deseada. Lo mismo
puede hacer para otros objetos del ambiente (ToolBox, Form Window, Property Window, etc.)
1.1.3 Herramienta de Objetos (ToolBox)
La caja de herramientas de controles (ToolBox) contiene los objetos y controles que pueden ser adicionados
en las formas para crear las interfaces grficas (GU) de la aplicacin. Se pueden adicionar controles al
ToolBox por medio del comando Project\Components, situado en el men del proyecto. Para invocar la caja
de herramientas es a travs del men View\ToolBox o pulsando el siguiente icono:
1.1.4 Ventana de depuracin (Debuger)
La ventana de depuracin (Debuger) se usa para consultar o asignar datos (valores de objetos, variables, el
objeto activo en una forma, etc.), ejecutar cdigo. La forma de invocar la ventana de depuracin (nmediate
Window) es a travs del men View \ nmediate Window o pulsando CTRL-G.
La ventana de depuracin slo puede tener accin cuando se establece un punto de ruptura en el cdigo
que se est ejecutando; en tiempo de diseo no tiene efecto.
El alcance de la ventana de depuracin est limitado al procedimiento actual donde ocurre el punto de
evaluacin. Para evaluar la siguiente lnea del cdigo presione F8, si la siguiente lnea de cdigo a evaluar
es una llamada a un procedimiento o funcin presione Sifth-F8 si no desea seguir paso a paso el bloque de
cdigo del procedimiento o funcin.
La barra de herramientas asociada al debuger se muestra en la siguiente figura:
la siguiente tabla describe cada uno de los elementos de la figura.
Botn Descripcin
Start
nicia la ejecucin de la aplicacin. Tecla rpida F5.
Break
Detiene temporalmente la ejecucin del cdigo.
Presione Start o F5 para ejecutar la aplicacin.
Presione F8 para ejecutar la aplicacin lnea a lnea.
End
Finaliza la ejecucin de la aplicacin.
Toggle Breakpoint
Establece/Elimina un punto de ruptura (el cdigo se detiene en la
lnea que se establece) Tecla rpida F9.
Step nfo Ejecuta paso a paso cada lnea de cdigo. Tecla rpida F8.
Step Over
No ejecuta paso a paso la siguiente lnea de cdigo si es una llamada
a un procedimiento o funcin.
Local Window
Despliega el valor actual de variables locales.
Material de estudio Pgina: 7 de 249
Visual Basic 6.0 y SQLServer 7.0
nmediate Window
Despliega la ventana del debuger.
Watch window
Despliega el valor de la expresin.
Quick Watch
Despliega el valor actual de la expresin en donde se encuentra el
cursor. Tambin este valor puede ser visualizado ubicando el cursor
sobre la expresin y se desplegar el tooltip con el valor actual.
Call Stack
Muestra el dilogo con los procedimientos contenidos en la forma y
pendientes de evaluar. La lista inicia con el activo.
1.1.5 Ventana de proyecto (Explorer Window)
La ventana de exploracin del proyecto (Explorer Window) lista la coleccin de archivos usados
en la aplicacin. La coleccin de archivos (formas, mdulos, clases) usados se llama proyecto. Se
puede desplegar el cdigo o la forma con los botones de "View Code o "View Object. Para
invocar la forma de proyecto pulse View\Proyect Explorer o CTRL R o el icono:
1.1.6 Ventana de presentacin de las Formas (Form Layout)
Despliega visualmente la posicin de como aparecer la forma en la pantalla. La ventana
contendr un monitor el cual simula la pantalla, tome y arraste el icono de la ventana que aparece
en la pantalla simulada, sitelo en la posicin que desea que aparezca en el momento de ejecutar
la aplicacin. Para desplegar la ventana correspondiente pulse:
1.1.7 Registro de componentes
Los controles ActiveX tienen la extensin de archivo.ocx. Puede usar los controles ActiveX
suministrados con Visual Basic 6.0 o bien puede conseguir controles adicionales desarrollados
por otros programadores.
Puede utilizar controles ActiveX y otros objetos insertables en el proyecto si los agrega al cuadro
de herramientas.
Nota Los controles ActiveX de Visual Basic son controles de 32 bits. Algunos programadores
ofrecen controles ActiveX de 16 bits, que no se pueden usar en la versin 6.0 de Visual Basic.
Para agregar un controI aI cuadro de herramientas de un proyecto:
Material de estudio Pgina: 8 de 249
Visual Basic 6.0 y SQLServer 7.0
1 En el men Proyecto, haga clic en Componentes para mostrar el cuadro de dilogo
Componentes, como se ve en la siguiente figura.
Figura 1.4 El cuadro de dilogo Componentes
Sugerencia Tambin puede ver el cuadro de dilogo si hace clic con el botn secundario del
mouse (ratn) en el cuadro de herramientas (toolbox).
2 Los elementos que se muestran en este cuadro de dilogo incluyen todos los objetos
insertables, diseadores y controles ActiveX registrados.
3 Para agregar un control ActiveX al cuadro de herramientas, active la casilla de verificacin
que hay a la izquierda del nombre del control.
4 Haga clic en Aceptar para cerrar el cuadro de dilogo Componentes. Todos los controles
ActiveX que haya seleccionado aparecern ahora en el cuadro de herramientas.
Para agregar controles ActiveX al cuadro de dilogo Componentes, haga clic en el botn
Examinar y busque los archivos que tengan la extensin .ocx. Estos archivos suelen estar
instalados en el directorio \Windows\System o System32. Al agregar un control ActiveX a la lista
de controles disponibles, Visual Basic activa automticamente su casilla de verificacin en el
cuadro de dilogo Componentes.
Material de estudio Pgina: 9 de 249
Visual Basic 6.0 y SQLServer 7.0
1.1.8 Registro de referencias
Tambin puede utilizar objetos de otras aplicaciones, como los incluidos en la biblioteca de
objetos de Microsoft Excel, ya sea como controles del cuadro de herramientas o como objetos
programables en el cdigo.
Para que los objetos de otra aplicacin estn disponibles en el cdigo, pero no como controles,
defina una referencia a la biblioteca de objetos de esa aplicacin.
Para agregar una referencia a Ia bibIioteca de objetos de otra apIicacin:
1. En el men Proyecto, elija Referencias.
Aparecer el cuadro de dilogo Referencias, como se muestra en la figura 1.4
2. Active la casilla de verificacin correspondiente a la referencia que desea agregar al
proyecto.
Para agregar referencias a aplicaciones no enumeradas en el cuadro de dilogo Referencias,
elija el botn Examinar y seleccione la aplicacin.
3. Elija Aceptar para agregar al proyecto las referencias seleccionadas.
Figura 1.4 El cuadro de dilogo Referencias
Si no va a usar ningn objeto de una biblioteca a la que se hace referencia, es conveniente
desactivar la casilla de verificacin de dicha referencia para reducir al mnimo posible el nmero
de referencias a objetos que Visual Basic debe resolver, con lo que se reduce el tiempo de
compilacin del proyecto.
Material de estudio Pgina: 10 de 249
Visual Basic 6.0 y SQLServer 7.0
Una vez que ha definido las referencias a las bibliotecas de objetos que desea, puede buscar un
objeto especfico, junto con sus mtodos y propiedades, en el Examinador de objetos; para ello,
elija Examinador de objetos en el men Ver. Puede utilizar en el cdigo cualquier objeto
enumerado en el Examinador de objetos.
Material de estudio Pgina: 11 de 249
Visual Basic 6.0 y SQLServer 7.0
1.2 Conceptos Bsicos: Variables, dentificadores, Constantes, !ipos de datos,
Elecci"n del tipo de #ariables.
Visual Basic integra diferente tipos de datos, que permiten optimizar el cdigo en velocidad y en
tamao. En este punto se ve su aplicacin.
1.2.1 Declaracin de Variables
Para declarar una #ariable se utiliza la sentencia Dim, dando un nombre a la #ariable.
Dim variablenombre [As type]
Reglas para determinar el nombre de una #ariable:
Necesita empezar con una letra
Necesita contener slo caracteres, nmeros y el carcter subrayado (_).
Caracteres de puntuacin y espacios, no son permitidos.
Necesita no exceder de 40 caracteres.
No puede ser una palabra reservada.
La clusula opcional As t$pe en la declaraci"n Dim, permite definir el tipo de dato de la #ariable
que se declara. Si sta se omite, Visual Basic define el tipo de #ariable como Variant (variante).
Nota: Los estndares para nombres de variables y objetos se definen en los anexos de:
Convenciones de nombres de VariabIes para VisuaI Basic
Convenciones de nombres de Objetos para VisuaI Basic
1.2.2 Alcance y Tiempo de vida de las Variables
Cuando se declara una variable dentro de un procedimiento, solamente el cdigo dentro del
procedimiento puede tener acceso o cambiar el valor de esta #ariable. Esta tiene un alcance local
para este procedimiento. Sin embargo, algunas veces se necesita usar una #ariable que tenga un
alcance extenso, cuyo valor est disponible para todos los procedimientos dentro de la misma
Forma, M"dulos de c"di%o o los e#entos para todos los procedimientos en la aplicacin. Visual
Basic permite especificar el alcance de una #ariable, cuando sta se declara.
AIcance de VariabIes
Dependiendo de cmo se declara, una #ariable es alcanzada en uno de los tres caminos:
AIcance DecIaracin
Local Dim, Static, o Redim (dentro de un procedimiento&
Mdulo Dim (dentro de la seccin 'eclarations de una Forma o m"dulo de c"di%o&
Global GIobaI (dentro de la seccin 'eclaratlons de un m"dulo&
Material de estudio Pgina: 12 de 249
Visual Basic 6.0 y SQLServer 7.0
VariabIes LocaIes
Una #ariable local, es reconocida slo dentro del procedimiento en el cual aparece, y son
declaradas con la declaraci"n Dim. Las #ariables locales declaradas con Dim, existen slo
mientras el procedimiento es ejecutado
VariabIes de MduIo
Las #ariables definidas en la seccin 'eclarations, son reconocidas en todos los procedimientos
que forman parte de una Forma o, en su caso; en un m"dulo.
VariabIes GIobaIes
Las #ariables %lobales tienen un alcance extenso. Los valores dentro de las #ariables %lobales,
estn disponibles para cada Forma y Mdulo en la aplicacin. A diferencia de las #ariables de
m"dulo, las #ariables %lobales son declaradas dentro de la seccin 'eclarations de un m"dulo.
Para declarar #ariables %lobales, se utiliza la declaracin GIobaI en lugar de la declaraci"n Dim.
Figura 1.5 Visibilidad de variables con diferentes alcances
VariabIes Estticas
En adicin al alcance, las #ariables tienen un tiempo de vida. El valor, en m"dulos y #ariables
%lobales, es preservado por el tiempo de vida de la aplicacin. Sin embargo, las #ariables locales
declaradas con Dim, existen slo mientras el procedimiento, en el cual fueron declaradas; es
ejecutado. Normalmente, cuando un procedimiento finaliza su ejecucin, el valor de estas
#ariables locales no es preservado. La siguiente vez que el procedimiento es ejecutado, todas
estas #ariables locales son reinicializadas.
Sin embargo, se puede hacer que Visual Basic conserve el valor de una #ariable local, declarando
la variable como esttica (static&.
Material de estudio Pgina: 13 de 249
Visual Basic 6.0 y SQLServer 7.0
Por ejemplo, la siguiente funcin total, calcula un valor, aadiendo una nueva cantidad al total de
previos valores almacenados en la variable esttica acumula
Sub Command1_Click ( )
sumatotal = total(2)
Print sumatotal
End Sub
Function total (num)
Static acumula
acumula = acumula + num
total = acumula
End Funetion
1.2.3 Tipos de datos
Cuando se declara una #ariable, se le puede asignar un tipo de dato. Por default, si no se asigna
el tipo de dato a la #ariable, sta obtiene un tipo de dato Variant (variante).
Tipo de dato Variant (variante).
El tipo de dato Variant, puede almacenar algunos tipos de datos como son: nmeros, strings de
textos de fecha y hora. Visual Basic desarolla automticamente, cualquier conversin
necesaria. Por ejemplo:
Dim Valor
Valor = "94"
Valor = Valor+1900
Valor = "Mxico, D.F. a " & Valor
Las #ariables Variant, mantienen una representacin interna del valor que sta representa. Con
esta representacin interna Visual Basic determina cmo tratar estos valores. Si se quiere
determinar la representacin de una #ariable, se usa la funcin VarType. La siguiente tabla, lista
el valor regresado de la #ariable VarType.
VarType Valores regresados
VaIor regresado Representacin Interna
0 Empty
1 Null
2 lnteger
3 Long
4 Single
5 Double
6 Currency
7 Date/Time
8 String
Ejemplo : lf VarType(Y) = 5 Then X = CSng(Y)
Material de estudio Pgina: 14 de 249
Visual Basic 6.0 y SQLServer 7.0
Generalmente, almacenar un strin% en una #ariable Variant, puede crear pocos problemas.
Algunas veces, el resultado del operador + puede ser ambiguo cuando se usa con dos valores
Variant. Si ambos valores contienen nmeros, el operador + desarrolla una adicin. Si ambos
valores contienen un string, desarrolla una concatenacin. Pero si uno de los valores representa
un nmero y otro un strin%, la situacin es ms complicada. Visual Basc, primero intenta
convertir el strin% en un valor. Si la conversin es exitosa, entonces el operador + agrega el nuevo
valor. De lo contrario, si no es exitosa; ste concatena el nmero con el strin%, para producir un
nuevo strin%.
Cuando se quiera estar seguro de que ocurra una concatenacin, se debe usar el operador &.
Por ejemplo:
Dim Valor
Valor = "94"
Valor = Valor+1900
Valor = "Mxico, D.F. a " & Valor
Los rangos de fechas almacenados en #ariables Variant, son desde Enero 1, 0000 a Diciembre
31, 9999. Se puede usar fecha/hora literalmente en el cdigo, cerrando stos con el signo (#). Por
ejemplo :
lf fecha = #1/5/94 9:15am# then
Visual Basic acepta una variedad de formatos de fechas y horas en forma literal. Estos son todos
los valores vlidos de fecha/hora
Fecha = #2-5-94 15:30#
Fecha = #March 2,1994 9:15am#
Fecha = #Dec-31-94#
Fecha = #31 December 1994#
Se puede usar la funcin Isdate para determinar si una #ariable Variant, puede ser considerada
como valor de fecha/hora. Tambin se puede usar la funcin CVDate, para convertir la #ariable a
un valor de fecha/hora . Ejemplo
Sub Command1_Click ()
Dim Fecha
lf sDate(Text1.Text) Then
Fecha = CVDate(Text1.Text)
MsgBox "Fecha correcta ' & Fecha, 48, "Fecha"
Else
MsgBox Text1.Text & "no es una fecha valida", 48, "Fecha"
End lf
End Sub
Algunas veces, se necesita saber si el valor de la #ariable ha sido asignado. Una variable Variant,
tiene un valor vaco antes de que se le asigne un valor, ya sea un cero (0) o un strin%. Para probar
si el valor es vaco, se utiliza la funcin IsEmpty.
lf sEmpty(Valor) Then Valor = 100
Material de estudio Pgina: 15 de 249
Visual Basic 6.0 y SQLServer 7.0
El tipo de dato Variant, maneja todos los tipos fundamentales de datos y hace conversiones entre
ellos automticamente. Sin embargo, si se quiere crear un conciso y rpido cdigo, se pueden
usar otros tipos de datos apropiados. Por ejemplo, si una #ariable siempre contiene un pequeo
valor, se puede salvar algunos bytes, incrementar la velocidad en el cdigo cuando se desarrollan
operaciones aritmticas, utilizando un Integer (entero) en lugar de una variable Variant.
En la siguiente tabla se muestra una lista de siete tipos de datos fundamentales.
Tipos de datos fundamentales de Visual Basic.
Tamao de
Tipo de dato Sufijo AImacenamiento Rango
Integer % 2 bytes -32,768 a 32,767.
Long(long integer) & 4 bytes -2,147,483,648 a 2,147,483,647.
SingIe ! 4 bytes -3.402823E38 a -1.401298E-45 para
valores negativos
(single-precision 1.401298E-45 a 3.402823E38 para
values.floating-point) valores positivos
DoubIe
(double-precision
floating-point) # 8 bytes -1.79769313486232E308 a
-4.94065645841247E-324 para valores
negativos
4.94065645841247E-324 a
1,79769313486232E308 para valores
positivos.
Currency
(scaled integer) @ 8 bytes -922,337,203,685,477.5808 a
922,337,203,685,477.5807.
String $ 1 byte 0 aproximadamente a 65,500 bytes.
Variant None El apropiado Cualquier valor nmerico, string o de fecha
Antes de usar una variable No-Variant, se debe usar la declaraci"n Dim, GIobaI o Static para
declararla As tipodato. Por ejemplo, la siguiente declaraci"n, declara un tipo Integer, DoubIe,
String y Currency, respectivamente.
Dim Valor As lnteger
Dim Resta As Double
Static Regresa As String
Global Flag As Currency
Dim Nombre As String, Total As Currency
Material de estudio Pgina: 16 de 249
Visual Basic 6.0 y SQLServer 7.0
Tipos Numricos
Si se sabe que una #ariable siempre almacena un valor entero, es mejor declararla como un tipo
Integer o Long. Las operaciones con enteros son ms rpidas y consumen menos memoria que
una de tipo Variant. Si una #ariable contiene una fraccin, es mejor declararla como SingIe,
DoubIe, o Currency. El tipo de dato Currency, soporta hasta cuatro dgitos a la derecha del
punto decimal y 15 hasta la derecha del punto decimal. Nmeros de Punto-Flotante (SingIe y
DoubIe), tienen un rango ms largo que el tipo Currency.
Tipos String
Si se tiene una #ariable que siempre contiene un strin% y nunca un valor numrico, es mejor
declarada como un tipo String, adems de poder manipular la #ariable con funciones de strin%.
Dim Curso As String
Curso = "Visual Basic"
Curso = Left( Curso , 6 )
Para declarar el tamao de un strin% se utiliza la sintaxis
String ) tamao
Por ejemplo, para declarar un strin% que siempre va a contener 45 caracteres
Dim Nombre As String * 45
Tambin, para quitar los espacios en un strin% se utilizan las funciones Trim y Rtrim
Curso = "Visual Basic 6.0"
Curso = Rtrim(Curso)
1.2.4 Constantes
Frecuentemente, se vern valores constantes en el cdigo (stos, aparecen una y otra vez) o se
encontrar que el cdigo depende de un cierto valor que es difcil de recordar.
En estos casos, se debe usar la declaraci"n Const. Esta declaraci"n, permite asignar una
constante simblica en lugar de un nmero
La sintaxis para la declaraci"n Const, es la siguiente:
[GIobaI] Const constnombre = e*presi"n
Una declaraci"n Const, puede representar una cantidad matemtica o de fecha/hora:
Const Pl = 3.14159265
Global Const Juegos = 2
Const Fec-Ent = #2-5-94#
Const Codigo = "Enigma"
Material de estudio Pgina: 17 de 249
Visual Basic 6.0 y SQLServer 7.0
1.2.5 Etiquetas
Una etiqueta de lnea puede ser cualquier combinacin de caracteres, pero debe iniciar con una
letra y finalizar con dos puntos ":. El nombre de la etiqueta no es sensitiva a minsculas/
maysculas, esta debe estar en la primera columna. Es usada para identificar una lnea en
especial, su uso slo se recomienda para el tratamiento de errores.
Ejemplo:
Sub Ini_Mat (Var1, Var2, Var3, Var4)
On Error GoTo ManejadordeError
Cdigo
. . .
Exit Sub
ManejadordeError
!e"u#e $ext
End Sub
Material de estudio Pgina: 18 de 249
Visual Basic 6.0 y SQLServer 7.0
1.+ ,peradores
En el siguiente punto se dar una idea de los operadores que se manejan en VB6 pero es
importante verificar las comentarios que existen en cada uno de estos.
Operador: &
Se utiliza para forzar la concatenacin de las cadenas de dos expresiones.
Sintaxis
resultado = e*presi"n1 & e*presi"n2
La sintaxis del operador & consta de las siguientes partes:
Parte Descripcin
-esultado Obligatorio; cualquier variable tipo String o Variant.
E*presi"n 1 Obligatorio; cualquier expresin.
E*presi"n 2 Obligatorio; cualquier expresin.
Comentarios
Si una e*presi"n no es una cadena de caracteres, se convierte en un tipo String tipo variant. El
tipo de dato del resultado es String si ambas expresiones son expresiones de cadena; de lo
contrario, el resultado es una String tipo variant. Si ambas expresiones son NuII, el resultado es
tambin NuII. Sin embargo, si slo una e*presi"n es NuII, esa expresin se considera como una
cadena de longitud cero ("") al concatenarse con la otra expresin. Cualquier expresin Empty se
considera tambin una cadena de longitud cero.
Operador: *
Se utiliza para multiplicar dos nmeros.
Sintaxis
resultado = n.mero1*n.mero2
La sintaxis del operador * consta de las siguientes partes:
Parte Descripcin
-esultado Obligatorio; cualquier variable numrica.
/.mero 1 Obligatorio; cualquier expresin numrica.
/.mero 2 Obligatorio; cualquier expresin numrica.
Comentarios
El tipo de dato del resultado es generalmente el de la expresin ms exacta. El orden de
precisin, de menos exacto a ms exacto, es Byte, Integer, Long, SingIe, DoubIe, Currency y
DecimaI.
Material de estudio Pgina: 19 de 249
Visual Basic 6.0 y SQLServer 7.0
Esta regla tiene las siguientes excepciones:
Si Resultado es:
La multiplicacin implica un tipo SingIe y un tipo Long. Se convierte a un tipo DoubIe.
El tipo de dato de resultado es un tipo variant Long,
SingIe o Date que se sale del intervalo vlido.
Se convierte a un Variant que
contiene un tipo DoubIe
El tipo de dato de resultado es un Byte tipo variant que
se sale del intervalo vlido.
Se convierte a un Integer tipo
variant
El tipo de dato de resultado es un Integer tipo variant
que se sale del intervalo vlido.
Se convierte a un Long tipo variant.
Si una o ambas de las expresiones son de tipo NuII, el tipo de datos del resultado es NuII. Si una
expresin es del tipo Empty, se considera como 0.
Nota El orden de precisin utilizado por la suma y la resta no es igual que el orden de precisin
utilizado por la multiplicacin.
Operador: +
Se utiliza para sumar dos nmeros.
Sintaxis
resultado = e*presi"n 1 + e*presi"n 2
La sintaxis del operador + consta de las siguientes partes:
Parte Descripcin
-esultado Obligatorio; cualquier variable numrica.
E*presi"n1 Obligatorio; cualquier expresin.
E*presi"n2 Obligatorio; cualquier expresin.
Comentarios
Cuando utilice el operador + , quiz no pueda determinar si se va a realizar una suma o una
concatenacin de cadenas. Utilice el operador & para la concatenacin, de modo que se eviten
ambigedades y se suministren programas claros y explcitos.
Si hay al menos una expresin que no sea de tipo Variant, se aplican las siguientes reglas:
Si Entonces
Ambas expresiones son tipos de datos numricos (Byte, BooIean,
Integer, Long, SingIe, DoubIe, Date, Currency o DecimaI)
Suma.
Ambas expresiones son del tipo String Concatenacin.
Una expresin es de un tipo de datos numrico y la otra cualquier
tipo Variant excepto NuII
Suma.
Una expresin es del tipo String y la otra cualquier tipo Variant
excepto NuII
Concatenacin.
Una expresin es del tipo Empty Variant Devuelve sin modificacio-
nes la expresin restante
como resultado.
Una expresin es de un tipo de datos numrico y la otra de tipo
String
Puede ocurrir un Error
de ti%o".
Cualquiera de las expresiones es NuII resultado es NuII.
Si ambas expresiones son del tipo Variant, se aplican las siguiente reglas:
Material de estudio Pgina: 20 de 249
Visual Basic 6.0 y SQLServer 7.0
Si Entonces
Ambas expresiones tipo Variant son numricas
Suma.
Ambas expresiones tipo Variant son cadenas de caracteres Concatenacin.
Una expresin tipo Variant es numrica y la otra es una cadena de
caracteres
Suma.
En adiciones aritmticas simples de expresiones de tipos de datos numricos nicamente, el tipo
de dato de resultado es habitualmente el mismo que el de la expresin con mayor precisin. El
orden de precisin, de menos exacto a ms exacto, es Byte, Integer, Long, SingIe, DoubIe,
Currency y DecimaI.
Esta regla tiene las siguientes excepciones:
Si result es
Se suman un tipo SingIe y un tipo Long, un tipo DoubIe.
El tipo de dato de resultado es Long, SingIe o Date tipo variant
que desborda su intervalo vlido,
se convierte a un DoubIe
tipo variant.
El tipo de dato de resultado es un Byte tipo variant que se sale del
intervalo vlido,
se convierte a un Integer
tipo variant.
El tipo de dato de resultado es un Integer tipo variant que se sale
del intervalo vlido,
se convierte a un Long
tipo variant.
Un Date se agrega a cualquier tipo de dato, un tipo Date.
Si una de las expresiones o ambas son expresiones de tipo NuII, resultado es NuII. Si ambas
expresiones son Empty, el resultado es Integer. Sin embargo, slo una de las expresiones es
Empty, se devuelve la otra sin modificaciones como resultado.
Nota El orden de precisin utilizado por la suma y la resta no es igual que el orden de precisin
utilizado por la multiplicacin.
Operador: -
Se utiliza para hallar la diferencia entre dos nmeros o para indicar el valor negativo de una
expresin numrica.
Sintaxis 1
resultado = n.mero1-n.mero2
Sintaxis 2
n.mero
La sintaxis del operador - consta de las siguientes partes:
Parte Descripcin
-esultado Obligatorio; cualquier variable numrica.
/.mero Obligatorio; cualquier expresin numrica.
/.mero 1 Obligatorio; cualquier expresin numrica.
/.mero 2 Obligatorio; cualquier expresin numrica.
Comentarios
Material de estudio Pgina: 21 de 249
Visual Basic 6.0 y SQLServer 7.0
En la sintaxis 1, - es el operador de substraccin aritmtica utilizado para hallar la diferencia entre
dos nmeros. En la sintaxis 2, - se utiliza como el operador de negacin unaria para indicar el
valor negativo de una expresin.
El tipo de dato de resultado es generalmente el de la expresin ms exacta. El orden de
precisin, de menos exacto a ms exacto, es Byte, Integer, Long, SingIe, DoubIe, Currency y
DecimaI. Este orden tiene las siguientes excepciones:
Si result es
Es una substraccin de un tipo SingIe y un tipo Long, se convierte a tipo
DoubIe.
El tipo de dato de resultado es un tipo variant Long, SingIe o Date
que se sale del intervalo vlido,
se convierte a un
Variant que contiene un
tipo DoubIe.
El tipo de dato de resultado es un Byte tipo variant que se sale del
intervalo vlido,
se convierte a un
Integer tipo variant.
El tipo de dato de resultado es un Integer tipo variant que se sale del
intervalo vlido,
se convierte a un Long
tipo variant.
La substraccin implica a un tipo Date y cualquier otro tipo de dato, es un tipo Date.
La substraccin implica dos expresiones tipo Date, es un tipo DoubIe.
Si una o ambas de las expresiones son de tipo NuII, el tipo de datos del resultado es NuII. Si una
expresin es del tipo Empty, se considera como si fuera 0.
Nota El orden de precisin utilizado por la suma y la resta no es igual que el orden de precisin
utilizado por la multiplicacin.
Material de estudio Pgina: 22 de 249
Visual Basic 6.0 y SQLServer 7.0
Operador: /
Se utiliza para dividir dos nmeros y obtener un resultado de signo flotante.
Sintaxis
resultado = n.mero 1 / n.mero 2
La sintaxis del operador / consta de las siguientes partes:
Parte Descripcin
-esultado Obligatorio; cualquier variable numrica.
/.mero 1 Obligatorio; cualquier expresin numrica.
/.mero 2 Obligatorio; cualquier expresin numrica.
Comentarios
El tipo de dato de resultado es normalmente un DoubIe tipo variant o un tipo DoubIe. Esta regla
tiene las siguientes excepciones:
Si Resultado es
Ambas expresiones son expresiones de tipo
Byte, Integer o SingIe,
Un tipo SingIe a menos que salga de su
intervalo vlido, en cuyo caso se produce un
error.
Ambas expresiones son Byte, Integer o
SingIe tipo variant,
Un tipo SingIe a menos que salga de su
intervalo vlido; en este caso resultado es un
tipo Variant que contiene un tipo DoubIe.
La divisin contiene un tipo DecimaI y
cualquier otro tipo de dato,
Un tipo DecimaI.
Si una o ambas de las expresiones son de tipo NuII, el tipo de datos del resultado es NuII. Si una
expresin es del tipo Empty, se considera 0
Operador: \
Se utiliza para dividir dos nmeros y obtener un resultado entero.
Sintaxis
resultado = n.mero 1 \ n.mero 2
La sintaxis del operador \ consta de las siguientes partes:
Parte Descripcin
-esultado Obligatorio; cualquier variable numrica.
/.mero 1 Obligatorio; cualquier expresin numrica.
/.mero 2 Obligatorio; cualquier expresin numrica.
Material de estudio Pgina: 23 de 249
Visual Basic 6.0 y SQLServer 7.0
Comentarios
Antes de efectuar la divisin se redondean las expresiones numricas para convertirlas en
expresiones tipo Byte, Integer o Long.
Normalmente, el tipo de dato del resultado es tipo Byte, Byte tipo variant, tipo Integer o Integer
tipo variant, tipo Long o Long tipo variant, independientemente de si el resultado es un nmero
entero o no. La parte fraccionaria se trunca. Sin embargo, si cualquiera de las expresiones es
NuII, resultado es NuII. Toda expresin que sea Empty se considera como 0.
Operador: ^
Se utiliza para elevar un nmero a la potencia del exponente.
Sintaxis
resultado = n.mero ^ e*ponente
La sintaxis del operador ^ consta de las siguientes partes:
Parte Descripcin
-esultado Obligatorio; cualquier variable numrica.
/.mero Obligatorio; cualquier expresin numrica.
E*ponente Obligatorio; cualquier expresin numrica.
Comentarios
0n n.mero puede ser negativo slo si e*ponente es un entero. Cuando se efecta ms de una
exponenciacin en una nica expresin, el operador ^ se resuelve en el orden en que est, de
izquierda a derecha.
Generalmente, el tipo de dato del resultado es un DoubIe o un Variant que contiene un DoubIe.
Sin embargo, si n.mero o e*ponente es una expresin NuII resultado es tambin NuII.
Material de estudio Pgina: 24 de 249
Visual Basic 6.0 y SQLServer 7.0
Operadores de comparacin.
Se utilizan para comparar expresiones.
Sintaxis
resultado 1 e*presi"n1 operadorcomparaci"n e*presi"n2
resultado 1 ob2eto1 Is ob2eto2
resultado 1 cadena Like patr"n
Los operadores de comparacin constan de las siguientes partes:
Parte Descripcin
-esultado Obligatorio; cualquier variable numrica.
E*presi"n Obligatorio; cualquier expresin.
,perador de comparaci"n Obligatorio; cualquier operador de comparacin.
,b2eto Obligatorio; cualquier nombre de objeto.
Cadena Obligatorio; cualquier expresin de cadena.
3atr"n Obligatorio; cualquier expresin de cadena o intervalo de
caracteres.
Comentarios
Esta tabla contiene una lista de los operadores de comparacin y de las condiciones que
determinan si el resultado es True, FaIse o NuII:
OPERADOR TRUE SI FALSE SI NULL SI
< (Menor que) e*presi"n1 < e*presi"n2 e*presi"n1 >= e*presi"n2 e*presi"n1
e*presi"n2 = NuII
<= (Menor o
igual que)
e*presi"n1 <= e*presi"n2 e*presi"n1 > e*presi"n2 e*presi"n1
e*presi"n2 = NuII
> (Mayor que) e*presi"n1 > e*presi"n2 e*presi"n1 <= e*presi"n2 e*presi"n1
e*presi"n2 = NuII
>= (Mayor o
igual que)
e*presi"n1 >= e*presi"n2 e*presi"n1 < e*presi"n2 e*presi"n1
e*presi"n2 = NuII
= (gual a) e*presi"n1 = e*presi"n2 e*presi"n1 <> e*presi"n2 e*presi"n1
e*presi"n2 = NuII
<> (Distinto de) e*presi"n1 <> e*presi"n2 e*presi"n1 = e*presi"n2 e*presi"n1
e*presi"n2 = NuII
Nota Los operadores Is y Like tienen funciones de comparacin especficas que difieren de
las de los operadores incluidos en la siguiente tabla.
Cuando se comparan dos expresiones, puede ser difcil determinar si stas se comparan
como nmeros o como cadenas de caracteres. En la siguiente tabla se muestra el modo en
que se comparan expresiones y cul es el resultado cuando cualquiera de las expresiones no
es del tipo Variant:
Material de estudio Pgina: 25 de 249
Visual Basic 6.0 y SQLServer 7.0
Si Entonces
Ambas expresiones son de tipos de datos
numricos (Byte, BooIean, Integer, Long,
SingIe, DoubIe, Date, Currency o DecimaI)
Se efecta una comparacin numrica.
Ambas expresiones son de tipo String Se efecta una comparacin de cadenas.
Una expresin es de tipo de datos numrico y la
otra es un tipo Variant que es, o puede ser, un
nmero
Se efecta una comparacin numrica.
Una expresin es de tipo de datos numrico y la
otra es un tipo Variant de cadena de caracteres
que no se puede convertir en un nmero
Provoca un error de Error de tipos.
Una expresin es de tipo String y la otra es
cualquier tipo Variant, con excepcin de NuII
Se efecta una comparacin de cadenas.
Una expresin es Empty y la otra es del tipo de
datos numrico
Se efecta una comparacin numrica,
usando 0 como la expresin Empty.
Una expresin es Empty y la otra es del tipo
String
Se efecta una comparacin de cadenas,
utilizando una cadena de caracteres de
longitud cero ("") como la expresin Empty.
Si tanto e*presi"n1 como e*presi"n2 son del tipo Variant, el tipo subyacente de las mismas
es el que determina la manera en que se comparan. En la siguiente tabla se muestra el modo
en que se comparan las expresiones y cul es el resultado de la operacin de acuerdo con el
tipo subyacente de Variant:
Si Entonces
Ambas expresiones tipo Variant son
numricas
Se efecta una comparacin numrica.
Ambas expresiones tipo Variant son cadenas
de caracteres
Se efecta una comparacin de cadenas.
Una expresin tipo Variant es numrica y la
otra es una cadena de caracteres
La expresin numrica es menor que la
expresin de cadena.
Una expresin tipo Variant es Empty y la otra
es numrica
Se efecta una comparacin numrica, usando
0 como la expresin Empty.
Una expresin tipo Variant es Empty y la otra
es una cadena de caracteres
Se efecta una comparacin de cadenas,
utilizando una cadena de caracteres de longitud
cero ("") como la expresin Empty.
Ambas expresiones tipo Variant son Empty Las expresiones son iguales.
Cuando se compara un tipo SingIe con un tipo DoubIe, ste se redondea al grado de
precisin del tipo SingIe.
Si una expresin tipo Currency se compara con una de tipo SingIe o DoubIe, sta se
convierte al tipo Currency. De igual forma, cuando un tipo DecimaI se compara con un tipo
SingIe o DoubIe, el tipo SingIe o el DoubIe se convierten a tipo DecimaI. Para el tipo
Currency, cualquier valor fraccionario menor que 0,0001 se pierde; para el tipo DecimaI,
cualquier valor fraccionario menor que 1E-28 se pierde y puede ocurrir un error de
desbordamiento. Perder valores fraccionarios puede hacer que dos valores se comparen
como iguales cuando en realidad no lo son.
Material de estudio Pgina: 26 de 249
Visual Basic 6.0 y SQLServer 7.0
Prioridad de Operadores
Cuando hay varias operaciones en una misma expresin, cada parte de la misma se evala y
se resuelve en un orden predeterminado segn la prioridad de los operadores.
Cuando hay expresiones que contienen operadores de ms de una categora, se resuelven
antes las que tienen operadores aritmticos, a continuacin las que tienen operadores de
comparacin y por ltimo las de operadores lgicos. Los operadores de comparacin tienen
todos la misma prioridad; es decir, se evalan de izquierda a derecha, en el orden en que
aparecen. Los operadores lgicos y aritmticos se evalan en el siguiente orden de prioridad:
Aritmticos Comparacin Lgicos
Exponenciacin (^) gualdad (=) Not
Negacin (-) Desigualdad (<>) And
Multiplicacin y divisin (*, /) Menor que (<) Or
Divisin de enteros (\) Mayor que (>) Xor
Mdulo aritmtico (Mod) Menor o igual que (<=) Eqv
Adicin y substraccin (+, -) Mayor o igual que (>=) Imp
Concatenacin de cadenas (&) Like
Is
Cuando hay multiplicacin y divisin en la misma expresin, cada operacin se evala a
medida que aparece, de izquierda a derecha. Del mismo modo, cuando se presentan
adiciones y substracciones en una misma expresin, cada operacin se evala tal como
aparecen de izquierda a derecha. Es posible usar parntesis para saltar el orden de
preferencia y forzar que algunas partes de una expresin se evalen antes que otras. Las
operaciones entre parntesis se realizan antes que las de fuera. Sin embargo, dentro de los
parntesis, la precedencia de los operadores se mantiene.
El operador de concatenacin de cadenas (&) no es realmente un operador aritmtico, pero
en orden de prioridad se encuentra a continuacin de todos los operadores aritmticos y
antes que todos los operadores de comparacin.
El operador Like, a pesar de tener la misma prioridad que los operadores de comparacin, es
en realidad un operador de coincidencia de patrones.
El operador Is es un operador de comparacin de referencia de objetos. No compara objetos
ni valores de objetos; slo determina si dos referencias de objeto se refieren al mismo objeto.
Material de estudio Pgina: 27 de 249
Visual Basic 6.0 y SQLServer 7.0
1.4 Estructuras de control
Las declaraciones que controlan las decisiones y los loops en Visual Basic, son llamadas
estructuras de control. Las estructuras de control de Visual Basic, son similares a los controles
encontrados en C y 3ascal. Las estructuras de control ms usadas en Visual Basic son las
siguientes:
If-Then blocks
If-Then-EIse blocks
IIf(expresin, parte verdadera, parte faIsa)
SeIect Case declaraciones
Do loops
For loops
Estructuras de Decisin
En Visual Basic, los procedimientos pueden contener una condicin de prueba, y sta, depender
del resultado de la prueba para desarrollar diferentes acciones. Las estructuras de decisi"n que
Visual Basic soporta, incluyen:
If... Then
If... Then ... EIse
IIf(expresin, parte verdadera, parte faIsa)
SeIect Case
If ... Then
Usar If ... Then para ejecutar una o ms declaraciones condicionalmente. Se puede usar una
lnea sencilla mltiple. La sintaxis es la siguiente:
If condici"n Then declaracin
If condicin Then
declaracin
End If
Ejemplo:
lf algunvalor > 8 Then Bandera = True
lf algunvalor > 8 Then
Bandera = True
End lf
Material de estudio Pgina: 28 de 249
Visual Basic 6.0 y SQLServer 7.0
If ... Then ... EIse
Usar If ... Then ... EIse para definir varios bloques de declaraciones, una de las cuales; se
ejecuta. La sintaxis es la siguiente
If condicin1 Then
declaraci"n1
[EIseIf condicion2 Then
5declaraci"n 266...
[EIse
5declaraci"n n 66
End If
Ejemplo:
Sub Form
Dim X,Y ' Declaracin de variables.
X = lnputBox("Teclear un nmero mayor que 0 y menor que 1000,")
lf X < 10 Then
Y = 1 ' 1 digito,
Elself X < 100 Then
Y=2 '2digitos.
Else
Y = 3 ' 3 digitos.
End lf
lf Y > 1 Then Unit = "digitos." Else Unit = "digito.
MsgBox "El nmero que tu tecleaste tiene & Y & Unit
End Sub
IIf (expresin, parte verdadera, parte faIsa)
Evala una expresin y retorna un valor. IIf siempre evala la parte verdadera y la parte falsa.
Por esta razn, deber vigilar que no se produzcan efectos no deseados.
Ejemplo:
Mivar = F(A > 8 , "A es mayor, "A es menor)
Material de estudio Pgina: 29 de 249
Visual Basic 6.0 y SQLServer 7.0
SeIect Case
Usar SeIect Case para seleccionar una o ms declaraciones condicionalmente. Es similar al If ...
Then ... EIse, pero 7elect Case hace al cdigo ms eficiente La sintaxis es la siguiente
SeIect Case e*presionprueba
[Case listae*presi"n16
[declaracin l]]
[Case listae*presi"n2&
[declaracin 2]]
[Case EIse
[declaracin n]]
End SeIect Ejemplo
Sub mnuBackColortem_Click (index As lnteger)
Select Case lndex
Case0 'Coloca la propiedad BackColor a Rojo
txtEdit.BackColor = RGB(255, 0, 0)
Case 1 'Coloca la propiedad BackColor a Verde
txtEdit.BackColor = RGB(0, 255, 0)
Case 2 ' Coloca la propiedad BackColor a Azul
txtEdit.BackColor = RGB(0, 0, 288&
End Select
Material de estudio Pgina: 30 de 249
Visual Basic 6.0 y SQLServer 7.0
Estructuras Continuas
Las estructuras continuas permiten ejecutar ms de una lnea de cdigo repetitivamente. Las
estructuras continuas que Visual Basic soporta, incluyen:
Do... Loop
For... Next
Do ... Loop
Se utiliza Do ... Loop para ejecutar un blo9ue de declaraciones, en un nmero infinito de veces.
Cada vez que se ejecuta la declaraci"n, es evaluada, permitiendo determinar la continuacin de
la misma. Como con If .... Then, la condicin debe ser un valor o una expresin que evale si es
verdadero (True) falso (False).
En el siguiente Do .... Loop, la declaraci"n es ejecutada mientras la condici"n es verdadera
(True):
Do WhiIe condici"n
declaraciones
Loop
Ejemplo:
Sub Command1_Click ( )
Dim Respuesta ' Declaracin de variable
Do While Respuesta = 0 Or Respuesta > 9
Respuesta = lnputBox("Teclear un nmero mayor que 1 y menor que 9.")
Loop
End Sub
Variacin del Ejemplo anterior:
Sub Command1_Click ( )
Dim Respuesta 'Declaracin de la variable
Do Respuesta
Respuesta = nputBox("Teclear un nmero mayor que 1 y menor que 9.")
lf Respuesta > 1 And Respuesta < 9 Then Checa el rango.
Exit Do ' Exit Do Loop
End f
Loop
End Sub
Material de estudio Pgina: 31 de 249
Visual Basic 6.0 y SQLServer 7.0
Otra variacin del Do ... Loops, es cuando la condici"n es evaluada al final de cada ejecucin.
Esta variacin garantiza al menos, una ejecucin de las declaraciones.
Do
declaraci"n
Loop WhiIe condici"n
Las siguientes declaraciones son anlogas a las dos anteriores:
Do UntiI condici"n Do
declaraci"n declaraci"n
Loop Loop UntiI condici"n
For ... Next
Do ... Loop trabaja muy bien, cuando no se sabe cuntas veces se necesita ejecutar
declaraciones en el :oop, Sin embargo, se necesita ejecutar un nmero de veces especfico, es
ms eficiente usar un loop For ... Next. A diferencia de un Do ... Loop, un loop For ... Next usa
un contador que incrementa o decrementa un valor, durante cada repeticin del loop
La sintaxis es la siguiente
For contador 1 principio To Final [Step incremento6
declaraciones
Next 5contador6
Nota : el argumento ;incremento;, puede ser negativo o positivo
Ejemplo:
Sub Command1_Ciick ( )
Dim , Msg, NL, Rep
NL = Chr(13) & Chr(10)
For Rep = 5 To 1 Step -1
For = Asc("A") To Asc("Z")
Msg = Msg & Chr()
Next
Msg = Msg & NL
NextRep
MsgBox Msg
End Sub
Material de estudio Pgina: 32 de 249
Visual Basic 6.0 y SQLServer 7.0
SaIir de una Estructura de ControI
La declaraci"n Exit, permite salir directamente desde un For...Loop, Do ... Loop, procedimiento
Sub o un procedimiento Function. Sintcticamente, la declaraci"n Exit es simple: Exit For
puede aparecer tantas veces como sea necesario dentro de un For...Loop, y un Exit Do puede
aparecer tantas veces como sea necesario dentro de un Do...Loop.:
For contador 1 principio To Final [Step <ncremento&
5declaraciones6
[Exit ForI
5declaraciones6
Next 5contador, [contador6 [,....]]
Do [{WhiIe UntiI }] condicion]
5declaraciones6
[Ext do]
5declaraciones6
Loop
Ejemplo
Sub Form_Click()
Dim , Num 'Declaracin de variables,
Do 'loop infinito
For = 1 To 1000
Num = nt(Rnd * 100) 'Genera un nmero random
Select Case Num 'Evalua el nmero random
Case 7 : Exit For 'Si 7, exit For...Next.
Case 29: Exit Do 'Si 29, exit Do...Loop
Case 54 : Exit Sub 'Si 54, exit Sub procedure.
End Select
Nexi
Loop
End Sub
Ejemplo: salida en una funcin.
Function SquareRoot (X As Double) As Double
Select Case Sgn(X) 'Evalua el signo del argumento.
Case 1 'OK si es positivo.
SquareRoot = Sqr(X)
Exit Function
Case 0 ' Notify user if 0
SquareRoot = 0
Case -1 ' Notifica al usuario si es negativo.
SquareRoot = -1
End Select
End Function
Material de estudio Pgina: 33 de 249
Visual Basic 6.0 y SQLServer 7.0
1.8 3rocedimientos 7ub $ Funciones
Un evento (e#ent&, es una accin reconocida por una Forma " Control. Las aplicaciones Event-
Driven, ejecutan un cdigo en respuesta a un e#ento. Cada Forma y Control, en Visual Basic=
tiene un conjunto de eventos predefinidos. Si uno de estos e#entos ocurre, Visual Basic invoca
el cdigo asociado con el procedimiento del e#ento (e#ent procedure&. Cuando se quiera que una
Forma Control responda a un e#ento,se debe escribir un cdigo llamado e#ent procedure.
Por ejemplo, un e#ento clic> ocurre cuando un usuario hace click en un objeto. Si un usuario
hace click en un command button nombrado Command1, el procedimiento del evento
Command1?Clic> es ejecutado.
MduIos
Los m"dulos son muy tiles, ya que ellos permiten llamar procedimientos que sean comunes,
entre ms de una Forma o Control. Esto permite reducir lneas de cdigo de programacin y evita
duplicar el cdigo. Adems, esto puede permitir la construccin de libreras de M"dulos de
c"di%o, que son muy tiles.
Cada m"dulo puede contener:
DecIaraciones. Se pueden poner constantes, tipos, variables y declaraciones de
procedimientos '::.
Event procedures. Son procedimientos Sub, que responden a los e#entos de los
controles.
Procedimientos GeneraIes. Todos los procedimientos en un mdulo, son
procedimientos generales; y en una aplicacin, pueden ser llamados desde el cdigo. Los
procedimientos generales tambin pueden ser procedimientos Sub o Function.
Material de estudio Pgina: 34 de 249
Visual Basic 6.0 y SQLServer 7.0
Procedimientos
Los procedimientos pueden ser Sub o Function. Un procedimiento Sub no puede retornar un
valor, as que un procedimiento Sub es una completa declaracin.
Un procedimiento Function puede retornar un valor, as entonces, es parte de una expresin.
Nota: Los e#entos de procedimiento son siempre procedimientos Sub, nunca procedimientos
Function.
Procedimientos Sub
La sintaxis para el procedimiento Sub es:
Sub nombreprocedimiento (arglist)
declaraciones
End Sub
El ar%list es una lista de nombres de argumentos, separados por comas (,) si hay ms de uno. La
sintaxis de un argumento es:
[ByVaI] nombrevariable [( )] [As tipo]
Ejemplo
Sub File1_MouseDown (Button As lnteger, Shift As lnteger, X As Single, Y As Single)
file1.Dragcon = Drive1.Dragcon
fiie1.Drag
End Sub
Cada vez que el procedimiento es llamado, la declaracin entre Sub y End Sub es ejecutada.
Visual Basic sustituye cada referencia, a una partida en la lista de los argumentos, con el
correspondiente argumento. Cuando se llama a un procedimiento general, se necesita pasar el
valor para cada argumento. Por ejemplo, si se necesita mover una imagen a la izquierda
Sub Muevelmagen (Mover)
lmagen1.Move lmagen1+Mover,imagen1,Top
End Sub
La declaracin anterior necesita ser llamada con un argumento. Ejemplo:
Muevelmagen 50
El procedimiento sustituye 50 por Mo#er (ste aparece en la lista de argumentos)
Material de estudio Pgina: 35 de 249
Visual Basic 6.0 y SQLServer 7.0
Function
La sintaxis para el procedimiento Fuction es;
Function nombreprocedimiento (ar%umentos& [As tipo]
declaraciones
End Function
Los argumentos en procedimiento Function, trabajan exactamente igual que en los
procedimientos Sub.
Diferencias del procedimiento Function:
Siempre se usan parntesis con cada llamada de funcin.
El procedimiento Function tiene tipos de datos, como las variables.
Se puede retornar un valor, asignndolo al nombre del procedimiento.
Por ejemplo, se puede escribir esta funcin para calcular el VA de una cantidad:
Function Calcva (Monto)
Calcva = Monto *.1
End Function
Se puede llamar la funcin de la siguiente manera: X = Calclva(5000)
Mecanismos de comentarios, nmeros y decIaraciones.
En Visual Basic, el smbolo ( ' ), se utiliza para las lneas de comentario. E2emplo:
'Este texto es asignado al control Text1l
Text1.Text = "Curso de Visual Basic 3.0" 'Aparece en la caja del texto.
Algunos n.meros se usan para asignar valores a las propiedades de algunos controles. stos
pueden ser en base 10 (decimal), base 16 (hexadecimal) que en Visual Basic se representa con
un prefijo &H base 8 (octal) que se representa con un prefijo &O.
En Visual Basic, las declaraciones son normalmente una por lnea. Sin embargo. se puede poner
ms de una declaracin en una lnea, utilizando los dos puntos ( : ), como separador. Ejemplo
Text1.Text = " Curso de Visual Basic " : Fuente=16 : Text1.FontSize= Fuente
RegIas de nombres en VisuaI Basic
El nombre de procedimientos, variables y constantes, debe seguir la siguiente regla:
Comenzar con una letra
Debe contener slo letras y nmeros. Los signos de puntuacin y los espacios, no son
permitidos.
No puede ser ms largo de 40 caracteres,
No usar los nombres de las palabras reservadas para el lenguaje de Visual Basic.
Material de estudio Pgina: 36 de 249
Visual Basic 6.0 y SQLServer 7.0
1.@ 3rocedimientos con ar%umentos opcionales.
Normalmente el cdigo de un procedimiento necesita cierta informacin sobre el estado del
programa para realizar su trabajo. Esta informacin consiste en variables que se pasan al
procedimiento cuando se le llama. Cuando se pasa una variable a un procedimiento, se llama
ar%umento.
Tipos de datos de Ios argumentos
Los argumentos de los procedimientos tienen el tipo de dato Variant de forma
predeterminada. Sin embargo, puede declarar otros tipos de datos para los argumentos. Por
ejemplo, la funcin siguiente acepta una cadena y un entero:
&un'tion (u)Co#er (*+aSe#ana ," String, -ora _
," Integer) ," String
. *e/ue0/e e0 #en1 de0 a0#uer2o ba"3ndo"e en e0 d+a 4 0a 5ora6
I7 *+aSe#ana 8 9Vierne"9 t5en
(u)Co#er 8 9:e"'ado9
E0"e
(u)Co#er 8 9:o00o9
End I7
I7 -ora ; 4 T5en (u)Co#er 8 9*e#a"iado tarde9
End &un'tion
Paso de argumentos por vaIor
Slo se pasa una copia de la variable cuando se pasa un argumento por valor. Si el
procedimiento cambia el valor, el cambio afecta slo a la copia y no a la variable propiamente
dicha. Utilice la palabra clave ByVaI para indicar un argumento pasado por valor. Por
ejemplo:
Sub Cuenta" (<4Va0 int$u#Cuenta a" Integer)
6 . :onga a=u+ "u" in"tru''ione"6
End Sub
Paso de argumentos por referencia
Al pasar argumentos por referencia se permite al procedimiento el acceso al contenido real de
la variable en su ubicacin de direccin de memoria. Como resultado, el procedimiento al que
se ha pasado el valor de la variable se puede modificar de forma permanente. La forma
predeterminada de pasar valores en Visual Basic es por referencia.
Si especifica el tipo de dato de un argumento que se pasa por referencia, debe pasar un valor
de ese tipo para el argumento. Puede eludirlo si pasa una expresin en vez de un tipo de dato
como argumento. Visual Basic evala la expresin y la pasa como el tipo requerido si puede.
La forma ms sencilla de convertir una variable en una expresin es ponerla entre parntesis.
Por ejemplo, para pasar una variable declarada como entero a un procedimiento que espera
una cadena como argumento, debera hacer lo siguiente:
Sub :ro'edi#iento(ue>0a#a ()
*i# int? ," Integer
int? 8 12 @ 3
Material de estudio Pgina: 37 de 249
Visual Basic 6.0 y SQLServer 7.0
&oo(int?)
End Sub
Sub &oo(<ar ," String)
M"g<ox <ar .E0 /a0or de <ar e" 0a 'adena 93A96
End Sub
Uso de argumentos opcionaIes
Puede especificar argumentos a un procedimiento como opcionales si coloca la palabra clave
OptionaI en la lista de argumentos. Si especifica un argumento opcional, todos los
argumentos subsiguientes de la lista de argumentos deben ser tambin opcionales y se
deben declarar con la palabra clave OptionaI. Los dos fragmentos de cdigo de ejemplo que
se muestran a continuacin suponen que hay un formulario con un botn de comando y un
cuadro de lista.
Por ejemplo, este cdigo proporciona todos los argumentos como opcionales:
*i# "tr$o#bre ," String
*i# /ar*ire''in ," Variant
Sub >i"tText(B%tiona0 x ," String, B%tiona0 4 _
," Variant)
>i"t16,ddIte# x
>i"t16,ddIte# 4
End Sub
:ri/ate Sub Co##and1_C0i'C()
"tr$o#bre 8 9"uno#bre9
/ar*ire''in 8 1234D . Se %ro%or'ionan a#bo" argu#ento"6
Ca00 >i"tText("tr$o#bre, /ar*ire''in)
End Sub
Sin embargo, este cdigo no proporciona todos los argumentos como opcionales:
*i# "tr$o#bre ," String
*i# /ar*ire''in ," Variant
Sub >i"tText(x ," String, B%tiona0 4 ," Variant)
>i"t16,ddIte# x
I7 $ot I"Mi""ing(4) T5en
>i"t16,ddIte# 4
End I7
End Sub
:ri/ate Sub Co##and1_C0i'C()
"tr$o#bre 8 9"uno#bre9 .$o "e %ro%or'iona e0 "egundo argu#ento6
Ca00 >i"tText("tr$o#bre)
End Sub
En caso de que no se proporcione un argumento opcional, se asigna el argumento como un
tipo Variant con el valor Empty. El ejemplo anterior muestra cmo probar si se han perdido
argumentos opcionales mediante la funcin IsMissing.
Material de estudio Pgina: 38 de 249
Visual Basic 6.0 y SQLServer 7.0
Proporcionar un vaIor predeterminado a un argumento opcionaI
Tambin es posible especificar un valor predeterminado para un argumento opcional. El
siguiente ejemplo devuelve un valor predeterminado si no se pasa el argumento opcional al
procedimiento Function:
Sub >i"tText(x ," String, B%tiona0 4 ," _
Variant 8 1234D)
>i"t16,ddIte# x
>i"t16,ddIte# 4
End Sub
:ri/ate Sub Co##and1_C0i'C()
"tr$o#bre 8 9"uno#bre9 . $o "e %ro%or'iona e0 "egundo
. argu#ento6
Ca00 >i"tText("tr$o#bre) . ,grega 9"uno#bre9 4 91234D96
End Sub
Uso de un nmero indefinido de argumentos
Generalmente, el nmero de argumentos en la llamada a un procedimiento debe ser el mismo
que los especificados en el procedimiento. Utilizar la palabra clave ParamArray le permite
especificar que el procedimiento aceptar un nmero arbitrario de argumentos. Eso le permite
escribir funciones como Sum:
*i# x ," Variant
*i# 4 ," Integer
*i# intSu# ," Integer
Sub Su#(:ara#,rra4 int$u#"())
&or Ea'5 x In int$u#"
4 8 4 E x
$ext x
intSu# 8 4
End Sub
:ri/ate Sub Co##and1_C0i'C()
Su# 1, 3, D, F, G
>i"t16,ddIte# intSu#
End Sub
Creacin de instrucciones ms senciIIas mediante argumentos con
nombre
En muchas funciones, instrucciones y mtodos incorporados, Visual Basic proporciona la
opcin de utilizar ar%umentos con nombre como mtodo abreviado para escribir valores de
argumentos. Con los argumentos con nombre puede proporcionar cualquiera o todos los
argumentos, en cualquier orden, asignando un valor al argumento con nombre. Para ello,
escriba el nombre del argumento y un signo de dos puntos seguido del signo igual y el valor
(MiArgumento:= "UnValor") y colocando esta asignacin en cualquier secuencia delimitada
con comas. Observe que los argumentos del ejemplo siguiente estn en orden inverso al de
los argumentos esperados:
&un'tion >i"tText("tr$o#bre ," String, B%tiona0 /ar*ire''in ,"
Variant)
Material de estudio Pgina: 39 de 249
Visual Basic 6.0 y SQLServer 7.0
>i"t16,ddIte# "tr$o#bre
>i"t26,ddIte# /ar*ire''in
End Sub
:ri/ate Sub Co##and1_C0i'C()
>i"tText /ar*ire''in81234D, "tr$o#bre89Su no#bre9
End Sub
Esto resulta especialmente til si sus procedimientos tienen varios argumentos opcionales
que no siempre necesita especificar.
Determinacin deI soporte de argumentos con nombre
Para determinar qu funciones, instrucciones y mtodos aceptan argumentos con nombre,
utilice la caracterstica nformacin rpida automtica de la ventana Cdigo, compruebe el
Examinador de objetos o consulte la -eferencia del len%ua2e en los Libros en pantalla. Tenga
en cuenta lo siguiente cuando trabaje con argumentos con nombre:
Los mtodos de objetos de la biblioteca de objetos de Visual Basic (VB) no aceptan
argumentos con nombre, ni tampoco lo hacen todas las palabras clave del lenguaje de la
biblioteca de objetos de Visual Basic para aplicaciones (VBA).
En la sintaxis, los argumentos con nombre se muestran en negrita y cursiva. Todos los
dems argumentos se muestran slo en cursiva.
Importante No puede utilizar argumentos con nombre para evitar especificar argumentos
requeridos. Slo puede omitir los argumentos opcionales. En las bibliotecas de objetos de
Visual Basic (VB) y Visual Basic para aplicaciones(VBA), el Examinador de objetos pone los
argumentos opcionales entre corchetes [ ].
1.A Brra$s: estticos $ dinmicos.
Un arreglo permite referirse a una serie de #ariables del mismo nombre, adems de usar un
nmero de identificacin para cada elemento. Todos los elementos de un arreglo, tienen el
mismo tipo de dato.
A continuacin, se exponen tres carninos para declarar el tamao de un arreglo; dependiendo del
alcance que necesite tener el arreglo.
Para crear un arre%lo global, usar la declaracin GIobaI en la seccin
'eclarations de un m"dulo.
Para crear un arre%lo a nivel de mdulo, usar la declaracin Dim en la seccin
'eclarations de una Forma o m"dulo
Para crear un arreglo local, usar la declaracin Static en un procedimiento.
Ejemplos de arre%los:
Dim Conteo(20) As lnteger
Dim Sumas(40) As Double
Para crear un arre%lo global:
Global Conteo(20) As nteger
Global Sumas(40) As Double
Material de estudio Pgina: 40 de 249
Visual Basic 6.0 y SQLServer 7.0
La misma declaraci"n dentro de un procedimiento utilizando Static
Static Conteo(20) As lnteger
Static Sumas(40) As Double
En la siguiente declaraci"n el nmero indice de 7umas corre de 120 a 140
Dim Sumas(120 a 140) As String
El siguiente ejemplo inicializa los elementos con un nmero 2
Static Sumas(1 a 20) As integer
Dim X As integer
For X=1 To 20
Sumas(X) = 2
Next
ArregIos MuItidimensionaIes
En Visual Basic, se pueden declarar arre%los hasta de 60 dimensiones. Por ejemplo, la siguiente
declaraci"n declara un arre%lo de 2 dimensiones de 5x5 .
Static Matriz(4,4) As String
0
Static Matriz(1 To 5,1 To 5) As String
Dim Multi(4,1 To 5,1 To 10)
El ejemplo anterior crea un arre%lo de 3 dimensiones de 5 x 5 x 10; es decir: 250 elementos.
ArregIos Dinmicos
En algunas ocasiones, no se conoce que tan largo puede ser un arre%lo. Un arreglo dinmico es
muy eficiente, ya que permite cambiar el tamao de un arre%lo,
Para crear un arregIo dinmico
1 Declarar el arreglo con la declaraci"n GIobaI o Dim, a nivel de mdulo y con Dim o
Static en un procedimiento. Se puede declarar el arre%lo con una dimensin vaca . Por ejemplo:
Dim Arreglo( )
2 Asignar el actual nmero de elementos con la declaracin ReDim. Por ejemplo:
ReDim Arregio(Y + 1)
La declaracin ReDim, puede aparecer slo en un procedimiento. ReDim puede cambiar el
nmero de elementos de un arre%lo, pero no el nmero de dimensiones.
Cada vez que se ejecuta un arreglo con la declaracin ReDim, todos los valores almacenados en
un arreglo, se pierden. Para evitar esto, se puede usar la palabra Preserve. Por ejemplo:
ReDim Preserve Arreglo(Arreglo+10)
Material de estudio Pgina: 41 de 249
Visual Basic 6.0 y SQLServer 7.0
1.C Funciones internas de VB
Funciones de Cadenas de caracteres y de Fecha
Aunque un juego de caracteres de doble byte consiste en un byte de cabecera y un byte de
cola y requiere dos bytes consecutivos de almacenamiento, debe tratarlo como una nica
unidad en cualquier operacin relacionada con caracteres o cadenas. Varias funciones de
manipulacin de cadenas controlan de forma apropiada todas las cadenas, incluidos los
caracteres DBCS, con base en el caracter.
Estas funciones tienen una versin ANS/DBCS y una versin binaria o versin Unicode,
como se muestra en la tabla siguiente. Utilice las funciones apropiadas dependiendo del
propsito de la manipulacin de cadenas.
Las versiones "B" de las funciones de la tabla siguiente se disearon para utilizarlas con
cadenas de datos binarios. Las versiones "W" se disearon para utilizarlas con cadenas
Unicode.
Funcin Descripcin
Asc Devuelve el cdigo de carcter ANS o DBCS del primer carcter de una
cadena.
AscB Devuelve el valor del primer byte de la cadena dada que contiene datos
binarios.
AscW Devuelve el cdigo de carcter Unicode del primer carcter de una
cadena.
Chr Devuelve una cadena que contiene un cdigo de carcter ANS o DBCS
especfico.
ChrB Devuelve una cadena binaria que contiene un byte especfico.
ChrW Devuelve una cadena que contiene un cdigo de carcter Unicode
especfico.
Input Devuelve desde un archivo un nmero de caracteres ANS o DBCS
especificados.
InputB Devuelve desde un archivo un nmero de bytes especificados.
InStr Devuelve la primera ocurrencia de una cadena dentro de otra.
InStrB Devuelve la primera ocurrencia de un byte en una cadena binaria.
Left,
Right
Devuelve un nmero de caracteres especificado desde la parte izquierda
o derecha de una cadena.
LeftB,
RightB
Devuelve un nmero de bytes especificado desde la parte izquierda o
derecha de una cadena binaria.
Len Devuelve la longitud de la cadena en nmero de caracteres.
LenB Devuelve la longitud de la cadena en nmero de bytes.
Mid Devuelve un nmero especificado de caracteres de una cadena.
MidB Devuelve un nmero especificado de bytes de una cadena binaria.
Las funciones sin una "B" o "W" de esta tabla controlan correctamente los caracteres DBCS y
ANS. Adems de las funciones anteriores, la funcin String controla los caracteres DBCS.
Esto significa que todas estas funciones consideran un carcter DBCS como un nico
carcter, incluso si se compone de 2 bytes.
El comportamiento de estas funciones es diferente cuando controlan caracteres SBCS y
DBCS. Por ejemplo, la funcin Mid se utiliza en Visual Basic para devolver un nmero
especificado de caracteres de una cadena. En las configuraciones regionales que utilizan
DBCS, el nmero de caracteres y el nmero de b$tes no son necesariamente el mismo. En
estos casos Mid slo devolvera el nmero de caracteres, no el de bytes.
Material de estudio Pgina: 42 de 249
Visual Basic 6.0 y SQLServer 7.0
En la mayora de los casos, utilice las funciones basadas en caracteres cuando quiera
controlar los datos de cadenas, ya que estas funciones pueden tratar correctamente las
cadenas ANS, las cadenas DBCS y las cadenas Unicode.
Las funciones de manipulacin de cadenas basadas en bytes, como LenB y LeftB, se
proporcionan para controlar los datos de las cadenas como datos binarios. Cuando almacena
caracteres en una variable String u obtiene los caracteres de una variable String, Visual
Basic convierte automticamente los caracteres Unicode a ANS. Cuando quiera controlar los
datos binarios, utilice matrices Byte en lugar de variables String y las funciones de
manipulacin de cadenas basadas en bytes.
Para obtener ms informacin Busque la funcin apropiada en la -eferencia del len%ua2e
de los Libros en pantalla.
Si quiere controlar cadenas de datos binarios, puede asignar los caracteres de una cadena
con una matriz Byte si utiliza el cdigo siguiente:
*i# MiCadena*e<4te"() ," <4te
. ,"igna 0a 'adena 'on una #atri2 <4te6
MiCadena*e<4te" 8 9,<C9
. :re"enta 0o" dato" binario"6
&or i 8 ><ound(MiCadena*e<4te") to H<ound(MiCadena*e<4te")
:rint !ig5t(9 9 E -ex(MiCadena*e<4te"(i)),2) E 9 ,9I
$ext
:rint
Conversin de cadenas DBCS
Visual Basic proporciona varias funciones de conversin cadenas que son tiles para los
caracteres DBCS: StrConv, UCase y LCase.
Funcin StrConv
Las opciones globales de la funcin StrConv son convertir maysculas en minsculas y
viceversa. Adems de estas opciones, la funcin tiene varias opciones especficas para
DBCS. Por ejemplo, puede convertir letras estrechas en letras anchas si especifica vbWide
en el segundo argumento de esta funcin. Puede convertir un tipo de carcter en otro, como
hiragana en katakana en japons.
Tambin puede utilizar la funcin StrConv para convertir caracteres Unicode en caracteres
ANS/DBCS y viceversa. Normalmente, una cadena de Visual Basic est compuesta por
caracteres Unicode. Cuando necesite tratar cadenas ANS/DBCS (por ejemplo, para calcular
el nmero de bytes de una cadena antes de escribir la cadena en un archivo), puede utilizar
esta capacidad de la funcin StrConv.
Conversin de mayscuIas y minscuIas en Ietras anchas
Puede convertir maysculas a minsculas y viceversa si utiliza la funcin StrConv con
vbUpperCase o vbLowerCase o mediante las funciones UCase o LCase. Cuando utiliza
estas funciones, las letras anchas en ingls de DBCS tambin se convierten como caracteres
ANS.
Material de estudio Pgina: 43 de 249
Visual Basic 6.0 y SQLServer 7.0
NOTA:
Visual Basic utiliza Unicode para almacenar y manipular cadenas. Unicode es un juego de
caracteres en el que se emplean 2 bytes para representar cada carcter. Algunos otros
programas, como la AP de Windows 95 y 98, utilizan ANS (American National Standards
nstitute) o DBCS para almacenar y manipular cadenas. Cuando mueva cadenas fuera de
Visual Basic, puede que encuentre diferencias entre Unicode y ANS/DBCS. En la tabla
siguiente se muestran los juegos de caracteres ANS, DBCS y Unicode en diferentes
entornos.
Entorno Juego o juegos de caracteres utiIizado
Visual Basic Unicode
Bibliotecas de objetos de 32 bits Unicode
Bibliotecas de objetos de 16 bits ANS y DBCS
AP de Windows NT Unicode
Automatizacin en Windows NT Unicode
AP de Windows 95 ANS y DBCS
Automatizacin en Windows 95 Unicode
ANSI
ANS es el juego de caracteres estndar ms utilizado por los equipos personales. Como el
estndar ANS slo utiliza un byte para representar un carcter, est limitado a un mximo de
256 caracteres y signos de puntuacin. Aunque es adecuado para el ingls, no acepta
totalmente muchos otros idiomas.
DBCS
DBCS se utiliza en los sistemas Microsoft Windows que se distribuyen en la mayor parte de
Asia. Proporciona soporte para muchos alfabetos de Asia Oriental, como el chino, el japons
y el coreano. DBCS utiliza los nmeros de 0 a 128 para representar el juego de caracteres
ASC. Algunos nmeros mayores de 128 funcionan como caracteres de cabecera, que no
son realmente caracteres sino simples indicadores de que el valor siguiente es un carcter de
un juego de caracteres no occidental. En DBCS, los caracteres ASC tienen una longitud de 1
byte, mientras que los caracteres japoneses, coreanos y de otros pases de Asia Oriental
tienen una longitud de 2 bytes.
Unicode
Unicode es un esquema de codificacin de caracteres que utiliza 2 bytes por cada carcter.
SO (nternational Standards Organization) define un nmero dentro del intervalo 0 a 65.535
(2
16
1) por cada carcter y smbolo de cada idioma (ms algunos espacios vacos para
futuras ampliaciones). En todas las versiones de 32 bits de Windows, el Modelo de objetos
componentes (COM), que es la base de las tecnologas OLE y ActiveX, utiliza Unicode.
Unicode es totalmente compatible con Windows NT. Aunque Unicode y DBCS tienen
caracteres de doble byte, los esquemas de codificacin son completamente diferentes.
Material de estudio Pgina: 44 de 249
Visual Basic 6.0 y SQLServer 7.0
La tabla siguiente identifica los caracteres que puede utilizar para crear formatos de
fecha/hora definidos por el usuario:
Carcter Descripcin
(:) Separador de hora. En algunas configuraciones regionales, se pueden utilizar
otros caracteres para representar el separador de hora. El separador de hora
separa las horas, los minutos y los segundos cuando se da formato a los valores
de hora. El carcter real que se utiliza como separador de hora en la salida con
formato viene determinado por las configuraciones del sistema.
(/) Separador de fecha. En algunas configuraciones regionales se pueden utilizar
otros caracteres para representar el separador de fecha. El separador de fecha
separa el da, el mes y el ao cuando se da formato a los valores de fecha. El
carcter real que se utiliza como separador de fecha en la salida con formato
viene determinado por las configuraciones del sistema.
c Muestra la fecha como ddddd y la hora como ttttt, en este orden. Slo se
muestra informacin de fecha si no hay parte fraccionaria en el nmero de serie
de la fecha; slo se muestra informacin de hora si no hay una parte entera.
d
Muestra el da como un nmero sin un cero a la izquierda (1 31).
dd
Muestra el da como un nmero con un cero a la izquierda (01 31).
ddd
Muestra el da como abreviatura (Dom Sb).
dddd
Muestra el da como nombre completo (Domingo Sbado).
ddddd Muestra la fecha como fecha completa (incluyendo el da, el mes y el ao), con el
formato de acuerdo a la configuracin de formato de fecha corta del sistema. En
Microsoft Windows, el formato predeterminado de fecha corta para ngls U.S.
es #JdJaa, aunque cambia segn la configuracin regional.
dddddd Muestra un nmero de serie de fecha como fecha completa (incluyendo el da, el
mes y el ao), con el formato de acuerdo a la configuracin de formato de fecha
larga reconocido por el sistema. En Microsoft Windows, el formato
predeterminado de fecha larga para ngls-US es #### dd, aaaa, aunque
cambia segn la configuracin regional.
w Muestra el da de la semana como un nmero (1 para Domingo hasta 7 para
Sbado).
ww
Muestra la semana del ao como un nmero (1 54).
m
Muestra el mes como un nmero sin un cero a la izquierda (1 12). Si #
sigue inmediatamente a 5 o 55, se muestra el minuto en lugar del mes.
mm
Muestra el mes como un nmero con un cero a la izquierda (01
12). Si # sigue inmediatamente a 5 o 55, se muestra el minuto en lugar
del mes.
mmm
Muestra el mes como una abreviatura (Ene Dic).
mmmm
Muestra el mes como nombre de mes completo (Enero Diciembre).
q
Muestra el trimestre del ao como un nmero (1 4).
y
Muestra el da del ao como un nmero (1 366).
yy
Muestra el ao como un nmero de dos dgitos (00 99).
yyyy
Muestra el ao como un nmero de cuatro dgitos (100 9999).
h
Muestra la hora como un nmero sin ceros a la izquierda (0 23).
hh
Muestra la hora como un nmero con ceros a la izquierda (00 23).
n
Muestra el minuto como un nmero sin ceros a la izquierda (0 59).
Carcter Descripcin
nn
Muestra el minuto como un nmero con ceros a la izquierda (00
Material de estudio Pgina: 45 de 249
Visual Basic 6.0 y SQLServer 7.0
59).
s
Muestra el segundo como un nmero sin ceros a la izquierda (0
59).
ss
Muestra el segundo como un nmero con ceros a la izquierda (00
59).
t t t t t Muestra una hora con formato completo (incluyendo hora, minutos y segundos),
utilizando el separador de hora definido por el formato de hora reconocido por el
sistema. Se muestra un cero a la izquierda si est seleccionada la opcin de cero
a la izquierda y la hora es antes de 10:00 AM o PM En Microsoft Windows, el
formato predeterminado de hora es 5##"".
AM/PM Utilice el reloj de 12 horas para mostrar AM en maysculas con cualquier hora
antes del medioda; y mostrar PM en maysculas con cualquier hora entre el
medioda y 11:59 P.M.
Material de estudio Pgina: 46 de 249
Visual Basic 6.0 y SQLServer 7.0
am/pm Utilice el reloj de 12 horas para mostrar am en minsculas con cualquier hora
antes del medioda; y mostrar pm en minsculas con cualquier hora entre el
medioda y 11:59 P.M.
A/P Utilice el reloj de 12 horas para mostrar A en maysculas con cualquier hora
antes del medioda; y mostrar P en maysculas con cualquier hora entre el
medioda y 11:59 P.M.
a/p Se utiliza el reloj de 12 horas y muestra A en minsculas con cualquier hora antes
del medioda; muestra P en minsculas con cualquier hora entre el medioda y
11:59 P.M.
AMPM Utilice el reloj de 12 horas para mostrar el literal de cadena AM como lo defina el
sistema con cualquier hora antes del medioda; y mostrar el literal de cadena PM
como lo defina el sistema con cualquier hora entre el medioda y 11:59 P.M.
AMPM puede estar en maysculas o en minsculas, pero las maysculas o
minsculas en la cadena que resulta se corresponden con la cadena definida por
las configuraciones del sistema. En Microsoft Windows, el formato
predeterminado es AM/PM.
Los siguientes son ejemplos de formatos de fecha y hora definidos por el usuario para el 6 de
diciembre de 1999:
Formato Muestra
#JdJaa 12/7/99
dK### 7-Dic
dK####Kaa 7-Diciembre-99
d #### 7 Diciembre
#### aa Diciembre 99
55## ,MJ:M 08:50 PM
5##"" aJ% 8:50:35 p
5## 20:50
5##"" 20:50:35
#JdJaa 5## 12/7/99 20:50
Material de estudio Pgina: 47 de 249
Visual Basic 6.0 y SQLServer 7.0
1.D E#entos, propiedades $ Controles
El primer paso para construir una aplicacin en Visual Basic, es dibujar el objeto. Para esta
primera aplicacin, usaremos tres controles del !oolBo*.
Control Nombre
TextBox (caja de Textos)
Command Button (Botn de Comando)
Para dibujar un controI usando eI Toolo!.
1. Hacer click en el control que se desea. Utilizar en este caso, el de Text Box
2. Mover el apuntador dentro de la Forma. Ver figura
3. Hacer click en la Forma con el botn izquierdo del mouse. Sin soltar el botn, arrastrar el
objeto.
4. Soltar el botn del mouse
De esta manera, el control aparece en la Forma.
Material de estudio Pgina: 48 de 249
Visual Basic 6.0 y SQLServer 7.0
Un simple camino para aadir un control dentro de la Forma, es hacer doble-click en el icono del
control del ToolBox: entonces se crea un control localizado en el centro de la Forma, con tamao
normal.
Para cambiar eI tamao de un controI.
1. Seleccionar el control, el cual se desea cambiar de tamao, haciendo click con el mouse.
2. Posicionar el apuntador en la esquina donde se desea cambiar el tamao, tomarlo y
arrastrarlo con el mouse.
3. Soltar el mouse.
Para mover un controI.
1. Posicionar el apuntador del mouse en el control que se desea mover, y tomar el control
con el mouse.
2. Arrastrar el control a la nueva localizacin.
3. Soltar el mouse.
CoIocacin de Propiedades
La Ve"ta"a de #ropiedades $#roperties% provee un fcil camino, para la determinacin de las
3ropiedades de todos los objetos de la &or'a. Para abrir la Ventana de 3ropiedades, se puede:
seleccionar desde el men de Windows; hacer click en el botn de Propiedades en el Toolar
bien, presionar la tecla F4.
1.5 Ventana de
Propiedades
(Properties indo!"
Material de estudio Pgina: 49 de 249
Ventana
de
propiedad
es
Lista de
objetos
Propiedades
Descripci
n breve de
la
propiedad
Visual Basic 6.0 y SQLServer 7.0
La Ventana de 3ropiedades consiste de los siguientes elementos:
Object Box.- Despliega el nombre del objeto al cual se determinan las propiedades. Al hacer
click en la flecha de la derecha de la caja, se puede seleccionar una Forma cualquier control
que se encuentre dentro de la Forma actual.
Setting Box.- Permite editar la colocacin, para la propiedad seleccionada en la lista de
propiedades. Alguna colocacin puede ser cambiada, haciendo click en la flecha a la derecha
de la caja: esta despliega una lista de opciones, y puede seleccionarse alguna.
Properties list.- La columna izquierda despliega la lista de propiedades que posee el objeto.
La columna derecha determina la colocacin de cada propiedad.
Para completar el ejemplo anterior, donde se despliega el mensaje "Mi Primera Aplicacin"; se
necesita cambiar a los objetos, las siguientes propiedades:
Objetos Propiedades Setting
Form Caption Mi primera Aplicacin
Text Box Text (Vaco)
Text Box FontName Arial
Text Box FontSize 16
Command1 Button Caption OK
Para continuar con el ejemplo, aadir un segundo Command Button (Botn de comando) y
colocar la siguiente propiedad:
Command2 Button Caption Exit
Escribiendo Cdigo
La Ve"ta"a de c(di)o, es donde se escribe el cdigo de Visual Basic para la aplicacin. El
cdigo consiste del lenguaje de declaraciones y constantes. Usando la Ventana de c"di%o, se
puede escribir rpidamente el cdigo en la aplicacin.
Para abrir Ia Ventana de cdigo.
Hacer doble-click en la &or'a el control que est dentro de la Forma a la que se desea
escribir el cdigo.
Tambin se puede dentro de la Ventana de 3ro$ectos, seleccionando el nombre de la
Forma y seleccionando el botn Vie* +ode.
Material de estudio Pgina: 50 de 249
Visual Basic 6.0 y SQLServer 7.0
La Ventana de c"di%o incluye los siguientes elementos:
Object Box.- Despliega el nombre del objeto seleccionado. Haciendo click en la flecha que
se encuentra al lado derecho de la caja, se despliega una lista de todos los objetos
asociados con esta Forma.
Procedure List Box.- Lista los procedimientos para un objeto. La caja despliega el nombre
del procedimiento seleccionado; en este caso, Clic>. Seleccionando la flecha a la derecha
de la caja, se despliega la lista de todos los procedimientos para el objeto.
El c"di%o, en una aplicacin de Visual Basic; es dividido en pequeos bloques llamados
procedimientos (procedures&. Un e#ent procedure, como el que se cre anteriormente; contiene
c"di%o que es ejecutado cuando ocurre un evento (como hacer click en el botn).
Para crear un event procedure
1. En el Object Box, se selecciona el nombre de un objeto en la Forma que se encuentra
activada, para continuar con el ejemplo anterior y seleccionar el command button,
Command1.
2. En el 3rocedure :ist bo*, se selecciona el nombre de un evento para el objeto
seleccionado.
Aqu, el procedimiento Click ya fue seleccioando. ste es el procedimiento default para
los command buttons.
3. Escribir el siguiente cdigo entre la declaracin Sub y End Sub:
Para el Command Button, Command1 escribir:
Form1.BackColor = QBColor(Rnd * 15)
Text1.Text = "Mi Primera Aplicacin"
Text1.BackColor = QBColor(Rnd * 15)
Text1.FontSize = 16
Text1.FontName = "Arial"
El e#ent procedure de Command1, se ve as:
Sub Command1_Click()
Form1.BackColor = QBColor(Rnd * 15)
Text1.Text = "Mi Primera Aplicacin"
Text1.BackColor = QBColor(Rnd * 15)
Text1.FontSize = 16
Text1.FontName = "Arial"
End Sub
Para el Command Button, Command2 escribir: End
Sub Command2_Click()
End
End Sub
Material de estudio Pgina: 51 de 249
Visual Basic 6.0 y SQLServer 7.0
La sintaxis para este ejemplo, es tomada desde ob2ect.propert$ 1 settin%. Se puede usar esta
sintaxis para Formas y controles en la ocurrencia de eventos, mientras la aplicacin est
corriendo.
ControI ComboBox
Un control ComboBox combina las caractersticas de un control TextBox y un control
ListBox; los usuarios pueden introducir informacin en la parte del cuadro de texto o
seleccionar un elemento en la parte de cuadro de lista del control.
Comentarios
Para agregar o eliminar elementos en un control ComboBox, use el mtodo AddItem o
RemoveItem. Establezca las propiedades List, ListCount y ListIndex para permitir a un
usuario tener acceso a los elementos de un control ComboBox. Como alternativa, puede
agregar elementos a la lista mediante la propiedad List en tiempo de diseo.
Nota Un evento Scroll ocurrir en un control ComboBox slo cuando se desplace el
contenido de la parte desplegable del ComboBox, no cada vez que cambie el contenido del
ComboBox. Por ejemplo, si la parte desplegable de un ComboBox contiene cinco elementos
y el elemento superior est resaltado, no ocurrir un evento Scroll hasta que presione seis
veces la flecha hacia abajo (o una vez la tecla AV PG). Despus de eso, ocurrir un evento
Scroll por cada pulsacin de la tecla de flecha hacia abajo. Sin embargo, si despus presiona
la tecla de flecha hacia arriba, no ocurrir un evento Scroll hasta que presione seis veces la
tecla de flecha hacia arriba (o una vez la tecla RE PG). Despus de eso, cada vez que
presione la tecla de flecha hacia arriba se producir un evento Scroll.
Eventos
Evento Change Evento LostFocus
Evento CIick Evento OLECompIeteDrag
Evento DbICIick Evento OLEDragDrop
Evento DragDrop Evento OLEDragOver
Evento DragOver Evento OLEGiveFeedback
Evento DropDown OLESetData Event
Evento GotFocus Evento OLEStartDrag
Eventos KeyDown y KeyUp Evento ScroII
Evento KeyPress
Mtodos
Mtodo AddItem Mtodo Refresh
Mtodo CIear (CIipboard, ComboBox,
ListBox)
Mtodo RemoveItem
Mtodo Drag Mtodo SetFocus
Mtodo Move Mtodo ShowWhatsThis
Mtodo OLEDrag Mtodo ZOrder
Propiedades
Propiedad Appearance Propiedad ListIndex
Propiedades BackCoIor y ForeCoIor Propiedad Locked
Propiedad Container Propiedad MouseIcon
Material de estudio Pgina: 52 de 249
Visual Basic 6.0 y SQLServer 7.0
Propiedad DataChanged Propiedad MousePointer
Propiedad DataFieId Propiedad Name
Propiedad DragIcon Propiedad NewIndex
Propiedad DragMode Propiedad OLEDragMode
Propiedad EnabIed Propiedad OLEDropMode
Propiedad Font Propiedad Parent
Propiedades FontBoId, FontItaIic,
FontStrikethru y FontUnderIine
Propiedades SeILength, SeIStart y SeIText
Propiedad FontName Propiedades SeILength, SeIStart y SeIText
(ControIes ActiveX)
Propiedad FontSize Propiedad Sorted
Propiedades Height y Width Propiedad StyIe
Propiedad HeIpContextID Propiedad TabIndex
Propiedad hWnd Propiedad TabStop
Propiedad Index (ControI Array) Propiedad Tag
Propiedad IntegraIHeight Propiedad Text
Propiedad ItemData Propiedad TooITipText
Propiedades Left y Top Propiedad TopIndex
Propiedad List Propiedad VisibIe
Propiedad ListCount Propiedad WhatsThisHeIpID
Material de estudio Pgina: 53 de 249
Visual Basic 6.0 y SQLServer 7.0
Cundo debe utiIizar un cuadro combinado(ComboBox) en Iugar de un
cuadro de Iista (ListBox)
Generalmente, el ComboBox es el apropiado cuando hay una lista de opciones su%eridas y
el cuadro de lista es el apropiado cuando desea limitar la entrada a las opciones de la lista.
Un ComboBox contiene un campo de edicin, de forma que en este campo se pueden
introducir opciones que no figuran en la lista.
Adems, los cuadros combinados ahorran espacio en los formularios. Como la lista completa
no se presenta hasta que el usuario hace clic en la flecha abajo (excepto en el Estilo 1, donde
siempre se presenta), un ComboBox puede ocupar un espacio reducido, en el que no cabra
un cuadro de lista.
Caractersticas de enIace a datos
Visual Basic incluye versiones estndar y enlazadas a datos del control ComboBox. Si bien
las dos versiones permiten presentar, modificar y actualizar la informacin en la mayora de
los tipos de bases de datos estndar, el ComboBox enlazado a datos proporciona
caractersticas ms avanzadas de acceso a datos. El control DBCombo acepta adems un
conjunto de propiedades y mtodos diferente al del control ComboBox estndar.
Para obtener ms informacin Para obtener ms informacin, vea "Uso del cuadro de lista
y el ComboBox enlazados a datos", en "Tener acceso a datos".
EstiIos de cuadros combinados
Hay tres estilos de cuadros combinados. Cada estilo puede establecerse en tiempo de diseo
o en tiempo de ejecucin y, para establecer el estilo del ComboBox, se utilizan valores o
constantes equivalentes de Visual Basic.
EstiIo VaIor Constante
ComboBox desplegable 0 vbComboDropDown
ComboBox simple 1 vbComboSimpIe
ComboBox desplegable 2 vbComboDropDownList
ComboBox despIegabIe
Con el valor predeterminado (StyIe = 0 ComboDropDown), un ComboBox es un
ComboBox desplegable. El usuario puede escribir texto directamente (como en un cuadro de
texto) o hacer clic en la flecha de la parte derecha del ComboBox para abrir una lista de
opciones. Si selecciona una de las opciones, se inserta en el cuadro de texto de la parte
superior del ComboBox. El usuario tambin puede abrir la lista mediante la combinacin de
teclas ALT+ FLECHA ABAJO, cuando el control tiene el enfoque.
ComboBox simpIe
Si establece la propiedad StyIe de un ComboBox a 1 ComboSimpIe, especifica un
ComboBox simple en el que la lista se presenta siempre. Para presentar todas las entradas
de la lista, debe dimensionar el cuadro de lista de forma que quepan. Cuando hay ms
entradas de las que se pueden presentar se agrega automticamente una barra de
desplazamiento. El usuario tambin puede escribir texto directamente o seleccionar una
Material de estudio Pgina: 54 de 249
Visual Basic 6.0 y SQLServer 7.0
opcin de la lista. Al igual que el ComboBox desplegable, el ComboBox simple permite que
los usuarios escriban opciones que no figuran en la lista.
ComboBox de Iista despIegabIe
Un cuadro de lista desplegable (StyIe = 2 ComboDropDownList) es como un cuadro de
lista normal: presenta una lista de elementos entre los que el usuario tiene que elegir. Sin
embargo, a diferencia de los cuadros de lista, la lista no se presenta hasta que se hace clic en
la flecha de la derecha del cuadro. La principal diferencia entre este estilo y el ComboBox
desplegable es que el usuario no puede escribir en el cuadro, slo puede seleccionar un
elemento de la lista. Utilice este tipo de cuadro de lista cuando no disponga de mucho
espacio.
Agregar eIementos
Para agregar elementos a un ComboBox, utilice el mtodo AddItem, que tiene la sintaxis
siguiente:
,b2eto.AddItem elemento[, Endice]
Argumento Descripcin
,b2eto Nombre del ComboBox la lista o del cuadro.
elemento Expresin de cadena que va a agregar a la lista. Si elemento es una constante
literal, tiene que ir entre comillas.
Endice Especifica dnde va a insertar el nuevo elemento dentro de la lista. Un Endice de 0
representa la primera posicin. Si se omite el argumento Endice, el elemento se
inserta al final (o en el orden establecido).
Aunque los elementos de la lista se suelen agregar en los procedimientos de evento
Form_Load, puede utilizar el mtodo AddItem en cualquier momento. Esto le ofrece la
posibilidad de agregar elementos a la lista de forma dinmica (como respuesta a acciones del
usuario).
El siguiente cdigo inserta "Chardonnay, "Fum Blanc, "Gewrztraminer y "Zinfandel" en un
ComboBox llamado Combo1 con la propiedad StyIe establecida a 0 (vbComboDropDown):
:ri/ate Sub &or#_>oad ()
Co#bo16,ddIte# 9C5ardonna49
Co#bo16,ddIte# 9&u#) <0an'9
Co#bo16,ddIte# 9GeLMr2tra#iner9
Co#bo16,ddIte# 9Nin7ande09
End Sub
Cuando se carga el formulario en tiempo de ejecucin y el usuario hace clic en la flecha hacia
abajo, aparece la lista, como se muestra en la figura 7.8.
Figura 7.8 EI ComboBox "Lista de vinos"
Agregar eIementos en tiempo de diseo
Tambin puede insertar elementos en la lista en tiempo de diseo si establece la propiedad
List en la ventana Propiedades del control ComboBox. Cuando selecciona la propiedad List
y despus hace clic en la flecha hacia abajo, puede escribir un elemento de la lista y despus
presionar la combinacin de teclas CTRL+ENTRAR para empezar otra lnea.
Material de estudio Pgina: 55 de 249
Visual Basic 6.0 y SQLServer 7.0
Slo puede agregar elementos al final de la lista. De esta forma, si desea ordenar la lista
alfabticamente, tiene que establecer la propiedad Sorted a True. Para obtener ms
informacin, consulte "Ordenacin de una lista", ms adelante en este mismo tema.
Agregar un eIemento en una posicin especificada
Para agregar un elemento a una lista en una posicin determinada, especifique un valor de
ndice detrs del nuevo elemento. Por ejemplo, la siguiente lnea de cdigo inserta "Pinot
Noir" en la primera posicin y desplaza los dems elementos hacia abajo:
Co#bo16,ddIte# 9:inot $oir9, O
Observe que el valor que especifica el primer elemento de una lista es 0 y no 1.
Ordenacin de una Iista
Puede establecer que los elementos se agreguen a la lista en orden alfabtico si establece la
propiedad Sorted a True y omite el ndice. El orden no distingue entre maysculas y
minsculas; por tanto, las palabras "chardonnay" y "Chardonnay" reciben el mismo
tratamiento.
Cuando la propiedad Sorted est establecida a True, el uso del mtodo AddItem con un
argumento Endice puede producir resultados impredecibles y desordenados.
Quitar eIementos
Para quitar elementos de un ComboBox puede utilizar el mtodo RemoveItem, que tiene un
argumento, Endice, que especifica el elemento que va a quitar:
,b2eto.RemoveItem Endice
Los argumentos ,b2eto e Endice son iguales que para AddItem.
Por ejemplo, para quitar la primera entrada de una lista utilizara la siguiente lnea de cdigo:
Co#bo16!e#o/eIte# O
Para quitar todas las entradas de un ComboBox, utilice el mtodo CIear:
Co#bo16C0ear
Obtencin deI contenido de Ia Iista con Ia propiedad Text
Normalmente, la manera ms sencilla de obtener el valor del elemento seleccionado
actualmente es utilizar la propiedad Text. Esta propiedad se corresponde con el contenido de
la parte de cuadro de texto del control en tiempo de ejecucin. Puede ser un elemento de la
lista o una cadena de texto escrita por el usuario en el cuadro de texto.
Por ejemplo, el cdigo siguiente presenta informacin acerca de Chardonnay si un usuario
selecciona "Chardonnay" en el cuadro de lista:
:ri/ate Sub Co#bo1_C0i'C ()
I7 Co#bo16Text 8 9C5ardonna49 T5en
Text16Text 8 9C5ardonna4 e" un /ino b0an'o _
0igera#ente e#bo'ado69
End I7
End Sub
Material de estudio Pgina: 56 de 249
Visual Basic 6.0 y SQLServer 7.0
La propiedad Text contiene el elemento seleccionado actualmente en el cuadro de lista
Combo1. El cdigo comprueba si se ha seleccionado "Chardonnay" y, si es as, presenta la
informacin en el cuadro de texto.
Acceso a Ios eIementos de Ia Iista con Ia propiedad List
La propiedad List proporciona acceso a todos los elementos de la lista. Esta propiedad
contiene una matriz en la que cada elemento de la lista es un elemento de la matriz. Cada
elemento est representado en forma de cadena de texto. Para hacer referencia a un
elemento de la lista, utilice esta sintaxis:
cuadro.List(Endice&
El argumento cuadro es una referencia a un ComboBox e Endice es la posicin del elemento.
El primer elemento tiene un ndice 0, el siguiente tiene un ndice 1 y as sucesivamente. Por
ejemplo, la instruccin siguiente presenta el tercer elemento (Endice = 2) de una lista en un
cuadro de texto:
Text16Text 8 Co#bo16>i"t(2)
Determinacin de Ia posicin con Ia propiedad ListIndex
Si desea saber la posicin del elemento seleccionado en la lista de un ComboBox, utilice la
propiedad ListIndex. Esta propiedad establece o devuelve el ndice del elemento
seleccionado actualmente en el control y slo est disponible en tiempo de ejecucin. Al
establecer la propiedad ListIndex en un control ComboBox, tambin se genera un evento
Click en dicho control.
El valor de esta propiedad es 0 si est seleccionado el primer elemento, 1 si es el siguiente y
as sucesivamente. ListIndex es 1 si no hay ningn elemento seleccionado o si el usuario
escribe una opcin en el ComboBox (StyIe 0 1) en vez de seleccionar un elemento de la
lista.
Nota La propiedad NewIndex permite conocer el ndice del ltimo elemento agregado a la
lista. Puede ser til cuando se inserta un nuevo elemento en una lista ordenada.
Obtencin deI nmero de eIementos con Ia propiedad ListCount
Para obtener el nmero de elementos de un ComboBox, utilice la propiedad ListCount. Por
ejemplo, la instruccin siguiente utiliza esta propiedad para determinar el nmero de entradas
de un ComboBox:
Text16Text 8 9-a4 9 P Co#bo16>i"tCount P 9 _
entrada" en 0a 0i"ta9
Material de estudio Pgina: 57 de 249
Visual Basic 6.0 y SQLServer 7.0
Propiedad: ItemData
Devuelve o establece un nmero especfico para cada elemento de un control ComboBox o
ListBox.
Sintaxis
,b2eto.ItemData(Ende*) [= n.mero]
La sintaxis de la propiedad ItemData consta de las siguientes partes:
Parte Descripcin
,b2eto Una expresin de objeto que da como resultado un objeto de la lista Aplicable a.
Fndice El nmero de un elemento concreto del objeto.
/.mero El nmero que se asocia con el elemento especificado.
Comentarios
La propiedad ItemData es una matriz de valores enteros largos cuyo nmero de elementos es
el valor de la propiedad List de un control. Puede utilizar los nmeros asociados con cada
elemento para identificar los elementos. Por ejemplo, puede usar un nmero de identificacin
de empleado para identificar cada nombre de empleado de un control ComboBox o ListBox.
Cuando llena el Objeto, tambin se llenan los elementos correspondientes de la matriz
ItemData con los nmeros de empleado.
La propiedad ItemData se usa a menudo como ndice de una matriz de estructuras de datos
asociadas con los elementos de un control.
Nota Cuando inserta un elemento en una lista con el mtodo AddItem, el elemento tambin
se inserta automticamente en la matriz ItemData. Sin embargo, el valor no se reinicia a cero;
conserva el valor que haba en esa posicin antes agregar el elemento a la lista. Cuando use
la propiedad ItemData, asegrese de establecer su valor al agregar nuevos elementos a la
lista.
El siguiente ejemplo adiciona elementos (empleados y nmero de identificacin)
:ri/ate Sub &or#_>oad ()
. >0ena e0 Co#bo1 4 0a #atri2 Ite#*ata 'on 0o"
. E0e#ento" 'orre"%ondiente" ordenado"6
Co#bo16,ddIte# 9Qo") Varga"9
Co#bo16Ite#*ata(Co#bo16$eLIndex) 8 1OOO
Co#bo16,ddIte# 9!o"a !e4e"9
Co#bo16Ite#*ata(Co#bo16$eLIndex) 8 2OOO
Co#bo16,ddIte# 9Mauro Sorrento9
Co#bo16Ite#*ata(Co#bo16$eLIndex) 8 3OOO
Co#bo16,ddIte# 9,0/aro *o#ingue29
Co#bo16Ite#*ata(Co#bo16$eLIndex) 8 4OOO
End Sub
:ri/ate Sub Co#bo1_C0i'C ()
. ,grega e0 n1#ero 4 e0 no#bre de0 e#%0eado6
*i# M"g ," String
M"g 8 9E0 e#%0eado9 P Co#bo16>i"t(Co#bo16>i"tIndex)
M"g 8 M"g P 9 tiene e0 n1#ero 9 P _
Co#bo16Ite#*ata(Co#bo16>i"tIndex)
M"g<ox M"g, /bIn7or#ation E /bBRBn04, 9,/i"o9
End Sub
Material de estudio Pgina: 58 de 249
Visual Basic 6.0 y SQLServer 7.0
1.1G Control de Errores
Un controlador de errores es una rutina para interceptar y responder a los errores de la
aplicacin. Querr agregar controladores de error a cualquier procedimiento en el que prevea
la posibilidad de un error (debera asumir que todas las instrucciones de Basic pueden
producir un error a menos que sepa explcitamente que no va a ser as). El proceso de diseo
de un controlador de errores implica tres pasos:
1. Establecer o acti#ar, la interceptacin de errores indicando a la aplicacin hacia dnde se
debe bifurcar (qu rutina de tratamiento de errores debe ejecutar) cuando se produce un
error.
La instruccin On Error activa la interceptacin y dirige la aplicacin a la etiqueta que
marca el principio de una rutina de tratamiento de errores.
2. Escribir una rutina de tratamiento de errores que responda a cualquier error que pueda
prever. Si el control se bifurca realmente en la interceptacin en algn punto, se dice que la
interceptacin est acti#a.
3. Salir de la rutina de tratamiento de errores.
En el caso del error "El disco no est listo", la instruccin Resume crea la bifurcacin del
cdigo en la instruccin en la que se produjo el error. Entonces, Visual Basic intenta volver
a ejecutar esa instruccin. Si la situacin no ha cambiado, se produce otro error y la
ejecucin vuelve a la rutina de tratamiento de errores.
EstabIecimiento de Ia interceptacin de errores
La interceptacin de errores est activada cuando Visual Basic ejecuta la instruccin On
Error, que especifica un controlador de errores. La interceptacin de errores permanece
activada mientras el procedimiento que lo contiene est activo; es decir, hasta que se ejecute
una instruccin Exit Sub, Exit Function, Exit Property, End Sub, End Function o End
Property para ese procedimiento. Aunque slo puede haber una interceptacin de errores
activada a la vez en cualquier procedimiento dado, puede crear varias interceptaciones de
error alternativas y activar distintas interceptaciones en momentos diferentes. Tambin puede
desactivar una interceptacin de errores usando un caso especial de la instruccin On Error
con On Error GoTo 0.
Para establecer una interceptacin de errores que salte a una rutina de tratamiento de
errores, use una instruccin On Error GoTo lEnea, donde lEnea es la etiqueta que identifica el
cdigo de tratamiento de errores. En la funcin de ejemplo FiIeExists, la etiqueta es
C5e'CError. (A pesar de que el signo de dos puntos forma parte de la etiqueta, no se utiliza
en la instruccin On Error GoTo lEnea).
Escritura de una rutina de tratamiento de errores
El primer paso para escribir una rutina de tratamiento de errores es agregar una etiqueta de
lnea para marcar el principio de una rutina de tratamiento de errores. La etiqueta de lnea
debe tener un nombre descriptivo y debe ir seguida por un signo de dos puntos. Una
convencin comn es colocar el cdigo de tratamiento de errores al final del procedimiento
con una instruccin Exit Sub, Exit Function o Exit Property inmediatamente delante de la
etiqueta de lnea. Esto permite que el procedimiento evite la ejecucin de cdigo de
tratamiento de errores si no se produce ningn error.
Material de estudio Pgina: 59 de 249
Visual Basic 6.0 y SQLServer 7.0
El cuerpo de la rutina de tratamiento de errores contiene el cdigo que realmente trata el
error, normalmente en forma de una instruccin Case o If.Then.EIse. Necesita determinar
qu errores es probable que se produzcan y proporcionar una accin para cada uno; por
ejemplo, pedir al usuario que inserte un disco en caso de que se produzca un error "El disco
no est listo". Se debe proporcionar siempre una opcin para tratar cualquier error
inesperado, mediante la clusula EIse o Case EIse.
La propiedad Number del objeto Err contiene un cdigo numrico que representa el error de
tiempo de ejecucin ms reciente. Si usa el objeto Err junto con la instruccin SeIect Case o
If...Then...EIse, puede llevar a cabo una accin especfica para cualquier error que se
produzca.
Nota La cadena contenida en la propiedad Description del objeto Err explica el error
asociado al nmero de error actual. El texto exacto de la descripcin puede variar de una
versin de Microsoft Visual Basic a otra. Por tanto, use Err6$u#ber en vez de
Err6*e"'ri%tion para identificar el error especfico que se ha producido.
SaIida de una rutina de tratamiento de errores
Hay varias formas de salir de una rutina de tratamiento de errores. Dependiendo de las
circunstancias, puede hacerlo mediante una de las instrucciones que se muestran en la
siguiente tabla.
Instruccin Descripcin
Resume [0] La ejecucin del programa se reanuda con la instruccin que caus el error o la
ltima llamada que haya realizado el procedimiento que contenga la rutina de
tratamiento de errores. sela para repetir una operacin despus de corregir la
condicin que caus el error.
Resume Next Reanuda Ia ejecucin deI programa en Ia instruccin que sigue
inmediatamente a Ia que caus eI error. Si eI error se produjo fuera deI procedimiento que
contiene eI controIador de errores, Ia ejecucin se reanuda en Ia instruccin que sigue
inmediatamente a Ia IIamada aI procedimiento donde se produjo eI error, si eI
procedimiento IIamado no tiene activado un controIador de errores.
Resume Inea Reanuda Ia ejecucin deI programa en Ia etiqueta especificada por Inea,
donde Inea es una etiqueta de Inea (o un nmero de Inea diferente de cero) que debe
estar en eI mismo procedimiento que eI controIador de errores.
Err.Raise Number: = n.mero Desencadena un error en tiempo de ejecucin. Cuando se ejecuta
esta instruccin dentro de la rutina de tratamiento de errores, Visual Basic busca
en la lista de llamadas otra rutina de tratamiento de errores. (La lista de llamadas
es la cadena de procedimientos que se han invocado para llegar al punto actual
de ejecucin. Consulte la seccin "La jerarqua del tratamiento de errores", ms
adelante en este mismo tema.)
Material de estudio Pgina: 60 de 249
Visual Basic 6.0 y SQLServer 7.0
La diferencia entre Ias instrucciones Resume y Resume Next
En la siguiente figura se muestra la diferencia entre las instrucciones Resume y Resume
Next.
Por lo general, Resume se usa siempre que el controlador de errores pueda corregir el error y
Resume Next cuando el controlador de errores no pueda hacerlo. Puede escribir un
controlador de errores de manera que la existencia de un error en tiempo de ejecucin no se
revele nunca al usuario o para presentar mensajes de error y permitir al usuario que realice
correcciones.
Por ejemplo, el procedimiento Function en el siguiente cdigo de ejemplo usa el tratamiento
de errores para llevar a cabo una divisin "segura" de sus argumentos sin revelar los errores
que se puedan producir. Los errores que se pueden producir al efectuar una divisin son:
Error Causa
"Divisin por cero" El numerador es distinto de cero, pero el
denominador es cero.
"Desbordamiento" El numerador y el denominador son cero
(durante una divisin de punto flotante).
"Llamada no vlida a un procedimiento" El numerador o el denominador no es un valor
numrico (o no se puede considerar como un
valor numrico).
Material de estudio Pgina: 61 de 249
Visual Basic 6.0 y SQLServer 7.0
En los tres casos, el siguiente procedimiento Function intercepta estos errores y devuelve
NuII:
&un'tion *i/ide (nu#er, deno#) a" Variant
*i# M"g a" String
Con"t #nErr*i/<4Nero 8 11, #nErrB/er&0oL 8 A,
Con"t #nErr<adCa00 8 D
Bn Error GoTo Mat5-and0er
*i/ide 8 nu#er J deno#
Exit &un'tion
Mat5-and0er
I7 Err6$u#ber 8 MnErr*i/<4Nero Br _
Err6$u#ber 8 ErrB/er&0oL _
Br Err 8 Err<adCa00 T5en
*i/ide 8 $u00 . Si e0 error era *i/i"in %or
'ero,
. *e"borda#iento o
>0a#ada no /30ida
. a un %ro'edi#iento,
de/ue0/e $u006
E0"e
. :re"enta #en"aje de error no %re/i"to6
M"g 9Error ine"%erado 9 P Err6$u#ber
M"g 8 M"g P 9 9 P Err6*e"'ri%tion
M"g<ox M"g, /bEx'0a#ation
End I7 . En todo" 0o" 'a"o", !e"u#e $ext
'ontin1a
!e"u#e $ext . 0a eje'u'in en 0a in"tru''in Exit
. &un'tion6
End &un'tion
Reanudar Ia ejecucin en una Inea especificada
Resume Next tambin se puede utilizar cuando se produce un error dentro de un bucle y
necesita reiniciar la operacin. O bien, puede utilizar Resume lEnea, que devuelve el control a
una etiqueta de lnea especificada.
El siguiente ejemplo ilustra el uso de la instruccin Resume lEnea. Esta funcin, permite al
usuario escribir una especificacin de archivo que la funcin devuelve si existe el archivo.
&un'tion Veri74&i0e ," String
Con"t #nErr<ad&i0e$a#e 8 D2, _
#nErr*ri/e*oorB%en 8 F1
Con"t #nErr*e/i'eHna/ai0ab0e 8 AG, _
#nErrIn/a0id&i0e$a#e 8 A4
*i# "tr:ro#%t ," String, "trM"g ," String, _
"tr&i0eS%e' ," String
"tr:ro#%t 8 9E"%e'i7i'a'in de ar'5i/o =ue de"ea 'o#%robar9
Start-ere
"tr&i0eS%e' 8 9@6@9 . E#%ie2a 'on una e"%e'i7i'a'in
. %redeter#inada6
"trM"g 8 "trM"g P /bC!>& P "tr:ro#%t
. *ejar a0 u"uario #odi7i'ar e0 /a0or %redeter#inado
"tr&i0eS%e' 8 In%ut<ox("trM"g, 9<u"'ar ar'5i/o9, _
"tr&i0eS%e', 1OO, 1OO)
Material de estudio Pgina: 62 de 249
Visual Basic 6.0 y SQLServer 7.0
. Sa0e "i e0 u"uario e0i#ina e0 /a0or %redeter#inado
I7 "tr&i0eS%e' 8 99 T5en Exit &un'tion
Bn Error GoTo -and0er
Veri74&i0e 8 *ir("tr&i0eS%e')
Exit &un'tion
-and0er
Se0e't Ca"e Err6$u#ber . ,na0i2a e0 'digo de error 4 'arga
. e0 #en"aje6
Ca"e ErrIn/a0id&i0e$a#e, Err<ad&i0e$a#e
"trM"g 8 9Su e"%e'i7i'a'in de ar'5i/o no e" 9
"trM"g 8 "trM"g P 9/30idaI %ruebe 'on otra69
Ca"e MnErr*ri/e*oorB%en
"trM"g 8 9Cierre 0a %uerta de 0a unidad de _9
"trM"g 8 "trM"g P 9di"'o e int)nte0o de nue/o69
Ca"e MnErr*e/i'eHna/ai0ab0e
"trM"g 8 9$o "e en'uentra 0a unidad e"%e'i7i'ada69
StrM"g 8 "trM"g P 9 Int)nte0o de nue/o69
Ca"e E0"e
*i# intErr$u# ," Integer
intErr$u# 8 Err6$u#ber
Err6C0ear . <orra e0 objeto Err6
Err6!ai"e $u#ber8 intErr$u# . Vue0/e a generar e0
error6
End Se0e't
!e"u#e Start-ere . Vue0/e a 0a eti=ueta Start-ere %ara
. =ue e0 u"uario %ruebe 'on
. otro no#bre
. de ar'5i/o6
End &un'tion
Si se encuentra una especificacin de archivo coincidente, la funcin devuelve el nombre del
archivo. Si no se encuentra ningn archivo coincidente, la funcin devuelve una cadena de
longitud cero. Si se produce uno de los errores previstos, se asigna un mensaje a la variable
"trM"g y la ejecucin vuelve a la etiqueta Start-ere. Esto ofrece al usuario otra
oportunidad de escribir una ruta de acceso y una especificacin de archivo vlida.
Si el error no estaba previsto, el segmento Case EIse vuelve a generar el error para que el
siguiente controlador de errores de la lista de llamadas pueda interceptar el error. Esto es
necesario porque, si no se volviera a generar el error, el cdigo continuara la ejecucin a
partir de la lnea !e"u#e Start-ere. Al volver a generar el error, est haciendo que se
vuelva a producir el error y el nuevo error se interceptar en el siguiente nivel de la pila de
llamadas.
Nota A pesar de que el uso de Resume lEnea es una forma legtima de escribir cdigo, una
proliferacin de saltos a etiquetas de lnea puede hacer que el cdigo sea difcil de entender y
depurar.
Material de estudio Pgina: 63 de 249
Visual Basic 6.0 y SQLServer 7.0
1.11 Modelo de ,b2etos de 7istemas de BrcHi#os (F7,&
Visual Basic permite procesar archivos, folders y unidades(drives) de dos maneras, una por
metodos de objetos independientes y la otra a travs del Modelo de Objetos de Sistemas de
Archivos.
El modelo FSO usa la convencin de Objetos: mtodo, propiedad y eventos para procesar drives,
folders y archivos, permitiendo crear, alterar, mover, borrar, buscar y obtener informacin de
objetos relacionados a ste.
El modelo FSO hace fcil estas tareas. Cuando procesa archivos su principal objetivo es
almacenar datos eficientemente para poder accesarlos de la misma manera, con el fin de no
sobrecargar con procesos a las bases de datos que ocupe, ya que el proceso de guardar datos
grandes (BLOB) en la base de datos requiere de mayor tiempo de dedicacin del RDBMS
(Manejador de Base de Datos Relacional).
NOTA: Para utilizar el objeto FSO debe activar la referencia a "Microsoft Scripting Runtime que
hace refernecia al archivo Scrrun.Dll
El modelo FSO cuenta con los siguientes objetos:
Object Description
FileSystemObject
Es el objeto principal del grupo, le permite accesar todos los eventos,
metodos y
Drive
Permite obtener informacin acerca del drive especificado como: espacio
disponible, nombre lgico con que se comparte, nombre de la unidad.
Nota: Tambin puyede hacer referencia a una unidad de CD-ROM, disco en
RAM, etc. EL drive no requiere que sea una unidad conectada al
equipo, tambin puede ser una unidad lgica accesada por la RED.
Folder
Permite crear, borrar o mover folders, as como consultar nombres, paths,
etc.
Files
Permite crear, borrar o mover archivos, as como consultar nombres, paths,
etc.
TextStream Permite leer y escribir archivos de texto.
Al trabajar con el mdelo FSO se involucran tres tareas:
El uso del mtodo de CreateObject o declarar la variable como FileSystemObject
El uso de los mtodos apropiados del objeto creado
El uso de las propiedades del objeto creado
Dichas tareas se explicarn a continuacin.
Material de estudio Pgina: 64 de 249
Visual Basic 6.0 y SQLServer 7.0
Crear un objeto FiIeSystemObject
El primer paso es crear un objeto FileSystemObject para poder trabajar con l. Se puede realizar
sto de dos formas:
Declara una valriable del tipo de objeto FileSystemObject:
*i# 7"o ," $eL &i0eS4"te#Bbje't
Usar el mtodo CreateObject:
Set 7"o 8 CreateBbje't(9S'ri%ting6&i0eS4"te#Bbje't9)
Note que la esencia es crear un objeto dwl tipo &i0eS4"te#Bbje't.
Nota El primer mtodo trabaja bajo VB, mientras que el segundo trabaja en VB y VBScript.
Usar eI mtodo apropiado
El siguiente paso es usar el mtodo apropiado del objeto FileSystemObject. Por ejemplo, si desea
crear un nuevo objeto, puede usar los mtodos CreateFolder o CreateTextFile. (El modelo FSO
no soporta la creacin o borrado de unidades "drives).
Si desea borrar un objeto, puede usar los mtodos DeleteFile y DeleteFolder del objeto
FileSystemObject, o el mtodo de Delete de los objetos File y Folder. Puede copiar y mover
archivos y folders.
Accesando existentes Drives, FiIes, y FoIders
Para accesar un existente drive, file, or folder, use el apropriado mtodo "get" del objeto
FileSystemObject:
GetDrive
GetFolder
GetFile
Por ejemplo:
*i# 7"o ," $eL &i0eS4"te#Bbje't, 7i0 ," &i0e
Set 7i0 8 7"o6Get&i0e(9'Ste"t6txt9)
Material de estudio Pgina: 65 de 249
Visual Basic 6.0 y SQLServer 7.0
Observe que no es necesario usar el mtodo "get para obtener informacin cuando ya ha creado
un objeto, una vez creado el objeto podr manejar los mtodos asociados a ste. Por ejemplo, si
usted crea un nuevo objeto folder usando el mtodo CreateFolder, no necesitar usar el mtodo
GetFolder para usar sus propiedades como son: Name, Path, Size, etc. Slo necesita establecer
la variable al objeto CreateFolder y este nuevo objeto accesar las propiedades, mtodos y
eventos asociados, como lo muestra el siguiente ejemplo:
:ri/ate Sub Create_&o0der()
*i# 7"o ," $eL &i0eS4"te#Bbje't, 70dr ," &o0der
Set 70dr 8 7"o6Create&o0der(9CSM4Te"t9)
M"g<ox 9no#bre de0 7o0der 'reado9 P 70dr6$a#e
End Sub
Accesando Ias propiedades de Objeto
Una vez que tiene el manejador del objeto, podr accesar sus propiedades. Por ejemplo, decirle
que quiere obtener el nombre de un folder particular. Primero cree una instancia del objeto,
entonces podr manejar los mtodos apropiados de ste ( en este caso el mtodo GetFolder, si
es que ya existe este folder):
Set 70dr 8 7"o6Get&o0der(9'S9)
Ahora usted podr manejar el objeto folder como checar la propiedad Name:
*ebug6:rint 9&o0der na#e i" 9I 70dr6$a#e
Si desea saber cual fue la ltima vez que el archivo fue modificado, use el siguiente mtodo:
*i# 7"o ," $eL &i0eS4"te#Bbje't, 7i0 ," &i0e
Set 7i0 8 7"o6Get&i0e(9'Sdet0og6txt9) . Get a &i0e obje't to =uer46
*ebug6:rint 9E0 &i0e 7ue #odi7i'ado 9I 7i06*ate>a"tModi7ied .
Trabajando con Drives y FoIders
Con el modelo FSO usted puede trabajar con drivers y folders al igual que lo hace con Windows,
podr copiar, mover y obtener informacin acerca de los drivers y folders.
Obtenindo informacin acerca de Drives
El objeto Drive, le permitir obtener informacin de los drives que se encuentran en el sistema
(PC) tanto fsicos como mapeados. Estas propiedades le permitirn obtener informacin sobre:
El tamao total del drive en bytes (TotalSize).
El espacio disponible existente en el drive en bytes (AvailableSpace or FreeSpace).
Que letra est asignada al drive (DriveLetter property).
El tipo de drive: removible, fijo, mapeado, CD-ROM, o RAM disk (DriveType).
El nmero serial del drive (SerialNumber).
El tipo de file system del drive, como FAT, FAT32, NTFS, etctera (FileSystem).
Que drive esta disponible para usar (sReady).
El nombre compartido y/o etiqueta del drive (ShareName and VolumeName).
El path o RootFolder del drive (Path and RootFolder).
Material de estudio Pgina: 66 de 249
Visual Basic 6.0 y SQLServer 7.0
El ejemplo siguiente muestra como usar el objeto Drive, para obtener informacin acerca de ste.
Recuerde que no necesita hacer una referencia al objeto Drive, en lugar de eso use el mtodo
GetDriver para obtener informacin acerca del objeto Drive.
:ri/ate Sub Co##and3_C0i'C()
*i# 7"o ," $eL &i0eS4"te#Bbje't, dr/ ," *ri/e, " ," String
Set dr/ 8 7"o6Get*ri/e(7"o6Get*ri/e$a#e(9'9))
" 8 9*ri/e 9 P HCa"e(9'9) P 9 K 9
" 8 " P dr/6Vo0u#e$a#e P /bCr>7
" 8 " P 9E"%a'io Tota0 9 P &or#at$u#ber(dr/6Tota0Si2e J 1O24, O)
" 8 " P 9 Rb9 P /bCr>7
" 8 " P 9E"%a'io >ibre 9 P &or#at$u#ber(dr/6&reeS%a'e J 1O24, O)
" 8 " P 9 Rb9 P /bCr>7
M"g<ox "
End Sub
Usando CurDir, ChDrive, ChDir o App.Path
Si usa la funcin Cur Dir, las instrucciones ChDrive y ChDir o la propiedad de Path (App.Path),
ponga atencin, ya que ste puede retornar un path UNC (como \\Server\Nombre_compartido.)
en vez del path del drive (como E:\Folder), sto dependera de cmo ejecute su programa o
proyecto.
App.Path retorna un UNC path de acuerdo a:
Cuando se ejecuta un proyecto despus de cargarlo de un recurso compartido, siempre
que el recurso est mapeado a nuestra PC con una letra.
Cuando se corre un archivo ejecutable desde un recurso compartido, siempre que ste
sea ejecutado usando UNC path.
ChDrive no puede manejar un UNC path, ste provocar un error cuando el App.Path retorna
uno. Podr manejar este error adicionando la instruccin On Error Resume Next despus de la
instruccin ChDrive o probando los primeros dos caracteres de App.Path para verificar si son
diagonales invertidas (\\):
Bn Error !e"u#e $ext
C5*ri/e ,%%6:at5
C5*ir ,%%6:at5
Material de estudio Pgina: 67 de 249
Visual Basic 6.0 y SQLServer 7.0
Trabajando con FoIders
La siguiente tabla muestra las tareas y mtodos del objeto Folder:
Tarea Mtodo
Crear un folder FileSystemObject.CreateFolder
Borrar un folder Folder.Delete o FileSystemObject.DeleteFolder
Mover un folder Folder.Move o FileSystemObject.MoveFolder
Copiar un folder Folder.Copy o FileSystemObject.CopyFolder
Obtener el nombre de un folder Folder.Name
Verificar si existe un folder FileSystemObject.FolderExists
Establecer una instancia de un folder
existente
FileSystemObject.GetFolder
Obtener el nombre del padre del folder FileSystemObject.GetParentFolderName
Obtener el path del folder FileSystemObject.GetSpecialFolder
EjempIo
El siguiente ejemplo ilustra el uso de los objetos Folder y FileSystemObject:
:ri/ate Sub Co##and1O_C0i'C()
. E"tab0e'er una in"tan'ia de0 &i0eS4"te#Bbje't6
*i# 7"o ," $eL &i0eS4"te#Bbje't, 70dr ," &o0der, " ," String
. E"tab0e'er e0 objeto *ri/e6
Set 70dr 8 7"o6Get&o0der(9'9)
. *e"%0egar e0 no#bre de0 7o0der %adre6
*ebug6:rint 9 no#bre de0 7o0der %adre 9 P 70dr
. *e"%0egar e0 no#bre de0 dri/e6
*ebug6:rint 9Contenido de0 dri/e 9 P 70dr6*ri/e
. *e"%0egar 0a ruta6
I7 70dr6I"!oot&o0der 8 True T5en
*ebug6:rint 9E"te 7o0der e" 0a ra+269
E0"e
*ebug6:rint 9 E"te 7o0der no e" 0a ra+269
End I7
. Crear un 7o0der 'on e0 objeto &i0eS4"te#Bbje't6
7"o6Create&o0der (9'S$ue/o9)
*ebug6:rint 9Se 'reo e0 7o0der CS$ue/o9
. *e"%0egar e0 no#bre ba"e de0 7o0der6
*ebug6:rint 9$o#bre ba"e8 9 P 7"o6Get<a"e$a#e(9'S$ue/o9)
. <orrar e0 7o0der 'reado6
7"o6*e0ete&o0der (9'S$ue/o9)
*ebug6:rint 9&o0der borrado CS$ue/o9
End Sub
Material de estudio Pgina: 68 de 249
Visual Basic 6.0 y SQLServer 7.0
Trabajando con Archivos
Con el objeto FSO puedes copiar, borrar y abrir archivos. Existen dos categorias para el manejo
de estas opciones:
Crear, adicionar, remover datos y lectura.
Mover, copiar y borrar.
Crear, adicionar, remover datos y Iectura
Existen tres maneras para crear archivos de texto secuenciales, algunas veces nos referimos a
stos como "text stream. Una de estas es usar el mtodo CreateTextFile:
*i# 7"o ," $eL &i0eS4"te#Bbje't, 7i0 ," &i0e
Set 7i0 8 7"o6CreateText&i0e(9'S%rueba6txt9, True)
Nota. El modelo de objetos FSO no soporta la creacin de archivos Random o Binarios, para
crear estos tipos de archivos use el comando Open con la bandera establecida como Random o
Binary.
Otra forma para utilizar el mtodo OpenTextFile del objeto FileSystemObject con la bandera
establecida como ForWriting (para escritura):
*i# 7"o ," $eL &i0eS4"te#Bbje't, t" ," $eL TextStrea#
Set t" 8 7"o6B%enText&i0e(9'Ste"t6txt9, &orTriting)
Or you can use the OpenAsTextStream method with the ForWriting flag set:
*i# 7"o ," $eL &i0eS4"te#Bbje't, 7i0 ," &i0e, t" ," TextStrea#
Set 7"o 8 CreateBbje't(9S'ri%ting6&i0eS4"te#Bbje't9)
7"o6CreateText&i0e (9te"t16txt9)
Set 7i0 8 7"o6Get&i0e(9te"t16txt9)
Set t" 8 7i06B%en,"TextStrea#(&orTriting)
Adicionando datos al Archivo
Una vez que el archivo de texto ha sido creado, usted podr adicionar datos de acuerdo con lo
siguiente:
1. Abrir el archivo de texto para escritura de datos.
2. Escribir los datos.
3. Cerrar el archivo.
Para abrir el archivo, puede usar los siguientes mtodos: el mtodo OpenAsTextStream del objeto
File o el mtodo OpenTextFile del objeto FileSystemObject.
Para escribir datos en el archivo abierto de datos, use los mtodos Write o WriteLine del
objetoTextStream. La diferencia entre stos es que WriteLine adiciona un salto de lnea al final de
la cadena.
Material de estudio Pgina: 69 de 249
Visual Basic 6.0 y SQLServer 7.0
Si desea adicionar una lnea en blanco en el archivo de texto use el mtodo WriteBlankLines.
Para cerrrar un archivo abierto, use el mtodo Close del objeto TextStream.
El siguiente ejemplo ilustra lo anterior.
Sub Create_&i0e()
*i# 7"o, txt7i0e
Set 7"o 8 CreateBbje't(9S'ri%ting6&i0eS4"te#Bbje't9)
Set txt7i0e 8 7"o6CreateText&i0e(9'S%rueba6txt9, True)
txt7i0e6Trite (9T5i" i" a te"t6 9) . Trite a 0ine6
. Trite a 0ine Lit5 a neL0ine '5ara'ter6
txt7i0e6Trite>ine(9Te"ting 1, 2, 369)
. Trite t5ree neL0ine '5ara'ter" to t5e 7i0e6
txt7i0e6Trite<0anC>ine"(3)
txt7i0e6C0o"e
End Sub
Lectura de Archivos con FSO
Para leer datos de un archivo de texto, use los siguientes mtodos del objeto TextStream:
Tarea Mtodo
Leer un nmero especificado de caracteres de un archivo Read
Leer una lnea entera (no incluye el carcter nueva lnea). ReadLine
Leer el contenido total de un archivo de texto ReadAll
Si desea saltar n caracteres o lneas, puede utilizar los mtodos Skip o SkipLine.
El texto resultante de una lectura es almacenado en un string.
Nota La constante vbNewLine avanza el cursor hasta el comienzo de la siguiente lnea.
EjempIo
Sub !ead_&i0e"()
*i# 7"o ," $eL &i0eS4"te#Bbje't, txt7i0e, _
7i01 ," &i0e, t" ," TextStrea#
Set txt7i0e 8 7"o6CreateText&i0e(9'S%rueba6txt9, True)
M"g<ox 9E"'ribiendo en e0 ar'5i/o9
. E"'ribiendo una 0+nea6
Set 7i01 8 7"o6Get&i0e(9'S%rueba6txt9)
Set t" 8 7i016B%en,"TextStrea#(&orTriting)
t"6Trite 9Cur"o de Vi"ua0 <a"i'9
t"6C0o"e
. >e4endo 'ontenido6
Set t" 8 7i016B%en,"TextStrea#(&or!eading)
" 8 t"6!ead>ine
M"g<ox "
t"6C0o"e
End Sub
Material de estudio Pgina: 70 de 249
Visual Basic 6.0 y SQLServer 7.0
Moviendo, Copiando y Borrando Archivos
Tarea Mtodo
Mover un archivo File.Move o FileSystemObject.MoveFile
Copiar un archivo File.Copy o FileSystemObject.CopyFile
Borrar una archivo File.Delete o FileSystemObject.DeleteFile
EjempIo
Este ejemplo crea un archivo de texto en la raz del drive c. Escribe en ste, lo mueve al directorio
\tmp, hace una copia de ste llamado \temp y borra los archivos copiados en ambos directorios.
Para ejecutar este ejemplo asegrese que tiene los directorios \tmp y \temp en la raz del drive C.
Sub Mani%_&i0e"()
*i# 7"o a" $eL &i0eS4"te#Bbje't, txt7i0e, 7i01, 7i02
Set txt7i0e 8 7"o6CreateText&i0e(9'S%rueba6txt9, True)
M"g<ox 9E"'ribiendo en ar'5i/o9
. E"'ribiendo una 0+nea6
txt7i0e6Trite (9Cur"o de Vi"ua0 <a"i'69)
. Cerrando e0 ar'5i/o6
txt7i0e6C0o"e
M"g<ox 9Mo/iendo e0 ar'5i/o a 'St#%9
. Bbteniendo una in"tan'ia de0 ar'5i/o6
Set 7i01 8 7"o6Get&i0e(9'S%rueba6txt9)
. Mo/iendo e0 ar'5i/o a St#% dire'tor46
7i016Mo/e (9'St#%S%rueba6txt9)
M"g<ox 9Co%iando ar'5i/o a 'Ste#%9
. Co%iando ar'5i/o a Ste#%6
7i016Co%4 (9'Ste#%S%rueba6txt9)
M"g<ox 9<orrando ar'5i/o"9
. Bbteniendo una in"tan'ia de 0o" ar'5i/o" 'reado"6
Set 7i01 8 7"o6Get&i0e(9'St#%S%rueba6txt9)
Set 7i02 8 7"o6Get&i0e(9'Ste#%S%rueba6txt9)
. <orrando ar'5i/o"6
7i016*e0ete
7i026*e0ete
M"g<ox 9&in de %ro'e"o9
End Sub
Material de estudio Pgina: 71 de 249
Visual Basic 6.0 y SQLServer 7.0
1.12 ,b2etos del sistema de arcHi#os: 'ri#e, Folder $ Files
Tipos de acceso a archivos
Por s mismo, un arcHi#o no es ms que una serie de bytes relacionados ubicados en un
disco. Cuando su aplicacin tiene acceso a un archivo, debe asumir qu se supone que
representan los bytes (caracteres, registros de datos, enteros, cadenas, etc.)
Dependiendo del tipo de datos que contiene el archivo, se usa el tipo de acceso apropiado.
En Visual Basic hay tres tipos de acceso a archivos:
Secuencial: para leer y escribir archivos de texto en bloques continuos.
Aleatorio: para leer y escribir archivos binarios de texto o estructurados como registros de
longitud fija.
Binario: para leer y escribir archivos estructurados de forma arbitraria.
El acceso secuencial est diseado para usarlo con archivos de texto normales. Se supone
que cada carcter del archivo representa un carcter de texto o una secuencia de formato de
texto, como un carcter de nueva lnea (NL). Los datos se almacenan como caracteres ANS.
Se supone que un archivo abierto para acceso aleatorio se compone de un conjunto de
re%istros de longitud idntica. Puede usar tipos definidos por el usuario para crear registros
compuestos de varios campos, en los que cada uno puede tener tipos de datos diferentes.
Los datos se almacenan como informacin binaria.
El acceso binario le permite usar archivos para almacenar datos de la manera que desee. Es
similar al acceso aleatorio, excepto porque no se hacen suposiciones sobre los tipos de datos
o la longitud del registro. No obstante, debe saber de manera precisa cmo se escribieron los
datos en el archivo para poder recuperarlo correctamente.
Para obtener ms informacin Para obtener ms informacin acerca de los tipos de
acceso a datos, consulte "Uso del acceso secuencial a archivos", "Uso del acceso aleatorio a
archivos" y "Uso del acceso binario a archivos". Para obtener informacin acerca de
cuestiones de Unicode y ANS, consulte "ANS, DBCS y Unicode: Definiciones" y
"Procesamiento de archivos con caracteres de doble byte" en "Aspectos internacionales".
Instrucciones y funciones de acceso a datos
Las siguientes funciones se usan con los tres tipos de acceso a datos:
Dir FiIeLen LOF
EOF FreeFiIe Seek
FiIeCopy GetAttr SetAttr
FiIeDateTime Loc
Material de estudio Pgina: 72 de 249
Visual Basic 6.0 y SQLServer 7.0
La siguiente tabla muestra todas las instrucciones de acceso a archivos y las funciones
disponibles para cada uno de los tipos de acceso directo a archivos.
Instrucciones y funciones
SecuenciaI AIeatorio Binario
CIose X X X
Get X X
Input( ) X X
Input # X
Line Input # X
Open X X X
Print # X
Put X X
Write # X
Un control DirListBox muestra directorios y rutas de acceso en tiempo de ejecucin. Utilice
este control para mostrar una lista jerrquica de directorios. Puede crear cuadros de dilogo
que, por ejemplo, permitan a un usuario abrir un archivo desde una lista de archivos de todos
los directorios disponibles.
Sintaxis
DirListBox
Comentarios
Establezca las propiedades List, ListCount y ListIndex para permitir al usuario tener acceso
a los elementos de una lista. Si tambin muestra los controles DriveListBox y FiIeListBox,
puede escribir cdigo para sincronizarlos con el control DirListBox y entre s.
Eventos
Evento Change Evento MouseMove
Evento CIick Evento OLECompIeteDrag
Evento DragDrop Evento OLEDragDrop
Evento DragOver Evento OLEDragOver
Evento GotFocus Evento OLEGiveFeedback
Eventos KeyDown y KeyUp Evento OLESetData
Evento KeyPress Evento OLEStartDrag
Evento LostFocus Evento ScroII
Eventos MouseDown y MouseUp
Mtodos
Mtodo Drag Mtodo SetFocus
Mtodo Move Mtodo ShowWhatsThis
Mtodo OLEDrag Mtodo ZOrder
Mtodo Refresh
Material de estudio Pgina: 73 de 249
Visual Basic 6.0 y SQLServer 7.0
Propiedades
Propiedad Appearance Propiedad ListCount
BackCoIor y ForeCoIor Propiedad ListIndex
Propiedad Container Propiedad MouseIcon
Propiedad DragIcon Propiedad MousePointer
Propiedad DragMode Propiedad Name
Propiedad EnabIed Propiedad OLEDragMode
Propiedad Font Propiedad OLEDropMode
Propiedad FontBoId, FontItaIic,
FontStrikethru y FontUnderIine
Propiedad Parent
Propiedad FontName Propiedad Path
Propiedad FontSize Propiedad TabIndex
Propiedad Height y Width Propiedad TabStop
Propiedad HeIpContextID Propiedad Tag
Propiedad hWnd Propiedad TooITipText
Propiedad Index (ControI Array) Propiedad TopIndex
Propiedad Left y Top Propiedad VisibIe
Propiedad List Propiedad WhatsThisHeIpID
Un control DriveListBox permite al usuario seleccionar una unidad de disco vlida en tiempo
de ejecucin. Utilice este control para mostrar una lista de todas las unidades vlidas del
sistema de un usuario. Puede crear cuadros de dilogo que permitan al usuario abrir un
archivo de una lista de un disco en cualquier unidad disponible.
Sintaxis
DriveListBox
Comentarios
Establezca las propiedades List, ListCount y ListIndex para permitir al usuario tener acceso
a los elementos de la lista. Si adems muestra los controles DirListBox y FiIeListBox, podr
escribir cdigo para sincronizarlos con el control DriveListBox y entre s.
Eventos
Evento Change Evento OLECompIeteDrag
Evento DragDrop Evento OLEDragDrop
Evento DragOver Evento OLEDragOver
Evento GotFocus Evento OLEGiveFeedback
Evento KeyDown y KeyUp Evento OLESetData
Evento KeyPress Evento OLEStartDrag
Evento LostFocus Evento ScroII
Mtodos
Mtodos Drag Mtodos SetFocus
Mtodos Move Mtodos ShowWhatsThis
Mtodos OLEDrag Mtodos ZOrder
Mtodos Refresh
Material de estudio Pgina: 74 de 249
Visual Basic 6.0 y SQLServer 7.0
Propiedades
Propiedad Appearance Propiedad List
Propiedades BackCoIor y ForeCoIor Propiedad ListCount
Propiedad Container Propiedad ListIndex
Propiedad DragIcon Propiedad MouseIcon
Propiedad DragMode Propiedad MousePointer
Propiedad Drive Propiedad Name
Propiedad EnabIed Propiedad OLEDropMode
Propiedad Font Propiedad Parent
Propiedades FontBoId, FontItaIic,
FontStrikethru y FontUnderIine
Propiedad TabIndex
Propiedad FontName Propiedad TabStop
Propiedad FontSize Propiedad Tag
Propiedades Height y Width Propiedad TooITipText
Propiedad HeIpContextID Propiedad TopIndex
Propiedad hWnd Propiedad VisibIe
Propiedad Index (ControI Array) Propiedad WhatsThisHeIpID
Propiedades Left y Top
El control FiIeListBox encuentra y muestra los archivos del directorio especificado por la
propiedad Path en tiempo de ejecucin. Utilice este control para mostrar una lista de los
archivos seleccionados por tipo. Puede crear cuadros de dilogo en la aplicacin que, por
ejemplo, permitan al usuario seleccionar un archivo o un grupo de archivos.
Sintaxis
FiIeListBox
Comentarios
Establezca las propiedades List, ListCount y ListIndex para permitir al usuario tener acceso
a los elementos de la lista. Si adems muestra los controles DirListBox y DriveListBox,
podr escribir cdigo para sincronizarlos con el control FiIeListBox y entre s.
Eventos
Evento CIick Evento OLECompIeteDrag
Evento DbICIick Evento OLEDragDrop
Evento DragDrop Evento OLEDragOver
Evento DragOver Evento OLEGiveFeedback
Evento GotFocus Evento OLESetData
Eventos KeyDown y KeyUp Evento OLEStartDrag
Evento KeyPress Evento PathChange
Evento LostFocus Evento PatternChange
Evento MouseDown y MouseUp Evento ScroII
Evento MouseMove
Mtodos
Mtodo Drag Mtodo SetFocus
Mtodo Move Mtodo ShowWhatsThis
Mtodo OLEDrag Mtodo ZOrder
Mtodo Refresh
Propiedades
Material de estudio Pgina: 75 de 249
Visual Basic 6.0 y SQLServer 7.0
Propiedad Appearance Propiedad Locked
Propiedades Archive, Hidden, NormaI y
System
Propiedad MouseIcon
Propiedades BackCoIor y ForeCoIor Propiedad MousePointer
Propiedad Container Propiedad MuItiSeIect
Propiedad DragIcon Propiedad Name
Propiedad DragMode Propiedad OLEDragMode
Propiedad EnabIed Propiedad OLEDropMode
Propiedad FiIeName Propiedad Parent
Propiedad Font Propiedad Path
Propiedades FontBoId, FontItaIic,
FontStrikethru y FontUnderIine
Propiedad Pattern
Propiedad FontName Propiedad ReadOnIy
Propiedad FontSize Propiedad SeIected
Propiedades Height y Width Propiedad TabIndex
Propiedad HeIpContextID Propiedad TabStop
Propiedad hWnd Propiedad Tag
Propiedad Index (ControI Array) Propiedad TooITipText
Propiedad Left y Top Propiedad TopIndex
Propiedad List Propiedad VisibIe
Propiedad ListCount Propiedad WhatsThisHeIpID
Propiedad ListIndex
NOTAS IMPORTANTES SOBRE EL MANEJO DE OBJETOS: Drive, FoIder y
FiIes
Drive
La propiedad Drive del control lista de unidades de disco permite saber cual es la unidad actual.
Cuando queremos modificar la unidad actual, solo el primer carcter de la cadena de caracteres
correspondiente es significativa. Un cambio de unidad de disco genera el susceso Change.
Esta propiedad slo esta disponible en tiempo de ejecucin. Por ejemplo:
Drv_Drive.Drive ="d:"
Cuamndo se elige una unidad de disco de la lista, la unidad de trabajo actual no cambia
automticamente. Si desea hacerlo, tiene que ejecutar la sentencia:
ChDrive drv_Drive.Drive
FoIder
El directorio actual en el control lista de directorios aparece sombreado. La propiedad Path
devuelve la ruta completa del directorio actual, incluyendo el nombre de la unidad. Modificando el
valor de esta propiedad podemos cambiar el directorio actual. Si slo modificamos la unidad (por
ejemplo, d: ), por defecto se selecciona el directorio actual en dicha unidad. Un cambio de
directorio actual genera el suceso Change. La propiedad Path slo esta disponible en tiempo de
ejecucin y pertenece tambin al control Lista de Ficheros, con la diferencia de que aqu un
cambio del camino actual genera el susceso PathChange. Por ejemplo:
Dir_Dir.Path = "d:\temp"
Material de estudio Pgina: 76 de 249
Visual Basic 6.0 y SQLServer 7.0
Cuando se elige un directorio de la Lista ele directorio de trabajo actual no cambia
automticamente. Si desea hacerlo tiene que ejecutar la sentencia:
ChDir Dir_Dir.Path
El directorio especificado por la propiedad Path siempre tiene como ndice 1 (Propiedad
ListIndex). El directorio que esta inmediatamente encima de l tiene como ndice-2, y as
sucesivamente hasta el directorio raz. El primer subdirectorio que esta inmediatamente a
continuacin tiene como ndice 0. Si hay varios directorios en el priemer nivel de subdirectorios, el
siguiente tiene ndice 1, y as sucesivamente. Dese cuenta que una lista slo esta compuesta por
el directorio especificado por la propiedad Path, ms los directorios hasta llegar desde ste hasta
el directorio Raz, ms los directorios correspondientes a su primer nivel de subdirectorios.
El nmero de directorios correspondientes al primer nivel de subdirectorios del directorio
especificado por la propiedad Path viene dado por la propiedad ListCount de la Lista.
Para calcular el ndice correspondiente al directorio Raz, escriba el siguiente cdigo:
Dim nDirRaz As nteger
nDirRaz = dir_Dir.Listndex
Do Until dir_Dir.List(nDirRaz) = "
nDirRaz= nDirRaz-1
Loop
nDirRaz= nDirRaz+1
FiIes
La propiedad FiIeName permite especificar el fichero que se quiere utilizar o devuelve el nombre
del fichero seleccionadoen una lista; esta propiedad slo est disponible en tiempo de ejecucin
por ejemplo:
Lstr_NomArchivo = FiIe1.FiIenName
La propiedad Pattern del control Lista de Ficheros permite que se visualicen solamente los
ficheros que cumplan el patrn especificadoo sta. Por ejemplo:
*.txt 'hace que se visualicen slo los archivos con extensin .txt
Los atributostambin estan disponibles a travs de las propiedades Archive, NormaI, System,
Hidden y ReadOnIy. Por ejemplo:
Si no quiere visualizar los archivos ocultos, asigene a ala propiedad Hidden el valor FaIse.
Cuando la propiedad NormaI tiene asignado el valor True, se visualizan todos los ficheros,
menos los ocultos y los de sistema. Las proepiedades System y Hidden tienen por defecto valor
FaIse; las dems tienen valor True. Para poner atributos a un archivo utilece la sentencia SetAttr
y para obtenerlos GetAttr.
Material de estudio Pgina: 77 de 249
Visual Basic 6.0 y SQLServer 7.0
1.1+ Mane2o de B3Is
Un programa en ambiente Windows, adems de accesar toda la funcionalidad establecida en su
entorno, tambin accesa el entorno de programacin de interfaz de aplicaciones para Windows
conocido como AP (Windows Aplication Programming nterface), cuya caracterstica principal son
los mensajes y las funciones.
Existen cientos de funciones que ejecutan una amplia variedad de tareas. Los mensajes son
utilizados por Windows para permitir que las aplicaciones se comuniquen entre s y con el propio
sistema. Se dice entonces que las aplicaciones Windows son conducidas por mensajes o
sucesos.
Una Biblioteca Dinmica (Dynamic Link Libraries, DLL) permite que las aplicaciones windows
compartan cdigo y recursos. Una DLL es un archivo ejecutable que contiene funciones que
puede ser utilizada por todas las aplicaciones.
Ventajas.
Permiten realizar acciones especiales que no se pueden realizar directamente en
VB.
Se actualizan sin tener que modificar los programas que la utilizan.
No existe duplicidad de cdigo cuando varias aplicaciones las utilizan.
Desventajas
Tiempo en que Windows emplea para leer las funciones.
El archivo fsico debe estar presente cuando se ejecuta el programa.
Las funciones de la AP de Windows estn disponibles en las bibliotecas Kernel, GD y User,
locaclizadas en la carpeta System de Windows. Para acceder a estas funciones, VB utiliza la
sentencia DECLARE: El archivo win32AP.txt, contiene las sentencias DECLARE de casi todas
las funciones del AP de windows (exceptuando las que trabajan con punteros).
Como los procedimientos de una DLL son externos a su aplicacin, deber proporcionar cierta
informacin que permita localizar y por lo tanto ejecutar el procedimiento deseado. Esta
informacin se declara en un mdulo. Por ejemplo:
Declare Function GetModuleHandle Lif "Kernel32 (ByVal LPModuleName As String) As nteger
Puede utilizar la clausula Alias en cualquier otra situacin en la que le sea conveniente. Por
ejemplo,
En un modulo inserte la siguiente instruccin
Declare Function DirWin Lib "Kernel32" Alias _
"GetWindowsDirectoryA" (ByVal lpBuffer As String, _
ByVal nSize As nteger) As nteger
Ahora podr llamar a la funcin con el nombre ms corto.
Dim RutaWin As String
RutaWin = String (145, chr(0))
RutaWin = Left (RutaWin, DirWin(RutaWin, len(RutaWin)))
Material de estudio Pgina: 78 de 249
Visual Basic 6.0 y SQLServer 7.0
1.14 nteractuar con Word $ E*cel
Necesita algunas veces proporcionar la misma capacidad de anlisis y clculo que Microsoft Excel en
sus aplicaciones de Visual Basic? O bien, quiz le gustara dar formato a un documento con las
herramientas de formato de Microsoft Word o almacenar y administrar datos con el motor de base de
datos Microsoft Jet. Mejor an, no le gustara poder crear o comprar componentes estndar para
utilizarlos despus en mltiples aplicaciones sin necesidad de modificarlos?
Puede conseguir todo esto y ms si genera sus aplicaciones con componentes ActiveX. Un
componente Bcti#eJ es un fragmento reutilizable de cdigo de programacin y datos
compuesto por uno o ms objetos creados mediante la tecnologa ActiveX. Las aplicaciones
pueden utilizar componentes existentes, como los incluidos en las aplicaciones de Microsoft
Office, componentes de cdigo, documentos ActiveX o controles ActiveX (antes llamados
controles OLE) que venden diversos proveedores. O bien, si dispone de la Edicin profesional
o de la Edicin empresarial de Visual Basic, puede crear sus propios controles ActiveX.
En el caso de los componentes compatibles con la vinculacin e incrustacin de objetos,
puede insertar objetos en su aplicacin sin necesidad de escribir cdigo, utilizando la interfaz
visual del componente. Puede insertar en la aplicacin un objeto activado para ActiveX
utilizando el control contenedor OLE o agregando la clase del objeto al cuadro de
herramientas.
La palabra "documento del trmino "documento ActiveX puede llevar a confusin. Aunque la
gnesis de los documentos ActiveX indica que un documento ActiveX de Microsoft Visual
Basic es anlogo a un documento de Word, al crear el primero la distincin entre un
"documento y una aplicacin se difumina por completo. Aunque los documentos tradicionales
(como los de Word) son estticos, los documentos ActiveX no tienen por qu serlo. Con
Visual Basic puede crear una aplicacin completa con la semntica de un documento
tradicional. Es decir, dispone de la funcionalidad de la aplicacin, pero con la flexibilidad del
comportamiento de un documento. Cuando un usuario abre un documento ActiveX, no slo
tendr la funcionalidad completa de una aplicacin, sino tambin la capacidad de conservar y
distribuir "copias de los datos intrnsecos a la aplicacin. De este modo, el "documento es
realmente activo.
Una anaIoga: documento de Word = documento ActiveX
Los documentos ActiveX no son un concepto completamente nuevo. Probablemente ya est
familiarizado con los documentos de Word. Como sabe, un documento de Word no es lo
mismo que la aplicacin Word: el documento (con la extensin .doc) almacena el contenido
real, mientras que la aplicacin Word (Winword.exe) se utiliza para crear el documento.
Despus de declarar una variable de objeto, debe asignar una referencia de objeto a la
variable antes de poder utilizar las propiedades, mtodos y eventos del objeto. Hay varias
formas de asignar una nueva referencia de objeto:
Si ha declarado la variable utilizando la palabra clave New, Visual Basic asignar
automticamente una nueva referencia de objeto la primera vez que utilice la variable.
Puede asignar una referencia a un objeto nuevo en una instruccin Set utilizando la
palabra clave New o la funcin CreateObject.
Puede asignar una referencia a un objeto nuevo o existente en una instruccin Set
utilizando la funcin GetObject.
Asignacin de una referencia de objeto mediante Ia paIabra cIave New
Material de estudio Pgina: 79 de 249
Visual Basic 6.0 y SQLServer 7.0
Si el componente ActiveX proporciona una biblioteca de tipos, puede utilizar la palabra clave
New en una declaracin de variable o una instruccin Set para crear un nuevo objeto y
asignar una referencia de objeto a una variable de objeto.
Si declara una variable de objeto con la palabra clave New, Visual Basic crear
automticamente un nuevo objeto la primera vez que utilice la variable. Para obtener ms
informacin al respecto, consulte "Declaracin de una variable de objeto".
Tambin puede utilizar la palabra clave New en una instruccin Set para asignar una
referencia a un nuevo objeto de la clase especificada. Por ejemplo, las instrucciones
siguientes asignan una referencia a un nuevo objeto de tabla DAO a la variable tdfOrders,
estableciendo la propiedad Name de la tabla a "Pedidos":
*i# td7Brder" ," *,B6Tab0e*e7
Set td7Brder" 8 $eL *,B6Tab0e*e7
td7Brder"6$a#e 8 9:edido"9
Asignacin de una referencia de objeto mediante CreateObject
ndependientemente de que un componente ActiveX proporcione o no una biblioteca de tipos,
puede utilizar la funcin CreateObject en una instruccin Set para crear un nuevo objeto y
asignar una referencia de objeto a una variable de objeto. Debe especificar el identificador de
programacin del objeto como argumento para la funcin, y el objeto al que desea tener
acceso debe ser de creacin externa.
Para asignar una referencia de objeto utiIizando CreateObject
Utilice la sintaxis siguiente para CreateObject.
Set #ariable?ob2eto = CreateObject("dpro%")
El argumento dpro% suele ser el nombre de clase calificado del objeto que se est creando;
por ejemplo, Word.Document. Sin embargo, dpro% puede ser diferente del nombre de clase.
Por ejemplo, dpro% para un objeto de Microsoft Excel es "Sheet" en lugar de "Worksheet".
El ejemplo de cdigo siguiente inicia Microsoft Excel (si Microsoft Excel no est ya en
ejecucin) y establece la variable x0,%% para hacer referencia a un objeto de la clase
AppIication. El argumento "Ex'e06,%%0i'ation" califica correctamente AppIication como
una clase definida por Microsoft Excel:
*i# x0,%% ," Ex'e06,%%0i'ation
Set x0,%% 8 CreateBbje't(9Ex'e06,%%0i'ation9)
Asignacin de una referencia de objeto mediante GetObject
La funcin GetObject se utiliza normalmente para asignar una referencia a un objeto
existente, aunque tambin puede utilizarla para asignar una referencia a un nuevo objeto.
Para asignar una referencia a un objeto existente, utilice la sintaxis siguiente:
Set #ariable?ob2eto = GetObject([nombre?ruta] [, dpro%])
El argumento nombre?ruta puede ser la ruta de acceso a un archivo existente, una cadena o
se puede omitir. Si se omite, se requiere dpro%. Especificar la ruta de acceso a un archivo
existente hace que GetObject cree un objeto utilizando la informacin almacenada en el
archivo. Utilizar una cadena vaca para el primer argumento hace que GetObject acte como
CreateObject: crear un nuevo objeto de la clase cuyo identificador de programacin sea
dpro%. En la tabla siguiente se describen los resultados de utilizar GetObject.
Material de estudio Pgina: 80 de 249
Visual Basic 6.0 y SQLServer 7.0
Al igual que ocurre con CreateObject, el argumento 9Tord6,%%0i'ation9 es el
identificador de programacin para la clase Application definida por Microsoft Word. Si estn
en ejecucin mltiples instancias de Microsoft Word, no puede saber a que instancia har
referencia Ld,%%.
Importante Tambin puede utilizar GetObject para asignar una referencia a un objeto en un
archivo de documento compuesto. Un arcHi#o de documento compuesto contiene referencias
a mltiples tipos de objetos. Por ejemplo, un archivo de documento compuesto puede
contener una hoja de clculo, texto y mapas de bits.
El ejemplo siguiente inicia la aplicacin de hoja de clculo, si no est ya en ejecucin, y abre
el archivo ngresos.xls:
*i# x0<ooC ," Ex'e06TorCbooC
Set x0<ooC 8 GetBbje't(9CSCuenta"SIngre"o"6x0"9)
Cuando haya terminado de utilizar un objeto, borre las variables que hagan referencia al
objeto de forma que se pueda liberar el objeto de la memoria. Para borrar una variable de
objeto, establzcala a Nothing. Por ejemplo:
*i# a',%% ," ,''e""6,%%0i'ation
Set a',%% 8 $eL ,''e""6,%%0i'ation
M"g<ox a',%%6S4"C#d(a'S4"C#d,''e""Ver)
Set a',%% 8 $ot5ing
Todas las variables de objeto se borran automticamente cuando se salen del alcance. Si
desea que la variable conserve su valor en todos los procedimientos, utilice una variable
pblica o de nivel formulario, o cree procedimientos que devuelvan el objeto. El cdigo
siguiente muestra como se utilizara una variable pblica:
:ub0i' Ld,%% ,a" Tord6,%%0i'ation
6
6
6
. Crea un objeto Tord e ini'ia Mi'ro"o7t Tord6
Set Ld,%% 8 $eL Tord6,%%0i'ation
6
6
6
. Mi'ro"o7t Tord no "e 'errar3 5a"ta =ue 0a
. a%0i'a'in ter#ine o 0a re7eren'ia "e e"tab0e2'a a
. $ot5ing
Set Ld,%% 8 $ot5ing
Tenga cuidado tambin de establecer todas las referencias de objetos a Nothing cuando
termine, incluso las de objetos dependientes. Por ejemplo:
*i# x0,%% ," Ex'e06,%%0i'ation
*i# x0<ooC ," Ex'e06TorCbooC
Set x0,%% 8 $eL Ex'e06,%%0i'ation
Set x0<ooC 8 x0,%%6TorCbooC"6,dd
Set x0,%% 8 $ot5ing . UCuidadoV x0<ooC %uede 'ontener
. a1n una re7eren'ia de objeto6
Set x0<ooC 8 $ot5ing . ,5ora "e 5an borrado toda"
. 0a" re7eren'ia"6
Material de estudio Pgina: 81 de 249
Visual Basic 6.0 y SQLServer 7.0
En este ejemplo se ilustran los distintos usos de la instruccin AppActivate para activar una
ventana de una aplicacin. Las instrucciones SheII suponen que las aplicaciones estn en las
rutas especificadas. En Macintosh, se puede utilizar la funcin MacID para especificar la
identidad de la aplicacin, en lugar del nombre de sta. La instruccin AppActivate est
disponible para el sistema operativo de Macintosh System 7.0 o posterior.
*i# M4,%%I*, !eturnVa0ue
. En Mi'ro"o7t TindoL"
,%%,'ti/ate 9Mi'ro"o7t Tord9 . Se a'ti/a Mi'ro"o7t
. Tord6
. ,%%,'ti/ate %uede ta#bi)n uti0i2ar e0 /a0or de/ue0to . %or 0a
7un'in S5e006
M4,%%I* 8 S5e00(9CSTB!*STI$TB!*6E?E9, 1). Se eje'uta Mi'ro"o7t Tord6
,%%,'ti/ate M4,%%I* . Se a'ti/a Mi'ro"o7t
. Tord6
. Ta#bi)n "e %uede uti0i2ar e0 /a0or de/ue0to %or 0a 7un'in S5e006
!eturnVa0ue 8 S5e00(9'SE?CE>SE?CE>6E?E9,1). Se eje'uta Mi'ro"o7t
Ex'e06
,%%,'ti/ate !eturnVa0ue . Se a'ti/a Mi'ro"o7t
. Ex'e06
Material de estudio Pgina: 82 de 249
Visual Basic 6.0 y SQLServer 7.0
1.18 Bcti#ar Bnimaci"n en los procesos
El control Animation reproduce secuencias de vdeo AV sin sonido. Una secuencia AV est
formada por una serie de marcos de mapas de bits, como una pelcula.
Un ejemplo es la hoja de papel que "vuela de una carpeta a otra al copiar archivos en el
sistema Windows 95:
Aunque las secuencias AV pueden tener sonido, cuando lo tienen no pueden utilizarse con el
control Animation y se producir un error si intenta cargar un archivo de ese tipo. Slo puede
utilizar secuencias AV sin sonido. Para reproducir archivos .avi con sonido, utilice el control
MuItimedia (MC).
Nota Encontrar diversos archivos .avi sin sonido en el directorio \Graphics\AV del CD-
ROM de Visual Basic.
En tiempo de ejecucin, el control Animation no tiene un marco visible.
El control Animation mantiene un subproceso de ejecucin independiente mientras se
reproduce la secuencia. Por tanto, la aplicacin no se bloquea y puede continuar la ejecucin
dentro de su proceso.
ApIicaciones posibIes
Crear cuadros de dilogo que informen al usuario de la duracin y naturaleza de una
operacin.
Reproducir sin sonido secuencias de vdeo informativas sobre la aplicacin.
Permitir a los usuarios reproducir los archivos colocados en el control.
Funcionamiento bsico: mtodos Open, PIay, Stop y CIose
Al utilizar el control, el archivo .avi se abre con el mtodo Open, se reproduce con el mtodo
PIay y se detiene con el mtodo Stop. Una vez terminada la reproduccin de un vdeo, puede
utilizar el mtodo CIose para cerrar el archivo. No es necesario cerrar un archivo para poder
abrir otro.
En el cdigo siguiente se utilizan dos controles CommandButton, cmdPlay y cmdStop, y un
control CommonDiaIog llamado dlgOpen. Como ttulo de cmdPlay, establezca "Abrir y
reproducir. El ttulo del control CommandButton cmdStop es "Detener".
:ri/ate Sub '#d:0a4_C0i'C()
. Con7igura un 'ontro0 Co##on*ia0og %ara %er#itir
. a0 u"uario bu"'ar ar'5i/o" 6a/i 4 re%rodu'ir0o"6
. E0 'ontro0 Co##on*ia0og "e 00a#a 9d0gB%en96 E0
. 'ontro0 ,ni#ation "e 00a#a 9an#,VI96
d0gB%en6&i0ter 8 9ar'5i/o" a/i (@6a/i)W@6a/i9
d0gB%en6S5oLB%en
an#,/i6B%en d0gB%en6&i0e$a#e
an#,VI6:0a4
End Sub
Este cdigo detiene la reproduccin del vdeo:
:ri/ate Sub '#dSto%_C0i'C()
an#,VI6Sto%
Material de estudio Pgina: 83 de 249
Visual Basic 6.0 y SQLServer 7.0
End Sub
Argumentos deI mtodo PIay: repeat, start y stop
El mtodo PIay tiene tres argumentos, repeat, start y stop, que determinan el nmero de
veces que se reproduce un archivo, en qu marco comienza la reproduccin y dnde se
detiene el archivo.
Si no se especifica el argumento repeat, el archivo se reproducir continuamente. Por
ejemplo, el cdigo siguiente reproducir un archivo continuamente hasta que el usuario haga
clic en el botn cmdStop:
:ri/ate Sub '#d:0a4_C0i'C()
d0gB%en6&i0ter 8 9ar'5i/o" a/i (@6a/i)W@6a/i9
d0gB%en6S5oLB%en
an#,VI6B%en d0gB%en6&i0e$a#e
. !e%rodu'e e0 ar'5i/o inde7inida#ente6
an#,VI6:0a4
End Sub
:ri/ate Sub '#dSto%_C0i'C()
an#,VI6Sto%
End Sub
El cdigo siguiente reproduce el archivo diez veces, desde el marco sexto al decimosexto (el
primer marco es el 0):
an#,VI6:0a4 1O, D, 1D
Reproduccin automtica de archivos con Ia propiedad AutoPIay
Si la propiedad AutoPIay se establece a True, el control comenzar a reproducir un archivo
en cuanto se haya cargado. Por el contrario, para que no se reproduzca el archivo, establezca
la propiedad AutoPIay a FaIse, como se muestra en el cdigo siguiente:
:ri/ate Sub '#d:0a4_C0i'C()
. Si e"tab0e'e a True 0a %ro%iedad ,uto:0a4, "e
. re%rodu'e e0 ar'5i/o a0 'argar0o6 :or e"o no e"
. ne'e"ario e0 #)todo :0a46
d0gB%en6&i0ter 8 9ar'5i/o" a/i (@6a/i)W@6a/i9
d0gB%en6S5oLB%en
an#,/i6,uto:0a4 8 True
an#,VI6&i0e 8 d0gB%en6&i0e$a#e
End Sub
:ri/ate Sub '#dSto%_C0i'C()
. E"tab0e'e ,uto:0a4 a &a0"e %ara detener 0a
. re%rodu''in6
an#,VI6,uto:0a4 8 &a0"e
End Sub
Centrado deI rea de reproduccin con Ia propiedad Center
Puede especificar si desea o no centrar el vdeo en el control mediante la propiedad Center.
Cuando el valor de esta propiedad es FaIse, el control cambia automticamente de tamao
en tiempo de ejecucin para ajustarse al tamao del vdeo. En tiempo de diseo, los bordes
izquierdo y superior del control definen el rea donde se mostrar el vdeo, de esta forma:
Material de estudio Pgina: 84 de 249
Visual Basic 6.0 y SQLServer 7.0
Cuando el valor de la propiedad Center es True, el control no cambia de tamao, sino que el
vdeo se muestra en el centro del rea definida por el control, de esta forma:
Nota Si el rea definida por el control en tiempo de diseo es menor que el vdeo, se
recortarn los bordes de ste.
Material de estudio Pgina: 85 de 249
Visual Basic 6.0 y SQLServer 7.0
2 DesarroIIo de apIicaciones bajo eI modeIo C/S
2.1 Modelo cliente K 7er#idor.
Podemos decir que en la arquitectura cliente/servidor existe en procesos
separados que residen en plataormas dierentes! e interact"an por medio de
una red.
#$% P&%'%F(R)% E* #$ C($+#$'( F(R)%,(
P(R -
.ard!are
*oft!are (*istema (perativo"
*oft!are de *ubsistema ()ane/ador de 0ase de
,atos"
*oft!are de %plicaci1n
E23*'E$ ,3FERE$'E* '3P(* ,E P&%'%F(R)%*
)ainframe o )inis enla4adas-
Funciona como servidor gigante de archivos o servidor de base
de datos, manejan aplicaciones tanto batch como interactivas y
la interface con el usuario es tipo carcter, adems que son
equipos propietarios.
)inis o or5station de alto desempe6o -
,an servicio a nivel departamental7 pero a
diferencia de las !or5stations7 las
microcomputadoras son e8uipos propietarios 9
tambi:n mane/an aplicaciones tanto batc; como
interactivas
)icrocomputadoras-
E<iste una gran base instalada en ellas
La #rquitectura cliente/servidor pertenece a un $odelo %istri&uido.
MODELO DISTRIBUIDO
'ste esquema puede ser deinido ormalmente como aquel en el cual m"ltiples
procesadores aut(nomos! posi&lemente de dierentes tipos! est)n
interconectados por una red de comunicaci(n para interactuar entre s*! con la
inalidad de llevar a ca&o tareas de procesamiento com"n. Para alcan+ar est)
meta los sistemas son inte,rados l(,icamente en varios ,rados por sistemas
operativos para procesamiento distri&uido y aplicaciones distri&uidas! tales
como &ases de datos distri&uidas. Sin em&ar,o! el esquema no s(lo incluye
procesadores y sistemas operativos! en un concepto m)s ,eneral el modelo
distri&uido es capa+ de inte,rar los m)s diversos equipos peri-ricos!
aplicaciones! tecnolo,*as de dise.o de redes y /erramientas de
administraci(n.
Material de estudio Pgina: 86 de 249
Visual Basic 6.0 y SQLServer 7.0
'ntre las caracter*sticas m)s relevantes de este modelo se encuentran0
Soporte para un n"mero ar&itrario de sistemas y aplicaciones.
%ise.o modular de la arquitectura *sica.
1so de sistemas operativos y aplicaciones para procesamiento distri&uido.
Soporte de terceros tanto en /ard2are como en sot2are.
$ientras que al,unos de los &eneicios que se derivan de adoptar el modelo!
son0
3ncremento de desempe.o.
3ncremento de la conia&ilidad y disponi&ilidad.
$odularidad y control local.
4ostos reducidos y un alto ,rado de conia&ilidad.
3$FR%E*'R#C'#R%
Basado primordialmente en redes de computadoras! el modelo de
c(mputo distri&uido! utili+a todos los recursos y capacidades de -stas
como la /erramienta principal de su inraestructura! para comunicar a los
dierentes recursos que se ver)n involucrados en el esquema.
%ada la r)pida evoluci(n de tecnolo,*as en el campo de la computaci(n!
as* como en el de las comunicaciones! la red de computadoras que se
utili+ar) para implantar el esquema! como ya se /a&*a mencionado!
requiere de ser lo suicientemente ro&usta! eiciente y adapta&le a nuevas
tecnolo,*as! con la inalidad de ,aranti+ar la continuidad del modelo.
'l esquema distri&uido no s(lo permite la inte,raci(n de las m)s variadas
tecnolo,*as de dise.o y construcci(n de procesadores y peri-ricos! sino
tam&i-n de las dierentes tecnolo,*as de dise.os de redes. Permitiendo de
-sta orma! inte,rar redes de comunicaciones ya existentes dentro de una
or,ani+aci(n al modelo! que representa una venta5a so&re el esquema
centrali+ado! sin em&ar,o! resulta conveniente que la red a utili+arse sea
realmente eiciente! dado que los resultados del modelo depender)n en
,ran medida de -sta.
%adas las acilidades de inte,raci(n de tecnolo,*as de redes y equipos! la
inraestructura del modelo distri&uido puede ilustrarse! como se muestra
en la si,uiente i,ura.
Material de estudio Pgina: 87 de 249
Visual Basic 6.0 y SQLServer 7.0
C H H U A H U A
W O R K S T A T O N
S O N O R A C D .
C A R M E N
W O R K S T A T O N
C D . D E M E X C O
T E R M N A L
T E R M N A L
W O R K S T A T O N W O R K S T A T O N
W O R K S T A T O N
W O R K S T A T O N
Material de estudio Pgina: 88 de 249
Visual Basic 6.0 y SQLServer 7.0
)%$E+( ,E 3$F(R)%C3($
#l i,ual que se distri&uyen equipos de c(mputo y peri-ricos! la
inormaci(n se /alla distri&uida a lo lar,o de toda la or,ani+aci(n!
encontr)ndose en aquellos lu,ares donde com"nmente es utili+ada! donde
sin em&ar,o! no importando su locali+aci(n! cualquier persona puede tener
acceso a ella.
# dierencia del modelo centrali+ado! la inormaci(n &a5o este esquema
conserva las caracter*sticas de oportunidad y rapide+! ya que las consultas
se /ar)n normalmente a &ases de datos locales. Sin em&ar,o dado que la
inormaci(n ,eneralmente es procesada en orma distri&uida y pese a que
las /erramientas para su mane5o empleen comple5os al,oritmos de
validaci(n de datos! -sta es suscepti&le de perder caracter*sticas como
consistencia y confiabilidad.
4on este esquema! el usuario inal tiene tam&i-n la posi&ilidad de acceder
a diversos &ancos de inormaci(n! que existen alrededor del mundo! y la
consulta a estos se eect"a a trav-s de aplicaciones y /erramientas
capaces de manipular la inormaci(n contenida en ellos! sin importar su
locali+aci(n ,eo,r)ica. 'ntre las uentes externas a las cuales se puede
acceder para o&tener inormaci(n actuali+ada y oportuna! se encuentran
diversas redes de computaci(n p"&licas y privadas que existen alrededor
del mundo! destacando entre ellas 3nternet que es la red m)s ,rande e
importante! que cuenta entre sus miem&ros a universidades! instituciones
de investi,aci(n! a,encias ,u&ernamentales e instituciones privadas.
6erramientas para consultar estas uentes! com"nmente permiten una
)cil interacci(n con el usuario! al contar con interaces ami,a&les que
/ar)n del proceso de adquisici(n de inormaci(n una tarea sencilla para
cualquier persona.
PR(CE*%)3E$'(
7uevos conceptos que /an sido inte,rados a sistemas operativos! as*
como comple5os mecanismos de comunicaci(n entre computadoras a
trav-s de una red! permitiendo llevar a ca&o el procesamiento de ,randes
cantidades de datos y comple5os al,oritmos utili+ando para ello m"ltiples
procesadores! que pueden ser de dierentes tipos y encontrarse
distri&uidos a lo lar,o de la or,ani+aci(n! esta orma de procesar datos!
conocida como procesamiento distri&uido! es totalmente transparente el
usuario inal ya que ser)n los sistemas operativos y aplicaciones los que
llevar)n a ca&o la distri&uci(n y control de todas las tareas que esto
implique! entre aquellos sistemas que se dispon,an para ese eecto dando
la apariencia de que todas las operaciones necesarias las est) llevando a
ca&o un solo procesador.
%ado que el procesamiento distri&uido ser*a llevado a ca&o por diversos
procesadores utili+ando como medio de comunicaci(n la red de c(mputo!
est) de&er) ser lo suicientemente conia&le para que el procesamiento
puede eectuarse! pues se requerir) de llamadas y peticiones de control
entre todos aquellos procesadores que est-n participando en el
procesamiento.
Material de estudio Pgina: 89 de 249
Visual Basic 6.0 y SQLServer 7.0
*ERV3C3(*
Sustentar el modelo distri&uido en redes de computadoras! permite orecer
al usuario inal una amplia ,ama de servicios &asados en la utili+aci(n de
aplicaciones que operan &a5o la red de c(mputo instalada! entre -sta
variedad de acilidades se encuentran al,unas que para el usuario inal
revisten vital importancia! como lo es el caso del correo electr(nico! ya
que -ste adquiere ,ran relevancia cuando la or,ani+aci(n pasa a ormar
parte de al,unas de las redes existentes alrededor del mundo. Ba5o estas
circunstancias! el correo electr(nico proporciona mayores &eneicios en
relaci(n con otros medios de comunicaci(n tradicionales tales como
mensa5er*a! ax! teleon*a! ya que el usuario no s(lo tendr) la posi&ilidad
de enta&lar comunicaci(n con personas de su or,ani+aci(n! sino que
tam&i-n le ser) posi&le /acerlo con otras personas e instituciones de
orma se,ura y eiciente! no importando en que lu,ar del mundo se
encuentren.
8tro servicio que reviste i,ual importancia es la transerencia de
inormaci(n! el modelo cuenta con /erramientas eicientes y conia&les
para transerir inormaci(n entre sitios remotos sin importar que tipo de
inormaci(n de&a transerirse! a&arcando desde art*culos period*sticos!
reportes de clima! im),enes so&re condiciones atmos-ricas /asta
arc/ivos de aplicaciones ,uardados &a5o ormatos especiales.
4ompartir equipos peri-ricos! tales como impresoras y ,raicadores de
alta calidad y desempe.o es una tarea que se acilita tanto para los
administradores como para los usuarios inales! /aciendo uso de la red de
c(mputo -stos podr)n ser utili+ados por todo aquel personal que as* lo
requiera! sin considerar donde se localicen los recursos. La inte,raci(n y
distri&uci(n de recursos en el modelo se eect"a mediante sistemas
operativos y aplicaciones! las cuales una ve+ coni,uradas permitir)n al
usuario /acer uso de aquellos recursos que le sean m)s convenientes o
adecuados al momento de requerirlo en orma transparente.
%ada la veracidad del modelo distri&uido! inte,rar recursos y servicios no
previstos! no implicar) redise.ar o modiicar totalmente la estructura del
modelo! s(lo se requerir) variar coni,uraciones en sistemas operativos y
aplicaciones. 3nte,rar nuevos equipos peri-ricos no implicar) contar con
un distri&uidor o a&ricante "nico! peri-ricos de terceros pueden ser
empleados sin ocasionar pro&lemas de compati&ilidad y sin recurrir a
,astos excesivos.
%,)3$3*'R%C3($
1na de las tareas m)s importantes para alcan+ar las metas previstas
cuando se utili+a c(mputo distri&uido! lo constituye la administraci(n de su
inraestructura. 'n este esquema donde el uso ex/austivo de una red de
computadoras es com"n! la administraci(n de este recurso ocupa un lu,ar
primordial! contar con las /erramientas adecuadas! as* como con el
personal capacitado! ,aranti+ar) el correcto desempe.o y uncionamiento
de cada una de las partes que orman la red de c(mputo. 6erramientas
comunes son aplicaciones que utili+an protocolos especialmente dise.ados
para monitorear el estado actual de la red y dar al administrador una idea
precisa de cual es el pro&lema y en que parte -ste est) ocurriendo! para
as* poder tomar decisiones so&re una soluci(n r)pida y adecuada! adem)s
Material de estudio Pgina: 90 de 249
Visual Basic 6.0 y SQLServer 7.0
de contar con un equipo de personal especiali+ado! permitir) dar pronta
soluci(n a pro&lemas t-cnicos en la inraestructura de la 9ed.
MODELO COOPERATIVO
's una variante de los sistemas distri&uidos! el modelo cooperativo que
consiste cuando el procesamiento de la aplicaci(n se e5ecuta en la plataorma
(ptima de /ard2are.
'l termino Proceso 4ooperativo! es una deinici(n literal! implica los
componentes individuales! en lo que aplicaciones se reieren! es cuando
dierentes aplicaciones de las mismas se llevan a ca&o en varias
computadoras de la red y estas son transparentes para el usuario.
Procesode
la Aplicacin
Parte de
Proceso
Parte de
Proceso
Resultados
EstacinA
EstacinB
Proceso Cooperativo.
'xisten tres tipos de procesos para el $odelo 4ooperativo! que son 0 Peer=to=
peer7 RPC 9 Cliente>*ervidor.
CLIENTE/SERVIDOR
'n un sistema 4liente/Servidor! uno o m)s clientes y uno o m)s servidores!
5untos con el sistema operativo y los protocolos de comunicaci(n! conorman
el am&iente que permite y acilita el computo distri&uido.
'n una aplicaci(n &asada en esta arquitectura existen dos procesos
independientes! en lu,ar de uno solo. %e esta orma se puede repartir el
tra&a5o a trav-s de varias computadoras en una red. 'stos dos procesos! el
cliente y el servidor! se comunican mediante un protocolo &ien deinido. 'sta
t-cnica modular permite la comunicaci(n entre distintas computadoras
:Servidor de arc/ivos! estaciones de tra&a5o con alta calidad de ,raicaci(n!
etc ;! para que cada uno de ellos se dedique a reali+ar el tra&a5o que reali+a
me5or.
Material de estudio Pgina: 91 de 249
Visual Basic 6.0 y SQLServer 7.0
%e manera introductoria! se puede decir que un servidor es un sistema o un
pro,rama en un sistema que provee de al,"n servicio a otros sistemas a
trav-s de una 9ed. 1n e5emplo t*pico es un servidor de arc/ivos! que permite
el acceso a inormaci(n remota a cualquier usuario a trav-s de la red. 1n
cliente es un sistema o un pro,rama que requiere y reci&e al,una acci(n de
un servidor.
'xisten varias interpretaciones acerca de la deinici(n exacta de que es la
computaci(n 4liente/Servidor y en ve+ de discutir una deinici(n precisa me5or
discutiremos las caracter*sticas que de&e cumplir.
B)sicamente la arquitectura 4liente/Servidor es aprovec/ar la computaci(n
que esta en procesos separados so&re separadas plataormas! interactuando
una con otra permitiendo el aprovec/amiento de recursos! mientras toman la
me5or venta5a de los dierentes dispositivos.
Si &ien no existe una deinici(n precisa de 4liente/Servidor que sea aceptada
por el )m&ito inorm)tico! si existen die+ caracter*sticas que de&e cumplir. Las
cinco primeras son aceptadas como o&li,atorias y las cinco restantes como
opcionales! precisando a"n m)s como desea&les! las cuales son0
<La arquitectura 4liente/Servidor! consiste en un proceso cliente y un proceso
servidor! distin,ui-ndose uno de otro! sin em&ar,o pueden interactuar
con5untamente.
=La parte del cliente y la del servidor! pueden operar en plataormas dierentes
y esto ,eneralmente ocurre! pero no necesariamente.
>La plataorma del cliente o del servidor! puede ser actuali+ada sin que esto
implique actuali+ar am&as.
?'l servidor dispone de servicios m"ltiples de concurrencia de clientes! en
al,unos sistemas el cliente puede tener acceso a m"ltiples servicios.
@'l sistema 4liente/Servidor incluye capacidad de administraci(n de la red.
61na parte si,niicativa :en al,unos casos! no todos; de aplicaciones l(,icas!
residen en el cliente.
71sualmente la acci(n es iniciada por el cliente inal y no por el servidor inal!
sin em&ar,o! servidores de &ase de datos pueden tomar acciones &asados en
disparadores! como una pol*tica de la or,ani+aci(n o proceso almacenado.
A1na intera+ ,r)ica ami,a&le B13 :Brap/ical 1ser 3nterace;! ,eneralmente
reside en el cliente.
CLa capacidad de un len,ua5e estructurado de consulta :SQL;! es caracter*stica
de la mayor*a de los sistemas 4liente/Servidor.
<0'l servidor de &ase de datos! de&e proveer se,uridad y protecci(n de datos.
Material de estudio Pgina: 92 de 249
Visual Basic 6.0 y SQLServer 7.0
DESCRIPCION UNCIONAL
%e manera ,eneral! para iniciar la comunicaci(n entre un cliente y un servidor
es necesario esta&lecer una sesi(n. Por lo tanto! el servidor de&e estar
esperando ( escuc/ando que al,"n cliente trate de esta&lecer una sesi(n!
esto quiere decir que un cliente trate de D/a&larE pero si no es Descuc/adoE la
comunicaci(n racasar). 's muy posi&le que por al,"n momento el servidor
tam&i-n D/a&leE y que el cliente Descuc/eE! pero esto s(lo ocurrir) cuando el
servidor as* se lo indique al cliente.
1n servidor tam&i-n se reserva el derec/o de esta&lecer comunicaci(n con
uno o m)s clientes. #s*! el servidor se encar,ara de atender a cada cliente y
esta&lecer los mecanismos que se,uir) para la distri&uci(n de sus servicios.
1n servidor deine operaciones que son exportadas a los clientes! los clientes
invocan estas operaciones para que el servidor controle el mane5o de datos.
F*picamente! una aplicaci(n cliente comen+ar) una transacci(n! e5ecutar) una
o varias operaciones en el servidor y terminar) la transacci(n. L(,icamente!
los servidores est)n estructurados como un ciclo ininito. 'l servidor
simplemente reci&e los requerimientos de los clientes para invocar
operaciones en avor de esas transacciones. Para implantar las operaciones
que exporta! el servidor puede requerir de otro servidor o puede manipular
sus propios datos.
Ba5o este esquema! se reparte el proceso de una aplicaci(n entre un rontGend
:4liente; y un &acHGend :Servidor;! cuyas unciones se distin,uen como se
muestra a continuaci(n0
FR($'=E$, 0%C?=E$,
PRO!RAMA DE
APLICACI"N
SERVIDOR DE BASE DE
DATOS
G %ise.o de ormas G #lmacenamiento
G Presentaci(n G Se,uridad
G L(,ica de la aplicaci(n G #dministraci(n de datos
G $ane5o de datos G Selecci(n de re,istros
G 4onsultas G 9eor,ani+aci(n de la B%
G $en"s G 3ndexaci(n
G 1tiler*as G 8rdenamientos
G #ctuali+aciones en lote
Comparacin de funciones: Front-end vs Back-end.
SISTEMAS ABIERTOS #OPEN S$STEM%
$uc/as or,ani+aciones /an instalado una variedad de plataormas! y en cada
una de ellas mane5an inormaci(n necesaria para la vida de las or,ani+aci(n.
'l reto de los sistemas a&iertos y con ellos los est)ndares! est) en /acer que
estas dierentes plataormas tra&a5en de manera con5unta.
Material de estudio Pgina: 93 de 249
Visual Basic 6.0 y SQLServer 7.0
Los est)ndares permiten me5orar la compati&ilidad! de5an mayor li&ertad al
usuario para ele,ir lo que m)s conven,a a sus necesidades tanto de /ard2are
como de sot2are! permite explotar nuevas tecnolo,*as y ,eneran un
am&iente de competencia tanto en precios! como en el desempe.o en el
mercado.
1n sistema a&ierto es aquel &asado en un am&iente independiente a
a&ricantes! cuyas especiicaciones son aceptadas! disponi&les y
estandari+adas. 'n estos sistemas los usuarios pueden me+clar /ard2are y
sot2are de diversos a&ricantes en redes muy diversas. Los sistemas a&iertos
son de crucial importancia en el am&ientes de computo distri&uidos ya que
estos son construidos con sistemas de diversos proveedores de computadoras!
redes! mane5adores de &ase de datos y aplicaciones.
# pesar de que los est)ndares de pro,ramaci(n y de comunicaciones /an
evolucionado por d-cadas! 173I de #FJF ue el primer sistema operativo que
unciono en diversas plataormas con -xito! permitiendo escala&ilidad!
porta&ilidad e interopera&ilidad! como venta5as caracter*sticas.
3nteroperabilidad Si,niica que dos sistemas pueden tra&a5ar
con5untamente a trav-s de interaces &ien deinidas! por
e5emplo! una aplicaci(n desarrollada en el sistema operativo
173I puede interactuar con aplicaciones para los sistemas
operativos 8S/= y $VS. 'stas aplicaciones de&en tener
interaces que permiten intercam&iar inormaci(n.
Portabilidad Si,niica que las aplicaciones de&en ser independientes de
las plataormas! de tal manera que cam&ios que suran las
plataormas existentes no si,niiquen modiicaciones a las
aplicaciones. Las aplicaciones desarrolladas en una
plataorma de&en ser transportadas y utili+a&les en otras
plataormas.
3ntegraci1n Se reiere a la acilidad con la cual un sistema puede ser
usado. 1n sistema inte,rado &)sicamente minimi+a el
esuer+o necesario para utili+arlo.
Los est)ndares son necesarios para /acer a los sistemas a&iertos una
realidad. 1n ,ran n"mero de est)ndares /an sido desarrollados para cumplir
con interopera&ilidad! porta&ilidad e inte,raci(n. 'stos est)ndares son
desarrollados por la 3S8 :3nternational Standard 8r,ani+ation;. Los est)ndares
F4P/3P y IKindo2s son claros e5emplos de sistemas a&iertos.
INRAESTRUCTURA DE SOT&ARE CLIENTE/SERVIDOR
'l t-rmino 4liente/Servidor! en primera instancia es un termino comple5o y
a&stracto! de la misma orma tanto las empresas de computo! como los
Material de estudio Pgina: 94 de 249
Visual Basic 6.0 y SQLServer 7.0
especialistas en sistemas /acen reerencia a -l! como un modelo o como una
arquitectura.
'n un sentido estricto! de acuerdo a la deinici(n del diccionario0
)(,E&(. D's un o&5eto que se reproduce o se imita. 9epresentaci(n de
al,una cosa en peque.a escala. F-cnicamente es la construcci(n de una o
varias pie+as para /acer el molde en el cual se vaciar)n los o&5etosE.
'n tanto que0
%R@#3'EC'#R%. D#rte de proyectar! construir y adornar. Lorma! estructuraE
Por lo tanto 4liente/Servidor! es la con5unci(n de varias pie+as que
primeramente se dise.ar)n a escala para posteriormente reproducirse como
un esquema di,no de imitarse! Pero! Md(nde esta la interconexi(n de
componentesN. %esde lue,o! que aqu* entra la inraestructura de
comunicaci(n entre los elementos o pie+as adicionales a su u&icaci(n para
construir el sistema.
Podemos decir que la 3nraestructura 4liente/Servidor es la inte,raci(n
distri&uida y a&ierta de un sistema en red! con los recursos! medios y
aplicaciones! que deinidos modularmente en los servidores! administran!
e5ecutan y atienden peticiones de los clientes! todos interrelacionados *sica y
l(,icamente! compartiendo datos! procesos e inormaci(n! esta&leciendo as*
un enlace de comunicaci(n transparente entre los elementos que conorman la
estructura.
Los elementos que conorman la estructura 4liente/Servidor son - El Cliente7
El Se'(ido' 9 Soft)a'e De Co*+nicaci,n-
CLIENTE
Software de
Comunicacin
SERVIDOR
Estructura bsica de la arquitectura Cliente / ervidor.
1na idea simple de la computaci(n 4liente/Servidor es! que el servidor acepta
requerimientos de datos de un cliente y retorna los resultados a -ste. 'l
cliente manipula los datos y presenta los resultados al usuario.
La computaci(n cliente/servidor no se &asa solo en los componentes del
/ard2are! sin menospreciar sus cualidades! lo que /ace posi&le esta
tecnolo,*a es el soft)a'e. #l dividirse las tareas entre el cliente y el servidor!
pueden ser procesadas en dierentes0 plataormas! Sistemas 8perativos y
Protocolos de 4omunicaci(n! teniendo como resultado un desarrollo m)s
r)pido de la aplicaci(n donde est)n envueltas. 'ntonces el usuario podr)
accesar los datos con una intera+ ,r)ica a,rada&le! que despertar) su
inter-s e invitaci(n y sin la necesidad de capacitaciones ex/austivas.
Material de estudio Pgina: 95 de 249
Visual Basic 6.0 y SQLServer 7.0
E& C&3E$'E- 's un consumidor de servicios provistos por uno o m)s
servidores :acceso a la &ase de datos! servicio de impresi(n!
correo electr(nico;. desarrolla parte y en ocasiones toda la l(,ica
de aplicaci(n! &rinda servicios de presentaci(n al usuario a trav-s
de una intera+ ,r)ica.
E& *ERV3,(R- 's dise.ado con el o&5etivo de dar servicio! sus capacidades
de /ard2are son mayores a las del cliente! ,eneralmente! a
trav-s del %B$S que radica en -l! puede recuperar! actuali+ar y
almacenar los datos. #dministra los recursos de la red!
dispositivos y dem)s servicios con los que cuente.
*(F'%RE ,E C()#$3C%C3A$- Por medio de -l se reali+a la comunicaci(n
entre el cliente y el servidor! administra el lu5o de datos a trav-s
de la red! permite la comunicaci(n /acia otros sistemas :por
medio de ruteadores! puentes y ,ate2ays;. 's responsa&le de
detectar pro&lemas y recuperaci(n de datos por coaliciones.
1na aplicaci(n envuelve varias tareas las cuales pueden ser llevadas a ca&o
en el modulo cliente o el del servidor! con el in de entender me5or como se
reali+a una aplicaci(n la dividiremos en seis tareas! las cuales son 0
<. 3$'ERF%CE P%R% E& #*#%R3(. 4uenta con un dispositivo que
acepta entradas del usuario y las desplie,a en la l(,ica de
presentaci(n. 'ste dispositivo puede simplemente desple,ar
caracteres reci&idos de un teclado o un dispositivo que reci&a se.ales
de un mouse.
=. &AB3C% ,E PRE*E$'%C3A$. 4ontrola la interacci(n entre el usuario
y la computadora. 'sta es la especiicaci(n que el usuario reali+a
cuando selecciona un men" de opciones! un &ot(n de selecci(n o
esco,e un elemento de una lista.
>. &AB3C% ,E %P&3C%C3A$. 's una colecci(n de decisiones! c)lculos y
operaciones que la aplicaci(n puede llevar a ca&o. 'sta puede incluir
los c)lculos del pa,o a empleados! la decisi(n de aceptar una orden de
compra! la evaluaci(n de car,ar una aplicaci(n o el procedimiento de
reali+ar una transacci(n la cual /a sido transerida.
?. &AB3C% ,E ,%'(*. 's la expresi(n de las operaciones desarrolladas
en la &ase de datos que son necesarias para reali+ar la l(,ica del
ne,ocio. 4omo la mayor*a de los mane5adores de &ases de datos se
&asan so&re el modelo relacional! las expresiones son instrucciones en
SQL como el Select! 3nsert y 1pdate.
@. *ERV3C3( ,E ,%'(*. Son las acciones que el %B$S toma para
reali+ar la l(,ica de datos! incluyendo la manipulaci(n! la deinici(n y
la transacci(n de los mismos. Para manipular datos el %B$S
t*picamente compila las instrucciones en SQL.
Material de estudio Pgina: 96 de 249
Visual Basic 6.0 y SQLServer 7.0
6. *ERV3C3( ,E %RC.3V(*. #ccesa el disco y trae los &its que se
convierten en datos cuando son vistos a trav-s del %B$S. Los
servicios de arc/ivos son usualmente reali+ados por unciones del
sistema operativo.
'n el am&iente 4liente/Servidor! una aplicaci(n se puede almacenar! dentro de
los clientes! en los servidores o parcialmente en am&os dependiendo de las
caracter*sticas y capacidad del equipo! as* como de las necesidades
particulares en cuanto al acceso a datos e inormaci(nO de esta manera! es
responsa&ilidad del )rea de Sistemas as* como de los dise.adores de la red!
deinir "desde la etapa de Planeaci(n"! c(mo ser)n estructuradas las
aplicaciones y componentes dentro del sistema en red.
# continuaci(n se muestra una clasiicaci(n de alternativas! para or,ani+ar las
aplicaciones so&re la &ase del acceso a la inormaci(n como se muestra a
continuaci(n.
Presentaci1n ,istribuida- Se separan los datos! procesos y presentaci(n en
el servidor y solo una parte de la presentaci(n se e5ecuta en el
cliente. %onde varios usuarios pueden accesar los mismos datos
desde los dierentes servidores y cada uno visuali+a
exclusivamente la inormaci(n que solicita. Por e5emplo. la
consulta e impresi(n de las listas de proveedores que mane5a el
%epartamento de 4ompras de la empresa! adicion)ndole los
datos personales del usuario. 'ste tipo de estructura /ace uso
del poder ,r)ico de los clientes y permite compartir las
aplicaciones existentes.
Presentaci1n Remota- Se concentran los datos y procesos en el servidor y la
presentaci(n se e5ecuta en el cliente. #qu* se aprovec/an las
capacidades particulares de cada cliente! de tal manera que el
usuario por su parte! puede accesar los datos que requiera!
manipularlos con sus propias /erramientas creando y/o
modiicando li&remente la presentaci(n y salida de la
inormaci(n. Por e5emplo! un vendedor de se,uros reali+a una
consulta a la &ase de datos :servidor; de las dierentes primas
que se tienen re,istradas para los autom(viles modelo C?! al
visuali+ar la inormaci(n! utili+a su procesador de textos para una
me5or presentaci(n y as* o&tiene los reportes requeridos.
Funci1n ,istribuida- Se tienen los datos y procesos en el servidor! pero
parte de los procesos con5untamente con la presentaci(n! se
e5ecutan con los recursos propios del cliente. #qu* el principal
aspecto es el uso y mane5o de ciertas su&rutinas y/o pro,ramas
dentro de lo servidores! mismas que pueden ser utili+adas tantas
veces como sean requeridas! sin tener que reescri&irlas o
particulari+arlas para cada cliente. Por e5emplo! se puede
solicitar la consulta de las ciras de ventas por los "ltimos dos
trimestres! a las dierentes su&sidiarias :&ases de datos;! d(nde
internamente se eect"a un proceso de selecci(n de datos! el
concentrado de inormaci(n se reci&e en el servidor local y a su
ve+ el cliente e5ecuta el proceso correspondiente para o&tener los
Material de estudio Pgina: 97 de 249
Visual Basic 6.0 y SQLServer 7.0
datos de su empresa! as* mediante ciertas instrucciones
predeinidas con5unta la inormaci(n y o&tiene el inorme
requerido.
%cceso Remoto de ,atos- Los datos se almacenan en el servidor! de esta
orma los procesos y la presentaci(n se e5ecutan desde el cliente.
B)sicamente es el modo de acceso utili+ado en el sot2are de
correo electr(nico! d(nde se solicitan consultas de inormaci(n a
&ases de datos remotas! de la misma orma que se reci&e y se
env*a inormaci(n de otros clientes. Por e5emplo! consultas a las
&i&liotecas de las dierentes universidades nacionales y del
extran5ero.
0ase de ,atos ,istribuida- Fodos los datos se concentran en los servidores!
pero cierta porci(n de inormaci(n as* como los procesos y
presentaci(n se accesan con los recursos del cliente. 'ste tipo
de estructura permite la comparaci(n de datos a cualquier nivel
dentro de la empresa! d(nde cada usuario puede manipular la
inormaci(n de su )rea o departamento y compartirla con la de
otros en orma simult)nea. Por e5emplo! una empresa puede
tener una &ase de datos "nica d(nde concentre la inormaci(n
relacionada a las existencias en almac-n de sus productos! de tal
orma que las altas! &a5as y cam&ios se eect"an en l*nea y al ser
consultadas por cualquier persona dic/as modiicaciones se
visuali+an por todos los dem)s usuarios.
ane!o de
Datos
Lo"ica de
Aplicacin
L"ica de
Presentacin
L"ica de
Presentacin
ane!o de
Datos
Lo"ica de
Aplicacin
L"ica de
Presentacin
ane!o de
Datos
Lo"ica de
Aplicacin
L"ica de
Presentacin
Lo"ica de
Aplicacin
ane!o de
Datos
L"ica de
Presentacin
Lo"ica de
Aplicacin
ane!o de
Datos
L"ica
Presentacin
L"ica de
Presentacin
ane!o de
Datos
RED
RED
S
E
R
V
I
D
O
R
C
L
I
E
N
T
E
Presentacin
Distri#uida
Presentacin
Remota
$uncin
Distri#uida
Acceso
Remoto de
Datos
Dase de
Datos
Distri#uida
!ivisin de un procesos del Cliente " del ervidor .
Material de estudio Pgina: 98 de 249
Visual Basic 6.0 y SQLServer 7.0
EL CLIENTE
4aracter*sticas del 4liente0
's el medio de enlace y/o comunicaci(n entre el usuario y el computadora.
's la entidad que requiere o solicita el servicio.
9equiere el uso de los recursos del computadora para reali+ar cualquier
actividad.
's el medio por el cual se env*a la solicitud y se reci&en los resultados o
notiicaciones del servidor.
4ontiene la interace ,r)ica :B13;.
Puede interactuar con uno o varios servidores.
's el responsa&le de mantener el di)lo,o con el usuario.
Su costo comparado con un servidor es considera&lemente m)s &a5o.
Lunciones principales del 4liente 0
3nicia y termina la solicitud.
Permite el mane5o de la pantalla y ventanas.
Presenta la inormaci(n y/o datos.
3nterpreta los comandos.
$ane5a procesos de ayuda.
9eci&e las entradas provenientes del mouse ! teclado y touc/Gscreen.
Permite controlar las ca5as de di)lo,o.
6a&ilita el mane5o de multimedia :si es el caso;.
EL SERVIDOR
's la entidad *sica que provee un servicio! se encuentra la e5ecuci(n de
procesamiento de datos! aplicaciones! mane5o de la inormaci(n y recursos. 'n
el reside el B#4PG'7%! que es la parte destinada a reci&ir las solicitudes del
cliente y donde se e5ecutan los procesos.
1n servidor es considerado! por muc/os! como la con5unci(n de 6ard2are y
Sot2are que e5ecuta tareas espec*icas.
Sus principales caracter*sticas son0
9esponde a las peticiones de los clientes.
Fiene ,ran capacidad de almacenamiento y rapide+.
Provee el uso de los recursos y servicios a los clientes.
's el administrador de los recursos de la red
Fiene capacidad de procesamiento transaccional.
Puede actuar como cliente de otros servidores.
4ontiene los datos! pro,ramas! aplicaciones! sot2are e inormaci(n.
9eali+a procesos como accesar! or,ani+ar! almacenar! actuali+ar y mane5ar
datos o recursos compartidos.
SOT&ARE DE COMUNICACI"N
Material de estudio Pgina: 99 de 249
Visual Basic 6.0 y SQLServer 7.0
#l,unos proesionales del )m&ito inorm)tico! utili+an el termino
D$iddle2areE! el cual crea m)s conusi(n que contri&uci(n! ya que es usado
indistintamente. 1tili+aremos el t-rmino sot2are de comunicaci(n! para
descri&ir las capacidades de comunicaci(n entre el cliente y el servidor.
Material de estudio Pgina: 100 de 249
Visual Basic 6.0 y SQLServer 7.0
LA RED
La arquitectura de la red deine los protocolos! ormato de los mensa5es y
est)ndares que se usar)n. 1na arquitectura de red ro&usta usa una estructura
de capas! cada capa consiste en entidades compuestas por /ard2are y
procesos de sot2are! las normas y ormatos para comunicaci(n entre capas
adyacentes son colectivamente llamadas una interace. Los protocolos son las
normas y ormatos para comunicaci(n dentro de la misma capa! a trav-s de
dierentes dispositivos! incluyen ormatos y el orden de los datos para su
intercam&io y cualquier acci(n para la transmisi(n y recepci(n de datos
'l sistema operativo es el cora+(n y alma de la red. 'l /ard2are del sistema
proporciona las trayectorias de datos y las plataormas en la red! pero el
sistema operativo es el encar,ado de controlar todo lo dem)s. La
uncionalidad! la acilidad de uso! el rendimiento! la administraci(n. la
se,uridad de los datos y la se,uridad de acceso! dependen del sistema
operativo.
#ctualmente existen en el mercado varios sistemas operativos de red! cada
uno tiene su orma de operar! proporcionando mayor se,uridad unos que
otros! por lo cual! cada uno tiene una participaci(n dierente en el mercadoO
no o&stante! una de las direcciones m)s claras para el desarrollo de sistemas
uturos es /acia estrate,ias similares de dise.o.
BONDADES $ DESVENTA.AS
%e lo expuesto se resume que! el am&iente 4liente/Servidor orece las
si,uientes venta5as0
Permite la inte,raci(n de los recursos y elementos del sistema en red.
3ncrementa a"n mas la productividad y el desempe.o de la red.
Permite el uso y comparaci(n de los sistemas y recursos
interconectados.
3ncrementa la velocidad de respuesta al usuario.
'vita el sustituir totalmente los equipos instalados.
Permite el ensam&le de las aplicaciones /eredadas :le,ancy systems;
ya existentes con las aplicaciones y sot2are que se est)n
desarrollando.
Permite la inte,raci(n a&ierta en plataormas multivendor.
9educe los costos de mantenimiento de sot2are.
#,ili+a el tr)ico en la red y tiempos de respuesta.
$e5ora la administraci(n y el control de los procesos y recursos en red.
Propicia un am&iente para la implantaci(n de nuevas tecnolo,*as.
3ncrementa el nivel de calidad y o&tenci(n de inormaci(n.
9educe tan,i&lemente los costos del sistema una ve+ implantado la
arquitectura 4liente/Servidor.
Material de estudio Pgina: 101 de 249
Visual Basic 6.0 y SQLServer 7.0
%entro de un am&iente id(neo y "perecto" como el que se vislum&ra &a5o -sta
arquitectura! tam&i-n es importante mencionar su lado ,ris! las principales
desventa5as son0
La mi,raci(n e implantaci(n es costosa ya que se requiere de
servidores poderosos! equipos y recursos.
9equiere necesariamente de una inraestructura de comunicaci(n en
red.
Se requiere de sot2are y aplicaciones adicionales a las ya existentes
como parte del sot2are de comunicaci(n para conormar el nuevo
sistema.
Las aplicaciones para 4liente/Servidor son en ocasiones m)s comple5as
que las convencionalmente utili+adas.
#"n no existen est)ndares espec*icos y reconocidos universalmente
que re,lamenten esta arquitectura.
Sin em&ar,o! conorme la arquitectura vaya madurando se,uramente estos
puntos de5ar)n de ser desventa5as! puesto que los expertos ya tra&a5an so&re
ello para desarrollar los productos que cu&ran dic/as deiciencias.
Material de estudio Pgina: 102 de 249
Visual Basic 6.0 y SQLServer 7.0
2.2 Lue es ,'BC
Lo que dice Microsoft:
ODBC (Conectividad abierta a bases de datos)
La tecnologa proporciona una interface comn para acceder bases de datos heterogneas
basadas en SQL. ODBC esta basado en el lenguaje Estructurado de consultas (SQL) como una
norma para acceder a los datos. Esta interface proporciona interoperabilidad al mximo: no solo
la aplicacin puede acceder bases de datos de diferentes Sistemas basados en SQL, a travs de
un juego comn de cdigo. Esto le permite a un diseador construir y distribuir una aplicacin
cliente/servidor sin tener un DBMS especfico. Se agregan drivers para unir la aplicacin, a la
base de datos destino, con el fin de que el usuario elija el DBMS deseado.
La fIexibiIidad de ODBC se caracteriza por:
ODBC esta diseado con la interface de nivel de llamadas estndar de la SO
No se atan aplicaciones a un propietario AP.
Las declaraciones SQL pueden ser incluidas explcitamente en cdigo fuente o construidas
en tiempo de ejecucin de la aplicacin.
Una aplicacin puede ignorar los datos subyacentes de los protocolos de comunicaciones.
Pueden enviarse y recibirse datos en un formato conveniente a la aplicacin.
Existen ms de 55 drivers para accesar a las bases de datos ms populares.
Material de estudio Pgina: 103 de 249
Visual Basic 6.0 y SQLServer 7.0
Lo que pienso:
ODBC es un intermediario entre bases de datos y aplicaciones, cuya tarea es sostener una
conversacin de preguntas y respuestas entre dos "sujetos" que no hablan el mismo idioma y que
gestionan sus recursos de forma diferente, esto es una abstraccin de un concepto muy
tecnificado. Concretando, puedes tener un CAD, una hoja de calculo, un editor de texto, etc.,
cuyas finalidades son las que quieras, menos gestionar datos en la forma que lo hace un sistema
de base de datos; estas aplicaciones no saben como se obtienen y se guardan datos en, por
ejemplo, un archivo MDB de Microsoft Access, o en un DBF, o en SQL Server, o en algn otro.
Por otra parte, pero en lo mismo, que tal si un usuario de Paradox quiere extraer informacin de
SQL Pato, un nuevo sistema de lo ms avanzado que nadie conoce pero que alguien uso para
guardar informacin que resulta necesaria (no sabes cuntas veces sucede), ambos son sistemas
de bases de datos, Paradox conoce la forma de leer los archivos de los sistemas conocidos, pero
no los de SQL Pato.
En el ambiente Windows, Microsoft cre la tecnologa ODBC pensando en este problema. No es
una solucin de la comunidad informtica del orbe, es de Microsoft, y por eso se basa en los
impulsos estomacales del corazn de Microsoft; esto quiere decir que no se esta recomendando
esta tecnologa, sino que mientras sea en Windows, hay que usarla cuando no hay algo mejor,
punto. ODBC es una utilera que alberga controladores. La utilera sirve para gestionar los
controladores, y los controladores son los que saben "hablar" con las bases de datos. Entonces el
"acuerdo" entre Microsoft y los fabricantes de software para Windows fue: "Ustedes, que hacen
software no especifico para bases de datos, enseen, si quieren, a sus aplicaciones a
comunicarse con el armatoste llamado ODBC; y ustedes, fabricantes de bases de datos, hagan
controladores de sus sistemas para ponerlos en la utilera, si quieren que otras aplicaciones
puedan accesar su informacin".
As Excel puede leer una base de datos en Access o SQL Server, incluso SQL Pato (si es que
alguien fabric un controlador de ODBC). Siendo sinceros, esas no son todas las razones ni los
intereses por los que ODBC fue implementado, hay cierta oscuridad por ah.

En ODBC no se tiene que hacer gran cosa, es una simple tarea, se llama crear un origen de
datos, otros le denominan fuente en vez de origen.Un origen o fuente de datos consiste en el
nombre, el controlador y la base de datos. Por ejemplo, si un usuario quiere tener acceso a una
base de datos de Access, digamos que se llama Negocio.mdb, desde una hoja de clculo de
Excel para consultar su volumen de ventas por pas, este usuario crea un nuevo origen de datos
en ODBC llamado Volumen_Ventas (este es, pues, el nombre), despus selecciona un
controlador para Microsoft Access e indica el archivo de base de datos est en
"c:\LaEmpresa\Administracin\Negocio.mdb". Eso es bsicamente de lo que se trata.

Las aplicaciones creadas especficamente para Windows 95, 98 y NT usan el ODBC de 32 bits;
pero algunos sistemas conservan un ODBC de 16 bits para las aplicaciones de legado que
corran o corren en Windows 3.11.
Al iniciar ODBC de 32Bits la tres pestaas se refieren a: User DSN, System DSN y File DSN,
versin en ingls, traduciendo un poco:
User DSN: nombre del origen de datos para el usuario. A veces, una mquina es utilizada por
ms de un usuario, los orgenes de datos declarados aqu son exclusivos del usuario.
Material de estudio Pgina: 104 de 249
Visual Basic 6.0 y SQLServer 7.0
System DSN: nombre del origen de datos para el sistema. Todos los usuarios de la mquina
tienen acceso a estos orgenes de datos.
FiIe DSN: nombre del origen de datos en archivo. Se crea un archivo con la extensin DSN, que
sirve como origen de datos y puede ser distribuido a otros usuarios. Este origen es el que usa
Excel por omisin cuando hace consultas, cuidado con eso.
Otra petaa importante que es ODBC Drivers o Controladores ODBC. Aqu se ven todos los
controladores disponibles en la mquina. De est forma se puede consultar si se dispone del
controlador que se necesita y si es la versin conveniente. Regularmente los controladores de
bases de datos vienen con un programa de instalacin que los instala y quedan dados de alta en
esta lista.
Las otras pestaas merecen explicarse aparte, ya que estn fuera del alcance de este curso.
2.+ Cone*iones Cliente M 7er#idor.
La comprensin del paradigma cliente - servidor contribuye a la correcta implementacin de
servidores de motores de bases de datos remotos. Los programadores que no tengan
experiencia en el desarrollo cliente - servidor pueden cometer fcilmente errores que hagan
que sus aplicaciones fallen o tengan un rendimiento bajo. Dichos fallos pueden conducirles a
malinterpretar el concepto cliente - servidor o los componentes de desarrollo utilizados para
desplegar el sistema.
Por ejemplo, el diseo de tablas con demasiadas columnas o que no estn correctamente
normalizadas puede privar de muchas de las ventajas del modelo de base de datos relacional.
Los diseos que extraen tablas enteras o que crean cursores que contienen demasiadas filas
tambin pueden conducir a un rendimiento no deseado, independientemente del modelo de
programacin.
La programacin de aplicaciones para sistemas de servidores centrales, especialmente para
sistemas que tienen acceso a grandes cantidades de datos o tienen cientos de usuarios, es
muy diferente de la programacin de sistemas de bases de datos basados en SAM planos.
Cuando desarrolle una aplicacin que tenga acceso a una base de datos remota, debe
implementar un modelo relacional cuidadosamente diseado. Aunque es algo que podra dejar
para una fecha posterior en un intento de mejorar el rendimiento, sera como intentar modificar
el stano de su casa despus de haber terminado el ltimo piso.
Antes de tomar la decisin final sobre el modelo de programacin que va a implementar, debe
tener en cuenta una serie de aspectos que afectan al diseo independientemente del modelo.
Para tener acceso a un servidor remoto, su aplicacin tiene que establecer una conexin. Esta
cone*i"n crea un vnculo de comunicaciones en la red entre el servidor y el cliente. A su
aplicacin se le pasa un controlador de esta conexin. Una vez creada, la conexin
proporciona acceso a un servidor especfico, a una de las bases de datos del servidor y a
cualquiera de los objetos temporales especficos de la conexin que su aplicacin cree en el
servidor.
Material de estudio Pgina: 105 de 249
Visual Basic 6.0 y SQLServer 7.0
2.4 Establecimiento de cone*iones clienteNser#idor.
Dependiendo del modelo de programacin cliente-servidor de acceso a datos que elija, puede
establecer una conexin con un servidor remoto desde el cdigo con los siguientes mtodos
descritos.
En Visual Basic, existen tres formas de acceso a datos: ActiveX Data Objects (ADO), Remote
Data Objects (RDO) y Data Access Objects (DAO). Una interface de acceso a datos es un modelo
de objetos que representan una forma de accesar datos desde una B.D. la ltima versin de
conexin es ADO es simple y ms flexible, ya que contiene la facilidad de uso de DAO y la
robustes de RDO.
Todas estas tcnicas crean una o varias conexiones que vinculan la instancia especfica de
su aplicacin con el servidor remoto. En algunos casos, est limitado a un nmero de
conexiones relativamente bajo; con Microsoft SQL Server Workstation Edition son 15 o
menos. En otros casos, dicho nmero puede ser relativamente alto (32.767), como con SQL
Server Enterprise Edition. No todas estas tcnicas tienen el mismo nivel de rendimiento. Por
ejemplo, utilizar DAO para abrir directamente una base de datos remota puede ser muy
costoso en tiempo y en recursos de red.
Nota Compruebe con el administrador del servidor el nmero de conexiones disponibles.
stas pueden estar limitadas por restricciones de licencia o de recursos. Como una nica
aplicacin puede crear cualquier nmero de conexiones, el nmero de usuarios que su
servidor remoto acepta puede estar limitado por su capacidad de administrar suficientes
conexiones.
Puede que en su aplicacin no sea necesario mantener una conexin permanente con el
servidor remoto, pero en algunos casos la prdida de una conexin puede hacer que se
pierdan los objetos temporales especficos de la conexin. En un sistema multiusuario, la
administracin de las conexiones se hace mucho ms importante porque el nmero total de
usuarios conectados a una base de datos puede estar limitado por el nmero de conexiones
que utilice cada aplicacin. Dependiendo del servidor y del nmero de conexiones
disponibles, puede ser ms eficiente dejar una o varias conexiones establecidas durante toda
la vida de la aplicacin. En otros casos, puede que tenga que abrir y cerrar conexiones lo ms
rpidamente para dar cabida a otros usuarios debido al nmero limitado de controladores de
conexin. Asegrese de que la interfaz de programacin que elija acepte una estrategia de
conexin adecuada.
La mayora de los modelos de programacin de acceso a datos utilizan esquemas de bloqueo
de pginas de 2 KB. Generalmente, esto significa que cuando una fila (registro) queda
bloqueada para su actualizacin, toda la pgina (y todas las dems filas de la pgina) tambin
permanecen bloqueadas durante la operacin. Algunas veces, cuando la operacin de
actualizacin o eliminacin afecta a un gran nmero de filas, el DBMS puede pasar los
bloqueos de pgina a bloqueos de tabla para acelerar el proceso. Cuando se utiliza SQL
Server , puede controlar el nmero de bloqueos de pgina que provocan el bloqueo de la
tabla mediante el uso de opciones de escalado del bloqueo. Tambin puede especificar el
bloqueo de fila en los sistemas SQL Server
Todas las filas de una pgina de datos pertenecen a la misma tabla. Por este motivo, puede
aliviar las situaciones de bloqueo si modifica la distribucin de las columnas en su base de
datos. Este proceso de normalizacin distribuye la informacin de las columnas sobre tablas
relacionadas. Si su tabla tiene un tamao de fila que se aproxima al lmite de 2 KB,
probablemente necesite implementar cierto grado de normaliOaci"n, lo que minimiza la
Material de estudio Pgina: 106 de 249
Visual Basic 6.0 y SQLServer 7.0
duplicacin de informacin en una base de datos relacional mediante un diseo eficiente de
las tablas.
Nota Si el tamao de una fila individual es mayor de 1 KB, en cada pgina de 2 KB slo se
coloca un fila porque las filas no ocupan ms de una pgina.
2.8 Estrate%ias de blo9ueo.
Todos los modelos de programacin de acceso a datos de Visual Basic proporcionan varios
mtodos de bloqueo. A veces puede controlar el grado de bloqueo mediante:
Operaciones de transaccin (BEGN TRANS/COMMT TRANS).
Un HOLDLOCK.
Otros parmetros en las instrucciones SQL SELECT.
En general, las recomendaciones siguientes le ayudarn a definir una estrategia de bloqueo.
Asegrese de elegir una interfaz de programacin que proporcione la flexibilidad necesaria
para implementar las recomendaciones que considere importantes.
Evite las situaciones en las que varios procesos intenten realizar actualizaciones o
inserciones en la misma pgina de datos. Por ejemplo, esto puede ocurrir en una tabla no
indexada, porque todas las inserciones se aplican a la ltima pgina de la cadena. Cree
tablas distintas de historial para cada grupo de usuarios para minimizar los retrasos
provocados por esta situacin. Adems, cree un ndice agrupado para distribuir datos en
varias pginas.
Evite las transacciones que incluyan interaccin con el usuario. Como los bloqueos se
mantienen durante toda la transaccin, un nico usuario puede bloquear todo el sistema.
Haga que las transacciones que modifiquen datos sean lo ms breves posible. Cuanto ms
larga sea la transaccin, ms tiempo duran los bloqueos, bloqueando as otras actividades
y provocando un aumento en el nmero de situaciones de punto muerto.
Agrupe las transacciones en un nico lote. Problemas inesperados de red pueden retrasar
la finalizacin de las transacciones y, por tanto, la liberacin de los bloqueos.
Los sistemas SQL Server utilizan lecturas repetibles, niveles de aislamiento serializables o
SELECT con HOLDLOCK slo cuando es necesario. Las actualizaciones pueden
retrasarse esperando la liberacin de los bloqueos.
En sistemas SQL Server, reduzca el factor de ocupaci"n (que determina el porcentaje de la
pgina que SQL Server llena cuando crea un nuevo ndice sobre datos existentes) cuando
cree un ndice para evitar la posibilidad de que actualizaciones aleatorias requieran la
misma pgina. Esto es especialmente til en tablas pequeas con acceso frecuente.
Material de estudio Pgina: 107 de 249
Visual Basic 6.0 y SQLServer 7.0
3 SQL Server 7.0
Introduccin
El principal objetivo de una base de datos de Microsoft SQL Server es almacenar datos y,
posteriormente, poner esos datos a disposicin de las aplicaciones y usuarios autorizados.
Mientras que los administradores de base de datos crean y mantienen las bases de datos, los
usuarios trabajan con el contenido de las mismas al:
Tener acceso o recuperar los datos existentes.
Cambiar o actualizar los datos existentes.
Agregar o insertar nuevos datos.
Eliminar los datos existentes.
El acceso y modificacin de datos en Microsoft SQL Server se realiza mediante la utilizacin de
una aplicacin o herramienta para enviar peticiones de recuperacin y modificacin de datos a
SQL Server. Por ejemplo, puede conectarse a SQL Server con el Administrador corporativo de
SQL Server, el Analizador de consultas de SQL Server o la herramienta osqI, y empezar a
trabajar con los datos de SQL Server.
Las aplicaciones y herramientas usan dos componentes para tener acceso a SQL Server:
nterfaces de programacin de aplicacin de base de datos (AP) para enviar comandos a
SQL Server y recuperar el resultado de esos comandos. Estas AP pueden ser AP de
base de datos de propsito general, como ADO, OLE DB, ODBC o bibliotecas de bases
de datos. Tambin pueden ser AP diseadas especficamente para usar las
caractersticas especiales de SQL Server, como SQL-DMO, SQL-DTS o los componentes
de duplicacin de SQL Server.
Los comandos enviados a SQL Server son instrucciones de Transact-SQL.
Las instrucciones de Transact-SQL se generan con el lenguaje SQL definido en la
Referencia de Transact-SQL. La mayor parte de estas operaciones se implementa
usando una de las siguientes cuatro instrucciones de Transact-SQL:
La instruccin SELECT se usa para recuperar los datos existentes.
La instruccin UPDATE se usa para cambiar los datos existentes.
La instruccin NSERT se usa para agregar nuevas filas de datos.
La instruccin DELETE se usa para quitar filas que ya no son necesarias.
Estas cuatro instrucciones forman el ncleo del lenguaje SQL. Cuando se comprenda cmo
funcionan estas cuatro instrucciones, se habr entendido en gran medida cmo funciona SQL.
Las herramientas de consulta grficas o basadas en formularios no requieren ningn
conocimiento de SQL. Presentan al usuario una representacin grfica de la tabla. El usuario
puede seleccionar grficamente las columnas y especificar con facilidad cmo calificar las filas
que desea recuperar.
Algunas aplicaciones, como, por ejemplo, el Analizador de consultas de SQL Server y la
herramienta osqI, son programas para ejecutar instrucciones de Transact-SQL. Las herramientas
ejecutan las instrucciones de Transact-SQL introducidas interactivamente o ledas de un archivo.
Para usar estas herramientas, debe ser capaz de construir instrucciones de Transact-SQL.
Las aplicaciones escritas para las AP de base de datos de propsito general, como, por ejemplo,
ADO, OLE DB, ODBC o bibliotecas de bases de datos, tambin envan instrucciones de Transact-
Material de estudio Pgina: 108 de 249
Visual Basic 6.0 y SQLServer 7.0
SQL a SQL Server. Estas aplicaciones presentan al usuario una interfaz que refleja la funcin de
empresa que implementan. Cuando el usuario ha indicado qu funcin de empresa debe
realizarse, la aplicacin usa una de las AP de base de datos para pasar instrucciones SQL a SQL
Server. Para codificar estos tipos de aplicaciones, debe conocer las instrucciones de Transact-
SQL.
Otras aplicaciones, como el Administrador corporativo de SQL Server, usan un modelo de objetos
que aumenta la eficiencia de la utilizacin de SQL Server. El Administrador corporativo de SQL
Server usa un modelo de objetos que facilita la tarea de administrar los distintos servidores SQL
Server. Las AP como SQL-DMO y SQL-DTS, y los componentes de duplicacin usan tambin
modelos similares de objetos. Sin embargo, los propios objetos se comunican con SQL Server
mediante Transact-SQL. Entender el lenguaje Transact-SQL puede ayudarle a comprender estos
objetos.
Material de estudio Pgina: 109 de 249
Visual Basic 6.0 y SQLServer 7.0
Crear instrucciones de Transact-SQL
En los fundamentos del acceso y modificacin de los datos se explican los elementos bsicos
usados para crear instrucciones de Transact-SQL. Tambin se proporciona informacin acerca de
las funciones que Transact-SQL puede realizar, as como de la funcionalidad similar que ofrecen
las AP de bases de datos.
Una instruccin SELECT contiene los elementos comunes usados en las instrucciones de
Transact-SQL. Por ejemplo, para seleccionar los nombres, nombres de contacto y nmeros de
telfono de los clientes que viven en Estados Unidos de la tabla Customers de la base de datos
Northwind, se usan estos elementos:
El nombre de la base de datos que contiene la tabla (Northwind)
El nombre de la tabla que contiene los datos (Customers)
Una lista de las columnas cuyos datos se van a devolver (CompanyName,
ContactName, Phone)
Los criterios de seleccin (slo para los clientes que viven en Estados Unidos)
A continuacin se muestra la sintaxis de Transact-SQL utilizada para recuperar esta informacin:
SE>ECT Co#%an4$a#e, Conta't$a#e, :5one
&!BM $ort5Lind6dbo6Cu"to#er"
T-E!E Countr4 8 .HS,.
Entre los elementos adicionales usados en instrucciones de Transact-SQL se encuentran:
Funciones
Las funciones se usan en las consultas, informes y muchas instrucciones de Transact-
SQL de SQL Server para devolver informacin, de forma parecida a como se utilizan las
funciones de otros lenguajes de programacin. Toman parmetros de entrada y
devuelven un valor que se puede usar en las expresiones. Por ejemplo, la funcin
DATEDFF toma dos fechas y una parte de una fecha (semanas, das, meses, etc.) como
argumentos y devuelve el nmero de unidades de parte de fecha que hay entre dos
fechas.
dentificadores
Los identificadores son los nombres dados a los objetos, como, por ejemplo, tablas,
vistas, bases de datos e ndices. Un identificador se puede especificar sin delimitadores
(por ejemplo, TEST), con delimitadores entre comillas (por ejemplo, "TEST") o entre
corchetes (por ejemplo, [TEST]).
Comentarios
Los comentarios son fragmentos de texto que no se ejecutan en el cdigo del programa.
Expresiones
Las expresiones incluyen valores de constantes o literales (por ejemplo, 5 es un literal
numrico), funciones, nombres de columna, aritmtica, operaciones de bits, subconsultas
escalares, funciones CASE, funciones COALESCE y funciones NULLF.
Palabras clave reservadas
Las palabras que SQL Server reserva para su propio funcionamiento. Se recomienda
evitar la utilizacin como identificadores de estas palabras clave reservadas.
Valores NULL
Material de estudio Pgina: 110 de 249
Visual Basic 6.0 y SQLServer 7.0
Los valores NULL son aquellos que son desconocidos. Puede usar valores NULL para
indicar que la informacin se proporcionar posteriormente. Por ejemplo, si la persona de
contacto de la empresa Comercio Leka cambia y no se conoce la nueva persona de
contacto, podra indicar que su nombre es desconocido con un valor NULL.
Tipos de datos
Los tipos de datos definen el formato en el que se almacenan los datos. Por ejemplo,
puede usar cualquiera de los tipos de datos de carcter o Unicode (char, varchar, nchar
o nvarchar) para almacenar los datos de carcter como, por ejemplo, los nombres de los
clientes.
Lotes
Los lotes son grupos de instrucciones transmitidas y ejecutadas como una unidad.
Algunas instrucciones de Transact-SQL no se pueden agrupar en un lote. Por ejemplo,
para crear cinco tablas nuevas en la base de datos pubs, cada instruccin CREATE
TABLE debe encontrarse en su propio lote o unidad. A continuacin se muestra un
ejemplo de un lote de Transact-SQL:
HSE $ort5Lind
SE>ECT @
&!BM Cu"to#er"
T-E!E !egion 8 .T,.
,$* Countr4 8 .HS,.
B!*E! <X :o"ta0Code ,SC, Cu"to#erI* ,SC
H:*,TE E#%0o4ee"
SET Cit4 8 .Mi""ou0a.
T-E!E Cu"to#erI* 8 .T-EC!.
GB
Lenguaje de control de flujo
El lenguaje de control de flujo permite al cdigo del programa emprender una accin en
funcin de que se cumpla o no alguna condicin. Por ejemplo, F (si) la cantidad de
productos pedida es igual o menor que la cantidad de productos almacenada
actualmente, THEN (entonces) necesitamos pedir ms productos.
Operadores
SQL Server incluye operadores que permiten la ejecucin de ciertas acciones en los
datos. Por ejemplo, mediante la utilizacin de operadores aritmticos puede realizar
operaciones matemticas como, por ejemplo, sumas y restas en los datos.
Para realizar procesos que no se pueden llevar a cabo con una sola instruccin de Transact-SQL,
Microsoft SQL Server permite agrupar instrucciones de Transact-SQL de varias formas:
Usar lotes
Un lote es un grupo compuesto por una o varias instrucciones de Transact-SQL que se
envan desde una aplicacin al servidor como una unidad. SQL Server ejecuta cada lote
como una unidad ejecutable individual.
Utilizar procedimientos almacenados
Un procedimiento almacenado es un grupo de instrucciones de Transact-SQL que han
sido definidas y compiladas previamente en el servidor. El procedimiento almacenado
puede aceptar parmetros y devolver conjuntos de resultados, cdigos de retorno y
parmetros de salida a la aplicacin que realiza la llamada.
Utilizar desencadenadores
Material de estudio Pgina: 111 de 249
Visual Basic 6.0 y SQLServer 7.0
Un desencadenador es un tipo especial de procedimiento almacenado. No es llamado
directamente por las aplicaciones. En su lugar, se ejecuta cuando un usuario realiza una
modificacin determinada (NSERT, UPDATE o DELETE) en una tabla.
Utilizar secuencias de comandos
Una secuencia de comandos es una serie de instrucciones de Transact-SQL
almacenadas en un archivo. El archivo se puede usar como entrada para la herramienta
osqI o para el Analizador de consultas de SQL Server. Las herramientas ejecutarn
entonces las instrucciones de Transact-SQL almacenadas en el archivo.
Las siguientes caractersticas de SQL Server permiten controlar la utilizacin de varias
instrucciones de Transact-SQL a la vez:
nstrucciones de control de flujo
Le permiten incluir lgica condicional. Por ejemplo, si el pas es Canad, se realiza una
serie de instrucciones de Transact-SQL. Si el pas es Reino Unido, se realiza otra serie de
instrucciones de Transact-SQL.
Variables
Le permiten almacenar datos para ser utilizados posteriormente como entrada de una
instruccin de Transact-SQL. Por ejemplo, puede que tenga que codificar una consulta
que necesite especificar distintos valores de datos en la clusula WHERE cada vez que
se ejecuta la consulta. Puede escribir la consulta para que use variables en la clusula
WHERE y codificar la lgica para que rellene las variables con los datos adecuados. Los
parmetros de los procedimientos almacenados son una clase especial de variables.
Tratamiento de errores
Le permite personalizar la forma en la que SQL Server responde a los problemas. Pueden
especificar las acciones apropiadas que se llevarn a cabo cuando se produzcan errores,
o generar mensajes de error personalizados que sean ms informativos para el usuario
que los errores genricos de SQL Server.
Material de estudio Pgina: 112 de 249
Visual Basic 6.0 y SQLServer 7.0
+.1 3ermisos
Cada objeto de una base de datos de Microsoft SQL Server tiene un propietario, normalmente el
identificador del usuario activo en la conexin en que se cre el objeto. Otros usuarios no pueden
tener acceso a ese objeto hasta que el propietario autorice a sus identificadores de usuario para
que tengan acceso al objeto.
Ciertas instrucciones de Transact-SQL tambin estn limitadas a determinados identificadores de
usuario. Por ejemplo, la instruccin CREATE DATABASE est limitada a los miembros de las
funciones fijas de servidor sysadmin y dbcreator. Los usuarios no pueden tener acceso a un
objeto o ejecutar una instruccin a menos que hayan sido autorizados a hacerlo.
Todas las instrucciones de Transact-SQL que emite un usuario estn sujetas a los permisos que
ste ha recibido. Los miembros de la funcin fija de servidor sysadmin, los miembros de la
funcin fija de base de datos dbowner y los propietarios de objetos de base de datos pueden
conceder, denegar o revocar permisos a una persona o funcin. Cuando use Transact-SQL,
utilice las instrucciones GRANT, DENY y REVOKE para especificar quin puede usar qu
instrucciones de modificacin de datos:
GRANT da permisos para trabajar con datos o ejecutar otras instrucciones de Transact-
SQL.
DENY deniega un permiso e impide que el usuario, grupo o funcin especificada herede
el permiso a travs de su pertenencia a un grupo o funcin.
REVOKE quita los permisos concedidos o denegados previamente.
Los permisos que se pueden conceder a los objetos son:
SELECT :Permite a un usuario emitir instrucciones SELECT en una tabla o vista.
NSERT :Permite a un usuario emitir instrucciones NSERT en una tabla o vista.
UPDATE:Permite a un usuario emitir instrucciones UPDATE en una tabla o vista.
DELETE :Permite a un usuario emitir instrucciones DELETE en una tabla o vista.
REFERENCES :Permite a un usuario insertar una fila en una tabla que tiene una clave
externa, que hace referencia a la tabla que se nombra en la instruccin GRANT, DENY y
REVOKE.
EXECUTE :Permite a un usuario emitir instrucciones EXECUTE en un procedimiento
almacenado.
Los permisos se pueden conceder tambin para ejecutar instrucciones de Transact-SQL que
normalmente estn limitadas a los miembros de una funcin determinada. Por ejemplo, un
miembro de la funcin fija de servidor sysadmin puede conceder permisos de CREATE
DATABASE a un usuario que normalmente no podra crear bases de datos.
Material de estudio Pgina: 113 de 249
Visual Basic 6.0 y SQLServer 7.0
+.2 0tiliOar las opciones de 7L: 7er#er
Microsoft SQL Server proporciona opciones que afectan al resultado y rendimiento de las
instrucciones SQL. Transact-SQL permite establecer estas opciones de las siguientes maneras:
Las opciones de configuracin del servidor se establecen mediante el procedimiento
almacenado sp_configure.
Las opciones de base de datos se establecen al ejecutar el procedimiento almacenado
sp_dboptions.
El nivel de compatibilidad de la base de datos se establece mediante la ejecucin del
procedimiento almacenado sp_dbcmptIeveI.
Las opciones de conexin (opciones SET) se especifican con instrucciones SET, como,
por ejemplo, SET ANS_PADDNG y SET ANS_NULLS.
Las opciones de instruccin (sugerencias de consultas, de tablas y de combinacin) se
especifican en instrucciones individuales de Transact-SQL.
Las aplicaciones ODBC pueden especificar opciones de conexin que controlan algunas de las
opciones de ANS SET. El controlador ODBC de SQL Server y Microsoft OLE DB Provider for
SQL Server establecen de forma predeterminada varias opciones SET. Las opciones se pueden
establecer tambin mediante el Administrador corporativo de SQL Server.
erar!u"a de opciones
Cuando una opcin se admite en ms de un nivel:
1. Una opcin de base de datos anula una opcin de servidor.
2. Una opcin SET anula una opcin de base de datos.
3. Un sugerencia anula una opcin SET.
Nota sp_configure proporciona la opcin user options, que permite cambiar los valores
predeterminados de varias opciones SET. Aunque user options parece una opcin del servidor,
es una opcin SET.
Material de estudio Pgina: 114 de 249
Visual Basic 6.0 y SQLServer 7.0
3.2.1 Opciones SET
En esta tabla se incluye una lista alfabtica de opciones SET y las correspondientes opciones de
base de datos y de servidor que se admiten en Microsoft SQL Server.
OPCIN SET OPCIN DE BASE DE DATOS OPCIN DE SERVIDOR
VaIor pre-
determinado
ANS_NULL_DFLT_ON
ANS_NULL_DFLT_OFF
ANSI nuII defauIt
(vaIor NULL ANSI
predeterminado)
user options asigna
valor predeterminado
OFF
ANS_NULLS
VaIores NULL ANSI
(ANSI nuIIs)
user options asigna
valor predeterminado
OFF
ANS_PADDNG Ninguno
user options asigna
valor predeterminado
ON
ANS_WARNNGS
Advertencias ANSI
(ANSI warnings)
user options asigna
valor predeterminado
OFF
CONCAT_NULL_YELDS_NULL
EI resuItado de Ia
concatenacin con nuII
es nuII
(concat nuII yieIds nuII)
Ninguno OFF
CURSOR_CLOSE_ON
_COMMT
Cierre de cursor aI confirmar
(cursor cIose on commit)
User options asigna
valor predeterminado
OFF
MPLCT_TRANSACTONS Ninguno
User options asigna
valor predeterminado
OFF
QUOTED_DENTFER
Identificador entre comiIIas
(quoted identifier)
User options asigna
valor predeterminado
OFF
ANS_DEFAULTS Ninguno Ninguno N/D
ARTHABORT Ninguno
User options asigna
valor predeterminado
OFF
ARTHGNORE Ninguno
User options asigna
valor predeterminado
OFF
DATEFRST Ninguno Ninguno 7
DATEFORMAT Ninguno Ninguno mdy
DEADLOCK_PRORTY Ninguno Ninguno NORMAL
DSABLE_DEF_CNST_CHK Ninguno
User options asigna
valor predeterminado
OFF
FPS_FLAGGER Ninguno Ninguno OFF
FMTONLY Ninguno Ninguno OFF
FORCEPLAN Ninguno Ninguno OFF
DENTTY_NSERT Ninguno OFF
LANGUAGE Ninguno Ninguno us_engIish
LOCK_TMEOUT Ninguno Ninguno Sin lmite
NOCOUNT Ninguno
User options asigna
valor predeterminado
OFF
NOEXEC Ninguno Ninguno OFF
NUMERC_ROUNDABORT Ninguno Ninguno OFF
OFFSETS Ninguno Ninguno OFF
PARSEONLY Ninguno Ninguno OFF
PROCD Ninguno Ninguno OFF
QUERY_GOVERNOR_COST_LM
T
Ninguno
Lmite deI administrador
de consuItas
OFF
REMOTE_PROC_TRANSACTON
S
Ninguno Ninguno OFF
ROWCOUNT Ninguno Ninguno OFF
SHOWPLAN_ALL Ninguno Ninguno OFF
SHOWPLAN_TEXT Ninguno Ninguno OFF
STATSTCS O Ninguno Ninguno OFF
STATSTCS_PROFLE Ninguno Ninguno N/D
Material de estudio Pgina: 115 de 249
Visual Basic 6.0 y SQLServer 7.0
STATSTCS TME Ninguno Ninguno OFF
TEXTSZE Ninguno Ninguno OFF
TRANSACTON SOLATON
LEVEL
Ninguno Ninguno N/D
XACT_ABORT Ninguno Ninguno OFF
#pciones SET de tie$po de an%lisis & tie$po de e'ecucin
El momento en el que las opciones SET surten efecto depende de si la opcin es una opcin de
tiempo de anlisis o de tiempo de ejecucin. Las opciones de tiempo de anlisis surten efecto
durante el anlisis, segn se encuentran las opciones en el texto, sin tener en cuenta las
instrucciones de control de flujo. Las opciones de tiempo de ejecucin surten efecto durante la
ejecucin del cdigo en el que se especifican. Si la ejecucin falla antes de que se haya
ejecutado la instruccin SET, la opcin no se establece. Si la ejecucin falla una vez ejecutada la
instruccin SET, la opcin se habr establecido.
Las opciones QUOTED_DENTFER, PARSEONLY, OFFSETS y FPS_FLAGGER son de tiempo
de anlisis. El resto de las opciones SET son de tiempo de ejecucin.
Las instrucciones SET QUOTED_DENTFER y SET ANS_NULLS que se producen en un lote o
procedimiento almacenado no afectan al lote o al procedimiento almacenado. En su lugar, la
configuracin que se utiliza para las instrucciones de un lote o procedimiento almacenado es la
que hay cuando se crea el lote o procedimiento almacenado.
Duracin de las opciones SET
En esta seccin se describe la duracin de las opciones SET.
Las opciones SET que establece un usuario en una secuencia de comandos se aplican
hasta que se restablezcan o hasta que se termine la sesin del usuario con el servidor.
Las opciones SET que se establecen en un procedimiento almacenado o
desencadenador se aplican hasta que se restablezcan en el procedimiento almacenado o
desencadenador, o hasta que el control retorne al cdigo que los llam.
A menos que se restablezcan de forma explcita, los valores de las opciones SET de
todos los cdigos de mayor nivel se aplican en un procedimiento almacenado o
desencadenador.
A menos que se restablezcan de forma implcita o explcita, las opciones SET que se han
establecido para una conexin se aplican despus de conectarse a una base de datos
distinta.
Nota Una consideracin adicional es que cuando un usuario se conecta a una base de
datos, algunas opciones se pueden establecer a ON (activada) automticamente, en
funcin de los valores especificados por el uso anterior de la opcin de servidor user
options o los valores que se aplican a todas las conexiones ODBC y OLE DB.
#pcin SET con acceso directo
Transact-SQL proporciona la instruccin SET ANS_DEFAULTS como acceso directo para
establecer estas opciones estndar de SQL-92:
SET ANS_NULLS
SET CURSOR_CLOSE_ON_COMMT
Material de estudio Pgina: 116 de 249
Visual Basic 6.0 y SQLServer 7.0
SET ANS_NULL_DFLT_ON
SET MPLCT_TRANSACTONS
SET ANS_PADDNG
SET QUOTED_DENTFER
SET ANS_WARNNGS
El acceso directo restablece los valores de estas opciones. Cualquier opcin individual
establecida una vez que se ha utilizado el acceso directo anula el valor correspondiente
establecido por el mismo.
Nota SET ANS_DEFAULTS no establece todas las opciones necesarias para cumplir el estndar
SQL-92.
Material de estudio Pgina: 117 de 249
Visual Basic 6.0 y SQLServer 7.0
3.2.2 Opciones de base de datos
En esta tabla se enumeran en orden alfabtico las opciones de base de datos y las
correspondientes opciones SET y de servidor que se admiten en Microsoft SQL Server.
Opcin de base de datos Opcin SET
Opcin de servidor
VaIor
predeterminad
o
ANSI nuII defauIt (vaIor
NULL ANSI
predeterminado)
ANS_NULL_DFLT_ON
ANS_NULL_DFLT_OFF
user options asigna valor
predeterminado
OFF
ANSI nuIIs (VaIores
NULL ANSI)
ANS_NULLS
user options asigna valor
predeterminado
OFF
ANSI warnings
(Advertencias ANSI)
ANS_WARNNGS
user options asigna valor
predeterminado
OFF
auto create statistics
(crear estadsticas
automticamente)
Ninguno Ninguno ON
auto update statistics
(actuaIizar estadsticas
automticamente)
Ninguno Ninguno ON
autocIose (cerrar
automticamente)
Ninguno Ninguno FALSE
autoshrink (reduccin
automtica)
Ninguno Ninguno FALSE
concat nuII yieIds nuII (eI
resuItado de Ia
concatenacin con nuII
es nuII)
CONCAT_NULL_YELDS_NULL
Ninguno OFF
cursor cIose on commit
(cierre de cursor aI
confirmar)
CURSOR_CLOSE_ON
_COMMT
user options asigna valor
predeterminado
OFF
dbo use onIy (sIo para
uso deI dbo)
Ninguno Ninguno FALSE
defauIt to IocaI cursor
(toma como
predeterminado eI cursor
IocaI)
Ninguno Ninguno FALSE
merge pubIish
(pubIicacin de mezcIa)
Ninguno Ninguno FALSE
offIine (sin conexin) Ninguno Ninguno FALSE
pubIished (pubIicado) Ninguno Ninguno FALSE
quoted identifier
(identificador entre
comiIIas)
QUOTED_DENTFER
user options asigna valor
predeterminado
OFF
read onIy (de sIo
Iectura)
Ninguno Ninguno FALSE
recursive triggers
(desencadenadores
recursivos)
Ninguno Ninguno FALSE
seIect into/ buIkcopy
(seIect into o copia
masiva)
Ninguno Ninguno FALSE
singIe user (un nico
usuario)
Ninguno Ninguno FALSE
Material de estudio Pgina: 118 de 249
Visual Basic 6.0 y SQLServer 7.0
subscribed (suscrito) Ninguno Ninguno TRUE
torn page detection
(deteccin de pgina
rasgada)
Ninguno TRUE
trunc. Iog on chkpt.
(truncar registro en
punto de comprobacin)
Ninguno Ninguno TRUE
Las opciones predeterminadas de base de datos para una base de datos nueva son las que se
han definido en la base de datos modeI. En las instalaciones nuevas de SQL Server, la
configuracin de las bases de datos modeI y master es la misma.
Un cambio en una opcin de base de datos obliga a que se tenga que volver a compilar todo lo
que hay en la cach.
#pciones & conte(to de )ase de datos
El contexto de base de datos de las secuencias de comandos y los lotes dentro de las mismas
viene determinado por la conexin ms reciente. La conexin se puede establecer explcitamente
con la instruccin USE en Transact-SQL y con mtodos implcitos y explcitos en otros entornos,
como OBDC y OLE DB.
Cuando se ejecuta un procedimiento almacenado desde un lote o desde otro procedimiento
almacenado, la ejecucin se hace con las opciones establecidas en ese momento en la base de
datos que contiene el procedimiento almacenado. Por ejemplo, cuando el procedimiento
almacenado db1.dbo.sp1 llama al procedimiento almacenado db2.dbo.sp2, sp1 se ejecuta con
la opcin de nivel de compatibilidad actual de la base de datos db1 y sp2 se ejecuta con la opcin
de nivel de compatibilidad actual de la base de datos db2.
Cuando una instruccin de Transact-SQL se refiere a objetos que residen en varias bases de
datos, se le aplica el contexto de base de datos actual y de conexin actual (la base de datos
definida con la instruccin USE, si se trata de un lote, o la que contiene el procedimiento
almacenado en el caso de un procedimiento almacenado).
Material de estudio Pgina: 119 de 249
Visual Basic 6.0 y SQLServer 7.0
3.2.3 Opciones de servidor
En esta tabla se enumeran en orden alfabtico las opciones de servidor y las opciones
correspondientes de base de datos y SET que se admiten en Microsoft SQL Server .
Opcin de servidor Opcin SET
Opcin de
base de datos
VaIor
predeterminado
affinity mask (mscara de afinidad) Ninguno Ninguno 0
aIIow updates (permitir actuaIizaciones) Ninguno Ninguno OFF
cost threshoId for paraIIeIism (umbraI de
costo deI paraIeIismo)
Ninguno Ninguno 5
cursor threshoId (umbraI deI cursor) Ninguno Ninguno -1
defauIt Ianguage (idioma predeterminado) Ninguno Ninguno 0
defauIt sortorderid (id. predeterminado de
orden)
Ninguno Ninguno 52
extended memory size (tamao de memoria
extendida)
Ninguno Ninguno 0
fiII factor (factor de reIIeno) Ninguno Ninguno 0
index create memory (memoria para creacin
de ndices)
Ninguno Ninguno 2048
Ianguage in cache (idioma en cach) Ninguno Ninguno 3
Ianguage neutraI fuII-text (texto independiente
deI idioma)
Ninguno Ninguno 0
Iightweight pooIing (agrupacin compacta) -1
Iocks (bIoqueos) Ninguno Ninguno 0
max async io (mx. de E/S asincrnica) Ninguno Ninguno 32
max degree of paraIIeIism (mximo grado de
paraIeIismo)
Ninguno Ninguno 0
max server memory (memoria mxima deI
servidor)
Ninguno Ninguno 2147483647
max text repI size (tamao mximo de texto
reempIazado)
Ninguno Ninguno 65536
max worker threads (mx. de subprocesos
secundarios)
Ninguno Ninguno 255
media retention (conservacin de medio) Ninguno Ninguno 0
min memory per query (mn. de memoria por
consuIta)
Ninguno Ninguno 1024
min server memory (memoria mnima deI
servidor)
Ninguno Ninguno 0
nested triggers (desencadenadores anidados) Ninguno Ninguno 1
network packet size (tamao deI paquete de
red)
Ninguno Ninguno 4096
open objects (objetos abiertos) Ninguno Ninguno 0
priority boost (aumento de prioridad) Ninguno Ninguno 0
query governor cost Iimit (Imite deI
administrador de consuItas)
QUERY_GOVERNOR_COST_LM
T
Ninguno 0
query wait (espera de consuIta) Ninguno Ninguno 600
recovery intervaI (intervaIo de recuperacin) Ninguno Ninguno 5
remote access (acceso remoto) Ninguno Ninguno 1
remote Iogin timeout (tiempo de espera de
inicio de sesin remoto)
Ninguno Ninguno 30
remote proc trans (transaccin de
procedimiento remoto)
Ninguno Ninguno 0
remote query timeout (tiempo de espera de
consuIta remota)
Ninguno Ninguno 0
resource timeout (tiempo de espera de Ninguno Ninguno 10
Material de estudio Pgina: 120 de 249
Visual Basic 6.0 y SQLServer 7.0
recurso)
scan for startup procs (buscar procesos de
inicio)
Ninguno Ninguno 0
set working set size (estabIecer eI tamao deI
conjunto de trabajo)
Ninguno Ninguno 0
show advanced options (mostrar opciones
avanzadas)
Ninguno Ninguno 1
spin counter (contador de giro) Ninguno Ninguno 0
time sIice (divisin de tiempo) Ninguno Ninguno 100
Unicode comparison styIe (estiIo de
comparacin en Unicode)
Ninguno Ninguno 1
Unicode IocaIe id (Id. IocaI de Unicode) Ninguno Ninguno 1033
user connections (conexiones de usuario) Ninguno Ninguno 0
user options (opciones de usuario)
ANS_NULL_DFLT_ON
ANS_NULL_DFLT_OFF
ANSI nuII
defauIt (vaIor
NULL ANSI
predeterminado
)
OFF
ANS_NULLS
VaIores NULL
ANSI (ANSI
nuIIs)
OFF
ANS_PADDNG Ninguno ON
ANS_WARNNGS
Advertencias
ANSI (ANSI
warnings)
OFF
CURSOR_CLOSE_ON
_COMMT
Cierre de cursor
aI confirmar
(cursor cIose on
commit)
OFF
MPLCT_TRANSACTONS Ninguno OFF
QUOTED_DENTFER
Identificador
entre comiIIas
(quoted
identifier)
OFF
ARTHABORT Ninguno OFF
ARTHGNORE Ninguno OFF
DSABLE_DEF_CNST_CHK Ninguno OFF
NOCOUNT Ninguno OFF
extended memory size (tamao de memoria
extendida)
Ninguno Ninguno 0
Material de estudio Pgina: 121 de 249
Visual Basic 6.0 y SQLServer 7.0
3.2.4 Sugerencias
En esta tabla se enumeran las opciones disponibles para las sugerencias de combinacin, de
consulta y de tabla en Microsoft SQL Server .
Tipo
sugerencia
Opcin
Descripcin
VaIor predeterminado
Combinacin
LOOP | HASH
| MERGE | REMOTE
Especifica la estrategia que utilizar al
combinar las filas de dos tablas.
Elegido por SQL Server.
Consulta { HASH | ORDER } GROUP
Especifica si se utiliza hash u orden para
calcular los agregados GROUP BY y
COMUTE.
Elegido por SQL Server.
Consulta
{ MERGE | HASH |
CONCAT } UNON
Especifica la estrategia que utilizar para todas
las operaciones UNON de la consulta.
Elegido por SQL Server.
Consulta FAST entero
Optimiza la consulta para la recuperacin del
nmero especificado de filas.
No hay tal optimizacin.
Consulta FORCE ORDER
Realiza combinaciones en el orden en que las
tablas aparecen en la consulta
Elegido por SQL Server.
Consulta ROBUST PLAN
Crea un plan que tiene en cuenta el tamao
mximo posible de fila.
Elegido por SQL Server.
Tabla FASTFRSTROW
Tiene el mismo efecto que especificar la
sugerencia de consulta FAST 1.
No hay tal optimizacin.
Tabla NDEX =
ndica a SQL Server que utilice los ndices
especificados de una tabla.
Elegido por SQL Server.
Tabla
HOLDLOCK
| SERALZABLE
| REPEATABLEREAD
| READCOMMTTED
| READUNCOMMTTED
| NOLOCK
Hace que se establezcan (o no) ciertos
bloqueos para una tabla y anula los bloqueos
que se utilizaran para exigir el nivel de
aislamiento de la transaccin actual.
Los bloqueos necesarios para
la transaccin actual.
Tabla
ROWLOCK
| PAGLOCK
| TABLOCK
| TABLOCKX
Especifica el tamao de los bloqueos
compartidos que se toman para esta tabla.
Elegido por SQL Server.
Tabla READPAST Salta todas las filas bloqueadas de una vez. Espera filas bloqueadas.
Tabla UPDLOCK
Toma bloqueos actualizados en lugar de
compartidos.
Toma bloqueos compartidos.
Material de estudio Pgina: 122 de 249
Visual Basic 6.0 y SQLServer 7.0
3.3.5 Opcin del nivel de compatibilidad de la base de datos
Transact-SQL proporciona el procedimiento almacenado sp_dbcmptIeveI que establece ciertos
comportamientos de base de datos para que sean compatibles con las versiones anteriores de
Microsoft SQL Server .
Una regla especial se aplica a la relacin entre la opcin del nivel de compatibilidad de la base de
datos, la opcin de base de datos concat nuII yieIds nuII (la concatenacin con null es null) y la
opcin SET CONCAT_NULL-YELDS_NULL. La configuracin de concat nuII yieIds nuII y
CONCAT_NULL_YELDS_NULL se pasan por alto cuando el valor del nivel de compatibilidad es
para una versin anterior a la 7.0.
El nivel de compatibilidad afecta a los comportamientos de la base de datos especificada, no a
todo el servidor. Para obtener ms informacin, consulte sp_dbcmptlevel .
3.3.6 Comportamiento cuando ARTHABORT y ARTHGNORE estn activadas
Cuando utilice la versin 2.50.0121 o posterior del controlador ODBC de Microsoft SQL Server ,
ARTHABORT asumir la prioridad si estn activadas las opciones de proceso de consultas
ARTHABORT y ARTHGNORE.
ARTHABORT y ARTHGNORE son dos opciones distintas; el hecho de activar una no implica la
desactivacin automtica de la otra. Por ejemplo, si una aplicacin contiene estas instrucciones,
ambas opciones estn activadas:
SET ,!IT-,<B!T B$
SET ,!IT-IG$B!E B$
GB
Los procedimientos almacenados que emitan una instruccin SET ARTHGNORE ON seguirn
provocando que los clientes muestren el comportamiento propio de SET ARTHABORT ON si el
cliente haba activado ARTHABORT antes de llamar al procedimiento almacenado.
Los procedimientos pueden hacer lo siguiente para garantizar que ARTHGNORE est siempre
activa, independientemente de la configuracin del cliente para ARTHABORT:
C!E,TE :!BCE*H!E exa#%0e ,S
SET ,!IT-,<B!T B&&
SET ,!IT-IG$B!E B$
KK State#ent" #aCing u% t5e "tored %ro'edure go 5ere6
GB
Siempre que se ejecute una instruccin SET en un procedimiento almacenado, la nueva
configuracin permanecer activa el tiempo que dure el procedimiento. Cuando finalice el
procedimiento, la configuracin de la conexin para esa opcin volver a su estado anterior a la
ejecucin del procedimiento. Con el cdigo mostrado anteriormente, la opcin ARTHABORT se
desactiva durante la ejecucin del procedimiento para que se active la opcin ARTHGNORE. A
continuacin, restablece la configuracin definida por la aplicacin cliente cuando finaliza el
procedimiento.
Material de estudio Pgina: 123 de 249
Visual Basic 6.0 y SQLServer 7.0
+.+ mplementaci"n $ el mantenimiento de bases de datos.
Un sistema de base de datos de cliente-servidor consta de dos componentes: programas que
proporcionan una interfaz para que los usuarios del cliente puedan tener acceso a los datos y la
estructura de base de datos que administra y almacena los datos en el servidor. Por ejemplo, si
utiliza Microsoft SQL Server para crear una aplicacin de cuentas corrientes, deber configurar
una estructura de base de datos para administrar los datos de las transacciones de las cuentas y
una aplicacin que acte como la interfaz de usuario para la base de datos con que los usuarios
tendrn acceso a la informacin de las cuentas corrientes.
Para crear una base de datos deber conocer cmo disear, crear y mantener cada uno de esos
componentes para asegurar un funcionamiento ptimo de la base de datos.
Una base de datos de Microsoft SQL Server consta de una coleccin de tablas con datos y otros
objetos como vistas, ndices, procedimientos almacenados y desencadenadores, que se definen
para poder llevar a cabo distintas operaciones con datos. Los datos almacenados en una base de
datos suelen estar relacionados con un tema o un proceso determinados como, por ejemplo, la
informacin de inventario para el almacn de una fbrica.
SQL Server puede trabajar con un gran nmero de bases de datos y cada una de ellas puede
almacenar datos interrelacionados o datos no relacionados con los de las otras bases de datos.
Por ejemplo, un servidor podra tener una base de datos en la que se almacenen datos del
personal y otra en la que se almacenen datos relacionados con los productos. Por otra parte,
puede utilizarse una base de datos para almacenar datos acerca de pedidos actuales de los
clientes y otra base de datos relacionada puede almacenar pedidos anteriores de los clientes que
se utilicen para la elaboracin de los informes anuales.
Antes de crear una base de datos, es importante entender las partes que la componen y cmo
disearlas para asegurar que la base de datos funcione correctamente una vez implementada.
Importante Se recomienda encarecidamente ( o sea que no la vallan a regar) no crear objetos de
usuario, como tablas, vistas, procedimientos almacenados o desencadenadores, en la base de
datos master. La base de datos master contiene las tablas del sistema con la informacin del
sistema que utiliza SQL Server, como los valores de las opciones de configuracin.
3.3.1 Componentes de una base de datos
Una base de datos de Microsoft SQL Server consta de una coleccin de tablas en las que se
almacena un conjunto especfico de datos estructurados. Una tabla contiene una coleccin de
filas (en ocasiones denominadas registros o tuplas) y de columnas (tambin denominadas
atributos). Cada columna de la tabla se ha diseado para almacenar un determinado tipo de
informacin (por ejemplo, fechas, nombres, importes en moneda o nmeros). Las tablas
contienen diversos tipos de controles (restricciones, reglas, desencadenadores, valores
predeterminados y tipos de datos personalizados por los usuarios), que aseguran la validez de los
datos. Las tablas pueden presentar ndices, similares a los de los libros, que permiten localizar las
filas rpidamente. Se puede agregar restricciones de integridad referencial declarativa (DR) a las
tablas con el fin de asegurar la coherencia de los datos interrelacionados que se encuentran en
tablas distintas. Asimismo, una base de datos puede almacenar procedimientos que utilicen
cdigo de programacin de Transact-SQL para realizar operaciones con los datos que contiene la
base de datos, por ejemplo, almacenar vistas que permiten el acceso personalizado a los datos
de las tablas.
Material de estudio Pgina: 124 de 249
Visual Basic 6.0 y SQLServer 7.0
3.3.2 Archivos y grupos de archivos
Microsoft SQL Server crea una base de datos mediante un conjunto de archivos del sistema
operativo. Todos los datos y objetos de la base de datos, como las tablas, los procedimientos
almacenados, los desencadenadores y las vistas, se almacenan exclusivamente en los siguientes
archivos del sistema operativo:
Principal
Este archivo contiene la informacin de inicio para la base de datos y se utiliza para
almacenar datos. Cada base de datos tiene un archivo de datos principal.
Secundario
Estos archivos contienen todos los datos que no caben en el archivo principal. Las bases
de datos no necesitan archivos de datos secundarios si el archivo principal puede
contener todos los datos de la base de datos. Algunas bases de datos pueden ser muy
grandes y necesitar varios archivos de datos secundarios, o bien utilizar archivos
secundarios en unidades de disco distintas para distribuir los datos en varios discos.
Registro de transacciones
Estos archivos contienen la informacin de registro que se utiliza para recuperar la base
de datos. Cada base de datos debe tener al menos un archivo de registro.
Por ejemplo, puede crearse una base de datos sencilla, ventas, con un archivo principal que
contenga todos los datos y objetos, y un archivo de registro que contenga la informacin del
registro de transacciones. Por otra parte, puede crearse una base de datos ms compleja,
pedidos, compuesta por un archivo principal y cinco archivos secundarios; los datos y objetos de
la base de datos se reparten entre los seis archivos, y cuatro archivos de registro adicionales
contienen la informacin del registro de transacciones.
Los grupos de archivos permiten agrupar archivos con fines administrativos y de asignacin y
ubicacin de datos. Por ejemplo, pueden crearse tres archivos (datos1.ndf, datos2.ndf y
datos3.ndf) en tres unidades de disco, respectivamente, para asignarlos posteriormente al grupo
de archivos grupoa1. A continuacin, se puede crear especficamente una tabla en el grupo de
archivos grupoa1. Las consultas de datos de la tabla se distribuirn por los tres discos, con lo que
mejorar el rendimiento. Puede obtenerse el mismo incremento en el rendimiento con un archivo
nico creado en un conjunto de bandas RAD (matriz redundante de discos econmicos). No
obstante, los archivos y los grupos de archivos le permiten agregar nuevos archivos o discos con
gran facilidad. Adems, si la base de datos supera el tamao mximo establecido para un archivo
de Microsoft Windows NT, puede utilizar archivos de datos secundarios para que la base de
datos pueda seguir creciendo.
*e+las para la de,inicin de archivos o +rupos de archivos
stas son, entre otras, las reglas para la definicin de archivos y grupos de archivos:
Un archivo o un grupo de archivos no puede ser utilizado por ms de una base de datos.
Por ejemplo, los archivos ventas.mdf y ventas.ndf, que contienen datos y objetos de la
base de datos ventas, no pueden ser utilizados por otra base de datos.
Un archivo puede pertenecer nicamente a un grupo de archivos.
Los datos y la informacin del registro de transacciones no pueden pertenecer al mismo
archivo o grupo de archivos.
Los archivos del registro de transacciones nunca pueden formar parte de un grupo de
archivos.
Material de estudio Pgina: 125 de 249
Visual Basic 6.0 y SQLServer 7.0
-.-.../ 0rupos de archivos predeter$inados
Una base de datos consta de un grupo de archivos principal y de uno o varios grupos de archivos
definidos por el usuario.
El grupo de archivos que contiene el archivo principal se denomina grupo de archivos principal.
Cuando se crea una base de datos, el grupo de archivos principal contiene el archivo de datos
principal y todos los archivos que no hayan sido asignados a otros grupos de archivos. Todas las
tablas del sistema se encuentran en el grupo de archivos principal. Si el grupo de archivos
principal se queda sin espacio, no se podr agregar ms informacin del catlogo a las tablas del
sistema. El grupo de archivos principal slo se llenar si el crecimiento automtico est
desactivado o si todos los discos que almacenan los archivos del grupo de archivos principal se
quedan sin espacio. Si es as, vuelva a activar el crecimiento automtico o mueva los archivos a
otros discos para dejar espacio libre.
Los grupos de archivos definidos por el usuario son todos los creados especficamente por el
usuario durante la creacin de la base de datos o durante una modificacin posterior. Si se llena
un grupo de archivos definido por el usuario, slo se veran afectadas las tablas de usuario
asignadas especficamente a dicho grupo de archivos.
En cualquier momento, se designa un grupo de archivos como el grupo de archivos
predeterminado (DEFAULT). Cuando se crean objetos en la base de datos sin especificar a qu
grupo de archivos pertenecen, se asignan al grupo de archivos predeterminado. El grupo de
archivos predeterminado debe ser lo suficientemente grande como para dar cabida a todos los
objetos no asignados a un grupo de archivos definido por el usuario. En principio, el grupo de
archivos principal ser el grupo de archivos predeterminado.
El grupo de archivos predeterminado puede cambiarse mediante la instruccin ALTER
DATABASE. Si se cambia el grupo de archivos predeterminado, todos los objetos no asignados a
un grupo de archivos especfico en el momento de su creacin sern asignados a los archivos de
datos del nuevo grupo de archivos predeterminado. No obstante, los objetos y las tablas del
sistema no pasan a asignarse al nuevo grupo de archivos predeterminado, sino que siguen
estando asignados al grupo de archivos principal.
El cambio del grupo de archivos predeterminado impide que los objetos de usuario que no se
hayan creado especficamente en un grupo de archivos definido por un usuario compitan por el
espacio con los objetos y las tablas del sistema.
3.3.2.2 Usar archivos y grupos de archivos
Los grupos de archivos utilizan una estrategia de relleno proporcional entre todos los archivos de
cada grupo de archivos. A medida que se escriben datos en el grupo de archivos, Microsoft SQL
Server

escribe una cantidad proporcional al espacio libre del archivo en cada archivo del grupo, en
lugar de escribir todos los datos en el primer archivo hasta que est completo antes de pasar al
archivo siguiente. Por ejemplo, si el archivo a1 tiene 100 MB de espacio libre y el archivo a2 tiene
200 MB libres, por cada cantidad de datos que se asigne al archivo a1, se asignar el doble al
archivo a2 y as sucesivamente. De ese modo, los dos archivos se llenarn aproximadamente al
mismo tiempo y se conseguir una crear banda simple.
Cuando se llenan todos los archivos de un grupo de archivos, SQL Server expande
automticamente los archivos por turnos para que quepan ms datos (siempre y cuando la base
de datos est configurada para crecer automticamente). Por ejemplo, un grupo de archivos
consta de tres archivos configurados para crecer automticamente. Cuando se agota el espacio
Material de estudio Pgina: 126 de 249
Visual Basic 6.0 y SQLServer 7.0
de todos los archivos del grupo de archivos, slo se expande el primer archivo. Cuando se llena el
primer archivo y no se pueden escribir ms datos en el grupo de archivos, se expande el segundo
archivo. Cuando se llena el segundo archivo y no pueden escribirse ms datos en el grupo de
archivos, se expande el tercer archivo. Si se llena el tercer archivo y no se pueden escribir ms
datos en el grupo de archivos, se vuelve a expandir el primer archivo, y as sucesivamente.
El uso de archivos y grupos de archivos permite mejorar el rendimiento de la base de datos al
permitir crear la base de datos en varios discos, varios controladores de disco o sistemas RAD
(matriz redundante de discos independientes). Por ejemplo, si su equipo tiene cuatro discos,
puede crear una base de datos que contenga tres archivos de datos y un archivo de registro, y
mantener un archivo en cada disco. Cuando se produce un acceso a los datos, hay cuatro
cabezales de lectura y escritura que pueden tener acceso a los datos a la vez, con lo que se
aceleran las operaciones de la base de datos.
Adems, los archivos y los grupos de archivos permiten la distribucin de los datos, ya que puede
crearse una tabla en un grupo de archivos especfico. De ese modo se aumenta el rendimiento,
dado que todas las E/S para una tabla especfica pueden dirigirse a un disco determinado. Por
ejemplo, una tabla que se utilice muy a menudo puede colocarse en un archivo de un grupo
determinado de archivos y ubicarse en un disco. Otras tablas menos utilizadas de la base de
datos pueden colocarse en archivos distintos de otro grupo de archivos, en un segundo disco.
stas son algunas recomendaciones generales referentes a los archivos y a los grupos de
archivos:
La mayor parte de las bases de datos funcionarn correctamente con un solo archivo de
datos y un solo archivo de registro de transacciones.
Si utiliza varios archivos, cree un segundo grupo de archivos para el archivo adicional y
convirtalo en el grupo de archivos predeterminado. De ese modo, el archivo principal
slo contendr objetos y tablas del sistema.
Para aumentar al mximo el rendimiento, cree archivos o grupos de archivos en tantos
discos fsicos como estn disponibles y distribuya en grupos de archivos distintos los
objetos que compitan intensamente por el espacio.
Utilice grupos de archivos para disponer los objetos en discos fsicos determinados.
Disponga en grupos de archivos distintos las diferentes tablas que se utilicen en las
mismas consultas de combinacin. De ese modo mejorar el rendimiento, debido a la
bsqueda que las operaciones de E/S realizan en paralelo en los discos para localizar
datos combinados.
Distribuya en grupos de archivos distintos las tablas de acceso frecuente y los ndices no
agrupados que pertenezcan a esas tablas. De ese modo mejorar el rendimiento, dado
que las operaciones de E/S se realizan en paralelo si los archivos se encuentran en
discos fsicos distintos.
No coloque el archivo o archivos de registro en el mismo disco fsico que los dems
archivos y grupos de archivos.
Material de estudio Pgina: 127 de 249
Visual Basic 6.0 y SQLServer 7.0
3.3.3.3 Usar archivos y grupos de archivos para administrar el crecimiento de las
bases de datos
Cuando cree una base de datos mediante archivos y grupos de archivos, deber especificar un
tamao inicial para el archivo. Microsoft SQL Server crea los archivos de datos y para ello se basa
en el tamao que se especifique. A medida que se agregan datos a la base de datos, estos
archivos se van llenando. Sin embargo, debe tener presente si la base de datos va a crecer, y
cmo, por encima del espacio inicial asignado, si se agregan ms datos a la base de datos de los
que caben en los archivos.
De forma predeterminada, SQL Server permite que los archivos de datos crezcan tanto como sea
necesario hasta que se agote el espacio de disco. Por lo tanto, si los archivos de la base de datos
no pudieran crecer ms all de los lmites especificados cuando se cre la base de datos, deber
especificarse en el momento de su creacin mediante el Administrador corporativo de SQL Server
o la instruccin CREATE DATABASE.
Por otra parte, SQL Server le permite crear archivos de datos que pueden crecer
automticamente cuando se llenan, pero slo hasta un tamao mximo definido previamente. As
se puede evitar que las unidades de disco se queden sin espacio.
*eco$endaciones
Cuando cree una base de datos, defina el mayor tamao posible para los archivos de datos y
tenga en cuenta la cantidad de datos mxima prevista para la base. Permita que los archivos de
datos crezcan automticamente, pero establezca un lmite de crecimiento mediante la
especificacin de un tamao mximo de crecimiento de los archivos de datos que deje algo de
espacio disponible en el disco duro. De ese modo, la base de datos podr crecer si se agregan
ms datos de los previstos, pero sin llegar a agotar completamente el espacio disponible en la
unidad de disco. Si se supera el tamao inicial del archivo de datos y el archivo empieza a crecer
automticamente, vuelva a realizar una previsin del tamao mximo de la base de datos,
agregue ms espacio de disco (si es preciso) y cree ms archivos o grupos de archivos y
agrguelos a la base de datos.
No obstante, si se establece que la base de datos no pueda crecer ms all de su tamao inicial,
configure el tamao de crecimiento mximo de la base de datos con el valor cero. As, los
archivos de la base de datos no podrn crecer. Si los archivos de la base de datos se llenan, no
podrn agregarse ms datos hasta que se agreguen ms archivos de datos a la base de datos o
se expandan los archivos existentes.
1ra+$entacin de archivos
Al permitirse que los archivos crezcan automticamente, se puede producir una fragmentacin de
esos archivos si un gran nmero de archivos comparten el mismo disco. Por lo tanto, se
recomienda crear los archivos o los grupos de archivos en tantos discos fsicos locales distintos
como haya disponibles. Distribuya en grupos de archivos distintos los objetos que compitan de
forma intensa por el espacio.
3.3.4 Grupos de archivos de slo lectura.
Microsoft SQL Server permite marcar los grupos de archivos como de slo lectura. Puede
marcarse como de slo lectura cualquier grupo de archivos, incluso el grupo de archivos principal.
Un grupo de archivos marcado como de slo lectura no puede ser modificado de ninguna forma.
Si el grupo de archivos principal se marca como de slo lectura, no se crearn nuevos objetos en
Material de estudio Pgina: 128 de 249
Visual Basic 6.0 y SQLServer 7.0
la base de datos. Por ejemplo, la creacin de un nuevo objeto, como una tabla, una vista, un
registro, un procedimiento almacenado o una recompilacin automtica de un procedimiento
almacenado, actualiza las tablas del sistema. Esta actualizacin no sera posible si el grupo de
archivos principal estuviera marcado como de slo lectura.
Coloque las tablas que no deban modificarse (como las de datos histricos) en uno o varios
grupos de archivos y, a continuacin, mrquelos como de slo lectura. De ese modo, se evitarn
actualizaciones accidentales. Puede hacer una copia de seguridad del grupo de archivos de slo
lectura y restaurarla en otro servidor en el que se ejecute SQL Server, sin preocuparse por la
recuperacin de los registros de transacciones.
Material de estudio Pgina: 129 de 249
Visual Basic 6.0 y SQLServer 7.0
3.3.4 Registros de transacciones
Una base de datos de Microsoft SQL Server tiene, como mnimo, un archivo de datos y un archivo
de registro de transacciones. Los datos y la informacin del registro de transacciones nunca se
mezclan en el mismo archivo, y cada archivo es utilizado por una sola base de datos.
SQL Server utiliza el registro de transacciones de cada base de datos para recuperar las
transacciones. El registro de transacciones consiste en una serie de registros de todas las
modificaciones de la base de datos y las transacciones que se han realizado en las
modificaciones. En el registro de transacciones figura el inicio de cada transaccin. Tambin se
registran los cambios de los datos y se facilita suficiente informacin para deshacer las
modificaciones (si fuera necesario posteriormente) realizadas durante la transaccin. Para
algunas operaciones largas, como la de CREATE NDEX, el registro de transacciones slo
registra que se llev a cabo la transaccin. El registro crece continuamente a medida que se
producen operaciones en la base de datos y stas se registran. El registro de transacciones
registra la asignacin y cancelacin de asignacin de pginas y la confirmacin o anulacin de
cada transaccin. Esto permite a SQL Server aplicar (confirmar) o anular (deshacer) cada
transaccin de las siguientes maneras:
Una transaccin se confirma cuando usted aplica un registro de transacciones. SQL
Server copia la imagen posterior de cada modificacin en la base de datos o vuelve a
ejecutar instrucciones como CREATE NDEX. Estas acciones se aplican en la misma
secuencia que la de las acciones originales. Al finalizar este proceso, la base de datos se
encuentra en el mismo estado en que estaba en el momento en que se realiz la copia de
seguridad del registro de transacciones.
Una transaccin se deshace si invierte una transaccin incompleta. SQL Server copia las
imgenes previas de todas las modificaciones de la base de datos desde BEGN
TRANSACTON. Si encuentra registros de transacciones que indiquen que se ejecut la
instruccin CREATE NDEX, realizar las operaciones necesarias para invertir
lgicamente la instruccin. Estas imgenes previas y las inversiones de CREATE NDEX
se aplican en orden inverso al de la secuencia original.
En un punto de comprobacin, SQL Server se asegura de que todos los registros de
transacciones y todas las pginas de la base de datos que hayan sufrido modificaciones se
escriban en el disco. Durante el proceso de recuperacin de cada base de datos que se produce
cuando se reinicia SQL Server, debe rehacerse una transaccin nicamente cuando no se sabe si
todas las modificaciones de los datos de la transaccin se escribieron realmente en el disco
desde la cach del bfer de SQL Server. Dado que un punto de comprobacin fuerza a todas las
pginas modificadas a grabarse en el disco, representa el punto en el que la recuperacin de
inicio debe empezar a rehacer transacciones. Debido a que se garantiza que todas las pginas
modificadas antes del punto de comprobacin estn en el disco, no es necesario rehacer ninguna
operacin que se haya realizado antes del punto de comprobacin.
3.3.4.1 Operaciones no registradas
Si la opcin de la base de datos seIect into/buIkcopy (select into o copia masiva) est
configurada con el valor TRUE (verdadero), Microsoft SQL Server no registrar los detalles
completos de las operaciones siguientes en el registro de transacciones:
Operaciones de carga masiva
Material de estudio Pgina: 130 de 249
Visual Basic 6.0 y SQLServer 7.0
nstrucciones SELECT NTO
nstrucciones WRTETEXT
nstrucciones UPDATETEXT
Aunque estas operaciones no se registren, siempre se registran determinados cambios de las
operaciones. Todas estas operaciones asignan una o varias pginas nuevas para contener los
datos que agregan. Las asignaciones de pginas se registran, pero no as los detalles de los
datos agregados en las pginas. SQL Server puede deshacer estas operaciones no registradas al
invertir las asignaciones de pginas escritas en el registro. SQL Server no puede confirmar las
operaciones, ya que en el registro no constan los datos que se deberan agregar en las pginas
nuevas.
Como no es posible confirmar las operaciones no registradas, estas operaciones invalidan una
secuencia de copias de seguridad del registro de transacciones. Debe realizarse una copia de
seguridad completa o incremental de la base de datos despus de una operacin no registrada
para comenzar una nueva secuencia de copias de seguridad del registro. Por lo tanto, si se
produce una de estas operaciones, SQL Server permite que se realice una copia de seguridad del
registro de transacciones, pero avisa de que debe realizarse antes una copia de seguridad de la
base de datos con el fin de preservar los cambios en el caso de que deba restaurarse la base de
datos.
3.3.4.2 Archivos de registro virtuales
Cada archivo de registro de transacciones se divide lgicamente en segmentos ms pequeos,
denominados archivos de registro virtuales. Los archivos de registro virtuales son las unidades de
truncamiento del registro de transacciones. Cuando un archivo de registro virtual ya no contiene
registros para transacciones activas, puede truncarse con el fin de que haya espacio suficiente
para registrar nuevas transacciones.
El tamao mnimo de un archivo de registro virtual es de 256 KB. El tamao mnimo de un registro
de transacciones es de 512 KB, lo que proporciona dos archivos de registro virtuales de 256 KB.
El nmero y el tamao de los archivos de registro virtuales en un archivo de transacciones se
incrementa a medida que lo hace el archivo de registro. Un archivo de registro de pequeo
tamao puede tener un nmero reducido de pequeos archivos de registro virtuales (por ejemplo,
un archivo de registro de 5 MB puede estar compuesto por cinco archivos virtuales de 1 MB). Un
archivo de registro de gran tamao tendr archivos de registro virtuales ms grandes (por
ejemplo, un archivo de registro de 500 MB puede contener diez archivos de registro virtuales de
50 MB).
Microsoft SQL Server intenta evitar que haya muchos archivos de registro virtuales de pequeo
tamao. El nmero de archivos de registro virtuales crece mucho ms lentamente que su tamao.
Si un archivo de registro crece en pequeos incrementos, tender a tener muchos archivos de
registro virtuales de pequeo tamao. Si el archivo de registro crece en incrementos mayores,
SQL Server crear un nmero inferior de archivos de registro virtual de mayor tamao. Por
ejemplo, si el registro de transacciones est creciendo en incrementos de 1 MB, los archivos de
registro virtuales sern menores y ms numerosos que los de un registro de transacciones que
crezca en incrementos de 50 MB. Un nmero elevado de archivos de registro virtuales puede
aumentar el tiempo necesario para recuperar la base de datos.
A medida que se escribe en el registro, el final del registro crece y pasa de un archivo de registro
virtual al siguiente. Si hay ms de un archivo de registro fsico para una base de datos, el final del
registro crece a travs de cada archivo de registro virtual antes de volver al primer archivo de
registro virtual del primer archivo fsico. El registro empezar a crecer automticamente slo
cuando se hayan llenado todos los archivos de registro.
Material de estudio Pgina: 131 de 249
Visual Basic 6.0 y SQLServer 7.0
-.-.2 Consideraciones so)re el dise3o de Base de Datos
4or$ali5acin
El diseo lgico de la base de datos, que incluye las tablas y sus relaciones, es la clave de una
base de datos relacional optimizada. Un buen diseo lgico de la base de datos puede asentar
los cimientos de un rendimiento ptimo de la aplicacin y de la base de datos. Un diseo lgico
deficiente puede comprometer el rendimiento de todo el sistema.
La normalizacin de un diseo lgico de base de datos implica la utilizacin de mtodos formales
para separar los datos en varias tablas relacionadas. Las bases de datos normalizadas se
caracterizan por tener un mayor nmero de tablas estrechas (con pocas columnas). Un nmero
escaso de tablas anchas (con ms columnas) suele ser caracterstico de las bases de datos no
normalizadas.
Por lo general, una normalizacin razonable permitir mejorar el rendimiento. Cuando se
disponga de ndices tiles, el optimizador de consultas de Microsoft SQL Server ser una
herramienta eficiente en la seleccin rpida y eficaz de combinaciones entre tablas.
La normalizacin ofrece diversas ventajas:
Mayor rapidez en la ordenacin y en la creacin de ndices.
Un nmero mayor de ndices agrupados.
ndices ms estrechos y compactos.
Menos ndices por tabla, con lo que se mejora el rendimiento de las instrucciones
NSERT, UPDATE y DELETE.
Menos valores NULL y reduccin de las posibilidades de incoherencia, con lo que la base
de datos resulta ms compacta.
A medida que progresa la normalizacin, aumentar el nmero y la complejidad de las
combinaciones necesarias para recuperar los datos. Un nmero muy elevado de combinaciones
relacionales complejas entre demasiadas tablas puede afectar al rendimiento. Una normalizacin
razonable suele incluir un nmero reducido de consultas que se ejecutan con regularidad y
utilizan combinaciones en las que intervienen ms de cuatro tablas.
A veces, el diseo lgico de la base de datos es fijo y su remodelacin resulta inviable. No
obstante, incluso en esos casos puede normalizarse de forma selectiva una tabla de gran tamao
para crear tablas ms pequeas. Si el acceso a la base de datos se realiza mediante
procedimientos almacenados, este cambio del esquema puede llevarse a cabo sin que afecte a
las aplicaciones. De lo contrario, tambin puede crearse una vista que oculte a las aplicaciones el
cambio de esquema.
En la teora del diseo de bases de datos relacionales, las reglas de normalizacin identifican
ciertos atributos que deben estar presentes o ausentes en una base de datos bien diseada.
Aunque una discusin completa de las reglas de normalizacin se sale del objetivo de este tema,
hay algunas reglas que pueden ayudarle a mejorar el diseo de una base de datos:
Una tabla debe tener un identificador.
La regla fundamental en la teora del diseo de bases de datos es que cada tabla tenga
un slo identificador de filas, una columna o un conjunto de columnas que puedan
utilizarse para diferenciar a un registro de cualquier otro de la tabla. Cada tabla debe
tener una columna de identificador, y el valor de cada identificador no debe ser
compartido por dos registros. La columna o columnas que sirvan como identificador nico
de fila para una tabla constituyen la clave principal de la tabla.
Material de estudio Pgina: 132 de 249
Visual Basic 6.0 y SQLServer 7.0
Una tabla slo debe almacenar datos para un nico tipo de entidad.
Si intenta almacenar demasiada informacin en una tabla, la confiabilidad y la eficiencia
en la administracin de los datos de la tabla pueden verse afectadas. En el ejemplo
anterior de la base de datos pubs, la informacin acerca de los ttulos y de los editores se
almacena en dos tablas distintas. Aunque es posible incluir columnas para la informacin
acerca de los libros y de los editores en la tabla de ttulos, este tipo de diseo entraa
diversos problemas. La informacin acerca del editor debe ser agregada y almacenada de
forma redundante para cada libro publicado por un editor. Con este sistema, la base de
datos utiliza ms espacio. Si cambia la direccin del editor, debe realizarse el cambio en
cada libro. Cuando se quita de la tabla de ttulos el ltimo libro de un editor, se pierde la
informacin de ese editor.
En la base de datos pubs, se almacena la informacin de los libros y editores en las
tablas de ttulos y editores. La informacin acerca del editor debe especificarse una sola
vez y vincularse a cada libro. Cuando se modifica la informacin relativa al editor, deber
cambiarse nicamente en un punto, y se mantendr all aunque no haya ttulos de ese
editor en la base de datos.
En una tabla deben evitarse las columnas que acepten valores NULL.
Las tablas pueden tener columnas definidas para permitir valores NULL. Un valor NULL
indica que no hay ningn valor. Si bien puede resultar til permitir valores NULL en
determinados casos, es preferible no utilizarlos muy a menudo, dado que necesitan un
tratamiento especial que aumenta la complejidad de las operaciones con datos. Si tiene
una tabla con varias columnas que aceptan valores NULL y varias filas tienen valores
NULL en las columnas, conviene que considere la posibilidad de colocar esas columnas
en otra tabla vinculada con la tabla principal. Si almacena los datos en dos tablas
distintas, el diseo de la tabla principal ser simple pero seguir permitiendo almacenar
ocasionalmente ese tipo de informacin.
Una tabla no debe tener valores ni columnas que se repitan.
La tabla para un elemento de la base de datos no debe contener una lista de valores para
una informacin especfica. Por ejemplo, en un libro que figura en la base de datos pubs
pueden haber colaborado dos autores. Si slo hay una columna para el nombre del autor
en la tabla titIes, esto supone un problema. Una solucin consistira en almacenar el
nombre de los dos autores en la misma columna, pero eso dificultara mostrar una lista de
autores. Otra solucin posible sera cambiar la estructura de la tabla para agregar otra
columna para el nombre del segundo autor, pero esta solucin slo es vlida cuando se
trata de dos autores. Sera necesario agregar otra columna en los casos en que tres
autores colaboraran en la creacin de un libro.
Si cree que necesita almacenar una lista de valores en una sola columna, o si tiene varias
columnas para representar el mismo tipo de datos (au_Iname1, au_Iname2, etc.),
conviene que considere la colocacin de los datos duplicados en otra tabla e incluya un
vnculo con la tabla principal. La base de datos pubs tiene una tabla para la informacin
acerca de los libros y otra en la que se almacenan nicamente los identificadores de los
libros y de los autores. Este diseo permite la inclusin de un nmero indeterminado de
autores para el mismo libro sin necesidad de modificar la definicin de la tabla, y no
asigna espacio de almacenamiento sin utilizar para los libros de un solo autor.
Material de estudio Pgina: 133 de 249
Visual Basic 6.0 y SQLServer 7.0
6nte+ridad de los datos
La integridad de los datos garantiza la calidad de los datos de la base de datos. Por ejemplo, si se
especifica para un empleado el valor de empIoyee_id (dEmpleado) "123, la base de datos no
debe permitir que ningn otro empleado tenga el mismo valor de identificador. Si tiene una
columna empIoyee_rating (clasificacinEmpleado) para la que se prevea valores entre el 1 y el
5, la base de datos no debe aceptar el valor 6. Si en la tabla hay una columna dept_id (dDepto)
en la que se almacene el nmero de departamento del empleado, la base de datos slo debe
permitir valores que correspondan a los nmeros de departamento de la compaa.
Dos pasos importantes en el diseo de las tablas son la identificacin de valores vlidos para una
columna y la determinacin de cmo forzar la integridad de los datos en la columna. Hay cuatro
categoras de integridad de datos:
ntegridad de entidad
ntegridad de dominio
ntegridad referencial
ntegridad definida por el usuario.
Hay varias maneras de forzar cada tipo de integridad.
Tipo de integridad Opciones recomendadas
Entidad
Restriccin PRMARY KEY
Restriccin UNQUE
Propiedad DENTTY
Dominio
Definicin predeterminada (DEFAULT)
Restriccin FOREGN KEY
Restriccin CHECK
NOT NULL
Referencial
Restriccin FOREGN KEY
Restriccin CHECK
Definidos por el usuario
Todas las restricciones en columnas y tablas de CREATE TABLE
Procedimientos almacenados
Desencadenadores
6nte+ridad de entidad
La integridad de entidad define una fila como entidad nica para una tabla determinada. La
integridad de entidad fuerza la integridad de la columna o columnas de los identificadores o la
clave principal de una tabla (mediante ndices, restricciones UNQUE, restricciones PRMARY
KEY o propiedades DENTTY).
6nte+ridad de do$inio
La integridad de dominio viene dada por la validez de las entradas para una columna
determinada. Puede forzar la integridad de dominio si restringe el tipo (mediante tipos de datos),
el formato (mediante las reglas y las restricciones CHECK), o el intervalo de valores posibles
(mediante restricciones FOREGN KEY, restricciones CHECK, definiciones DEFAULT,
definiciones NOT NULL y reglas).
6nte+ridad re,erencial
La integridad referencial protege las relaciones definidas entre las tablas cuando se crean o se
eliminan registros. En Microsoft SQL Server, la integridad referencial se basa en las relaciones
Material de estudio Pgina: 134 de 249
Visual Basic 6.0 y SQLServer 7.0
entre las claves externas y las claves principales o entre las claves externas y las claves nicas.
La integridad referencial garantiza que los valores clave son coherentes en las distintas tablas.
Para conseguir esa coherencia, es preciso que no haya referencias a valores inexistentes y que,
si cambia el valor de una clave, todas las referencias a ella se cambien en consecuencia en toda
la base de datos.
Cuando se fuerza la integridad referencial, SQL Server impide a los usuarios:
Agregar registros a una tabla relacionada si no hay ningn registro asociado en la tabla
principal.
Cambiar valores en una tabla principal de manera que queden registros hurfanos en una
tabla relacionada.
Eliminar registros de una tabla principal cuando hay registros relacionados coincidentes.
Por ejemplo, con las tablas saIes (compras) y titIes (ttulos) de la base de datos pubs, la
integridad referencial se basa en la relacin entre la clave externa (titIe_id) de la tabla saIes y la
clave principal (titIe_id) de la tabla titIes.
Error! Marcador no definido.
6nte+ridad de,inida por el usuario
La integridad definida por el usuario le permite definir reglas de la compaa especficas que no
pertenecen a ninguna otra categora de integridad. Todas las categoras de integridad son
compatibles con la integridad definida por el usuario.
*endi$iento de la )ase de datos
Cuando disee una base de datos, deber asegurarse de que realice todas las operaciones
importantes rpida y correctamente. Algunos problemas de rendimiento pueden resolverse
cuando la base de datos ya se utiliza en la produccin, pero otros pueden derivar de un diseo
deficiente de la base de datos, y slo es posible corregirlos si se cambia su estructura y diseo.
Cuando disee e implemente una base de datos, deber identificar las tablas de gran tamao y
los procesos ms complejos que vaya a realizar la base de datos, y prestar atencin especial al
rendimiento al disear esas tablas. Considere tambin los efectos que puede tener en el
rendimiento el aumento del nmero de usuarios con acceso a la base de datos.
Los siguientes cambios, entre otros, pueden contribuir a mejorar el rendimiento:
Si una tabla que contiene cientos de miles de filas tiene que resumirse en un informe
diario, puede agregar una o varias columnas que contengan datos previamente
agregados para utilizarlos nicamente en el informe.
Se puede aplicar una normalizacin exhaustiva en las bases de datos, lo que significa que
se definen un gran nmero de tablas pequeas interrelacionadas. Cuando la base de
datos procese los datos de estas tablas, deber realizar muchas ms operaciones para
combinar los datos relacionados. Este procesamiento adicional puede repercutir
negativamente en el rendimiento de la base de datos. En esos casos, una reduccin de la
normalizacin de la base de datos para simplificar procesos complejos puede contribuir a
mejorar el rendimiento.
Adems de un diseo adecuado de la base de datos, el uso correcto de los ndices, sistemas
RAD (matriz redundante de discos independientes) y los grupos de archivos es importante para
conseguir un buen rendimiento.
Material de estudio Pgina: 135 de 249
Visual Basic 6.0 y SQLServer 7.0
Consideraciones acerca del hard7are
Por lo general, cuanto mayor sea la base de datos, habr ms requisitos de hardware, aunque el
nmero de sesiones o usuarios simultneos, el rendimiento de las transacciones y el tipo de
operaciones que se realicen en la base de datos tambin determinarn dichos requisitos. Por
ejemplo, los requisitos de hardware de una base de datos que contenga datos que se actualicen
con poca frecuencia (para una biblioteca escolar, por ejemplo), sern inferiores a los requisitos de
hardware de un almacn de datos de 1 terabyte (TB) que contenga datos de acceso frecuente de
ventas, productos y clientes de una gran compaa. Adems de los requisitos de almacenamiento
en disco, se necesitar ms memoria y procesadores ms rpidos para que el almacn de datos
permita colocar ms datos en memoria cach y para que las consultas con referencias a grandes
cantidades de datos sean procesadas con rapidez por Microsoft SQL Server.
8anteni$iento
Despus de crear una base de datos, y cuando se hayan agregado y estn operativos todos los
objetos y datos, ser necesario realizar determinadas operaciones de mantenimiento. Por
ejemplo, es importante realizar copias de seguridad de la base de datos peridicamente. Es
posible que tambin necesite crear algunos ndices adicionales para mejorar el rendimiento. Estas
cuestiones deben tenerse en cuenta a la hora de disear la base de datos, con el fin de reducir
los efectos en los usuarios, el tiempo necesario para realizar la tarea y el esfuerzo dedicado. A
continuacin, se ofrecen algunas indicaciones para el mantenimiento:
Disear la base de datos para que sea lo ms pequea posible y excluya la informacin
redundante. (La normalizacin de la base de datos puede ayudarle a conseguirlo). Por
ejemplo, si reduce el tamao de la base de datos, puede reducir tambin el tiempo
necesario para realizar una copia de seguridad o, lo que es an ms importante, para
restaurar la base de datos. Esto es especialmente importante durante una operacin de
restauracin porque la base de datos no est disponible mientras est siendo restaurada.
Disear particiones de tablas en vez de tablas nicas, si la tabla debe contener un gran
nmero de filas. Por ejemplo, una tabla que contenga todas las transacciones realizadas
con tarjeta de crdito que recibe un banco debe dividirse en varias tablas en las que se
distribuyan los datos por meses, por ejemplo. As se puede facilitar el mantenimiento de
los ndices, en el caso de que tuvieran que agregarse nuevos ndices para mejorar el
rendimiento. Puede que sea necesario crear el ndice slo para los datos de los ltimos
tres meses, debido a que ya no se hace referencia a los datos ms antiguos. Cuanto
mayor sea la tabla, ms tiempo se necesitar para crear nuevos ndices.
Microsoft SQL Server

proporciona el Asistente para planes de mantenimiento de bases de datos
con el fin de automatizar muchas de estas tareas, con lo que se reduce o se elimina el trabajo
necesario para el mantenimiento de la base de datos.
-.-.9 Esti$ar el ta$a3o de una )ase de datos
Cuando disee la base de datos, puede que necesite realizar una estimacin del tamao que
tendr la base de datos cuando est llena. Esta estimacin puede ayudarle a determinar la
configuracin de hardware que necesitar para:
Conseguir el rendimiento que necesitan sus aplicaciones.
Asegurar la cantidad fsica adecuada de espacio en disco para almacenar los datos y los
ndices.
Asimismo, la estimacin del tamao de la base de datos puede ayudarle a determinar si el diseo
de su base de datos necesita reajustes. Por ejemplo, puede determinar que el tamao estimado
Material de estudio Pgina: 136 de 249
Visual Basic 6.0 y SQLServer 7.0
es demasiado grande para realizar una implementacin prctica en su organizacin y que se
necesita un mayor grado de normalizacin. Por el contrario, el tamao estimado puede ser menor
del esperado, con lo que podr reducir la normalizacin de la base de datos para mejorar el
rendimiento de las consultas.
Para realizar una estimacin del tamao de una base de datos, efecte una estimacin de cada
tabla por separado y sume los valores obtenidos. El tamao de una tabla depende de si tiene
ndices y, si los tiene, qu tipo de ndices.
Esti$ar el ta$a3o de una ta)la
Los siguientes pasos permiten estimar la cantidad de espacio necesario para almacenar los datos
en una tabla:
1. Especifique el nmero de filas que habr en la tabla.
Nmero de filas de la tabla = nmFilas
2. Si la definicin de la tabla contiene columnas de longitud fija y de longitud variable, calcule
el espacio que ocupa cada uno de estos grupos de columnas en la fila de datos. El
tamao de una columna depende del tipo y de la longitud especificados para los datos.
Nmero de columnas = nmCols
Suma de los bytes de todas las columnas de longitud fija = datosToFijo
Nmero de columnas de longitud variable = nmColsVariables
Tamao mximo de todas las columnas de longitud variable = toMxVar
3. Si hay columnas de longitud fija en la tabla, una parte de la fila, conocida como el mapa
de bits nulo, se reserva para administrar la aceptacin de valores nulos en las columnas.
Calcule su tamao:
Mapa de bits nulo (mapaBitsNulo) = 2 + (( nmCols + 7) / 8 )
Slo debe utilizarse la parte entera de la expresin anterior; descarte el resto.
4. Si hay columnas de longitud variable en la tabla, determine cunto espacio se utiliza para
almacenar las columnas de la fila:
Tamao total de las columnas de longitud variable (datosToVar) = 2 +
(nmColsVariables x 2) + toMxVar
Si no hay columnas de longitud variable, establezca datosToVar al valor 0.
En esta frmula, se supone que todas las columnas de longitud variable estn llenas al
100 %. Si prev que va a utilizarse un porcentaje inferior del espacio de almacenamiento
de las columnas de longitud variable, puede ajustar el resultado en funcin de ese
porcentaje para obtener una estimacin ms precisa del tamao de la tabla.
5. Calcule el tamao de la fila:
Tamao total de la fila (toFila) = datosToFijo + datosToVar + mapaBitsNulo +4
El valor final 4 representa al encabezado de la fila de datos.
6. A continuacin, calcule el nmero de filas por pgina (8096 bytes disponibles por pgina):
Nmero de filas por pgina (filasPorPg) = ( 8096 ) / (toFila + 2)
Dado que las filas no abarcan varias pginas, el nmero de filas por pgina debe
redondearse a la fila completa anterior.
7. Si va a crear un ndice agrupado en la tabla, calcule el nmero de filas libres reservadas
por pgina segn el factor de relleno especificado. Si no va a crear ningn ndice
agrupado, establezca factorRelleno al valor 100.
Nmero de filas libres por pgina (filasLibresPorPg) = 8096 x ((100 - factorRelleno) /
100) / toFila
El factor de relleno que se utiliza en el clculo es un valor entero y no un porcentaje.
Dado que las filas no abarcan varias pginas, el nmero de filas por pgina debe
redondearse a la fila completa anterior.
8. Calcule el nmero de pginas necesarias para almacenar todas las filas:
Nmero de pginas (nmPgs) = nmFilas / (filasPorPg - filasLibresPorPg)
El nmero de pginas estimado debe redondearse a la siguiente pgina completa.
Material de estudio Pgina: 137 de 249
Visual Basic 6.0 y SQLServer 7.0
9. Finalmente, calcule la cantidad de espacio necesario para almacenar los datos en una
tabla (8192 bytes por pgina):
Tamao de la tabla (bytes) = 8192 x nmPgs
Esti$ar el ta$a3o de una ta)la sin un "ndice a+rupado
Los siguientes pasos permiten estimar la cantidad de espacio necesario para almacenar los datos
y los ndices no agrupados adicionales en una tabla que no contiene un ndice agrupado:
1. Calcule el espacio utilizado para almacenar datos.
2. Calcule el espacio utilizado para almacenar cada ndice no agrupado adicional.
3. Sume los valores calculados.
Para cada clculo, especifique el nmero de filas que habr en la tabla. El nmero de filas de la
tabla influir directamente en el tamao de la tabla.
Nmero de filas de la tabla = nmFilas
Calcular el espacio utili5ado para al$acenar datos
Para calcular el espacio utilizado para almacenar datos, consulte Estimar el tamaPo de una tabla.
Anote el valor calculado:
Espacio utilizado para almacenar datos = espacioDatosUtilizado
Calcular el espacio utili5ado para al$acenar cada "ndice no a+rupado adicional
Los siguientes pasos permiten estimar el tamao de un ndice no agrupado en una tabla que no
contiene un ndice agrupado:
1. Si la definicin del ndice contiene columnas de longitud fija y de longitud variable, calcule
el espacio que ocupa cada uno de estos grupos de columnas en la fila del ndice. El
tamao de una columna depende del tipo y de la longitud especificados para los datos.
Para obtener ms informacin, consulte Tipos de datos
Nmero de columnas de la clave del ndice = nmColsClave
Suma de los bytes de todas las columnas de clave de longitud fija = toFijoClave
Nmero de columnas de longitud variable de la clave del ndice = nmColsVarClave
Tamao mximo de todas las columnas de clave de longitud variable = toVarMxClave
2. Si hay columnas de longitud fija en el ndice, una parte de la fila del ndice se reserva para
el mapa de bits nulo. Calcule su tamao:
Mapa de bits nulo del ndice (mapaBitsNulond) = 2+ (( nmColsClave + 7) / 8 )
Slo debe utilizarse la parte entera de la expresin anterior; descarte el resto.
3. Si hay columnas de longitud variable en el ndice, determine cunto espacio se utiliza
para almacenar las columnas de la fila del ndice:
Tamao total de las columnas de longitud variable (toVarClave) = 2 + (nmColsVarClave
x 2) + toVarMxClave
Si no hay columnas de longitud variable, establezca toVarClave al valor 0.
En esta frmula, se supone que todas las columnas de clave de longitud variable estn
llenas al cien por cien. Si prev que va a utilizarse un porcentaje inferior del espacio de
almacenamiento de las columnas de clave de longitud variable, puede ajustar el resultado
en funcin de ese porcentaje para obtener una estimacin ms precisa del tamao del
ndice.
4. Calcule el tamao de la fila del ndice:
Tamao total de la fila del ndice (toFiland) = toFijoClave + toVarClave +
mapaBitsNulond + 1 + 8
5. A continuacin, calcule el nmero de filas de ndice por pgina (8096 bytes libres por
pgina):
Material de estudio Pgina: 138 de 249
Visual Basic 6.0 y SQLServer 7.0
Nmero de filas de ndice por pgina (filasndPorPg) = ( 8096 ) / (toFiland + 2)
Dado que las filas de ndice no abarcan varias pginas, el nmero de filas de ndice por
pgina debe redondearse a la fila completa anterior.
6. Calcule el nmero de filas de ndice libres reservadas por pgina de hoja segn el factor
de relleno especificado para el ndice no agrupado. Para obtener ms informacin,
consulte Factor de relleno.
Nmero de filas de ndice libres por pgina de hoja (filasndLibresPorPg) = 8096 x ((100
- factorRelleno) / 100) /
toFiland
El factor de relleno que se utiliza en el clculo es un valor entero y no un porcentaje.
Dado que las filas de ndice no abarcan varias pginas, el nmero de filas de ndice por
pgina debe redondearse a la fila completa anterior.
7. A continuacin, calcule el nmero de pginas necesarias para almacenar todas las filas
en cada nivel del ndice:
Nmero de pginas (nivel 0) (nmPgsNivel0) = nmFilas / (filasndPorPg -
filasndLibresPorPg)
Nmero de pginas (nivel 1) (nmPgsNivel1) = nmPgsNivel0 / filasndPorPg
Repita el segundo clculo, pero divida el nmero de pginas calculado a partir del nivel
anterior n por filasndPorPg hasta que el nmero de pginas para un nivel n dado
(nmPgsNiveln) sea igual a una (pgina raz). Por ejemplo, para calcular el nmero de
pginas necesarias para el segundo nivel del ndice:
Nmero de pginas (nivel 2) (nmPgsNivel2) = nmPgsNivel1 / filasndPorPg
Para cada nivel, el nmero estimado de pginas debe redondearse a la siguiente pgina
completa.
Sume el nmero de pginas necesarias para almacenar cada nivel del ndice:
Nmero total de pginas (nmPgsnd) = nmPgsNivel0 + nmPgsNivel1 +
nmPgsNivel2 + . + nmPgsNiveln
8. Finalmente, calcule el tamao del ndice (8192 bytes por pgina):
Tamao del ndice no agrupado (bytes) = 8192 x nmPgsnd
Calcular el ta$a3o de la ta)la
Calcule el tamao de la tabla:
Tamao total de la tabla (bytes) = espacioDatosUtilizado + Tamao del ndice no agrupado + .n
Esti$ar el ta$a3o de una ta)la con un "ndice a+rupado
Los siguientes pasos permiten estimar la cantidad de espacio necesario para almacenar los datos
y los ndices no agrupados adicionales en una tabla que contiene un ndice agrupado:
1. Calcule el espacio utilizado para almacenar datos.
2. Calcule el espacio utilizado para almacenar el ndice agrupado.
3. Calcule el espacio utilizado para almacenar cada ndice no agrupado adicional.
4. Sume los valores calculados.
Para cada clculo, especifique el nmero de filas que habr en la tabla. El nmero de filas de la
tabla influir directamente en el tamao de la tabla.
Nmero de filas de la tabla = nmFilas
Calcular el espacio utili5ado para al$acenar datos
Para calcular el espacio utilizado para almacenar datos, consulte Estimar el tamao de una tabla.
Anote el valor calculado:
Material de estudio Pgina: 139 de 249
Visual Basic 6.0 y SQLServer 7.0
Espacio utilizado para almacenar datos = espacioDatosUtilizado
Calcular el espacio utili5ado para al$acenar el "ndice a+rupado
Los siguientes pasos permiten estimar la cantidad de espacio necesario para almacenar el ndice
agrupado:
1. La definicin del ndice agrupado puede contener columnas de longitud fija y de longitud
variable. Para estimar el tamao del ndice agrupado, deber especificar el espacio que
ocupa cada uno de estos grupos de columnas en la fila del ndice.
Nmero de columnas de la clave del ndice = nmColsClaveAgr
Suma de los bytes de todas las columnas de clave de longitud fija = toFijoClaveAgr
Nmero de columnas de longitud variable de la clave del ndice = nmColsVarClaveAgr
Tamao mximo de todas las columnas de clave de longitud variable =
toVarMxClaveAgr
2. Si hay columnas de longitud fija en el ndice agrupado, una parte de la fila del ndice se
reserva para el mapa de bits nulo. Calcule su tamao:
Mapa de bits nulo del ndice (mapaBitsNulondAgr) = 2 + (( nmColsClaveAgr + 7) / 8 )
Slo debe utilizarse la parte entera de la expresin anterior; descarte el resto.
3. Si hay columnas de longitud variable en el ndice, determine cunto espacio se utiliza
para almacenar las columnas de la fila del ndice:
Tamao total de las columnas de longitud variable (toVarClaveAgr) = 2 +
(nmColsVarClaveAgr x 2) + toVarMxClaveAgr
Si no hay columnas de longitud variable, establezca toVarClaveAgr al valor 0.
En esta frmula, se supone que todas las columnas de la clave de longitud variable estn
llenas al cien por cien. Si prev que va a utilizarse un porcentaje inferior del espacio de
almacenamiento de las columnas de la clave de longitud variable, puede ajustar el
resultado en funcin de ese porcentaje para obtener una estimacin ms precisa del
tamao del ndice.
4. Calcule el tamao de la fila del ndice:
Tamao total de la fila del ndice (toFilandAgr) = toFijoClaveAgr + toVarClaveAgr +
mapaBitsNulondAgr + 1 + 8
5. A continuacin, calcule el nmero de filas de ndice por pgina (8096 bytes libres por
pgina):
Nmero de filas de ndice por pgina (filasndAgrPorPg) = ( 8096 ) / (toFilandAgr + 2)
Dado que las filas de ndice no abarcan varias pginas, el nmero de filas de ndice por
pgina debe redondearse a la fila completa anterior.
6. A continuacin, calcule el nmero de pginas necesarias para almacenar todas las filas
en cada nivel del ndice:
Nmero de pginas (nivel 0) (nmPgsNivelAgr0) = (espacioDatosUtilizado / 8192) /
filasndAgrPorPg
Nmero de pginas (nivel 1) (nmPgsNivelAgr1) = nmPgsNivelAgr0 /
filasndAgrPorPg
Repita el segundo clculo, pero divida el nmero de pginas calculado a partir del nivel
anterior n por filasndAgrPorPg hasta que el nmero de pginas para un nivel n dado
(nmPgsNivelAgrn) sea igual a una (pgina raz del ndice). Por ejemplo, para calcular el
nmero de pginas necesarias para el segundo nivel del ndice:
Nmero de pginas (nivel 2) (nmPgsNivelAgr2) = nmPgsNivelAgr1 /
filasndAgrPorPg
Para cada nivel, el nmero estimado de pginas debe redondearse a la siguiente pgina
completa.
Sume el nmero de pginas necesarias para almacenar cada nivel del ndice:
Nmero total de pginas (nmPgsndAgr) = nmPgsNivelAgr0 + nmPgsNivelAgr1 +
nmPgsNivelAgr2 + . + nmPgsNivelAgrn
7. Calcule el tamao del ndice agrupado (8192 bytes por pgina):
Material de estudio Pgina: 140 de 249
Visual Basic 6.0 y SQLServer 7.0
Tamao del ndice agrupado (bytes) = 8192 x nmPgsndAgr
Calcular el espacio utili5ado para al$acenar cada "ndice no a+rupado adicional
Los siguientes pasos permiten estimar la cantidad de espacio necesario para almacenar cada
ndice no agrupado adicional:
1. La definicin del ndice no agrupado puede contener columnas de longitud fija y de
longitud variable. Para estimar el tamao del ndice no agrupado, deber calcular el
espacio que ocupa cada uno de estos grupos de columnas en la fila del ndice.
Nmero de columnas de la clave del ndice = nmColsClave
Suma de los bytes de todas las columnas de la clave de longitud fija = toFijoClave
Nmero de columnas de longitud variable de la clave del ndice = nmColsVarClave
Tamao mximo de todas las columnas de clave de longitud variable = toVarMxClave
2. Si hay columnas de longitud fija en el ndice, una parte de la fila del ndice se reserva para
el mapa de bits nulo. Calcule su tamao:
Mapa de bits nulo del ndice (mapaBitsNulond) = 2 + (( nmColsClave + 7) / 8 )
Slo debe utilizarse la parte entera de la expresin anterior; descarte el resto.
3. Si hay columnas de longitud variable en el ndice, determine cunto espacio se utiliza
para almacenar las columnas de la fila del ndice:
Tamao total de las columnas de longitud variable (toVarClave) = 2 + (nmColsVarClave
x 2) + toVarMxClave
Si no hay columnas de longitud variable, establezca toVarClave al valor 0.
En esta frmula, se supone que todas las columnas de la clave de longitud variable estn
llenas al cien por cien. Si prev que va a utilizarse un porcentaje inferior del espacio de
almacenamiento de las columnas de la clave de longitud variable, puede ajustar el
resultado en funcin de ese porcentaje para obtener una estimacin ms precisa del
tamao del ndice.
4. Calcule el tamao de la fila del ndice que no es una hoja:
Tamao total de la fila del ndice no de hoja (toFilandNH) = toFijoClave + toVarClave
+ mapaBitsNulond + 1 + 8
5. A continuacin, calcule el nmero de filas de ndice que no es hoja por pgina:
Nmero de filas de ndice no de hoja por pgina (filasndNHPorPg) =
( 8096 ) / (toFilandNH + 2)
Dado que las filas de ndice no abarcan varias pginas, el nmero de filas de ndice por
pgina debe redondearse a la fila completa anterior.
6. Calcule el tamao de la fila del ndice de hoja:
Tamao total de la fila del ndice de hoja (toFiland) = toFilandAgr + toFijoClave +
toVarClave + mapaBitsNulond + 1
El valor final 1 representa el encabezado de la fila del ndice. toFilandAgr es el tamao
total de la fila del ndice para la clave del ndice agrupado.
7. A continuacin, calcule el nmero de filas de ndice de nivel de hoja por pgina:
Nmero de filas de ndice de nivel de hoja por pgina (filasndPorPg) = ( 8096 ) /
(toFiland + 2)
Dado que las filas de ndice no abarcan varias pginas, el nmero de filas de ndice por
pgina debe redondearse a la fila completa anterior.
8. Calcule el nmero de filas de ndice libres reservadas por pgina segn el factor de
relleno especificado para el ndice no agrupado. Para obtener ms informacin, consulte
Factor de relleno.
Nmero de filas de ndice libres por pgina (filasndLibresPorPg) = 8096 x ((100 -
factorRelleno) / 100) /
toFiland
El factor de relleno que se utiliza en el clculo es un valor entero y no un porcentaje.
Dado que las filas de ndice no abarcan varias pginas, el nmero de filas de ndice por
pgina debe redondearse a la fila completa anterior.
Material de estudio Pgina: 141 de 249
Visual Basic 6.0 y SQLServer 7.0
9. A continuacin, calcule el nmero de pginas necesarias para almacenar todas las filas
en cada nivel del ndice:
Nmero de pginas (nivel 0) (nmPgsNivel0) = nmFilas / (filasndPorPg -
filasndLibresPorPg)
Nmero de pginas (nivel 1) (nmPgsNivel1) = nmPgsNivel0 / filasndNHPorPg
Repita el segundo clculo, pero divida el nmero de pginas calculado a partir del nivel
anterior n por filasndNHPorPg hasta que el nmero de pginas para un nivel n dado
(nmPgsNiveln) sea igual a una (pgina raz).
Por ejemplo, para calcular el nmero de pginas necesarias para los niveles segundo y
tercero del ndice:
Nmero de pginas de datos (nivel 2) (nmPgsNivel2) = nmPgsNivel1 /
filasndNHPorPg
Nmero de pginas de datos (nivel 3) (nmPgsNivel3) = nmPgsNivel2 /
filasndNHPorPg
Para cada nivel, el nmero estimado de pginas debe redondearse a la siguiente pgina
completa.
Sume el nmero de pginas necesarias para almacenar cada nivel del ndice:
Nmero total de pginas (nmPgsnd) = nmPgsNivel0 + nmPgsNivel1
+nmPgsNivel2 + . + nmPgsNiveln
10. Finalmente, calcule el tamao del ndice no agrupado:
Tamao del ndice no agrupado (bytes) = 8192 x nmPgsnd
Calcular el ta$a3o de la ta)la
Calcule el tamao de la tabla:
Tamao total de la tabla (bytes) = espacioDatosUtilizado + Tamao del ndice agrupado +
Tamao del ndice no agrupado + .n
Material de estudio Pgina: 142 de 249
Visual Basic 6.0 y SQLServer 7.0
3.4 Crear Bases de datos
Crea una nueva base de datos y los archivos que se utilizan para almacenar la base de datos o
adjunta una base de datos desde los archivos de una base de datos creada anteriormente.
Sinta(is
CREATE DATABASE nombreBase'atos
[ ON [PRMARY]
[ <filespec> [,.n] ]
[, <grupoArchivos> [,.n] ]
]
[ LOG ON { <filespec> [,.n]} ]
[ FOR LOAD | FOR ATTACH ]
<filespec> ::=
( [ NAME = nombreBrcHi#o:"%ico, ]
FLENAME = 'nombreBrcHi#o7,'
[, SZE = tamaPo]
[, MAXSZE = { tamaPoM*imo | UNLMTED } ]
[, FLEGROWTH = incrementoCrecimiento] ) [,.n]
<grupoArchivos>::=
FLEGROUP nombreQrupoBrcHi#os <filespec> [,.n]
Ar+u$entos
nombreBaseDatos
Es el nombre de la nueva base de datos. Los nombres de base de datos deben ser nicos en un
servidor y deben seguir las reglas de los identificadores. nombreBase'atos puede tener hasta
128 caracteres, a menos que no se especifique ningn nombre lgico para el registro. Si no se
especifica ningn nombre lgico de archivo de registro, Microsoft SQL Server genera un nombre
lgico al anexar un sufijo a nombreBase'atos. Esto limita nombreBase'atos a 123 caracteres,
por lo que el nombre lgico generado del archivo de registro es menor de 128 caracteres.
ON
Especifica que los archivos de disco utilizados para almacenar la parte de datos de la base de
datos (archivos de datos) se han definido explcitamente. La palabra clave va seguida de una lista
delimitada por comas de elementos <filespec> que definen los archivos de datos del grupo de
archivos principal. A continuacin de la lista de archivos del grupo de archivos principal se puede
colocar una lista opcional, delimitada por comas, de elementos <grupoArchivos> que definen los
grupos de archivos de usuario y sus archivos.
PRIAR%
Especifica que la lista <filespec> asociada define el archivo principal. El grupo de archivos
principal contiene todas las tablas del sistema de base de datos. Tambin contiene todos los
objetos no asignados a los grupos de archivos de usuario. La primera entrada <filespec> del
grupo de archivos principal pasa a ser el archivo principal, que es el archivo que contiene el inicio
lgico de la base de datos y las tablas del sistema. Una base de datos slo puede tener un
archivo principal. Si no se especifica PRMARY, el primer archivo enumerado en la instruccin
CREATE DATABASE se convierte en el archivo principal.
n
Material de estudio Pgina: 143 de 249
Visual Basic 6.0 y SQLServer 7.0
Es un marcador de posicin que indica que se pueden especificar mltiples archivos para la
nueva base de datos.
LO& ON
Especifica que los archivos del disco utilizados para almacenar el registro de la base de datos
(archivos de registro) se han definido explcitamente. La palabra clave va seguida de una lista
delimitada por comas de elementos <filespec> que definen los archivos de registro. Si no se
especifica LOG ON, se crea automticamente un nico archivo de registro con un nombre
generado por el sistema y un tamao que es el 25 por ciento de la suma de los tamaos de todos
los archivos de datos de la base de datos.
$OR LOAD
Esta clusula se mantiene por compatibilidad con las versiones anteriores de Microsoft SQL
Server. La base de datos se crea con la opcin de base de datos dbo use onIy activada y el
estado se establece en "cargando". Esto no es necesario en SQL Server versin 7.0 porque la
instruccin RESTORE puede volver a crear una base de datos como parte de la operacin de
restauracin.
Si adjunta una base de datos a un servidor distinto del que se separ la base de datos y la base
de datos separada estaba habilitada para duplicacin, debe ejecutar sp_removedbrepIication
para quitar la duplicacin de la base de datos.
$OR ATTAC'
Especifica que se ha adjuntado una base de datos desde un conjunto existente de archivos del
sistema operativo. Debe haber una entrada <filespec> que especifique el primer archivo principal.
De las restantes entradas <filespec>, las nicas necesarias son las de cualquier otro archivo que
tenga una ruta de acceso distinta de cuando se cre la base de datos por primera vez o se
adjunt por ltima vez. Debe especificarse una entrada <filespec> para estos archivos. La base
de datos que se est adjuntando debe haberse creado mediante la misma pgina de cdigos y
ordenacin que SQL Server. Utilice el procedimiento almacenado del sistema sp_attach_db en
lugar de emplear CREATE DATABASE FOR ATTACH directamente. Utilice CREATE DATABASE
FOR ATTACH slo cuando deba especificar ms de 16 elementos <filespec>.
NAE
Especifica el nombre lgico del archivo definido por <filespec>. El parmetro NAME no se
requiere cuando se especifica FOR ATTACH.
nombreArchivoLgico
Es el nombre utilizado para hacer referencia al archivo en las instrucciones Transact-SQL que se
ejecuten despus de que se haya creado la base de datos. nombreBrcHi#o:"%ico debe ser nico
en la base de datos y debe seguir las reglas de los identificadores. El nombre puede ser un
carcter o una constante Unicode, o un identificador regular o delimitado.
$ILENAE
Especifica el nombre de archivo del sistema operativo del archivo definido por <filespec>.
:nombreArchivoSO:
Es la ruta de acceso y nombre de archivo que el sistema operativo utiliza cuando crea el archivo
fsico definido por <filespec>. La ruta de acceso de nombreBrcHi#o7, debe especificar un
Material de estudio Pgina: 144 de 249
Visual Basic 6.0 y SQLServer 7.0
directorio en el servidor en el que est instalado SQL Server. nombreBrcHi#o7, no puede
especificar un directorio en un sistema comprimido de archivos.
Si el sistema se crea en una particin sin formato, nombreBrcHi#o7, slo debe indicar la letra de
la unidad de una particin sin formato existente. En cada particin sin formato slo se puede crear
un archivo. Los archivos de las particiones sin formato no aumentan automticamente; por tanto,
los parmetros MAXSZE y FLEGROWTH no son necesarios cuando nombreBrcHi#o7,
especifica una particin sin formato.
SI(E
Especifica el tamao del archivo definido en <filespec>. Cuando en <filespec> no se especifica un
parmetro SZE para el archivo principal, SQL Server utiliza el tamao del archivo principal de la
base de datos modeI. Cuando en <filespec> no se especifica un parmetro SZE para un archivo
secundario o de registro, SQL Server hace el archivo de 1 MB.
tamao
Es el tamao inicial del archivo definido en <filespec>. Se pueden utilizar los sufijos KB y MB para
especificar si se trata de kilobytes o megabytes; el valor predeterminado es MB. Especifique un
nmero entero; no incluya decimales. El valor mnimo de tamaPo es 512 KB. Si no se especifica
tamaPo, el valor predeterminado es 1 MB. El tamao especificado para el archivo principal debe
tener al menos el tamao del archivo principal de la base de datos modeI.
A)SI(E
Especifica el tamao mximo al que puede aumentar el archivo definido en <filespec>.
tamaoMximo
Es el tamao mximo al que puede aumentar el archivo definido en <filespec>. Se pueden utilizar
los sufijos KB y MB para especificar si se trata de kilobytes o megabytes; el valor predeterminado
es MB. Especifique un nmero entero; no incluya decimales. Si tamaPoM*imo no se especifica,
el archivo aumenta hasta que el disco est lleno.
Nota El registro del sistema S/B de Microsoft Windows NT avisa al administrador del sistema SQL
Server cuando un disco est a punto de llenarse.
*NLIITED
Especifica que el archivo definido en <filespec> aumenta hasta que el disco est lleno.
$ILE&RO+T'
Especifica el incremento de crecimiento del archivo definido en <filespec>. El valor FLEGROWTH
de un archivo no puede exceder del valor MAXSZE.
incrementoCrecimiento
Es la cantidad de espacio que se agrega al archivo cada vez que se necesita espacio.
Especifique un nmero entero; no incluya decimales. Un valor 0 indica que no hay aumento de
tamao. El valor se puede especificar en MB, KB o %. Si se especifica un nmero sin los sufijos
Material de estudio Pgina: 145 de 249
Visual Basic 6.0 y SQLServer 7.0
MB, KB o %, el valor predeterminado es MB. Cuando se especifica %, el tamao de incremento
de crecimiento es el porcentaje especificado del tamao del archivo en el momento en que tiene
lugar el incremento. Si no se especifica FLEGROWTH, el valor predeterminado es 10% y el valor
mnimo es 64 KB. El tamao especificado se redondea al mltiplo de 64 KB ms cercano.
#)servaciones
Puede utilizar una instruccin CREATE DATABASE para crear una base de datos y los archivos
que almacenan la base de datos. SQL Server implementa la instruccin CREATE DATABASE en
dos pasos:
1. SQL Server utiliza una copia de la base de datos modeI para inicializar la base de datos y
sus metadatos.
2. SQL Server rellena el resto de la base de datos con pginas vacas, excepto las pginas
que tengan datos internos que registren cmo se emplea el espacio en la base de datos.
Cualquier objeto definido por el usuario de la base de datos modeI se copiar a todas las bases
de datos recin creadas. Puede agregar a la base de datos modeI cualquier objeto (como tablas,
procedimientos almacenados, tipos de datos, etc.) que desee tener en todas las bases de datos.
Cada base de datos nueva hereda los valores opcionales de la base de datos modeI (a menos
que se especifique FOR ATTACH). Por ejemplo, la opcin de base de datos seIect into o copia
masiva se ha establecido como OFF en modeI y en cualquier base de datos nueva que se cree.
Si utiliza sp_dboption para cambiar las opciones de la base de datos modeI, estos valores de
opcin entrarn en efecto para cualquier base de datos nueva que se cree. Si se especifica FOR
ATTACH en la instruccin CREATE DATABASE, la nueva base de datos hereda los valores
opcionales de la base de datos original.
En un servidor se puede especificar un mximo de 32767 bases de datos.
Para almacenar una base de datos se emplean tres tipos de archivos:
El archivo principal contiene la informacin de inicio de la base de datos. El archivo
principal se utiliza tambin para almacenar datos. Cada base de datos tiene un nico
archivo principal.
Los archivos secundarios almacenan todos los datos que no caben en el archivo principal
de datos. Las bases de datos no necesitan archivos de datos secundarios si el archivo
principal es suficientemente grande para contener todos los datos de la base de datos.
Otras bases de datos pueden ser suficientemente grandes para necesitar mltiples
archivos de datos secundarios o pueden utilizar archivos secundarios en discos
separados para repartir los datos entre mltiples discos.
Los archivos del registro de transacciones contienen la informacin del registro que se
utiliza para recuperar la base de datos. Debe haber al menos un archivo de registro de
transacciones para cada base de datos, aunque puede haber ms de uno. El tamao
mnimo de un archivo de registro de transacciones es de 512 KB.
Cada base de datos tiene al menos dos archivos, un archivo principal y un archivo de registro de
transacciones.
Aunque nombreBrcHi#o7, puede ser cualquier nombre de archivo vlido del sistema operativo, el
nombre reflejar ms claramente el propsito del archivo si utiliza las siguientes extensiones
recomendadas.
Tipo de archivo Extensin de nombre de archivo recomendada
Archivo de datos principal .mdf
Archivo de datos secundario .ndf
Archivo de registro de transacciones .ldf
Material de estudio Pgina: 146 de 249
Visual Basic 6.0 y SQLServer 7.0
Nota Cada vez que se cree una base de datos de usuario, debe hacerse una copia de seguridad
de la base de datos master.
No es posible especificar fracciones en los parmetros SZE, MAXSZE y FLEGROWTH. Para
especificar una fraccin de un megabyte en los parmetros de tamao, convirtalos a kilobytes;
para ello, multiplique el nmero por 1024. Por ejemplo, especifique 1536 KB en lugar de 1,5 MB
(1,5 por 1024 es igual a 1536).
Cuando se especifica una instruccin individual CREATE DATABASE nombreBase'atos sin
parmetros adicionales, la base de datos se crea con el mismo tamao que la base de datos
modeI.
Todas las bases de datos tienen al menos un grupo de archivos principal. Todas las tablas del
sistema se encuentran en el grupo de archivos principal. Una base de datos puede tener tambin
grupos de archivos definidos por el usuario. Si se crea un objeto con una clusula ON
%rupoBrcHi#os que especifica un grupo de archivos definido por el usuario, todas las pginas del
objeto se asignan desde el grupo de archivos especificado. Las pginas de todos los objetos de
usuario creados sin una clusula ON %rupoBrcHi#os, o con una clusula ON DEFAULT, se
asignan desde el grupo de archivos predeterminado. Cuando se crea una base de datos por
primera vez, el grupo de archivos principal es el grupo de archivos predeterminado. Con ALTER
DATABASE, se puede especificar que un grupo de archivos definido por el usuario sea el grupo
de archivos predeterminado:
,>TE! *,T,<,SE nombreBaseDatos MB*I&X &I>EG!BH: nombreGrupoArchivos
*E&,H>T
Cada base de datos tiene un propietario con capacidad para realizar actividades especiales en la
base de datos. El propietario es el usuario que crea la base de datos. El propietario de la base de
datos se puede cambiar mediante sp_changedbowner.
Para mostrar un informe de una base de datos o de todas las bases de datos de un servidor con
SQL Server, ejecute sp_heIpdb. Para obtener un informe acerca del espacio utilizado en una
base de datos, emplee sp_spaceused. Para obtener un informe de los grupos de archivos de una
base de datos, utilice sp_heIpfiIegroup, y utilice sp_heIpfiIe para obtener el informe de los
archivos de la base de datos.
Las versiones anteriores de SQL Server utilizaban las instrucciones DSK NT para crear los
archivos de la base de datos antes de que se ejecutara la instruccin CREATE DATABASE. Por
motivos de compatibilidad con las versiones anteriores de SQL Server, la instruccin CREATE
DATABASE puede crear tambin una nueva base de datos con archivos o dispositivos que se
crearon con la instruccin DSK NT.
Per$isos
De forma predeterminada, los permisos de CREATE DATABASE son los de los miembros de las
funciones fijas de servidor sysadmin y dbcreator. Los miembros de las funciones fijas de
servidor sysadmin y securityadmin pueden conceder permisos CREATE DATABASE a otros
inicios de sesin. Los miembros de las funciones fijas de servidor sysadmin y dbcreator pueden
agregar otros inicios de sesin a la funcin dbcreator. El permiso CREATE DATABASE debe
concederse explcitamente; no se concede mediante la instruccin GRANT ALL.
El permiso CREATE DATABASE se limita normalmente a unos cuantos inicios de sesin para
mantener el control de la utilizacin de los discos del equipo que ejecuta SQL Server.
Material de estudio Pgina: 147 de 249
Visual Basic 6.0 y SQLServer 7.0
E'e$plos
A. Crear una )ase de datos !ue especi,i!ue los archivos de re+istro de datos & de transacciones
Este ejemplo crea una base de datos llamada SaIes. Debido a que no se utiliza la palabra clave
PRMARY, el primer archivo (SaIes_dat) se convierte, de forma predeterminada, en el archivo
principal. Como no se especifican MB ni KB en el parmetro SZE del archivo SaIes_dat, de
forma predeterminada, dicho parmetro indica MB y el tamao se asigna en megabytes. El
tamao del archivo SaIes_Iog se asigna en megabytes porque se ha indicado explcitamente el
sufijo MB en el parmetro SZE.
HSE #a"ter
GB
C!E,TE *,T,<,SE Sa0e"
B$
( $,ME 8 Sa0e"_dat,
&I>E$,ME 8 .'S#""=0FSdataS"a0edat6#d7.,
SINE 8 1O,
M,?SINE 8 DO,
&I>EG!BTT- 8 D )
>BG B$
( $,ME 8 .Sa0e"_0og.,
&I>E$,ME 8 .'S#""=0FSdataS"a0e0og60d7.,
SINE 8 DM<,
M,?SINE 8 2DM<,
&I>EG!BTT- 8 DM< )
GB
B. Crear una )ase de datos $ediante la especi,icacin de $;ltiples archivos de re+istro de datos & de
transacciones
Este ejemplo crea una base de datos llamada Archive con tres archivos de datos de 100 MB y
dos archivos de registro de transacciones de 100 MB. El archivo principal es el primer archivo de
la lista y se especifica explcitamente con la palabra clave PRMARY. Los archivos de registro de
transacciones se especifican a continuacin de las palabras clave LOG ON. Observe las
extensiones que se emplean para los archivos de la opcin FLENAME: .mdf se utiliza para los
archivos principales, .ndf para los archivos secundarios y .ldf para los archivos de registro de
transacciones.
HSE #a"ter
GB
C!E,TE *,T,<,SE ,r'5i/e
B$
:!IM,!X ( $,ME 8 ,r'51,
&I>E$,ME 8 .'S#""=0FSdataSar'5dat16#d7.,
SINE 8 1OOM<,
M,?SINE 8 2OO,
&I>EG!BTT- 8 2O),
( $,ME 8 ,r'52,
&I>E$,ME 8 .'S#""=0FSdataSar'5dat26nd7.,
SINE 8 1OOM<,
M,?SINE 8 2OO,
&I>EG!BTT- 8 2O),
( $,ME 8 ,r'53,
&I>E$,ME 8 .'S#""=0FSdataSar'5dat36nd7.,
SINE 8 1OOM<,
Material de estudio Pgina: 148 de 249
Visual Basic 6.0 y SQLServer 7.0
M,?SINE 8 2OO,
&I>EG!BTT- 8 2O)
>BG B$
( $,ME 8 ,r'50og1,
&I>E$,ME 8 .'S#""=0FSdataSar'50og160d7.,
SINE 8 1OOM<,
M,?SINE 8 2OO,
&I>EG!BTT- 8 2O),
( $,ME 8 ,r'50og2,
&I>E$,ME 8 .'S#""=0FSdataSar'50og260d7.,
SINE 8 1OOM<,
M,?SINE 8 2OO,
&I>EG!BTT- 8 2O)
GB
C. Crear una )ase de datos individual
En este ejemplo se crea una base de datos llamada Products y se especifica un nico archivo.
De forma predeterminada, el archivo especificado se convierte en el archivo principal; se crea
automticamente un archivo de registro de transacciones de 1 MB. Como no se especifica MB ni
KB en el parmetro SZE del archivo principal, el tamao del archivo principal se asigna en
megabytes. Ya que no existe <filespec> para el archivo de registro de transacciones, ste no
tiene MAXSZE y puede crecer hasta llenar todo el espacio disponible en el disco.
HSE #a"ter
GB
C!E,TE *,T,<,SE :rodu't"
B$
( $,ME 8 %rod"_dat,
&I>E$,ME 8 .'S#""=0FSdataS%rod"6#d7.,
SINE 8 4,
M,?SINE 8 1O,
&I>EG!BTT- 8 1 )
GB
D. Crear una )ase de datos sin especi,icar los archivos
Este ejemplo crea una base de datos llamada mytest y crea los archivos principal y de registro de
transacciones correspondientes. Debido a que la instruccin no tiene elementos <filespec>, el
archivo principal de la base de datos tiene el tamao del archivo principal de la base de datos
modeI. El registro de transacciones tiene el tamao del archivo del registro de transacciones de la
base de datos model. Como no se ha especificado MAXSZE, los archivos pueden crecer hasta
llenar todo el espacio disponible en disco.
C!E,TE *,T,<,SE #4te"t
E. Crear una )ase de datos sin especi,icar S6<E
Este ejemplo crea una base de datos llamada products2. De forma predeterminada, el archivo
prods2_dat se convierte en el archivo principal, con un tamao igual al tamao del archivo
principal de la base de datos modeI. El archivo de registro de transacciones se crea
automticamente y es un 25 por ciento del tamao del archivo principal, o 512 KB, el que sea
mayor. Como no se ha especificado MAXSZE, los archivos pueden crecer hasta llenar todo el
espacio disponible en disco.
Material de estudio Pgina: 149 de 249
Visual Basic 6.0 y SQLServer 7.0
HSE #a"ter
GB
C!E,TE *,T,<,SE :rodu't"2
B$
( $,ME 8 %rod"2_dat,
&I>E$,ME 8 .'S#""=0FSdataS%rod"26#d7. )
GB
1. Crear una )ase de datos con +rupos de archivos
Este ejemplo crea una base de datos llamada saIes con tres grupos de archivos:
El grupo de archivos principal con los archivos Spri1_dat y Spri2_dat. El incremento de
FLEGROWTH de estos archivos se especifica como el 15%.
Un grupo de archivos llamado SaIesGroup1 con los archivos SGrp1Fi1 y SGrp1Fi2.
Un grupo de archivos llamado SaIesGroup2 con los archivos SGrp2Fi1 y SGrp2Fi2.
C!E,TE *,T,<,SE Sa0e"
B$ :!IM,!X
( $,ME 8 S:ri1_dat,
&I>E$,ME 8 .'S#""=0FSdataSS:ri1dat6#d7.,
SINE 8 1O,
M,?SINE 8 DO,
&I>EG!BTT- 8 1DY ),
( $,ME 8 S:ri2_dat,
&I>E$,ME 8 .'S#""=0FSdataSS:ri2dt6nd7.,
SINE 8 1O,
M,?SINE 8 DO,
&I>EG!BTT- 8 1DY ),
&I>EG!BH: Sa0e"Grou%1
( $,ME 8 SGr%1&i1_dat,
&I>E$,ME 8 .'S#""=0FSdataSSG1&i1dt6nd7.,
SINE 8 1O,
M,?SINE 8 DO,
&I>EG!BTT- 8 D ),
( $,ME 8 SGr%1&i2_dat,
&I>E$,ME 8 .'S#""=0FSdataSSG1&i2dt6nd7.,
SINE 8 1O,
M,?SINE 8 DO,
&I>EG!BTT- 8 D ),
&I>EG!BH: Sa0e"Grou%2
( $,ME 8 SGr%2&i1_dat,
&I>E$,ME 8 .'S#""=0FSdataSSG2&i1dt6nd7.,
SINE 8 1O,
M,?SINE 8 DO,
&I>EG!BTT- 8 D ),
( $,ME 8 SGr%2&i2_dat,
&I>E$,ME 8 .'S#""=0FSdataSSG2&i2dt6nd7.,
SINE 8 1O,
M,?SINE 8 DO,
&I>EG!BTT- 8 D )
>BG B$
( $,ME 8 .Sa0e"_0og.,
&I>E$,ME 8 .'S#""=0FSdataS"a0e0og60d7.,
SINE 8 DM<,
Material de estudio Pgina: 150 de 249
Visual Basic 6.0 y SQLServer 7.0
M,?SINE 8 2DM<,
&I>EG!BTT- 8 DM< )
GB
0. Ad'untar una )ase de datos
El ejemplo B cre una base de datos llamada Archive con los siguientes archivos fsicos:
'S#""=0FSdataSar'5dat16#d7
'S#""=0FSdataSar'5dat26nd7
'S#""=0FSdataSar'5dat36nd7
'S#""=0FSdataSar'50og160d7
'S#""=0FSdataSar'50og260d7
La base de datos puede separarse con el procedimiento almacenado sp_detach_db y, despus,
puede volverse a adjuntar mediante CREATE DATABASE con la clusula FOR ATTACH:
"%_deta'5_db ,r'5i/e
GB
C!E,TE *,T,<,SE ,r'5i/e
B$ :!IM,!X (&I>E$,ME 8 .'S#""=0FSdataSar'5dat16#d7.)
&B! ,TT,C-
GB
=. Utili5ar particiones sin ,or$ato
Este ejemplo crea una base de datos llamada EmpIoyees con particiones sin formato. Las
particiones sin formato deben existir cuando se ejecuta la instruccin y en cada particin sin
formato slo puede almacenarse un archivo.
HSE #a"ter
GB
C!E,TE *,T,<,SE E#%0o4ee"
B$
( $,ME 8 E#%0_dat,
&I>E$,ME 8 .7.,
SINE 8 1O,
M,?SINE 8 DO,
&I>EG!BTT- 8 D )
>BG B$
( $,ME 8 .Sa0e"_0og.,
&I>E$,ME 8 .g.,
SINE 8 DM<,
M,?SINE 8 2DM<,
&I>EG!BTT- 8 DM< )
GB
3.5 Creacin de !ablas
Las tablas son objetos de la base de datos que contienen todos sus datos. Una tabla se define
mediante una coleccin de columnas. En las tablas, los datos se organizan con arreglo a un
formato de filas y columnas, similar al de una hoja de clculo. Cada fila representa a un registro
nico, y cada columna representa a un campo dentro de un registro. Por ejemplo, en una tabla
Material de estudio Pgina: 151 de 249
Visual Basic 6.0 y SQLServer 7.0
que contenga los datos de los empleados de una compaa puede haber una fila para cada
empleado y distintas columnas en las que figuren detalles de los empleados tales como el nmero
de empleado, el nombre, la direccin, el puesto que ocupa y su nmero de telfono particular.
Cuando disee una base de datos, deber decidir qu tablas necesita, qu tipo de datos van
destinados a cada tabla, quin puede tener acceso a cada tabla, etc. Cuando cree tablas y trabaje
con ellas, seguir tomando decisiones ms especficas acerca de las mismas.
El mtodo ms eficiente para crear una tabla consiste en definir todo lo que se necesita en la
tabla al mismo tiempo, incluidas las restricciones para los datos y los componentes adicionales.
No obstante, tambin puede crear una tabla bsica, agregar algunos datos y trabajar con la tabla
durante algn tiempo. As, tendr ocasin de ver cules son los tipos de transacciones ms
habituales y qu tipos de datos se utilizan con ms frecuencia antes de confirmar un diseo ms
estable que incluya restricciones, ndices, valores predeterminados, reglas y otros objetos.
Puede ser una buena idea que esboce sus planes en papel antes de crear una tabla y sus
objetos.
Entre las decisiones que deben tomarse, se incluyen:
Los tipos de datos que debe contener la tabla.
Las columnas de la tabla y los tipos de datos para cada columna (as como su longitud, si
es preciso).
Qu columnas aceptan valores NULL.
Si deben utilizarse (y cundo) restricciones o valores predeterminados y reglas.
Los tipos de ndices necesarios, dnde se necesitan y qu columnas son claves
principales y claves externas.
La asignacin de un tipo de datos para cada columna es uno de los primeros pasos que deber
seguir para disear una tabla. Los tipos de datos definen qu valores estn permitidos en cada
columna. Para asignar un tipo de datos a una columna, puede utilizar tipos de datos de Microsoft
SQL Server o crear sus propios tipos de datos a partir de los del sistema. Por ejemplo, si slo
desea incluir nombres en una columna, puede asignar un tipo de datos de carcter para la misma.
Asimismo, si desea que una columna slo contenga nmeros, puede asignar un tipo de datos
numrico.
E(i+ir la inte+ridad de los datos
Los tipos de datos del sistema y los definidos por el usuario pueden utilizarse para exigir la
integridad de los datos, ya que los datos que se agregan o que se modifican deben ajustarse al
tipo especificado en la instruccin original CREATE TABLE. Por ejemplo, no podr almacenar un
nombre en una columna definida con un tipo de datos datetime, porque una columna datetime
slo acepta fechas vlidas. Por lo general, mantenga datos de tipo numrico en las columnas
numricas, sobre todo si deben realizarse clculos con ellos ms adelante.
Colu$nas de nu$eracin auto$%tica & de identi,icadores
En una tabla slo puede crearse una columna de identificadores que contenga valores
secuenciales generados por el sistema para identificar de forma nica a cada fila de la tabla. Por
ejemplo, una columna de identificadores puede generar nmeros nicos de recibos
personalizados de los clientes automticamente para una aplicacin, a medida que se insertan
filas en la tabla. Las columnas de identificadores contienen valores nicos dentro de la tabla en la
Material de estudio Pgina: 152 de 249
Visual Basic 6.0 y SQLServer 7.0
que son definidas. Esto significa que otras tablas que contengan columnas de identificadores
pueden tener los mismos valores de identidad que utiliza otra tabla. No obstante, esta
coincidencia no suele constituir un problema, ya que los valores de los identificadores suelen
utilizarse nicamente dentro del contexto de una tabla; las columnas de identificadores no estn
relacionadas con las columnas de identificadores que se encuentren en otras tablas.
En cada tabla slo se puede crear una columna de identificadores exclusivos globales; esta
columna contendr valores nicos para todos los equipos del mundo que estn conectados por
red. Una columna que ofrezca la garanta de contener valores exclusivos globales suele resultar
de utilidad cuando es necesario mezclar datos similares de varios sistemas de bases de datos
(por ejemplo, en un sistema de facturacin que se alimente de los datos de las distintas filiales de
una compaa repartidas por todo el mundo). Cuando se mezclan los datos en la sede central de
la compaa para su consolidacin y con el fin de elaborar informes, la utilizacin de valores
exclusivos globales impide que coincidan los nmeros de facturacin o los identificadores de dos
clientes en pases diferentes.
Microsoft SQL Server utiliza columnas de identificadores exclusivos globales para la
duplicacin de mezcla con el fin de garantizar que las filas tengan una identificacin exclusiva en
distintas copias de la tabla.
SQL Server utiliza las propiedades DENTTY y ROWGUDCOL para implementar columnas de
identificadores.
Utili5ar restricciones, valores predeter$inados & valores 4ULL
Para disear las tablas, es necesario identificar los valores vlidos para una columna y decidir
cmo se debe exigir la integridad de los datos de la columna. Microsoft SQL Server
proporciona varios mecanismos para exigir la integridad de los datos de una columna:
Las restricciones de clave principal (PRMARY KEY).
Las restricciones de clave externa (FOREGN KEY).
Las restricciones de no duplicados (UNQUE).
Las restricciones de comprobacin (CHECK).
Las definiciones de valores predeterminados (DEFAULT).
La aceptacin de NULL
3.5.1 Restricciones PRMARY KEY
Una restriccin PRMARY KEY nica se puede:
Crear cuando se crea la tabla, durante el proceso de definicin de la misma.
Agregar a una tabla existente, siempre que no exista ya otra restriccin PRMARY KEY
(una tabla slo puede tener una restriccin PRMARY KEY).
Modificar o eliminar, si ya existe. Por ejemplo, es posible que desee que la restriccin
PRMARY KEY de la tabla haga referencia a otras columnas o bien modificar el orden de
la columna, el nombre del ndice, la opcin de agrupamiento o el factor de relleno de la
restriccin PRMARY KEY. No se puede cambiar la longitud de una columna definida con
una restriccin PRMARY KEY.
Nota Para modificar una restriccin PRMARY KEY mediante Transact-SQL o SQL-DMO,
antes deber eliminar la restriccin PRMARY KEY existente y, a continuacin, volver a
crearla con la nueva definicin.
Material de estudio Pgina: 153 de 249
Visual Basic 6.0 y SQLServer 7.0
Cuando se agrega una restriccin PRMARY KEY a una o a varias columnas de la tabla, Microsoft
SQL Server comprueba los datos que hay en las columnas para asegurarse de que sigan las
reglas de las claves principales:
Que no haya ningn valor Null.
Que no haya ningn valor duplicado.
Si se agrega una restriccin PRMARY KEY a una columna con valores duplicados o valores
NULL, SQL Server devuelve un error y no agrega la restriccin. No se puede agregar una
restriccin PRMARY KEY que no cumpla estas reglas.
3.5.2 Restricciones FOREGN KEY
Las restricciones FOREGN KEY se pueden:
Crear cuando se crea la tabla, durante el proceso de definicin de la misma.
Agregar a una tabla ya existente, siempre que la restriccin FOREGN KEY est
vinculada a una restriccin PRMARY KEY o UNQUE de otra o de la misma tabla. Una
tabla puede contener varias restricciones FOREGN KEY.
Modificar o eliminar si ya existen restricciones FOREGN KEY. Por ejemplo, es posible
que desee que la restriccin FOREGN KEY de la tabla haga referencia a otras columnas.
No se puede cambiar la longitud de una columna definida con una restriccin FOREGN
KEY.
Nota Para modificar una restriccin FOREGN KEY mediante Transact-SQL o SQL-DMO,
antes deber eliminar la restriccin FOREGN KEY existente y, a continuacin, volver a
crearla con la nueva definicin.
Cuando se agrega una restriccin FOREGN KEY a una o a varias columnas de la tabla,
Microsoft SQL Server comprueba de forma predeterminada los datos que hay en las
columnas para asegurarse de que estn todos los valores, excepto NULL, en las columnas de la
restriccin PRMARY KEY o UNQUE a la que se hace referencia. Sin embargo, se puede impedir
que SQL Server compruebe los datos de la columna con la nueva restriccin y exigirle que
agregue la nueva restriccin, independientemente de los datos que haya en la columna. Esta
opcin resulta de utilidad cuando los datos existentes ya cumplen con la nueva restriccin
FOREGN KEY o cuando una regla de empresa requiere que se exija la restriccin slo a partir de
ese punto.
No obstante, debe actuar con precaucin cuando agregue una restriccin sin comprobar los datos
existentes porque as se omiten los controles de SQL Server que garantizan la integridad de los
datos de la tabla.
Desha)ilitar restricciones 1#*E604 >E?
Es posible deshabilitar las restricciones FOREGN KEY existentes para:
Las instrucciones NSERT y UPDATE, de modo que los datos de la tabla puedan ser
modificados sin ser validados por las restricciones. Deshabilite una restriccin FOREGN
KEY para las instrucciones NSERT y UPDATE si los nuevos datos infringen la restriccin
o si la restriccin slo se aplica a los datos que ya se encuentran en la base de datos.
Material de estudio Pgina: 154 de 249
Visual Basic 6.0 y SQLServer 7.0
Procesos de duplicacin. Deshabilite una restriccin FOREGN KEY durante la
duplicacin si la restriccin es especfica para la base de datos de origen. Cuando se
duplica una tabla, la definicin de la tabla y los datos se copian desde la base de datos de
origen a una base de datos de destino. Estas dos bases de datos suelen encontrarse en
dos servidores distintos (aunque no necesariamente). Si las restricciones FOREGN KEY
son especficas para la base de datos de origen pero no estn deshabilitadas durante la
duplicacin, puede que impidan innecesariamente que se escriban nuevos datos en la
base de datos de destino.

Elimine una restriccin FOREGN KEY para que no se exija la integridad referencial entre las
columnas de clave externa y las columnas de la clave principal (o de restriccin UNQUE)
relacionadas que se encuentran en otra tabla.
SQL Server crea automticamente un ndice nico para exigir que la restriccin PRMARY KEY
sea nica. Si an no existe un ndice agrupado en la tabla o no se ha especificado explcitamente,
se crea un ndice agrupado nico para exigir la restriccin PRMARY KEY.
Importante No se puede eliminar una restriccin PRMARY KEY si una restriccin FOREGN
KEY de otra tabla est haciendo referencia a ella; antes, es preciso eliminar la restriccin
FOREGN KEY.
3.5.3 Restricciones de no duplicados (UNQUE)
Las restricciones UNQUE se pueden:
Crear cuando se crea la tabla, durante el proceso de definicin de la misma.
Agregar a una tabla existente, siempre que la columna o la combinacin de columnas a
las que afecta la restriccin UNQUE slo contenga valores exclusivos o NULL. Una tabla
puede contener varias restricciones UNQUE.
Modificar o eliminar si ya existen. Por ejemplo, es posible que desee que la restriccin
UNQUE de la tabla haga referencia a otras columnas o que desee cambiar el tipo de
agrupacin de los ndices.
Nota Para modificar una restriccin UNQUE mediante Transact-SQL o SQL-DMO, antes
deber eliminar la restriccin UNQUE existente y, a continuacin, volver a crearla con la
nueva definicin.
Cuando se agrega una restriccin UNQUE a una o a varias columnas de una tabla, Microsoft
SQL Server comprueba de forma predeterminada los datos que hay en las columnas para
asegurarse de que todos los valores, excepto los valores NULL, sean nicos. Si se agrega una
restriccin UNQUE a una columna que contiene valores duplicados, SQL Server devuelve un
error y no agrega la restriccin.
SQL Server crea automticamente un ndice UNQUE para exigir, de acuerdo con la restriccin
UNQUE, que no haya duplicados. Por lo tanto, si se intenta insertar una fila duplicada, SQL
Server devolver un mensaje de error para indicar que se ha infringido la restriccin UNQUE y no
agregar la fila a la tabla. A menos que se especifique explcitamente un ndice agrupado, se
crear de forma predeterminada un ndice nico, no agrupado, para exigir la restriccin UNQUE.
Elimine una restriccin UNQUE para anular el requisito de que sean nicos los valores de una
columna o de una combinacin de columnas incluida en la restriccin. No es posible eliminar una
restriccin UNQUE si la columna asociada se utiliza como clave de texto de la tabla.
Material de estudio Pgina: 155 de 249
Visual Basic 6.0 y SQLServer 7.0
3.5.4 Restricciones CHECK
Las restricciones CHECK se pueden:
Crear cuando se crea la tabla, durante el proceso de definicin de la misma.
Agregar a una tabla ya existente. Las tablas y las columnas pueden contener varias
restricciones CHECK.
Modificar o eliminar si ya existen. Por ejemplo, puede modificar la expresin utilizada por
la restriccin CHECK en una columna de la tabla.
Nota Para modificar una restriccin CHECK mediante Transact-SQL o SQL-DMO, antes
deber eliminar la restriccin CHECK existente y, a continuacin, volver a crearla con la
nueva definicin.
Cuando se agrega una restriccin CHECK a una tabla ya existente, puede aplicarse a los nuevos
datos o bien ampliarse tambin a los datos ya existentes. De forma predeterminada, la restriccin
CHECK se aplica a los datos existentes y a los nuevos datos. Puede resultar til aplicar la
restriccin slo a los datos nuevos cuando los datos existentes ya cumplen la nueva restriccin
CHECK o cuando una regla de empresa requiere que se exija la restriccin nicamente a partir de
ahora.
Por ejemplo, una restriccin anterior poda requerir que los cdigos postales estuvieran limitados
a cinco cifras, mientras que una nueva restriccin requiere que los cdigos postales sean de
nueve cifras. Los datos que figuran en los antiguos cdigos postales de cinco cifras siguen siendo
vlidos y coexisten con los nuevos datos de los nuevos cdigos postales, que tienen nueve cifras.
Por lo tanto, la nueva restriccin slo debe comprobarse con los nuevos datos.
No obstante, conviene actuar con precaucin cuando se agrega una restriccin sin comprobar los
datos existentes ya que, de ese modo, se omiten los controles de Microsoft SQL Server que
exigen las reglas de integridad para la tabla.
Desha)ilitar restricciones C=EC>
Se puede deshabilitar las restricciones CHECK para:
Las instrucciones NSERT y UPDATE, de modo que los datos de la tabla puedan ser
modificados sin ser validados por las restricciones. Deshabilite una restriccin CHECK
durante las instrucciones NSERT y UPDATE si los nuevos datos no cumplen la
restriccin o si la restriccin debe aplicarse nicamente a los datos que ya se encuentren
en la base de datos.
Procesos de duplicacin. Deshabilite una restriccin CHECK durante la duplicacin si la
restriccin es especfica para la base de datos de origen. Cuando se duplica una tabla, la
definicin de la tabla y los datos se copian desde la base de datos de origen a una base
de datos de destino. Estas dos bases de datos suelen encontrarse en dos servidores
distintos (aunque no necesariamente). Si las restricciones CHECK especficas para la
base de datos de origen no estn deshabilitadas, puede que impidan innecesariamente
que se escriban datos nuevos en la base de datos de destino.
Elimine una restriccin CHECK para quitar las limitaciones acerca de los valores aceptables para
las columnas incluidas en la expresin de la restriccin.
Material de estudio Pgina: 156 de 249
Visual Basic 6.0 y SQLServer 7.0
3.5.5 Dfiniciones DEFAULT
Las definiciones DEFAULT se pueden:
Crear cuando se crea la tabla, durante el proceso de definicin de la misma.
Agregar a una tabla ya existente. Cada columna de una tabla puede contener una sola
definicin DEFAULT.
Modificar o eliminar, si ya existen definiciones DEFAULT. Por ejemplo, puede modificar el
valor que se inserta en una columna cuando no se escribe ningn valor.
Nota Para modificar una definicin DEFAULT mediante Transact-SQL o SQL-DMO, antes deber
eliminar la definicin DEFAULT existente y, a continuacin, volver a crearla con la nueva
definicin.
No se puede crear definiciones DEFAULT para columnas definidas con:
Un tipo de datos timestamp.
Una propiedad DENTTY o ROWGUDCOL.
Una definicin DEFAULT o un objeto DEFAULT ya existentes.
Nota El valor predeterminado debe ser compatible con el tipo de datos de la columna a la que se
aplica la definicin DEFAULT. Por ejemplo, el valor predeterminado para una columna int debe
ser un nmero entero, no una cadena de caracteres.
Cuando se agrega una definicin DEFAULT a una columna ya existente en una tabla, Microsoft
SQL Server aplica de forma predeterminada el nuevo valor predeterminado a las nuevas filas
de datos que se agregan a la tabla; los datos existentes que se hayan insertados mediante la
definicin DEFAULT anterior no se ven afectados. No obstante, cuando agregue una nueva
columna a una tabla ya existente, puede especificar que SQL Server inserte en la nueva columna
el valor predeterminado (especificado mediante la definicin DEFAULT) en vez de un valor Null
para las filas existentes en la tabla.
Cuando elimine una definicin DEFAULT, SQL Server insertar un valor Null en vez del valor
predeterminado si no se inserta ningn valor para las nuevas filas de la columna. No obstante, no
se realizan cambios en los datos existentes en la tabla.
3.5.6 Columnas de identificadores
En cada tabla slo se puede crear una columna de identificadores y una columna de
identificadores exclusivos globales.
Propiedad de identidad @6DE4T6T?A
Se puede implementar las columnas de identificadores mediante la propiedad de identidad, que
permite que el programador de la aplicacin especifique un nmero de identidad para la primera
fila insertada en la tabla (propiedad iniciaIizacin de identidad (identity seed)) y un incremento
(incremento de identidad (identity increment)) que debe agregarse al valor inicial para
determinar los nmeros de identidad sucesivos. Cuando se insertan valores en una tabla con una
columna de identificadores, Microsoft SQL Server genera automticamente el siguiente valor
de identidad mediante la suma del incremento a la inicializacin.
Cuando utilice la propiedad DENTTY para definir una columna de identificadores, tenga en
cuenta lo siguiente:
Material de estudio Pgina: 157 de 249
Visual Basic 6.0 y SQLServer 7.0
Una tabla slo puede tener una columna definida con la propiedad DENTTY y esa
columna slo se puede definir con los tipos de datos decimaI, int, numeric, smaIIint o
tinyint.
Se pueden especificar los valores de inicializacin e incremento. El valor predeterminado
es 1 para ambos.
La columna de identificadores no debe aceptar valores NULL ni contener una definicin ni
un objeto DEFAULT.
Es posible hacer referencia a la columna desde una lista de seleccin mediante la palabra
clave DENTTYCOL despus de que se configure la propiedad DENTTY.
Es posible utilizar la funcin OBJECTPROPERTY para determinar si una tabla tiene una
columna DENTTY, y la funcin COLUMNPROPERTY para determinar el nombre de la
columna DENTTY.
6denti,icadores e(clusivos +lo)ales
Aunque la propiedad de identidad (DENTTY) automatice la numeracin de las filas de una tabla,
dos tablas distintas con sendas columnas de identificadores pueden generar los mismos valores.
Esto es debido a que se garantiza que la propiedad de identidad DENTTY es nica slo para la
tabla en la que se utiliza. Si una aplicacin debe generar una columna de identificadores nica
para toda la base de datos o para todas las bases de datos de todos los equipos conectados en
red en todo el mundo, utilice la propiedad ROWGUDCOL, el tipo de datos uniqueidentifier y la
funcin NEWD.
Cuando utilice la propiedad ROWGUDCOL para definir una columna de identificadores
exclusivos globales, tenga en cuenta lo siguiente:
Una tabla slo podr tener una columna ROWGUDCOL, y esa columna debe definirse
mediante el tipo de datos uniqueidentifier.
SQL Server no genera valores para la columna de forma automtica. Para insertar un
valor exclusivo global, cree una definicin DEFAULT en la columna que utilice la funcin
NEWD para generar un valor exclusivo global.
Es posible hacer referencia a la columna desde una lista de seleccin mediante la palabra
clave ROWGUDCOL, despus de que se establezca la propiedad ROWGUDCOL. Este
mtodo es similar al que permite hacer referencia a una columna de identidad (DENTTY)
mediante la palabra clave DENTTYCOL.
Se puede utilizar la funcin OBJECTPROPERTY para determinar si una tabla tiene una
columna ROWGUDCOL y la funcin COLUMNPROPERTY para determinar el nombre de
la columna ROWGUDCOL.
Dado que la propiedad ROWGUDCOL no exige la exclusividad, deber utilizar la
restriccin de exclusividad (UNQUE) para asegurarse de que se insertan valores
exclusivos en la columna ROWGUDCOL.
Nota Si hay una columna de identificadores para una tabla en la que se realizan eliminaciones
frecuentemente, pueden quedar espacios entre los valores de identidad; los valores de identidad
eliminados no se vuelven a utilizar. Para evitar esos espacios, no utilice la propiedad DENTTY.
En su lugar, cree un desencadenador que, a medida que se inserten filas, determine un nuevo
valor de identificador basado en los valores existentes de la columna de identificadores.
3.5.7 SET ANS_NULLS (T-SQL)
Especifica el comportamiento conforme a SQL-92 de los operadores de comparacin gual a (=) y
Diferente de (<>) cuando se utilizan con valores nulos.
Material de estudio Pgina: 158 de 249
Visual Basic 6.0 y SQLServer 7.0
Sinta(is
SET ANS_NULLS {ON | OFF}
#)servaciones
El estndar SQL-92 requiere que las comparaciones de igualdad (=) o desigualdad (<>) con un
valor nulo se evalen como FALSE. Cuando SET ANS_NULLS es ON, una instruccin SELECT
con la clusula WHERE nombreColumna = NULL devolver cero filas, incluso cuando haya
valores nulos en nombreColumna. Una instruccin SELECT con la clusula WHERE
nombreColumna <> NULL devolver cero filas, incluso cuando haya valores no nulos en
nombreColumna.
Cuando SET ANS_NULLS es OFF, los operadores de comparacin gual a (=) y Diferente de
(<>) no siguen el estndar de SQL-92. Una instruccin SELECT con la clusula WHERE
nombreColumna = NULL devolver las filas que tengan valores nulos en nombreColumna. Una
instruccin SELECT con la clusula WHERE nombreColumna <> NULL devolver las filas con
valores no nulos en esa columna.
Nota El hecho de que Microsoft SQL Server interprete una cadena vaca como un carcter
espacio o como una autntica cadena vaca se controla con la opcin de nivel de compatibilidad
de sp_dbcmptIeveI. Si el nivel de compatibilidad es menor o igual que 65, SQL Server interpreta
las cadenas vacas como espacios individuales. Si el nivel de compatibilidad es igual a 70, SQL
Server interpreta las cadenas vacas como tales.

Cuando SET ANS_NULLS es ON, todas las comparaciones con un valor nulo se evalan como
UNKNOWN. Cuando SET ANS_NULLS es OFF, la comparacin de cualquier dato con un valor
nulo se evala como TRUE si el valor del dato es NULL. Si no se especifica, se aplica el valor de
la opcin ANSI nuIIs de la base de datos actual..
Para que una secuencia de comandos funcione como se pretende, independientemente de la
opcin de base de datos ANSI nuIIs o de la opcin SET ANS_NULLS, utilice S NULL e S NOT
NULL en las comparaciones que puedan contener valores nulos.
En los procedimientos almacenados, SQL Server utiliza el valor de la opcin SET ANS_NULLS
establecido en el momento de crear el procedimiento almacenado. En las siguientes ejecuciones
del procedimiento almacenado, se restablece y se aplica la opcin SET ANS_NULLS original.
Cuando se invoca dentro de un procedimiento almacenado, la opcin SET ANS_NULLS no
cambia.
SET ANS_NULLS debe estar activado para ejecutar consultas distribuidas.
El controlador ODBC de SQL Server y el proveedor de Microsoft OLE DB para SQL Server
establecen automticamente ANS_NULLS en ON al conectar. Esta opcin se puede configurar
en los orgenes de datos ODBC, en los atributos de conexin ODBC o en las propiedades de
conexin OLE DB establecidas en la aplicacin antes de conectar con SQL Server. SET
ANS_NULLS tiene como opcin predeterminada OFF en las conexiones desde aplicaciones de
biblioteca de base de datos.
Cuando SET ANS_DEFAULTS es ON, se habilita SET ANS_NULLS.
La opcin SET ANS_NULLS se establece en tiempo de ejecucin, no en tiempo de anlisis.
Per$isos
De forma predeterminada, todos los usuarios tienen permisos para ejecutar SET ANS_NULLS.
Material de estudio Pgina: 159 de 249
Visual Basic 6.0 y SQLServer 7.0
Por ejempIo
-- El primer proceso por lotes devolver 2 filas
use pubs
set ansi_nulls off
go
select * from titles where price = null
go
--El segundo proceso por lotes no devolver ninguna fila
/* Este secuencia de instrucciones ilustra la utilizacin de ANS_NULLS
*/
use pubs
set ansi_nulls on
go
select * from titles where price = null
go
3.5.8 EJEMPLOS
1. Esta secuencia de instrucciones crea dos tablas con una relacin compuesta. Clave
primaria/Clave externa. Despus presenta las restricciones sobre cada tabla.
CREATE TABLE cliente
(
id_cliente int NOT NULL,
num_ubicacin smallint NULL,
nombre_cliente varchar(50) NOT NULL,
CONSTRANT CLENTE_EXC UNQUE CLUSTERED (num_ubicacin, id_cliente)
)
CREATE TABLE pedidos
(
id_pedido int NOT NULL DENTTY CONSTRANT PEDDO_PK
PRMARY KEY NONCLUSTERED,
num_cliente int NOT NULL,
ubic_cliente smallint NULL,
CONSTRANT FK_PEDDO_CLENTE FOREGN KEY (ubic_cliente, num_cliente)
REFERENCES cliente (num_ubicacin, id_cliente)
)
GO
EXEC sp_helpconstraint cliente
EXEC sp_helpconstraint pedidos
GO
2.- Esta secuencia de instrucciones crea una tabla con varias restricciones y una clave externa
que hace referencia a s misma. Despus muestra las restricciones sobre la tabla.
Material de estudio Pgina: 160 de 249
Visual Basic 6.0 y SQLServer 7.0
USE pubs
GO
CREATE TABLE empleado
(
id_empleado int NOT NULL PRMARY KEY
CHECK (id_empleado BETWEEN 0 AND 1000),
nombre_empleado varchar(30) NOT NULL CONSTRANT sin_nmeros
CHECK (nombre_empleado NOT LKE '%[0-9]%'),
id_admin int NOT NULL REFERENCES empleado(id_empleado),
fecha_introduccin datetime NULL CHECK (fecha_introduccin >=
GETDATE()),
introducido_por int CHECK (introducido_por S NOT NULL),
CONSTRANT introducido_por_valido CHECK
(introducido_por = SUSER_D(NULL) AND
introducido_por <> id_empleado),
CONSTRANT admin_valido CHECK (id_admin <> id_empleado OR id_empleado=1),
CONSTRANT fin_de_mes CHECK (DATEPART(DAY, GETDATE()) < 28)
)
GO
EXEC sp_helpconstraint empleado
GO
4.- Esta secuencia de instrucciones crea una tabla con varias restriccione, algunos valores
predeterminados y una clave externa de referencia a s misma. Despus muestra las restricciones
sobre la tabla.
USE pubs
GO
CREATE TABLE empleado
(
id_empleado int NOT NULL PRMARY KEY
CHECK (id_empleado BETWEEN 0 AND 1000),
nombre_empleado varchar(30) NOT NULL CONSTRANT sin_nmeros
CHECK (nombre_empleado NOT LKE '%[0-9]%'),
id_admin int NOT NULL REFERENCES empleado(id_empleado),
fecha_introduccin datetime NULL CHECK (fecha_introduccin >=
CURRENT_TMESTAMP),
introducido_por int CHECK (introducido_por S NOT NULL),
CONSTRANT introducido_por_vlido CHECK
(introducido_por = SUSER_D(NULL) AND
introducido_por <> id_empleado),
Material de estudio Pgina: 161 de 249
Visual Basic 6.0 y SQLServer 7.0
CONSTRANT admin_vlido CHECK (id_admin <> id_empleado OR id_empleado=1),
CONSTRANT fin_de_mes CHECK (DATEPART(DAY, GETDATE()) < 28)
)
GO
EXEC sp_helpconstraint empleado
GO
5.- Esta secuencia de instrucciones decodifica la informacin de la tabla sysconstraints para
presentar informacin sobre las restricciones de una tabla.
USE ejemplo
GO
SELECT
OBJECT_NAME(constid) 'Nombre de la restriccin',
constid 'D de la restriccin',
CASE (status & 0xF)
WHEN 1 THEN 'Clave primaria'
WHEN 2 THEN 'Exclusiva'
WHEN 3 THEN 'Clave externa'
WHEN 4 THEN 'Comprobacin'
WHEN 5 THEN 'Predeterminado'
ELSE 'No definido'
END 'Tipo de restriccin',
CASE (status & 0x30)
WHEN 0x10 THEN 'Columna'
WHEN 0x20 THEN 'Tabla'
ELSE 'ND'
END 'Nivel'
FROM sysconstraints
WHERE id=OBJECT_D('tEmpleado')
6.- Esta secuencia de instrucciones crea una tabla con varias restricciones y una clave externa
que hace referencia a s misma. Despus muestra las restricciones sobre la tabla.
USE pubs
GO
CREATE TABLE empleado
(
id_empleado int NOT NULL PRMARY KEY
CHECK (id_empleado BETWEEN 0 AND 1000),
nombre_empleado varchar(30) NOT NULL CONSTRANT sin_nmeros
CHECK (nombre_empleado NOT LKE '%[0-9]%'),
id_admin int NOT NULL REFERENCES empleado(id_empleado),
fecha_introduccin datetime NULL CHECK (fecha_introduccin >=
CURRENT_TMESTAMP),
introducido_por int CHECK (introducido_por S NOT NULL),
Material de estudio Pgina: 162 de 249
Visual Basic 6.0 y SQLServer 7.0
CONSTRANT introducido_por_vlido CHECK
(introducido_por = SUSER_D(NULL) AND
introducido_por <> id_empleado),
CONSTRANT admin_vlido CHECK (id_admin <> id_empleado OR id_empleado=1),
CONSTRANT fin_de_mes CHECK (DATEPART(DAY, GETDATE()) < 28)
)
GO
EXEC sp_helpconstraint empleado
GO
7.- La siguientes instrucciones ejemplifican el uso de transacciones.
USE Ejemplo
go
if exists (select * from sysobjects where name='SHOW_ERROR' and type='U')
DROP TABLE SHOW_ERROR
go
CREATE TABLE SHOW_ERROR
(
col1 smallint NOT NULL PRMARY KEY,
col2 smallint NOT NULL
)
go
BEGN TRANSACTON
NSERT SHOW_ERROR VALUES (1,1)
NSERT SHOW_ERROR VALUES (1,2)
NSERT SHOW_ERROR VALUES (2,2)
COMMT TRANSACTON
go
SELECT * FROM SHOW_ERROR
go
/*
Servidor: mensaje 2627, nivel 14, estado 1, lnea 1
nfraccin de la restriccin PRMARY KEY 'PK__mostrar_error__5DCAEF64'. No se puede
insertar una clave -----duplicada en el objeto 'mostrar_error'.
Se termin la instruccin.
col1 col2
---- ----
1 1
2 2
A continuacin se presenta una versin modificada de la transaccin que acabamos de ver. Este
ejemplo realiza
Material de estudio Pgina: 163 de 249
Visual Basic 6.0 y SQLServer 7.0
una comprobacin sencilla de errores utilizando la funcin del sistema incorporada @@error, y
anula la transaccin, si cualuqiera de las instrucciones tiene como resultado un error.
En este ejemplo no se insertan filas.
*/
if exists (select * from sysobjects where name='SHOW_ERROR' and type='U')
DROP TABLE SHOW_ERROR
go
CREATE TABLE SHOW_ERROR
(
col1 smallint NOT NULL PRMARY KEY,
col2 smallint NOT NULL
)
go
BEGN TRANSACTON
NSERT SHOW_ERROR VALUES (1,1)
if @@error <> 0 GOTO TRAN_ABORT
NSERT SHOW_ERROR VALUES (1,2)
if @@error <> 0 GOTO TRAN_ABORT
NSERT SHOW_ERROR VALUES (2,2)
if @@error <> 0 GOTO TRAN_ABORT
COMMT TRANSACTON
-- GOTO ENDT
TRAN_ABORT:
ROLLBACK TRANSACTON
ENDT:
go
SELECT * FROM SHOW_ERROR
go
/* Como algunas personas manejan los errores en las transacciones mal, y como puede ser
tedioso aadir comprobaciones de error despus de cada comando, la versin 6.5 aadi una
nueva instruccin SET que cancela una transaccin si se produce cualquier error durante la
misma (no existe instruccin WHENEVER en Transact-SQL actualmente, aunque dicha
caracterstica resultara muy til para situaciones como sta).
La utilizacin de SET XACT_ABORT ON hace que se cancele y se anule toda la transaccin si
se produce un error.
El valor predereminado de esta opcin es OFF, que es coherente con la semntica anterior a la
versin 6.5, adems de con el comportamiento del estndar ANS. Activando la opcin
XACT_ABORT ON, ahora podemos volver a ejecutar el ejemplo y ver que no se han insertado
filas.
*/
if exists (select * from sysobjects where name='SHOW_ERROR' and type='U')
DROP TABLE SHOW_ERROR
go
Material de estudio Pgina: 164 de 249
Visual Basic 6.0 y SQLServer 7.0
CREATE TABLE SHOW_ERROR
(
col1 smallint NOT NULL PRMARY KEY,
col2 smallint NOT NULL
)
go
SET XACT_ABORT ON
BEGN TRANSACTON
NSERT SHOW_ERROR VALUES (1,1)
NSERT SHOW_ERROR VALUES (1,2)
NSERT SHOW_ERROR VALUES (2,2)
COMMT TRANSACTON
go
SET XACT_ABORT OFF
SELECT * FROM SHOW_ERROR
go
Material de estudio Pgina: 165 de 249
Visual Basic 6.0 y SQLServer 7.0
+.@ Elementos de sinta*is de !ransactN7L:
Transact-SQL tiene varios elementos de sintaxis que son utilizados por, o influyen en, la mayor
parte de las instrucciones:
6denti,icadores , Son los nom#res de o#!etos como- por e!emplo- ta#las- .istas- columnas-
#ases de datos / ser.idores0
Tipos de datos , Definen el tipo de datos 1ue los o#!etos de datos pueden contener como-
por e!emplo- columnas- .aria#les / par2metros0 La ma/or parte de las instrucciones de
Transact3S4L no 5acen referencia e6pl7citamente a tipos de datos- sino 1ue sus resultados
est2n influidos por las interacciones entre los tipos de datos de los o#!etos a los 1ue se
5ace referencia en la instruccin0
1unciones , Son elementos de sinta6is 1ue toman cero- uno o m2s .alores de entrada /
de.uel.en un .alor escalar o un con!unto de .alores en forma de ta#la0 E!emplos de
funciones son la funcin S* para sumar .arios .alores- la funcin DATEDI$$ para
determinar el n8mero de unidades de tiempo 1ue separan dos fec5as- la funcin
99SERVERNAE para o#tener el nom#re del ser.idor 1ue e!ecuta S4L Ser.er o la
funcin OPEN4*ER% para e!ecutar una instruccin S4L en un ser.idor remoto /
recuperar el con!unto de resultados0
E(presiones , Son una unidad de sinta6is 1ue icrosoft S4L Ser.er puede resol.er en
un .alor 8nico0 E!emplos de e6presiones son las constantes- las funciones 1ue de.uel.en
un .alor 8nico- una referencia a una columna o una .aria#le0
#peradores , $uncionan con una o m2s e6presiones indi.iduales para formar una
e6presin m2s comple!a0 Por e!emplo- com#inar el operador 3 :ne"ati.o; con la constante
<= da como resultado la constante 3<=0 El operador > :multiplicacin; de la e6presin
PrecioColumna ><0< aumenta el precio en un <? por ciento0
Co$entarios, Son fra"mentos de te6to insertado en instrucciones o secuencias de
comandos de Transact3S4L para e6plicar el o#!eti.o de la instruccin0 Los comentarios no
son e!ecutados por S4L Ser.er0
Pala)ras clave reservadas , Son pala#ras reser.adas 1ue utili@a S4L Ser.er / no de#en
emplearse como nom#res de o#!etos de una #ase de datos0
1.8.1 Con#ersi"n de tipos de datos
En Transact-SQL, hay dos niveles posibles de conversin de tipos de datos:
Cuando los datos de un objeto se mueven a, se comparan o se combinan con los datos
de otro objeto, puede que sea necesario convertir los datos desde el tipo de datos de un
objeto al tipo de datos del otro.
Cuando los datos de una columna de resultados, un cdigo devuelto o un parmetro de
salida de Transact-SQL se mueven a una variable de programa, deben ser convertidos
desde el tipo de datos de Microsoft SQL Server al tipo de datos de la variable.
Hay dos categoras de conversiones de tipo de datos:
Material de estudio Pgina: 166 de 249
Visual Basic 6.0 y SQLServer 7.0
Las conversiones implcitas son transparentes para el usuario.
SQL Server convierte automticamente los datos desde un tipo de datos al otro. Por
ejemplo, si un smaIIint se compara con un int, el smaIIint se convierte implcitamente a
int antes de realizarse la comparacin.
Las conversiones explcitas las realiza el usuario mediante las funciones CAST o
CONVERT.
Las funciones CAST y CONVERT convierten un valor (una variable local, una columna u otra
expresin) de un tipo de datos a otro. Por ejemplo, la siguiente funcin CAST convierte el valor
numrico $157.27 a una cadena de caracteres '$157.27':
C,ST ( Z1DF62F ,S V,!C-,!(1O) )
CAST se basa en el estndar SQL-92 y se prefiere antes que CONVERT.
Cuando se realizan conversiones desde el tipo de datos de un objeto SQL Server a otro, no se
admiten algunas conversiones implcitas y explcitas de tipos de datos. Por ejemplo, un valor
nchar no se puede convertir de ninguna forma a un valor image. Un nchar slo se puede
convertir a binary con una conversin explcita, mientras que la conversin implcita a binary no
se admite. Un nchar puede ser convertido a nvarchar explcita o implcitamente..
Cuando se realiza una conversin entre una variable de aplicacin y una columna de conjunto de
resultados, cdigo de retorno, parmetro o marcador de parmetro de SQL Server, la AP de base
de datos define cules son las conversiones de tipos de datos admitidas.
Uso de CAST: CAST(e*presi"n AS tipo'atos)
Uso de CONVERT: CONVERT (tipo'atos[(lon%itud)], e*presi"n [, estilo])
Ar+u$entos
expresin B Es cual1uier e6presin .2lida de icrosoft S4L Ser.er0
TipoDatosB Es el tipo de datos destino proporcionado por el sistema0 No se pueden utili@ar
tipos de datos definidos por el usuario0
longitud B Es un par2metro opcional de los tipos de datos nchar- nvarchar- char-
varchar- )inar& o var)inar&0
Estilo B Es el estilo del formato de fec5a 1ue se desea al con.ertir datos dateti$e o
s$alldateti$e a datos de cadenas de caracteres :tipos de datos nchar-
nvarchar- char- varchar- nchar o nvarchar;- o el formato de cadena cuando
se con.ierten datos ,loat- real- $one& o s$all$one& a datos de cadenas de
caracteres :tipos de datos nchar- nvarchar- char- varchar- nchar o
nvarchar;0
Material de estudio Pgina: 167 de 249
Visual Basic 6.0 y SQLServer 7.0
En la si"uiente ta#la- las dos columnas de la i@1uierda representan los .alores de estilo
para la con.ersin de dateti$e o s$alldateti$e en cadenas de caracteres0 A"re"ue <?? al
.alor de estilo para o#tener el aAo con cuatro cifras- incluido el si"lo :////;0
Sin eI sigIo
(yy)
Con eI sigIo
(yyyy)
Estndar EntradaK7alida))
- 0 o 100 (*) Predeterminado mon dd yyyy hh:miAM (o PM)
1 101 EE.UU. mm/dd/yy
2 102 ANS yy.mm.dd
3 103 Britnico/Francs dd/mm/yy
4 104 Alemn dd.mm.yy
5 105 taliano dd-mm-yy
6 106 - dd mon yy
7 107 - mon dd, yy
8 108 - hh:mm:ss
- 9 o 109 (*)
Predeterminado +
milisegundos
mon dd yyyy hh:mi:ss:mmmAM (o PM)
10 110 EE.UU. mm-dd-yy
11 111 JAPN yy/mm/dd
12 112 SO yymmdd
- 13 o 113 (*)
Europeo predeterminado +
milisegundos
dd mon yyyy hh:mm:ss:mmm(24h)
14 114 - hh:mi:ss:mmm(24h)
- 20 o 120 (*) ODBC cannico yyyy-mm-dd hh:mi:ss(24h)
- 21 o 121 (*)
ODBC cannico (con
milisegundos)
yyyy-mm-dd hh:mi:ss.mmm(24h)
* Los valores predeterminados (estilo 0 o 100, 9 o 109, 13 o 113, 20 o 120, y 21 o 121) siempre
devuelven el siglo (yyyy).
** Entrada cuando se convierte a datetime; Salida cuando se convierte a cadenas de caracteres.
6$portanteB De forma predeterminada- S4L Ser.er interpreta los aAos de dos cifras
con el aAo =?BC como l7mite0 Es decir- el aAo BC se interpreta como =?BC / el aAo D?
se interpreta como <CD?0 uc5as aplicaciones de cliente- como las #asadas en o#!etos
de Automati@acin OLE- utili@an como aAo l7mite el aAo =?E?0 S4L Ser.er
proporciona una opcin de confi"uracin :t7o di+it &ear cuto,, o reduccin del aAo a
dos d7"itos; 1ue cam#ia el aAo l7mite en S4L Ser.er / permite el tratamiento
co5erente de las fec5as0 Sin em#ar"o- el mFtodo m2s se"uro es especificar los aAos
con cuatro cifras0
Cuando se con.ierte a datos de cadenas de caracteres desde s$alldateti$e- los estilos
1ue inclu/en se"undos o milise"undos muestran ceros en dic5as posiciones0 Puede
recortar las partes de la fec5a 1ue no desee cuando con.ierta .alores dateti$e o
s$alldateti$e si utili@a la lon"itud apropiada en el tipo de datos char o varchar0
Material de estudio Pgina: 168 de 249
Visual Basic 6.0 y SQLServer 7.0
Esta ta#la muestra los .alores de estilo para la con.ersin de ,loat o real a datos de
cadenas de caracteres0
VaIor SaIida
0 (predeterminado) 6 cifras como mximo. Utiliza la notacin cientfica cuando es apropiado.
1 Siempre 8 cifras. Utiliza siempre la notacin cientfica.
2 Siempre 16 cifras. Utiliza siempre la notacin cientfica.
En la si"uiente ta#la- la columna de la i@1uierda representa el .alor de estilo para la
con.ersin de $one& o s$all$one& a datos de cadenas de caracteres0
VaIor SaIida
0 (predeterminado)
Sin separadores de millar cada tres cifras a la izquierda del separador decimal
y dos cifras a la derecha del separador decimal; por ejemplo, 4235,98.
1
Separadores de millar cada tres cifras a la izquierda del separador decimal y
dos cifras a la derecha del separador decimal; por ejemplo, 3.510,92.
2
Sin separadores de millar cada tres cifras a la izquierda del separador decimal
y cuatro cifras a la derecha del separador decimal; por ejemplo, 4235,9819.
Tipos devueltos
Devuelve el mismo valor que el tipo de datos 0.
#)servaciones
Las conversiones implcitas son aquellas conversiones que ocurren sin especificar las funciones
CAST o CONVERT. Las conversiones explcitas son aquellas conversiones que requieren que se
especifique la funcin CAST (CONVERT). Este grfico muestra todas las conversiones de tipos
de datos explcitas e implcitas permitidas entre los tipos de datos del sistema de SQL Server.
Error! Marcador no definido.Nota Como los datos Unicode siempre utilizan un nmero par de
bytes, preste atencin al convertir binary o varbinary a tipos de datos aceptados en Unicode, y
viceversa. Por ejemplo, esta conversin no devuelve el valor hexadecimal 41, sino 4100:
SE>ECT C,ST(C,ST(Ox41 ,S n/ar'5ar) ,S /arbinar4)
No se acepta la conversin automtica de tipos de datos para los tipos de datos text e image.
Puede convertir explcitamente datos text en cadenas de caracteres y datos image en binary o
varbinary, pero la mxima longitud que puede especificar es 8000. Si intenta una conversin
imposible (por ejemplo, si convierte una expresin de cadena de caracteres que incluya letras a
int), SQL Server genera un mensaje de error.
Al convertir expresiones de caracteres o binarias (char, nchar, nvarchar, varchar, binary o
varbinary) en una expresin de un tipo de datos diferente, los datos pueden quedar recortados,
se pueden presentar parcialmente o se puede devolver un error porque el resultado sea
demasiado corto para ser presentado. Las conversiones a char, varchar, nchar, nvarchar,
binary y varbinary se recortan, excepto en las conversiones que se muestran en esta tabla.
DeI tipo de datos Bl tipo de datos -esultado
int, smaIIint o tinyint char *
varchar *
nchar E
nvarchar E
money, smaIImoney, numeric,
decimaI, fIoat o reaI
char E
varchar E
nchar E
Material de estudio Pgina: 169 de 249
Visual Basic 6.0 y SQLServer 7.0
nvarchar E
* Resultado con longitud demasiado corta para ser presentada.
E Error devuelto porque la longitud del resultado es demasiado corta para ser
presentada.
Microsoft SQL Server garantiza que slo las conversiones circulares, las conversiones que
convierten un tipo de datos en otro y despus vuelven a convertirlo al tipo de datos original,
devolvern los mismos valores de versin a versin. Este ejemplo muestra una conversin
circular:
*EC>,!E [#4/a0 de'i#a0 (D, 2)
SET [#4/a0 8 1\36DF
SE>ECT C,ST(C,ST([#4/a0 ,S /arbinar4(2O)) ,S de'i#a0(1O,D))
KK Br, u"ing CB$VE!T
SE>ECT CB$VE!T(de'i#a0(1O,D), CB$VE!T(/arbinar4(2O), [#4/a0))
No intente generar, por ejemplo, valores binary y convertirlos a un tipo de datos de la categora
de tipos de datos numricos. SQL Server no garantiza que el resultado de una conversin de
tipos de datos decimaI o numeric a binary sea igual entre distintas versiones de SQL Server.
Cuando se convierten tipos de datos que tienen un nmero diferente de posiciones decimales, el
valor queda recortado hasta la cifra de mayor precisin. Por ejemplo, el resultado de SELECT
CAST(10,6496 AS int) es 10.
Este ejemplo muestra una expresin resultante demasiado corta para ser presentada.
HSE %ub"
SE>ECT SH<ST!I$G(tit0e, 1, 2D) ,S Tit0e, C,ST(4td_"a0e" ,S '5ar(2))
&!BM tit0e"
T-E!E t4%e 8 .trad_'ooC.
ste es el conjunto de resultados:
Tit0e
KKKKKKKKKKKKKKKKKKKKKKKKK KK
Bnion", >eeC", and Gar0i' @
&i7t4 Xear" in <u'Cing5a# @
Su"5i, ,n4one] @
(3 roL(") a77e'ted)
Cuando se convierten tipos de datos en los que el tipo de datos destino tiene menos posiciones
decimales que el tipo de datos origen, el valor se redondea. Por ejemplo, el resultado de
CAST(10,3496 AS money) es $10,35.
SQL Server devuelve un mensaje de error cuando se convierten datos char, nchar, varchar o
nvarchar a int, fIoat, numeric o decimaI; o cuando una cadena vaca (" ") se convierte a int o
fIoat.
Usar datos de cadenas Binar&
Cuando se convierten datos binary o varbinary a datos de cadena de caracteres y se especifica
un nmero impar de valores a continuacin de la x, SQL Server agrega un 0 (cero) despus de la
x para tener un nmero par de valores.
Los datos binarios consisten en los caracteres 0 a 9 y A a F (o f), en grupos de dos caracteres
cada uno. Las cadenas binarias tienen que estar precedidas por 0x. Por ejemplo, para
representar FF, escriba 0xFF. El valor mximo es un valor binario de 8000 bytes, todos ellos
establecidos con FF. Los tipos de datos binary no son para datos hexadecimales, sino para
patrones de bits. Puede que las conversiones y clculos de nmeros hexadecimales
almacenados como datos binarios no sean confiables.
Cuando se especifica la longitud de un tipo de datos binary, cada dos caracteres cuentan como
uno. La longitud de 10 significa que hay 10 grupos de dos caracteres.
Las cadenas binarias vacas, representadas como 0x, se pueden almacenar como datos binarios.
Material de estudio Pgina: 170 de 249
Visual Basic 6.0 y SQLServer 7.0
E'e$plos
A. Utili5ar CAST & C#4CE*T
Los dos ejemplos devuelven los ttulos de aquellos libros que tienen un 3 en la primera cifra de las
ventas anuales y convierten ytd_saIes a char(20).
KK H"e C,ST6
HSE %ub"
GB
SE>ECT SH<ST!I$G(tit0e, 1, 3O) ,S Tit0e, 4td_"a0e"
&!BM tit0e"
T-E!E C,ST(4td_"a0e" ,S '5ar(2O)) >IRE .3Y.
GB
KK H"e CB$VE!T6
HSE %ub"
GB
SE>ECT SH<ST!I$G(tit0e, 1, 3O) ,S Tit0e, 4td_"a0e"
&!BM tit0e"
T-E!E CB$VE!T('5ar(2O), 4td_"a0e") >IRE .3Y.
GB
ste es el conjunto de resultados de las consultas:
Tit0e 4td_"a0e"
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKK KKKKKKKKKKK
CooCing Lit5 Co#%uter" Surre% 3GFA
Co#%uter :5obi' ,$* $onK:5obi' 3FD
E#otiona0 Se'urit4 , $eL ,0go 333A
Bnion", >eeC", and Gar0i' Coo 3FD
(4 roL(") a77e'ted)
B. Utili5ar CAST con operadores arit$Dticos
Este ejemplo calcula una nica columna (Copies) dividiendo las ventas anuales totales
(ytd_saIes) por el precio individual del libro (price). El resultado se convierte al tipo de datos int
despus de ser redondeado al nmero entero ms prximo.
HSE %ub"
GB
SE>ECT C,ST(!BH$*(4td_"a0e"J%ri'e, O) ,S int) ,S .Co%ie".
&!BM tit0e"
GB
ste es el conjunto de resultados:
Co%ie"
KKKKKKKKKKK
2OD
324
A2A2
2OD
1O2
F44O
$H>>
3G3
2OD
$H>>
1F
1GF
1A
2O4
41G
1G
Material de estudio Pgina: 171 de 249
Visual Basic 6.0 y SQLServer 7.0
12A3
2F3
(1G roL(") a77e'ted)
C. Utili5ar CAST para concatenar
Este ejemplo concatena expresiones que no son de texto ni binarias mediante la funcin de
conversin de tipos de datos CAST.
HSE %ub"
GB
SE>ECT .T5e %ri'e i" . E C,ST(%ri'e ,S /ar'5ar(12))
&!BM tit0e"
T-E!E %ri'e ; 1O6OO
GB
ste es el conjunto de resultados:
KKKKKKKKKKKKKKKKKKKKKKKKK
T5e %ri'e i" 1\6\\
T5e %ri'e i" 116\D
T5e %ri'e i" 1\6\\
T5e %ri'e i" 1\6\\
T5e %ri'e i" 226\D
T5e %ri'e i" 2O6OO
T5e %ri'e i" 216D\
T5e %ri'e i" 1O6\D
T5e %ri'e i" 1\6\\
T5e %ri'e i" 2O6\D
T5e %ri'e i" 116\D
T5e %ri'e i" 146\\
(12 roL(") a77e'ted)
D. Utili5ar CAST para o)tener te(to $%s le+i)le
Este ejemplo utiliza CAST en la lista seleccionada para convertir la columna titIe a char(50), para
que los resultados sean ms legibles.
HSE %ub"
GB
SE>ECT C,ST(tit0e ,S '5ar(DO)), 4td_"a0e"
&!BM tit0e"
T-E!E t4%e 8 .trad_'ooC.
GB
ste es el conjunto de resultados:
4td_"a0e"
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK KKKKKKKKK
Bnion", >eeC", and Gar0i' CooCing Se'ret" o7 t5e 3FD
&i7t4 Xear" in <u'Cing5a# :a0a'e Rit'5en" 1DO\A
Su"5i, ,n4one] 4O\D
(3 roL(") a77e'ted)
E. Utili5ar CAST con una cl%usula L6>E
Este ejemplo convierte una columna int (la columna ytd_saIes) a char(20) para que se puede
utilizar en una clusula LKE.
HSE %ub"
GB
SE>ECT tit0e, 4td_"a0e"
&!BM tit0e"
T-E!E C,ST(4td_"a0e" ,S '5ar(2O)) >IRE .1DY.
,$* t4%e 8 .trad_'ooC.
GB
ste es el conjunto de resultados:
Material de estudio Pgina: 172 de 249
Visual Basic 6.0 y SQLServer 7.0
tit0e 4td_"a0e"
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK KKKKKKKKKKK
&i7t4 Xear" in <u'Cing5a# :a0a'e Rit'5en" 1DO\A
(1 roL(") a77e'ted)
1.5.2 Utilizar funciones
Microsoft SQL Server dispone de funciones integradas para realizar ciertas operaciones rpida y
fcilmente. Las categoras en que se dividen las funciones son:
1unciones de a+re+adoBReali@an operaciones 1ue com#inan .arios .alores en uno0
E!emplos son CO*NT- S*- IN / A)0
1unciones de con,i+uracin BSon funciones escalares 1ue de.uel.en informacin acerca
de la confi"uracin0
1unciones de cursores ,De.uel.en informacin acerca del estado de un cursor0
1unciones de ,echa & hora ,Tratan .alores dateti$e / s$alldateti$e0
1unciones $ate$%ticas ,Reali@an operaciones tri"onomFtricas- "eomFtricas / dem2s
operaciones numFricas0
1unciones de $etadatos ,De.uel.en informacin acerca de los atri#utos de las #ases de
datos / de los o#!etos de #ase de datos0
1unciones de con'untos de ,ilas BDe.uel.en con!untos de filas 1ue se pueden usar en el
lu"ar de una referencia de ta#la de una instruccin de Transact3S4L0
1unciones de se+uridad , De.uel.en informacin acerca de usuarios / funciones0
1unciones de cadena ,Tratan .alores char- varchar- nchar- nvarchar- )inar& /
var)inar&0
1unciones del siste$a ,$uncionan en o informan acerca de .arias opciones / o#!etos del
sistema0
1unciones de estad"sticas del siste$a BDe.uel.en informacin relacionada con el
rendimiento de S4L Ser.er0
1unciones de te(to e i$a+en ,Tratan .alores te(t e i$a+e0
Las funciones se pueden usar o incluir en:
La lista de seleccin de una consulta que usa una instruccin SELECT para devolver un
valor.
SE>ECT *<_$,ME()
Una condicin de bsqueda de una clusula WHERE de una instruccin SELECT o de
modificacin de datos (SELECT, NSERT, DELETE o UPDATE) para limitar las filas
adecuadas para la consulta.
SE>ECT @
&!BM ^Brder *etai0"_
T-E!E (uantit4 8
(SE>ECT M,?((uantit4) &!BM ^Brder *etai0"_)
Material de estudio Pgina: 173 de 249
Visual Basic 6.0 y SQLServer 7.0
La condicin de bsqueda (condicin WHERE) de una vista para hacer que la vista se
adapte dinmicamente al usuario o entorno en tiempo de ejecucin.
C!E,TE VIET S5oLM4E#%0o4#entIn7o ,S
SE>ECT @ &!BM E#%0o4ee"
T-E!E E#%0o4eeI* 8 SHSE!_SI*()
GB
Cualquier expresin.
Un desencadenador o restriccin CHECK para comprobar los valores especificados
cuando se insertan datos.
C!E,TE T,<>E Sa0e"Conta't"
(Sa0e"!e%I* I$T :!IM,!X REX C-ECR (Sa0e"!e%I* 8 SHSE!_SI*() ),
Conta't$a#e V,!C-,!(DO) $H>>,
Conta't:5one V,!C-,!(13) $H>>)
Un desencadenador o restriccin DEFAULT para suministrar un valor en el caso de que
no se especifique ninguno en una instruccin NSERT.
C!E,TE T,<>E Sa0e"Conta't"
(
Sa0e"!e%I* I$T :!IM,!X REX C-ECR (Sa0e"!e%I* 8 SHSE!_SI*() ),
Conta't$a#e V,!C-,!(DO) $H>>,
Conta't:5one V,!C-,!(13) $H>>,
T5enCreated *,TETIME *E&,H>T GET*,TE(),
Creator I$T *E&,H>T SHSE!_SI*()
)
GB
Al utilizar las funciones tome en cuenta los siguiente puntos:
Las funciones se usan siempre con parntesis, incluso cuando no haya parmetros. Una
excepcin son las funciones nildicas (funciones que no toman parmetros) usadas con la
palabra clave DEFAULT.
Algunas veces, los parmetros que especifican una base de datos, equipo, inicio de sesin o
usuario de base de datos son opcionales. Si no se proporcionan, el valor predeterminado es
el de la base de datos, equipo host, inicio de sesin o usuario de base de datos actual.
Las funciones se pueden anidar (una funcin se usa dentro de otra funcin).
1.5.3 Programar tareas en Transac-SQL
Para realizar procesos que no se pueden llevar a cabo con una sola instruccin de Transact-SQL,
Microsoft SQL Server permite agrupar instrucciones de Transact-SQL de varias formas:
Usar Iotes : Un lote es un grupo compuesto por una o varias instrucciones de Transact-
SQL que se envan desde una aplicacin al servidor como una unidad. SQL Server
ejecuta cada lote como una unidad ejecutable individual.
UtiIizar procedimientos aImacenados : Un procedimiento almacenado es un grupo de
instrucciones de Transact-SQL que han sido definidas y compiladas previamente en el
servidor. El procedimiento almacenado puede aceptar parmetros y devolver conjuntos
de resultados, cdigos de retorno y parmetros de salida a la aplicacin que realiza la
llamada.
UtiIizar desencadenadores :Un desencadenador es un tipo especial de procedimiento
almacenado. No es llamado directamente por las aplicaciones. En su lugar, se ejecuta
cuando un usuario realiza una modificacin determinada (NSERT, UPDATE o DELETE)
en una tabla.
UtiIizar secuencias de comandos : Una secuencia de comandos es una serie de
instrucciones de Transact-SQL almacenadas en un archivo. El archivo se puede usar
Material de estudio Pgina: 174 de 249
Visual Basic 6.0 y SQLServer 7.0
como entrada para la herramienta osqI o para el Analizador de consultas de SQL Server.
Las herramientas ejecutarn entonces las instrucciones de Transact-SQL almacenadas
en el archivo.
Las siguientes caractersticas de SQL Server permiten controlar la utilizacin de varias
instrucciones de Transact-SQL a la vez:
Instrucciones de controI de fIujo : Le permiten incluir lgica condicional. Por ejemplo, si
el pas es Canad, se realiza una serie de instrucciones de Transact-SQL. Si el pas es
Reino Unido, se realiza otra serie de instrucciones de Transact-SQL.
VariabIes : Le permiten almacenar datos para ser utilizados posteriormente como entrada
de una instruccin de Transact-SQL. Por ejemplo, puede que tenga que codificar una
consulta que necesite especificar distintos valores de datos en la clusula WHERE cada
vez que se ejecuta la consulta. Puede escribir la consulta para que use variables en la
clusula WHERE y codificar la lgica para que rellene las variables con los datos
adecuados. Los parmetros de los procedimientos almacenados son una clase especial
de variables.
Tratamiento de errores : Le permite personalizar la forma en la que SQL Server
responde a los problemas. Pueden especificar las acciones apropiadas que se llevarn a
cabo cuando se produzcan errores, o generar mensajes de error personalizados que sean
ms informativos para el usuario que los errores genricos de SQL Server.
1.5.4 Variables y parmetros
Transact-SQL tiene varias formas de pasar datos entre instrucciones de Transact-SQL. Entre
stas se encuentran:
Las variabIes IocaIes de Transact-SQL :Una variable de Transact-SQL es un objeto de
lotes y secuencias de comandos de Transact-SQL que puede contener un valor de datos.
Una vez que la variable se ha declarado o definido, una instruccin de Transact-SQL de
un lote puede establecer la variable a un valor y otra instruccin posterior del lote puede
obtener el valor de la variable, por ejemplo:
*EC>,!E [E#%I*Var I$T
SET [E#%I*Var 8 1234
SE>ECT @
&!BM E#%0o4ee"
T-E!E E#%0o4eeI* 8 [E#%I*Var
Parmetros de Transact-SQL :Un parmetro es un objeto usado para pasar datos entre
un procedimiento almacenado y el lote o secuencia de comandos que lo ejecuta. Los
parmetros pueden ser de entrada o de salida, como, por ejemplo:
C!E,TE :!BCE*H!E :ar#Sa#%0e [E#%I*:ar# I$T ,S
SE>ECT @
&!BM E#%0o4ee"
T-E!E E#%0o4eeI* 8 [E#%I*:ar#
GB
E?EC :ar#Sa#%0e [E#%I*:ar# 8 1234
GB
Las aplicaciones usan variables de aplicacin y marcadores de parmetros para trabajar con los
datos de las instrucciones de Transact-SQL.
VariabIes de apIicacin :Los lenguajes de programacin de aplicaciones como C, C++,
Basic y Java tienen sus propias variables para contener datos. Las aplicaciones que usan
las AP de base de datos tienen que mover los datos devueltos por las instrucciones de
Transact-SQL a las variables de aplicacin antes de que puedan trabajar con los datos.
Esto se hace normalmente en un proceso llamado enlace. La aplicacin usa una funcin
de AP para enlazar una columna del conjunto de resultados a una variable del programa.
Cuando se recupera una fila, el proveedor o controlador de AP mueve los datos desde la
columna a la variable del programa enlazada.
Material de estudio Pgina: 175 de 249
Visual Basic 6.0 y SQLServer 7.0
Marcadores de parmetros :Los marcadores de parmetros son admitidos por ADO,
OLE DB y las AP de base de datos basadas en ODBC. Un marcador de parmetro es un
signo de interrogacin (?) colocado en la posicin de una expresin de entrada en una
instruccin de Transact-SQL. El marcador de parmetro se enlaza a una variable de
aplicacin. Esto permite que los datos de variables de aplicacin se usen como entradas
de las instrucciones de Transact-SQL. Los marcadores de parmetros permiten tambin
que los parmetros de salida y los cdigos de retorno de los procedimientos almacenados
se enlacen a variables de aplicacin. Cuando se ejecuta el procedimiento, los datos de
salida se devuelven a las variables enlazadas. La AP de las bibliotecas de bases de
datos admite tambin que se enlacen los parmetros de los procedimientos almacenados
y los cdigos de retorno a las variables del programa.
1.5.5 Control de flujo.
Transact-SQL proporciona palabras especiales que forman parte del llamado lenguaje de control
de flujo con el que se controla la ejecucin de instrucciones de Transact-SQL, bloques de
instrucciones y procedimientos almacenados. Estas palabras se pueden usar en las instrucciones
"ad hoc" de Transact-SQL, en los lotes y en los procedimientos almacenados.
Sin el lenguaje de control de flujo, las instrucciones independientes de Transact-SQL se ejecutan
secuencialmente, tal como se producen. El lenguaje de control de flujo permite que las
instrucciones estn conectadas, se relacionen entre ellas y se hagan interdependientes con
construcciones similares a las de la programacin.
Estas palabras para el control de flujo son tiles cuando es necesario dirigir a Transact-SQL para
que realice alguna clase de accin. Por ejemplo, use un par de instrucciones BEGN.END
cuando incluya ms de una instruccin de Transact-SQL en un bloque lgico. Use un par de
instrucciones F.ELSE cuando una determinada instruccin o bloque de instrucciones tenga que
ser ejecutado F (si) se cumple alguna condicin, y deba ejecutarse otra instruccin o bloque de
instrucciones si esa condicin no se cumple (la condicin ELSE).
Las instrucciones de control de flujo no pueden dividirse en varios lotes o procedimientos
almacenados.
Las palabras clave del lenguaje de control de flujo son:
BEGN.END WATFOR
GOTO WHLE
F.ELSE BREAK
RETURN CONTNUE
1.5.5.1 BEGN.END
Las instrucciones BEGN y END se usan para agrupar varias instrucciones de Transact-SQL en
un bloque lgico. Use las instrucciones BEGN y END en cualquier parte donde una instruccin de
control de flujo deba ejecutar un bloque con dos o ms instrucciones de Transact-SQL.
Por ejemplo, cuando una instruccin F controla la ejecucin de una nica instruccin de
Transact-SQL, no se necesita ninguna instruccin BEGN o END:
I& ([[E!!B! `; O)
SET [ErrorSa/eVariab0e 8 [[E!!B!
Si @@ERROR es 0, slo se salta la instruccin individual SET.
Use las instrucciones BEGN y END para hacer que la instruccin F salte un bloque de
instrucciones cuando el resultado de la evaluacin sea FALSE (falso):
I& ([[E!!B! `; O)
<EGI$
SET [ErrorSa/eVariab0e 8 [[E!!B!
Material de estudio Pgina: 176 de 249
Visual Basic 6.0 y SQLServer 7.0
:!I$T .Error en'ountered, . E
C,ST([ErrorSa/eVariab0e ,S V,!C-,!(1O))
E$*
Las instrucciones BEGN y END deben usarse como un par: no se puede usar una sin la otra. La
instruccin BEGN aparece sola en una lnea, seguida de un bloque de instrucciones de Transact-
SQL. Finalmente, la instruccin END aparece sola en una lnea para indicar el fin del bloque.
Las instrucciones BEGN y END se usan cuando:
Es necesario que un bucle WHLE incluya un bloque de instrucciones.
Es necesario que un elemento de una funcin CASE incluya un bloque de instrucciones.
Es necesario que una clusula F o ELSE incluya un bloque de instrucciones
1.5.5.2 GOTO
La instruccin GOTO provoca que, en la ejecucin de un lote de Transact-SQL, se salte a una
etiqueta. Ninguna de las instrucciones situadas entre la instruccin GOTO y la etiqueta se
ejecutarn. El nombre de la etiqueta se define con la sintaxis:
nombreEti9ueta:
No abuse de la utilizacin de la instruccin GOTO. Una utilizacin excesiva de esta instruccin
puede hacer que resulte difcil entender la lgica de un lote de Transact-SQL. La lgica
desarrollada con GOTO casi siempre se puede implementar con las instrucciones de control de
flujo. La mejor utilizacin de GOTO se produce cuando se necesita romper la anidacin profunda
de instrucciones de control de flujo.
La etiqueta que constituye el objetivo de un GOTO slo identifica el destino del salto. No hace
nada para aislar las instrucciones que le siguen de las instrucciones que le preceden. Cualquier
usuario que ejecute las instrucciones situadas justo antes de la etiqueta se la saltar y ejecutar
las instrucciones posteriores a la misma. Esto ocurrir a menos que las instrucciones que
preceden a la etiqueta sean a su vez instrucciones de control de flujo como, por ejemplo,
RETURN.
Esto es un ejemplo de un GOTO:
I& (SE>ECT SXSTEM_HSE!()) 8 .%a4ro00.
GBTB Vete_a
H:*,TE auna tab0ab
*E>ETE auna tab0ab
KK"i 0a 'ondi'in e" /erdadera "e ignor3n 0a" do"
KKint"ru''ione" anteriore"KK "tate#ent" 7o00oLing t5e GBTB are exe'uted6
Vete_a
--Sigue e0 70ujo de0 %rogra#a
1.5.5.3 F.ELSE
La instruccin F se usa para probar una condicin. El control de flujo resultante depende de si se
especifica o no la instruccin ELSE opcional:
F especificado sin ELSE.
Cuando la instruccin F da como resultado TRUE (verdadero), se ejecuta la instruccin o bloque
de instrucciones que sigue a la instruccin F. Cuando la instruccin F da como resultado FALSE
(falso), se salta la instruccin o bloque de instrucciones que sigue a la instruccin F.
F especificado con ELSE.
Cuando la instruccin F da como resultado TRUE, se ejecuta la instruccin o bloque de
instrucciones que siguen a F y el control salta al punto posterior a la instruccin o bloque
de instrucciones que sigue a ELSE. Cuando la instruccin F da como resultado FALSE,
se salta la instruccin o bloque de instrucciones que sigue a F y se ejecuta la instruccin
o bloque de instrucciones que sigue a la instruccin ELSE opcional.
Material de estudio Pgina: 177 de 249
Visual Basic 6.0 y SQLServer 7.0
Por ejemplo, si un procedimiento almacenado ha estado guardando los cdigos de error
devueltos por @@ERROR durante una transaccin, podra tener una instruccin F similar a la
siguiente al final del procedimiento:
I& ([ErrorSa/eVariab0e `; O)
<EGI$
:!I$T .Errore" en'ontrado", /a %a tra"6.
C,ST([ErrorSa/eVariab0e ,S V,!C-,!(1O))
!B>><,CR
E$*
E>SE
<EGI$
:!I$T .$o exi"ten errore", a'e%ta#o" tra"a''in6.
CBMMIT
E$*
!ETH!$ [ErrorSa/eVariab0e
16D6D64 RETURN
La instruccin RETURN termina incondicionalmente una consulta, procedimiento almacenado o
lote. Ninguna de las instrucciones de un procedimiento almacenado o lote que siga a la
instruccin RETURN se ejecutar.
Cuando se usa en un procedimiento almacenado, la instruccin RETURN puede especificar un
valor entero para devolver a la aplicacin, lote o procedimiento que realiza la llamada. Si no se
especifica ningn valor en la instruccin RETURN, un procedimiento almacenado devuelve el
valor 0.
La mayor parte de los procedimientos almacenados siguen la convencin de usar el cdigo de
retorno para indicar si el procedimiento almacenado se ha ejecutado correctamente o no. Los
procedimientos almacenados devuelven el valor 0 cuando no se encontraron errores. Cualquier
valor distinto de cero indica que se produjo un error. Por ejemplo:
HSE $ort5Lind
GB
KK Create a %ro'edure t5at taCe" one in%ut %ara#eter
KK and return" one out%ut %ara#eter and a return 'ode6
C!E,TE :!BCE*H!E Sa#%0e:ro'edure [E#%0o4eeI*:ar# I$T,
[Max(uantit4 I$T BHT:HT
,S
KK *e'0are and initia0i2e a /ariab0e to 5o0d [[E!!B!6
*EC>,!E [ErrorSa/e I$T
SET [ErrorSa/e 8 O
KK *o a SE>ECT u"ing t5e in%ut %ara#eter6
SE>ECT &ir"t$a#e, >a"t$a#e, Tit0e
&!BM E#%0o4ee"
T-E!E E#%0o4eeI* 8 [E#%0o4eeI*:ar#
KK Sa/e an4 non2ero [[E!!B! /a0ue6
I& ([[E!!B! `; O)
SET [ErrorSa/e 8 [[E!!B!
KK Set a /a0ue in t5e out%ut %ara#eter6
SE>ECT [Max(uantit4 8 M,?((uantit4)
&!BM ^Brder *etai0"_
I& ([[E!!B! `; O)
SET [ErrorSa/e 8 [[E!!B!
KK !eturn" O i7 neit5er SE>ECT "tate#ent 5ad
KK an error, ot5erLi"e return" t5e 0a"t error6
!ETH!$ [ErrorSa/e
GB
Material de estudio Pgina: 178 de 249
Visual Basic 6.0 y SQLServer 7.0
Un lote o procedimiento almacenado de Transact-SQL que ejecuta un procedimiento almacenado
puede recuperar el cdigo de retorno en una variable de tipo entero:
*EC>,!E [!eturnStatu" I$T
*EC>,!E [Max(t4Variab0e I$T
E?ECHTE [!eturnStatu" 8 Sa#%0e:ro'edure [E#%0o4eeI*:ar# 8 \,
[Max(t4Variab0e 8 [Max(uantit4 BHT:HT
KK S5oL t5e /a0ue" returned6
:!I$T . .
:!I$T .!eturn 'ode 8 . E C,ST([!eturnStatu" ,S C-,!(1O))
:!I$T .Maxi#u# (uantit4 8 . E C,ST([Max(t4Variab0e ,S C-,!(1O))
GB
Las aplicaciones que llaman a un procedimiento almacenado pueden enlazar a una variable de
tipo entero el marcador de parmetro que corresponda al cdigo de retorno.
/.2.2.2 EA6T1#*
La instruccin WATFOR suspende la ejecucin de una conexin hasta que:
Haya pasado un intervalo especificado de tiempo.
Se haya alcanzado una hora especificada del da.
La instruccin WATFOR se especifica con una de estas dos clusulas:
La palabra clave DELAY seguida de una cantidad!iempoLue3asar antes de que
se complete la instruccin WATFOR. El tiempo que puede pasar antes de la finalizacin
de la instruccin WATFOR puede ser de hasta 24 horas.
La palabra clave TME seguida de una Hora'eE2ecuci"n que especifica cundo
se completa la instruccin WATFOR.
En este ejemplo se usa la palabra clave DELAY para esperar dos segundos antes de realizar una
instruccin SELECT:
T,IT&B! *E>,X .OOOOO2.
SE>ECT E#%0o4eeI* &!BM $ort5Lind6dbo6E#%0o4ee"
En este ejemplo se usa la palabra clave TME para esperar hasta las 10 p.m. para realizar una
comprobacin de la base de datos especificada pubs con el fin de asegurar que todas las
pginas estn asignadas y se usan correctamente.
HSE %ub"
<EGI$
T,IT&B! TIME .22OO.
*<CC C-ECR,>>BC
E$*
La desventaja de la instruccin WATFOR es que la conexin de la aplicacin permanece
suspendida hasta que finaliza WATFOR. El mejor uso de WATFOR se produce cuando se
necesita suspender el procesamiento de una aplicacin o procedimiento almacenado durante un
tiempo limitado. La utilizacin del Agente SQL Server o de SQL-DMO para programar una tarea
constituye un mtodo ms adecuado para ejecutar una accin a una hora determinada del da.
/.2.2.9 E=6LEFB*EA> o C#4T64UE
La instruccin WHLE repite una instruccin o bloque de instrucciones mientras la condicin
especificada siga siendo verdadera.
Con WHLE se usan normalmente dos instrucciones de Transact-SQL: BREAK o CONTNUE. La
instruccin BREAK sale del bucle WHLE ms profundo, y la instruccin CONTNUE reinicia un
bucle WHLE. Un programa podra ejecutar una instruccin BREAK si, por ejemplo, no hubiera
ms filas que procesar. Una instruccin CONTNUE podra ejecutarse si, por ejemplo, la ejecucin
del cdigo debiera continuar.
Material de estudio Pgina: 179 de 249
Visual Basic 6.0 y SQLServer 7.0
Nota Si una instruccin SELECT se usa como condicin de la instruccin WHLE, la instruccin
SELECT debe ir entre parntesis.
En este ejemplo se usa una instruccin WHLE para controlar el nmero de recopilaciones
realizadas:
HSE $ort5Lind
GB
*EC>,!E ab' CH!SB! &B!
SE>ECT @ &!BM S5i%%er"
B:E$ ab'
&ETC- $E?T &!BM ab'
T-I>E ([[&ETC-_ST,THS 8 O)
&ETC- $E?T &!BM ab'
C>BSE ab'
*E,>>BC,TE ab'
GB
Otras pruebas vlidas de la condicin WHLE podran ser las siguientes:
T-I>E ([,CounterVariab0e ` 1OO)
- O bien -
T-I>E E?ISTS(SE>ECT au_0na#e &!BM aut5or" T-E!E au_7na#e 8 .,nne.)
1.5.5.5 CASE
La funcin CASE es una expresin especial de Transact-SQL que permite que se muestre un
valor alternativo dependiendo del valor de una columna. Este cambio es temporal, con lo que no
hay cambios permanentes en los datos. Por ejemplo, la funcin CASE puede mostrar California
en un conjunto de resultados de una consulta de las filas que tengan el valor CA en la columna
state.
La funcin CASE est compuesta de:
La palabra clave CASE.
El nombre de columna que se va a transformar.
Clusulas WHEN que especifican las expresiones que se van a buscar y clusulas THEN
que especifican las expresiones que las van a reemplazar.
La palabra clave END.
Una clusula AS opcional que define un alias de la funcin CASE.
En este ejemplo se muestra, en el conjunto de resultados de la consulta, el nombre completo del
estado en el que vive cada autor:
SE>ECT au_7na#e, au_0na#e,
C,SE "tate
T-E$ .C,. T-E$ .Ca0i7ornia.
T-E$ .RS. T-E$ .Ran"a".
T-E$ .T$. T-E$ .Tenne""ee.
T-E$ .B!. T-E$ .Bregon.
T-E$ .MI. T-E$ .Mi'5igan.
T-E$ .I$. T-E$ .Indiana.
T-E$ .M*. T-E$ .Mar40and.
T-E$ .HT. T-E$ .Hta5.
E$* ,S State$a#e
&!BM %ub"6dbo6aut5or"
B!*E! <X au_0na#e
Material de estudio Pgina: 180 de 249
Visual Basic 6.0 y SQLServer 7.0
1.@ !ransacciones
Una transaccin es una secuencia de operaciones realizadas como una sola unidad lgica de
trabajo. Una unidad lgica de trabajo debe exhibir cuatro propiedades, conocidas como
propiedades ACD (atomicidad, coherencia, aislamiento y durabilidad), para ser calificada como
transaccin:
Ato$icidad ,*na transaccin de#e ser una unidad atmica de tra#a!o- tanto si se reali@an
todas sus modificaciones en los datos- como si no se reali@a nin"una de ellas0
Coherencia BCuando finali@a- una transaccin de#e de!ar todos los datos en un estado
co5erente0 En una #ase de datos relacional- se de#e aplicar todas las re"las a las
modificaciones de la transaccin para mantener la inte"ridad de todos los datos0 Todas las
estructuras internas de datos- como 7ndices de 2r#ol G o listas do#lemente .inculadas-
de#en estar correctos al final de la transaccin0
Aisla$iento ,Las modificaciones reali@adas por transacciones simult2neas se de#en aislar
de las modificaciones lle.adas a ca#o por otras transacciones simult2neas0 *na
transaccin .e los datos en el estado en 1ue esta#an antes de 1ue otra transaccin
simult2nea los modificara o despuFs de 1ue la se"unda transaccin se 5a/a concluido-
pero no .e un estado intermedio0 Esto se conoce como seria#ilidad de#ido a 1ue su
resultado es la capacidad de .ol.er a car"ar los datos iniciales / reproducir una serie de
transacciones para finali@ar con los datos en el mismo estado en 1ue esta#an despuFs de
reali@ar las transacciones ori"inales0
Dura)ilidad ,*na .e@ concluida una transaccin- sus efectos son permanentes en el
sistema0 Las modificaciones persisten a8n en el caso de producirse un error del sistema0
Especi,icar & e(i+ir transacciones
Los programadores de SQL son los responsables de iniciar y finalizar las transacciones en puntos
que exijan la coherencia lgica de los datos. El programador debe definir la secuencia de
modificaciones de datos que los dejan en un estado coherente en relacin a las reglas
corporativas de la organizacin. A continuacin, el programador incluye estas instrucciones de
modificacin en una sola transaccin de forma que Microsoft SQL Server puede exigir la
integridad fsica de la misma.
Es responsabilidad de un sistema de base de datos corporativo como SQL Server proporcionar
los mecanismos que aseguren la integridad fsica de cada transaccin. SQL Server proporciona:
Servicios de bloqueo que preservan el aislamiento de la transaccin.
Servicios de registro que aseguran la durabilidad de la transaccin. An en el caso de que
falle el hardware del servidor, el sistema operativo o el propio SQL Server, SQL Server
utiliza registros de transacciones, al reinicio, para deshacer automticamente las
transacciones incompletas en el momento en que se produjo el error en el sistema.
Caractersticas de administracin de transacciones que exigen la atomicidad y coherencia
de la transaccin. Una vez iniciada una transaccin, debe concluirse correctamente o
SQL Server deshar todas las modificaciones de datos realizadas desde que se inici la
transaccin.
1.6.1 Controlar las transacciones.
Las aplicaciones controlan las transacciones principalmente al especificar cundo se inicia y
finaliza una transaccin. Esto se puede especificar mediante la utilizacin de instrucciones de
Material de estudio Pgina: 181 de 249
Visual Basic 6.0 y SQLServer 7.0
Transact-SQL o funciones de la AP de base de datos. El sistema tambin debe ser capaz de
controlar correctamente los errores que terminan una transaccin antes de que se concluya.
Las transacciones se administran en las conexiones. Cuando se inicia una transaccin en una
conexin, todas las instrucciones de Transact-SQL ejecutadas en esa conexin forman parte de la
transaccin hasta que la transaccin finaliza.
Puede iniciar transacciones en 8icroso,t SQL Server co$o transacciones e(pl"citas, de con,ir$acin
auto$%tica o i$pl"citas.
Transacciones e(pl"citas,Inicie una transaccin de forma e6pl7cita mediante la
instruccin GE&IN TRANSACTION0
Transacciones de con,ir$acin auto$%tica ,Hste es el modo predeterminado de S4L
Ser.er0 Cada instruccin indi.idual de Transact3S4L se confirma cuando termina0 No
tiene 1ue especificar instrucciones para controlar las transacciones0
Transacciones i$pl"citas ,Esta#le@ca el modo de transaccin impl7cita a tra.Fs de una
funcin de la API o la instruccin SET IPLICITITRANSACTIONS ON de Transact3
S4L 0 La si"uiente instruccin inicia autom2ticamente una nue.a transaccin0 Cuando se
conclu/e la transaccin- la instruccin de Transact3S4L si"uiente inicia una nue.a
transaccin0
Los modos de conexin se administran en las conexiones. Si una transaccin cambia de un modo
de transaccin a otro, no tiene efecto sobre los modos de transaccin de otras conexiones.
1inali5ar transacciones
Puede finalizar las transacciones con la instruccin COMMT o la instruccin ROLLBACK.
C#886T
Si una transaccin es correcta- conf7rmela0 La instruccin COIT "aranti@a 1ue
todas las modificaciones de la transaccin se con.ierten en una parte permanente de la
#ase de datos0 La instruccin COIT tam#iFn li#era recursos 1ue utili@a la
transaccin como- por e!emplo- los #lo1ueos0
*#LLBAC>
Si se produce un error en una transaccin o el usuario decide cancelar la transaccin-
des5a"a la transaccin0 La instruccin ROLLGACJ des5ace todas las modificaciones
reali@adas en la transaccin al de.ol.er los datos al estado en 1ue esta#an al inicio de
la transaccin0 La instruccin ROLLGACJ tam#iFn li#era los recursos 1ue mantiene
la transaccin0
Especi,icar los l"$ites de la transaccin
Puede identificar si las transacciones de SQL Server se inician y finalizan con instrucciones de
Transact-SQL o con funciones y mtodos de la AP.
Instrucciones de Transact3S4L
*tilice las instrucciones GE&IN TRANSACTION- COIT TRANSACTION-
COIT +ORJ- ROLLGACJ TRANSACTION- ROLLGACJ +ORJ / SET
IPLICITITRANSACTIONS para delinear transacciones0 Se utili@an principalmente
en aplicaciones de Gi#liotecas de #ases de datos / en secuencias de comandos de
Material de estudio Pgina: 182 de 249
Visual Basic 6.0 y SQLServer 7.0
Transact3S4L- como las secuencias de comandos 1ue se e!ecutan con el pro"rama del
s7m#olo del sistema os!l0
$unciones / mFtodos de la API
Las API de #ases de datos- como ODGC- OLE DG / ADO contienen funciones o
mFtodos utili@ados para delinear transacciones0 Hstos son los principales mecanismos
utili@ados para controlar transacciones en una aplicacin de S4L Ser.er0
Cada transaccin se debe administrar solamente mediante uno de estos mtodos. La utilizacin
de ambos mtodos en la misma transaccin puede conducir a resultados no definidos. Por
ejemplo, no debe iniciar una transaccin con las funciones de la AP de ODBC y despus utilizar
la instruccin COMMT de Transact-SQL para concluir la transaccin. De esta forma, no notificara
al controlador ODBC de SQL Server que se confirm la transaccin. En este caso, utilice la
funcin SQLEndTran de ODBC para finalizar la transaccin.
Errores al procesar la transaccin
Si un error grave impide la terminacin correcta de una transaccin, SQL Server deshace
automticamente la transaccin y libera todos los recursos que mantiene la transaccin. Si se
interrumpe la conexin de red del cliente con SQL Server, las transacciones pendientes de la
conexin se deshacen cuando la red notifica a SQL Server la interrupcin. Si la aplicacin cliente
falla o si el equipo cliente se bloquea o se reinicia, tambin se interrumpe la conexin y SQL
Server deshace las conexiones pendientes cuando la red le notifica la interrupcin. Si el cliente
cierra la aplicacin, se deshacen las transacciones pendientes.
Si se produce el error de una instruccin en tiempo de ejecucin (como una infraccin de
restricciones) en un archivo por lotes, el comportamiento predeterminado de SQL Server consiste
en deshacer solamente la instruccin que gener el error. Puede modificar este comportamiento
con la instruccin SET XACT_ABORT. Una vez ejecutada la instruccin SET XACT_ABORT ON,
los errores de instrucciones en tiempo de ejecucin hacen que se deshaga automticamente la
transaccin actual. Los errores de compilacin como, por ejemplo, un error de sintaxis no se ven
afectados por la instruccin SET XACT_ABORT.
Es responsabilidad del programador codificar la aplicacin para especificar la accin correcta
(COMMT o ROLLBACK) si se produce un error de compilacin o en tiempo de ejecucin.
1.6.2 Transacciones explcitas
Una transaccin explcita es aquella en que se define explcitamente el inicio y el final de la
transaccin. Las transacciones explcitas tambin reciban el nombre de transacciones definidas
por el usuario o especificadas por el usuario en versiones anteriores de Microsoft SQL Server .
Las aplicaciones de bibliotecas de base de datos y secuencias de comandos de Transact-SQL
utilizan las instrucciones de Transact-SQL BEGN TRANSACTON, COMMT TRANSACTON,
COMMT WORK, ROLLBACK TRANSACTON o ROLLBACK WORK para definir transacciones
explcitas.
BE064 T*A4SACT6#4 ,arca el punto de inicio de una transaccin e6pl7cita de una
cone6in0
C#886T T*A4SACT6#4 o C#886T E#*> ,Se utili@a para finali@ar una
transaccin correctamente si no 5u#o errores0 Todas las modificaciones de datos
reali@adas en la transaccin se con.ierten en parte permanente de la #ase de datos0 Los
recursos mantenidos por la transaccin se li#eran0
Material de estudio Pgina: 183 de 249
Visual Basic 6.0 y SQLServer 7.0
*#LLBAC> T*A4SACT6#4 o *#LLBAC> E#*> BSe utili@a para eliminar una
transaccin en la 1ue se encontraron errores0 Se de.uel.en todos los datos 1ue modifica la
transaccin al estado en 1ue esta#a al inicio de la transaccin0 Los recursos mantenidos
por la transaccin se li#eran0
Tambin puede utilizar transacciones explcitas en OLE DB. Llame al mtodo
ITransactionLocaI::StartTransaction para iniciar una transaccin. Llame al mtodo
ITransaction::Commit o ITransaction::Abort con FALSE establecido en f-etener para finalizar
la transaccin sin iniciar automticamente otra transaccin.
En ADO, utilice el mtodo BeginTrans en un objeto Connection para iniciar una transaccin
explcita. Para finalizar la transaccin, llame a los mtodos CommitTrans o RoIIbackTrans del
objeto Connection.
La AP de ODBC no acepta transacciones explcitas, slo acepta transacciones de confirmacin
automtica y transacciones implcitas.
El modo de transacciones explcitas se mantiene solamente durante la transaccin. Cuando la
transaccin termina, la conexin vuelve al modo de transaccin en que estaba antes de iniciar la
transaccin explcita, es decir, el modo implcito o el modo de confirmacin automtica.
1.6.3 Transacciones de confirmacin automtica
El modo de confirmacin automtica es el modo predeterminado de administracin de
transacciones de Microsoft SQL Server . Toda instruccin de Transact-SQL se confirma o se
deshace cuando termina. Si una instruccin termina correctamente, se confirma; si encuentra un
error, se deshace. Una conexin de SQL Server funciona en modo de confirmacin automtica
siempre que no se suplante el modo predeterminado mediante transacciones explcitas o
implcitas. El modo de confirmacin automtica es tambin el modo predeterminado para la
biblioteca de bases de datos, ODBC, OLE DB y ADO.
Una conexin de SQL Server funcionar en modo de confirmacin automtica hasta que la
instruccin BEGN TRANSACTON inicie una transaccin explcita o se active el modo de
transacciones implcitas. Cuando la transaccin explcita se confirma o se deshace, o cuando se
desactiva el modo de transacciones implcitas, SQL Server vuelve al modo de confirmacin
automtica.
Errores de co$pilacin & en tie$po de e'ecucin
En el modo de confirmacin automtica, a veces parece que SQL Server ha deshecho un proceso
por lotes completo en vez de deshacer solamente una instruccin SQL. Esto slo sucede si se
trata de un error de compilacin, no en el caso de un error en tiempo de ejecucin. Los errores de
compilacin impiden que SQL Server genere un plan de ejecucin, por lo que no se ejecuta
ninguna instruccin del proceso por lotes. Aunque parezca que se ha deshecho todas las
instrucciones anteriores a la que gener el error, el error impidi que se ejecutara ninguna
instruccin del proceso por lotes. En este ejemplo, no se ejecut ninguna de las instrucciones
NSERT del tercer proceso por lotes debido a un error de compilacin. Parece que se han
deshecho las dos primeras instrucciones NSERT cuando, en realidad, nunca se ejecutaron.
HSE %ub"
GB
C!E,TE T,<>E Te"t<at'5 (Co0a I$T :!IM,!X REX, Co0b C-,!(3))
GB
I$SE!T I$TB Te"t<at'5 V,>HES (1, .aaa.)
I$SE!T I$TB Te"t<at'5 V,>HES (2, .bbb.)
I$SE!T I$TB Te"t<at'5 V,>HSE (3, .'''.) J@ S4ntax error @J
GB
SE>ECT @ &!BM Te"t<at'5 J@ !eturn" no roL" @J
GB
Material de estudio Pgina: 184 de 249
Visual Basic 6.0 y SQLServer 7.0
En este ejemplo, la tercera instruccin NSERT genera un error de clave principal duplicada en
tiempo de ejecucin. Las dos primeras instrucciones NSERT eran correctas y se han confirmado,
por lo que permanecen despus de producirse el error en tiempo de ejecucin.
HSE %ub"
GB
C!E,TE T,<>E Te"t<at'5 (Co0a I$T :!IM,!X REX, Co0b C-,!(3))
GB
I$SE!T I$TB Te"t<at'5 V,>HES (1, .aaa.)
I$SE!T I$TB Te"t<at'5 V,>HES (2, .bbb.)
I$SE!T I$TB Te"t<at'5 V,>HES (1, .'''.) J@ *u%0i'ate Ce4 error @J
GB
SE>ECT @ &!BM Te"t<at'5 J@ !eturn" roL" 1 and 2 @J
GB
SQL Server versin 7.0 introduce la resolucin demorada de nombres, en la que no se resuelven
los nombres de los objetos hasta la ejecucin. Las versiones anteriores de SQL Server resolvan
los nombres en tiempo de compilacin. Algunos errores que eran de compilacin y evitaban la
ejecucin de un proceso por lotes en versiones anteriores de SQL Server son errores en tiempo
de ejecucin en SQL Server 7.0. En este ejemplo, se ejecutaron y confirmaron las dos primeras
instrucciones NSERT y las dos filas permanecen en la tabla TestBatch despus de que la
tercera instruccin NSERT generara un error en tiempo de ejecucin al hacer referencia a una
tabla que no existe.
HSE %ub"
GB
C!E,TE T,<>E Te"t<at'5 (Co0a I$T :!IM,!X REX, Co0b C-,!(3))
GB
I$SE!T I$TB Te"t<at'5 V,>HES (1, .aaa.)
I$SE!T I$TB Te"t<at'5 V,>HES (2, .bbb.)
I$SE!T I$TB Te"t<'5 V,>HES (3, .'''.) J@ Tab0e na#e error @J
GB
SE>ECT @ &!BM Te"t<at'5 J@ !eturn" roL" 1 and 2 @J
GB
1.A Cursores
Las operaciones de una base de datos relacional actan en un conjunto completo de filas. El
conjunto de filas que devuelve una instruccin SELECT est compuesto de todas las filas que
satisfacen las condiciones de la clusula WHERE de la instruccin. Este conjunto completo de
filas que devuelve la instruccin se conoce como el conjunto de resultados. Las aplicaciones,
especialmente las aplicaciones interactivas en lnea, no siempre pueden trabajar de forma
efectiva con el conjunto de resultados completo como una unidad. Estas aplicaciones necesitan
un mecanismo que funcione con una fila o un pequeo bloque de filas a la vez. Los cursores son
una extensin de los conjuntos de resultados que proporcionan dicho mecanismo.
Los cursores amplan el procesamiento de los resultados debido a que:
Permiten situarse en filas especficas del conjunto de resultados.
Recuperan una fila o bloque de filas de la posicin actual en el conjunto de resultados.
Aceptan modificaciones de los datos de las filas en la posicin actual del conjunto de
resultados
Aceptan diferentes grados de visibilidad de los cambios que realizan otros usuarios en los
datos de la base de datos que se presentan en el conjunto de resultados.
Proporcionan instrucciones de Transact-SQL en secuencias de comandos,
procedimientos almacenados y acceso de desencadenadores a los datos de un conjunto
de resultados.
Pedir un cursor
Microsoft SQL Server acepta dos mtodos para pedir un cursor:
Material de estudio Pgina: 185 de 249
Visual Basic 6.0 y SQLServer 7.0
Transact-SQL
El lenguaje Transact-SQL admite una sintaxis para utilizar cursores modelados a partir de
la sintaxis de cursores de SQL-92.
Funciones de cursores de interfaces de programacin de aplicaciones (AP) de bases de
datos.
SQL Server admite la funcionalidad de cursores de las siguientes AP de bases de datos:
ADO (Microsoft ActiveX Data Object)
OLE DB
ODBC (Conectividad abierta de bases de datos)
Bibliotecas de bases de datos
Una aplicacin nunca debe mezclar estos dos mtodos de peticin de cursores. Una aplicacin
que ha utilizado la AP para especificar comportamientos de cursores no debe ejecutar una
instruccin DECLARE CURSOR de Transact-SQL para pedir tambin un cursor de Transact-SQL.
Una aplicacin slo debe ejecutar DECLARE CURSOR si ha devuelto todos los atributos de
cursores de la AP a su configuracin predeterminada.
Si no se ha pedido un cursor de Transact-SQL ni un cursor de la AP, la configuracin
predeterminada de SQL Server consiste en devolver un conjunto de resultados completo,
conocido como conjunto de resultados predeterminado, a la aplicacin.
Proceso de cursores
Los cursores de Transact-SQL y los cursores de la AP tienen una sintaxis diferente, pero se
utiliza el siguiente proceso general con todos los cursores de SQL Server:
1. Asocie un cursor con el conjunto de resultados de una instruccin Transact-SQL y defina
las caractersticas del cursor como, por ejemplo, si se puede actualizar las filas del cursor.
2. Ejecute la instruccin de Transact-SQL para llenar el cursor.
3. Recupere las filas del cursor que desea ver. La operacin de recuperar una fila o un
bloque de filas de un cursor recibe el nombre de recopilacin. Realizar series de
recopilaciones para obtener filas con desplazamientos adelante o hacia atrs recibe el
nombre de desplazamiento.
4. Opcionalmente, realice operaciones de modificacin (actualizacin o eliminacin) en la fila
de la posicin actual del cursor.
5. Cierre el cursor.
1.7.1 Cursores de Transact-SQL
Los cursores de Transact-SQL se utilizan principalmente en procedimientos almacenados,
desencadenadores y secuencias de comandos de Transact-SQL en los que el contenido de un
conjunto de resultados est disponible para otras instrucciones de Transact-SQL.
El proceso tpico para utilizar un cursor de Transact-SQL en un procedimiento almacenado o
desencadenador es:
1. Declare las variables de Transact-SQL que contendrn los datos que devuelva el cursor.
Declare una variable para cada columna del conjunto de resultados. Declare las variables
lo suficientemente grandes como para que contengan los valores que devuelve la
columna y con un tipo de datos que se pueda convertir implcitamente desde el tipo de
datos de la columna.
2. Asocie un cursor de Transact-SQL con una instruccin SELECT mediante la instruccin
DECLARE CURSOR. La instruccin DECLARE CURSOR tambin define las
caractersticas del cursor como, por ejemplo, el nombre del cursor y si el cursor es de slo
lectura o de desplazamiento slo hacia delante.
3. Utilice la instruccin OPEN para ejecutar la instruccin SELECT y llenar el cursor.
4. Utilice la instruccin FETCH NTO para recopilar filas individuales y mover los datos de
cada columna a la variable especificada. Otras instrucciones de Transact-SQL pueden
hacer referencia a estas variables para tener acceso a los valores de los datos
Material de estudio Pgina: 186 de 249
Visual Basic 6.0 y SQLServer 7.0
recopilados. Los cursores de Transact-SQL no admiten la recopilacin de bloques de
columnas.
5. Cuando haya terminado con el cursor, utilice la instruccin CLOSE. Cerrar un cursor
libera algunos recursos, como el conjunto de resultados del cursor y sus bloqueos en la
fila actual, pero la estructura del cursor sigue disponible para procesarla si vuelve a emitir
una instruccin OPEN. Dado que el cursor sigue presente, no puede volver a utilizar el
nombre del cursor en este momento. La instruccin DEALLOCATE libera completamente
todos los recursos asignados al cursor, incluido el nombre del cursor. Una vez que se ha
cancelado la asignacin de un cursor, debe emitir una instruccin DECLARE para volver
a generar el cursor.
Supervisar la actividad de cursores de Transact-SQL
Puede utilizar el procedimiento almacenado del sistema sp_cursor_Iist para obtener una lista de
los cursores visibles en la conexin actual y sp_describe_cursor,
sp_describe_cursor_coIumns y sp_describe_cursor_tabIes para determinar las
caractersticas de un cursor.
Una vez abierto el cursor, la funcin @@CURSOR_ROWS o la columna cursor_rows que
devuelve sp_cursor_Iist o sp_describe_cursor indican el nmero de filas del cursor.
Tras cada instruccin FETCH, se actualiza @@FETCH_STATUS para reflejar el estado de la
ltima recopilacin. Tambin puede obtener esta informacin de estado en la columna
fetch_status que devuelve sp_describe_cursor. @@FETCH_STATUS informa de condiciones
como, por ejemplo, si se recopila ms all de la primera o ltima fila del cursor.
@@FETCH_STATUS es global para la conexin y se restablece por cada recopilacin que se
realiza en cualquier cursor abierto en la conexin. Si va a necesitar el estado posteriormente,
guarde @@FETCH_STATUS en una variable de usuario antes de ejecutar otra instruccin en la
conexin. Aunque la siguiente instruccin no sea FETCH, puede ser una instruccin NSERT,
UPDATE o DELETE que activa el desencadenador. ste contiene instrucciones FETCH que
restablecen @@FETCH_STATUS. La columna fetch_status que devuelve sp_describe_cursor
es especfica del cursor especificado y no se ve afectada por las instrucciones FETCH que hagan
referencia a otros cursores. Sin embargo, sp_describe_cursor se ve afectada por las
instrucciones FETCH que hacen referencia al mismo cursor, por lo que se debe utilizar con
cuidado.
Cuando se completa la instruccin FETCH, se dice que el cursor est ubicado en la fila
recopilada. La fila recopilada se conoce como la fila actual. Si no se declar el cursor como de
slo lectura, puede ejecutar una instruccin UPDATE o DELETE con la clusula WHERE
CURRENT OF nombreCursor para modificar la fila actual.
El nombre que asigna a un cursor de Transact-SQL la instruccin DECLARE CURSOR puede ser
global o local. Cualquier lote, procedimiento almacenado o desencadenador que se ejecute en la
misma conexin puede hacer referencia a nombres de cursores globales. No se puede hacer
referencia a nombres de cursores locales fuera del lote, procedimiento almacenado o
desencadenador en que se declar el cursor. Por lo tanto, los cursores locales de los
desencadenadores y procedimientos almacenados estn protegidos contra referencias no
deseadas fuera del procedimiento almacenado o desencadenador.
Utili5ar la varia)le cursor
Microsoft SQL Server tambin admite variables con el tipo de datos cursor. Se puede asociar un
cursor con una variable de tipo cursor mediante dos mtodos:
J@ H"e *EC>,!E [0o'a0_/ariab0e, *EC>,!E CH!SB! and SET6 @J
*EC>,!E [M4Variab0e CH!SB!
*EC>,!E M4Cur"or CH!SB! &B!
SE>ECT >a"t$a#e &!BM $ort5Lind6dbo6E#%0o4ee"
SET [M4Variab0e 8 M4Cur"or
J@ H"e *EC>,!E [0o'a0_/ariab0e and SET @J
*EC>,!E [M4Variab0e CH!SB!
SET [M4Variab0e 8 CH!SB! SC!B>> REXSET &B!
SE>ECT >a"t$a#e &!BM $ort5Lind6dbo6E#%0o4ee"
Material de estudio Pgina: 187 de 249
Visual Basic 6.0 y SQLServer 7.0
Tras asociar un cursor a una variable de tipo cursor, se puede utilizar la variable cursor en lugar
del nombre del cursor en las instrucciones de cursor de Transact-SQL. El tipo de datos cursor
tambin se puede asignar a los parmetros de salida de un procedimiento almacenado y
asociarlo a un cursor. Esto permite que los procedimientos almacenados expongan cursores
locales de una forma controlada.
=acer re,erencia a cursores de Transact-SQL
Slo se puede hacer referencia a nombres de cursores de Transact-SQL y variables mediante
instrucciones de Transact-SQL; no se les puede hacer referencia desde funciones de la AP de
OLE DB, ODBC, ADO y bibliotecas de bases de datos. Por ejemplo, si utiliza DECLARE
CURSOR y OPEN en un cursor de Transact-SQL, no hay forma de utilizar las funciones
SQLFetch o SQLFetchScroII de ODBC para recopilar una fila del cursor de Transact-SQL. La
aplicaciones que necesitan procesamiento de cursores y utilizan estas AP deben utilizar la
compatibilidad de cursor integrada en la AP de base de datos en lugar de cursores de Transact-
SQL.
Puede utilizar cursores de Transact-SQL en aplicaciones si utiliza FETCH y enlaza cada columna
que devuelve FETCH a una variable de programa. Sin embargo, dado que la instruccin FETCH
de Transact-SQL no admite lotes, sta es la forma menos eficaz de devolver datos a una
aplicacin. Recopilar cada fila requiere un viaje de ida y vuelta al servidor. Es ms eficaz utilizar la
funcionalidad de cursor integrada en la AP de la base de datos que admitir la recopilacin de
lotes de filas.
Los cursores de Transact-SQL son extremadamente eficaces cuando se incluyen en
procedimientos almacenados y desencadenadores. Esto se debe a que todo se compila en un
plan de ejecucin en el servidor y no hay trfico de red asociado con la recopilacin de filas.
RecopiIar y despIazar
La operacin que consiste en recuperar una fila de un cursor recibe el nombre de recopilacin.
stas son las opciones de recopilacin:
FETCH FRST
Recopila la primera fila del cursor.
FETCH NEXT
Recopila la fila siguiente a la ltima fila recopilada.
FETCH PROR
Recopila la fila anterior a la ltima fila recopilada.
FETCH LAST
Recopila la ltima fila del cursor.
FETCH ABSOLUTE n
Recopila la enRsima fila a partir de la primera fila del cursor, si n es un entero positivo. Si
n es un entero negativo, se recopila la fila que est n filas antes del final del cursor. Si n
es 0, no se recopila ninguna fila.
FETCH RELATVE n
Recopila la fila que est n filas a partir de la ltima fila recopilada. Si n es positivo, se
recopila la fila que est n filas despus de la ltima fila recopilada. Si n es negativo, se
recopila la fila que est n filas delante de la ltima fila recopilada. Si n es 0, se recopila de
nuevo la misma fila.
Cuando se abre un cursor, la posicin de la fila actual del cursor est lgicamente delante de la
primera fila. Esto hace que las diferentes opciones de recopilacin tengan el siguiente
comportamiento si se trata de la primera recopilacin que se realiza tras abrir el cursor:
FETCH FRST
Recopila la primera fila del cursor.
FETCH NEXT
Recopila la primera fila del cursor.
FETCH PROR
No recopila una fila.
FETCH LAST
Material de estudio Pgina: 188 de 249
Visual Basic 6.0 y SQLServer 7.0
Recopila la ltima fila del cursor.
FETCH ABSOLUTE n
Recopila la enRsima fila a partir de la primera fila del cursor, si n es un entero positivo. Si
n es un entero negativo, se recopila la fila que est n filas delante del final del cursor (por
ejemplo, n = -1 devuelve la ltima fila del cursor). Si n es 0, no se recopila ninguna fila.
FETCH RELATVE n
Recopila la enRsima fila del cursor, si n es positivo. No se recopila ninguna fila si n es
negativo o 0.
Los cursores de Transact-SQL estn limitados a recopilar una fila cada vez. Los cursores de
servidor de la AP admiten la recopilacin de bloques de filas en cada recopilacin. Un cursor que
admite la recopilacin de varias filas a la vez recibe el nombre de cursor de bloque.
Clasi,icaciones de cursores
Se puede clasificar un cursor por las opciones de recopilacin que admite:
Desplazamiento slo hacia delante
Se debe recopilar las filas en serie desde la primera a la ltima fila. FETCH NEXT es la
nica operacin de recopilacin permitida.
Desplazable
Se puede recopilar las filas aleatoriamente desde cualquier posicin del cursor. Se
permiten todas las operaciones de recopilacin (excepto que los cursores dinmicos no
admiten la recopilacin absoluta).
Los cursores desplazables son especialmente tiles para las aplicaciones en pantalla. Se puede
asignar un cursor a una cuadrcula o cuadro de lista de la aplicacin. A medida que el usuario se
desplaza hacia delante y hacia atrs en la cuadrcula, la aplicacin utiliza recopilaciones de
desplazamiento para recopilar las filas del cursor que desea ver el usuario.
1.7.2 Tipos de cursores
ODBC, ADO y la biblioteca de bases de datos definen cuatro tipos de cursores que admite
Microsoft SQL Server . Con SQL Server versin 7.0, se ha ampliado la instruccin DECLARE
CURSOR para que pueda especificar cuatro tipos de cursor para cursores de Transact-SQL.
Estos cursores varan en su capacidad para detectar cambios en el conjunto de resultados y en
los recursos, como la memoria y espacio de tempdb, que consumen. Un cursor puede detectar
cambios en las filas slo cuando intenta volver a recopilar dichas filas; no hay forma de que el
origen de datos notifique al cursor las modificaciones realizadas en las filas actualmente
recopiladas. La capacidad de un cursor para detectar las cambios tambin est influida por el
nivel de aislamiento de la transaccin.
Los cuatro tipos de cursores de servidor de la AP que admite SQL Server son:
Cursores estticos
Cursores dinmicos
Cursores de desplazamiento slo hacia delante
Cursores controlados por conjunto de claves
Los cursores estticos detectan pocos o ningn cambio pero consumen relativamente pocos
recursos al desplazarse, aunque almacenan el cursor completo en tempdb. Los cursores
dinmicos detectan todos los cambios pero consumen ms recursos al desplazarse, aunque
realizan el uso ms ligero de tempdb. Los cursores controlados por conjunto de claves se
encuentran entre los anteriores: detectan la mayor parte de los cambios pero con un consumo
menor que los cursores dinmicos.
Aunque los modelos de cursor de la AP de bases de datos consideran un cursor de
desplazamiento slo hacia delante como un cursor de distinto tipo, SQL Server no hace esta
distincin. SQL Server considera que las opciones de desplazamiento slo hacia delante y de
desplazamiento son las que se puede aplicar a los cursores estticos, controlados por conjunto
de claves y dinmicos.
Material de estudio Pgina: 189 de 249
Visual Basic 6.0 y SQLServer 7.0
1.7.3 DECLARE CURSOR
Define los atributos de un cursor de servidor Transact-SQL, como su comportamiento de
desplazamiento y la consulta utilizada para generar el conjunto de resultados sobre el que opera
el cursor. DECLARE CURSOR acepta la sintaxis basada en el estndar SQL-92 y la sintaxis de
un conjunto de extensiones de Transact-SQL.
Sinta(is de SQL-G.
DECLARE nombreCursor [NSENSTVE] [SCROLL] CURSOR
FOR instrucci"n7E:EC!
[FOR {READ ONLY | UPDATE [OF listaColumnas [,...n]]}]
Sinta(is e(tendida de Transact-SQL
DECLARE nombreCursor CURSOR
[LOCAL | GLOBAL]
[FORWARD_ONLY | SCROLL]
[STATC | KEYSET | DYNAMC | FAST_FORWARD]
[READ_ONLY | SCROLL_LOCKS | OPTMSTC]
[TYPE_WARNNG]
FOR instrucci"n7E:EC!
[FOR UPDATE [OF nombreColumna [,...n]]]
Ar+u$entos de SQL-G.
nombreCursor , Se trata del nom#re del cursor de ser.idor Transact3S4L 1ue se .a a
definir0 El ar"umento nombreCursor de#e se"uir las re"las de los identificadores0
64SE4S6T6CE ,Define un cursor 1ue 5ace una copia temporal de los datos 1ue utili@a0
Todas las peticiones al cursor se responden desde esta ta#la temporal de te$pd)K por
tanto- las modificaciones reali@adas en las ta#las #ase no se refle!ar2n en los datos
de.ueltos por las recuperaciones reali@adas en el cursor / adem2s el cursor no admite
modificaciones0 Cuando se utili@a la sinta6is de S4L3C=- si se omite INSENSITIVE- las
eliminaciones / actuali@aciones confirmadas reali@adas en las ta#las su#/acentes :por
cual1uier usuario; se refle!an en las si"uientes recuperaciones0
SC*#LL , Especifica 1ue est2n disponi#les todas las opciones de recuperacin :$IRST-
LAST- PRIOR- NE)T- RELATIVE- AGSOL*TE;0 Si no se especifica SCROLL en una
instruccin DECLARE C*RSOR de S4L3C=- la 8nica opcin de recuperacin 1ue se
admite es NE)T0 No se puede especificar SCROLL si se especifica tam#iFn
$ASTI$OR+ARD0
instruccinSELECT , Es una instruccin SELECT est2ndar 1ue define el con!unto de
resultados del cursor0 Las pala#ras cla.e COP*TE- COP*TE G%- $OR GRO+SE e
Material de estudio Pgina: 190 de 249
Visual Basic 6.0 y SQLServer 7.0
INTO no est2n permitidas en el ar"umento instruccinSELECT de una declaracin de
cursor0
icrosoft S4L Ser.er con.ierte impl7citamente el cursor a otro tipo si las cl2usulas
de instruccinSELECT entran en conflicto con la funcionalidad del tipo de cursor
solicitado0
*EAD #4L? , Impide 1ue se realicen actuali@aciones a tra.Fs de este cursor0 No es
posi#le 5acer referencia al cursor en una cl2usula +'ERE C*RRENT O$ de una
instruccin *PDATE o DELETE0 Esta opcin anula la posi#ilidad predeterminada de
actuali@ar el cursor0
UPDATE H#1 nombreColumna H,...nII ,Define las columnas del cursor 1ue se pueden
actuali@ar0 Si se especifica el ar"umento O$ nombreColumna L,000nM- slo se podr2n
modificar las columnas incluidas en la lista0 Si se especifica el ar"umento *PDATE sin
una lista de columnas- se pueden actuali@ar todas las columnas0
Ar+u$entos e(tendidos de Transact-SQL
nombreCursor ,Se trata del nom#re del cursor de ser.idor Transact3S4L 1ue se .a a
definir0 El ar"umento nombreCursor de#e se"uir las re"las de los identificadores0
L#CAL ,Especifica 1ue el alcance del cursor es local para el proceso por lotes-
procedimiento almacenado o desencadenador en 1ue se cre el cursor0 El nom#re del
cursor slo es .2lido dentro de este alcance0 Es posi#le 5acer referencia al cursor mediante
.aria#les de cursor locales del proceso por lotes- procedimiento almacenado-
desencadenador o par2metro O*TP*T del procedimiento almacenado0 El par2metro
O*TP*T se utili@a para de.ol.er el cursor local al proceso por lotes- procedimiento
almacenado o desencadenador 1ue reali@a la llamada- el cual puede asi"nar el par2metro a
una .aria#le de cursor para 5acer referencia al cursor despuFs de finali@ar el
procedimiento almacenado0 La asi"nacin del cursor se cancela impl7citamente cuando el
proceso por lotes- procedimiento almacenado o desencadenador finali@an- a menos 1ue el
cursor se 5a/a de.uelto en un par2metro O*TP*T0 En ese caso- se cancela la asi"nacin
del cursor cuando se cancela la asi"nacin de la 8ltima .aria#le 1ue le 5ace referencia o
Fsta se sale del alcance0
0L#BAL , Especifica 1ue el alcance del cursor es "lo#al para la cone6in0 Puede 5acerse
referencia al nom#re del cursor en cual1uier procedimiento almacenado o proceso por
lotes 1ue se e!ecute durante la cone6in0 Slo se cancela impl7citamente la asi"nacin del
cursor cuando se reali@a la descone6in0
Nota Si no se especifica GLOBAL o LOCAL, el valor predeterminado se controla mediante la
configuracin de la opcin de base de datos cursor IocaI como predeterminado. En SQL Server
versin 7.0, el valor predeterminado de esta opcin es FALSE (falso) para que coincida con las
versiones anteriores de SQL Server, donde todos los cursores eran globales. El valor
predeterminado de esta opcin puede cambiar en futuras versiones de SQL Server..
Material de estudio Pgina: 191 de 249
Visual Basic 6.0 y SQLServer 7.0
1#*EA*DJ#4L? ,Especifica 1ue el cursor slo se puede despla@ar desde la primera a
la 8ltima fila0 $ETC' NE)T es la 8nica opcin de recuperacin aceptada0 Si se especifica
$OR+ARDIONL% sin las pala#ras cla.e STATIC- JE%SET o D%NAIC- el cursor
funciona como un cursor D%NAIC0 Cuando no se especifica $OR+ARDIONL% ni
SCROLL- $OR+ARDIONL% es la opcin predeterminada- sal.o si se inclu/en las
pala#ras cla.e STATIC- JE%SET o D%NAIC0 De forma predeterminada- con STATIC-
JE%SET / D%NAIC los cursores son de tipo SCROLL0 A diferencia de las API de
#ases de datos como ODGC / ADO- $OR+ARDIONL% se puede utili@ar con los
cursores STATIC- JE%SET / D%NAIC de Transact3S4L0 $ASTI$OR+ARD /
$OR+ARDIONL% se e6clu/en mutuamenteK si se especifica uno de ellos- no se puede
especificar el otro0
STAT6C ,Define un cursor 1ue 5ace una copia temporal de los datos 1ue utili@a0 Todas
las peticiones al cursor se responden desde esta ta#la temporal de te$pd)K por tanto- las
modificaciones reali@adas en las ta#las #ase no se refle!ar2n en los datos de.ueltos por las
recuperaciones reali@adas en el cursor / adem2s el cursor no admite modificaciones0
>E?SET , Especifica 1ue la pertenencia / el orden de las filas del cursor se fi!an al a#rir
Fste0 El con!unto de cla.es 1ue identifica de forma 8nica las filas est2 inte"rado en una
ta#la de te$pd) conocida como Ke&set0 Los cam#ios en .alores 1ue no sean cla.es de las
ta#las #ase- /a sean reali@ados por el propietario del cursor o confirmados por otros
usuarios- son .isi#les cuando el propietario se despla@a por el cursor0 Las inserciones
reali@adas por otros usuarios no son .isi#les :no es posi#le 5acer inserciones a tra.Fs de un
cursor de ser.idor Transact3S4L;0 Si se elimina una fila- el intento de recuperarla o#tendr2
un .alor de 3= en 99$ETC'ISTAT*S0 Las actuali@aciones de los .alores de cla.es
desde fuera del cursor se aseme!an a la eliminacin de la fila anti"ua se"uida de la
insercin de la nue.a0 La fila con los nue.os .alores no es .isi#le / los intentos de
recuperar la fila de los .alores anti"uos de.uel.en el .alor 3= en 99$ETC'ISTAT*S0
Los nue.os .alores son .isi#les si la actuali@acin se reali@a a tra.Fs del cursor- al
especificar la cl2usula +'ERE C*RRENT O$0
D?4A86C BDefine un cursor 1ue- al despla@arse por Fl- refle!a en su con!unto de
resultados todos los cam#ios reali@ados en los datos de las filas0 Los .alores de los datos-
el orden / la pertenencia de las filas pueden cam#iar en cada recuperacin0 La opcin de
recuperacin AGSOL*TE no se puede utili@ar en los cursores din2micos0
1ASTJ1#*EA*D , Especifica un cursor $OR+ARDIONL%- READIONL% con las
optimi@aciones de rendimiento 5a#ilitadas0 No se puede especificar $ASTI$OR+ARD si
se especifica tam#iFn SCROLL o $ORI*PDATE0 $ASTI$OR+ARD /
$OR+ARDIONL% se e6clu/en mutuamenteK si se especifica uno de ellos- no se puede
especificar el otro0
*EADJ#4L? ,Impide 1ue se realicen actuali@aciones a tra.Fs de este cursor0 No es
posi#le 5acer referencia al cursor en una cl2usula +'ERE C*RRENT O$ de una
instruccin *PDATE o DELETE0 Esta opcin anula la posi#ilidad predeterminada de
actuali@ar el cursor0
Material de estudio Pgina: 192 de 249
Visual Basic 6.0 y SQLServer 7.0
SC*#LLJL#C>S ,Especifica 1ue el F6ito de las actuali@aciones o eliminaciones con
posicin- reali@adas a tra.Fs del cursor- est2 "aranti@ado0 icrosoft S4L Ser.er #lo1uea
las filas al leerlas en el cursor- lo 1ue ase"ura su disponi#ilidad para posteriores
modificaciones0 No se puede especificar SCROLLILOCJS si se especifica
$ASTI$OR+ARD0
#PT686ST6C ,Especifica 1ue las actuali@aciones o eliminaciones con posicin reali@adas
a tra.Fs del cursor no tendr2n F6ito si la fila se 5a actuali@ado despuFs de leerla en el
cursor0 S4L Ser.er no #lo1uea las filas al leerlas en el cursor0 En su lu"ar- utili@a
comparaciones de .alores de columna ti$esta$p o un .alor de suma de compro#acin si
la ta#la no tiene columnas ti$esta$p- para determinar si la fila se 5a modificado despuFs
de leerla en el cursor0 Si la fila se 5a modificado- la actuali@acin o eliminacin con
posicin fracasa0 No se puede especificar OPTIISTIC si se especifica
$ASTI$OR+ARD0
T?PEJEA*4640 ,Especifica 1ue se en.7a un mensa!e de ad.ertencia al cliente si el
cursor se con.ierte impl7citamente del tipo solicitado a otro0
instruccinSELECT , Es una instruccin SELECT est2ndar 1ue define el con!unto de
resultados del cursor0 Las pala#ras cla.e COP*TE- COP*TE G%- $OR GRO+SE e
INTO no est2n permitidas en el ar"umento instruccinSELECT de una declaracin de
cursor0
S4L Ser.er con.ierte impl7citamente el cursor a otro tipo si las cl2usulas de
instruccinSELECT entran en conflicto con la funcionalidad del tipo de cursor
solicitado0
UPDATE H#1 nombreColumna H,...nII , Define las columnas del cursor 1ue se pueden
actuali@ar0 Si se especifica el ar"umento O$ nombreColumna L,000nM- slo se podr2n
modificar las columnas incluidas en la lista0 Si se especifica el ar"umento *PDATE sin
una lista de columnas- se pueden actuali@ar todas las columnas- a menos 1ue se 5a/a
especificado la opcin de simultaneidad READIONL%0
#)servaciones
DECLARE CURSOR define los atributos de un cursor de servidor Transact-SQL, como su
comportamiento de desplazamiento y la consulta utilizada para generar el conjunto de resultados
en que opera el cursor. La instruccin OPEN llena el conjunto de resultados y la instruccin
FETCH devuelve una fila del conjunto de resultados. La instruccin CLOSE libera el conjunto de
resultados actual asociado con el cursor. La instruccin DEALLOCATE libera los recursos que
utiliza el cursor.
La primera forma de la instruccin DECLARE CURSOR utiliza la sintaxis de SQL-92 para declarar
comportamientos de cursores. La segunda forma de DECLARE CURSOR utiliza extensiones de
Transact-SQL que permiten definir cursores con los mismos tipos de cursor utilizados en las
funciones de cursores de la AP de bases de datos de ODBC, ADO y Bibliotecas de bases de
datos.
No puede combinar las dos formas. Si especifica las palabras clave SCROLL o NSENSTVE
antes de la palabra clave CURSOR, no puede utilizar ninguna palabra clave entre los argumentos
CURSOR y FOR instrucci"n7E:EC!. Si especifica palabras clave entre los argumentos
CURSOR y FOR instrucci"n7E:EC!, no puede especificar SCROLL o NSENSTVE antes de la
palabra clave CURSOR.
Material de estudio Pgina: 193 de 249
Visual Basic 6.0 y SQLServer 7.0
Si la instruccin DECLARE CURSOR con sintaxis de Transact-SQL no especifica READ_ONLY,
OPTMSTC o SCROLL_LOCKS, el valor predeterminado es el siguiente:
Si la instruccin SELECT no acepta actualizaciones (permisos insuficientes, acceso a
tablas remotas que no aceptan actualizaciones, etc.), el cursor es de tipo READ_ONLY.
El valor predeterminado de los cursores de tipo STATC y FAST_FORWARD es
READ_ONLY.
El valor predeterminado de los cursores de tipo KEYSET y DYNAMC es OPTMSTC.
Slo se puede hacer referencia a nombres de cursores mediante otras instrucciones Transact-
SQL. No se puede hacer referencia a los nombres de cursores mediante funciones de la AP de
base de datos. Por ejemplo, despus de declarar un cursor, no se puede hacer referencia al
nombre del cursor desde funciones o mtodos de OLE DB, ODBC, ADO o Bibliotecas de bases
de datos. No se pueden recuperar las filas del cursor con las funciones o mtodos de
recuperacin de las AP; las filas slo se pueden recuperar mediante instrucciones FETCH de
Transact-SQL.
Una vez que se ha declarado un cursor, se pueden utilizar estos procedimientos almacenados del
sistema para determinar las caractersticas del cursor.
Procedimiento aImacenado
deI sistema
Descripcin
sp_cursor_Iist
Devuelve la lista de cursores visibles actualmente en la conexin y sus
atributos.
sp_describe_cursor
Describe los atributos de un cursor, por ejemplo si es de desplazamiento
slo hacia delante o de desplazamiento.
sp_describe_cursor_coIumns
Describe los atributos de las columnas del conjunto de resultados del
cursor.
spJdescri)eJcursorJta)les Describe las tablas base a las que tiene acceso el cursor.
Per$isos
Los permisos de DECLARE CURSOR son los predeterminados de cualquier usuario que tenga
permisos de SELECT sobre las vistas, tablas y columnas utilizadas en el cursor.
E'e$plos
A. Utili5ar cursores si$ples & su sinta(is
El conjunto de resultados generado al abrir este cursor contiene todas las filas y todas las
columnas de la tabla authors de la base de datos pubs. Este cursor se puede actualizar, y todas
las actualizaciones y eliminaciones se representan en las recuperaciones realizadas contra el
cursor. FETCH NEXT es la nica recuperacin disponible debido a que no se ha especificado la
opcin SCROLL.
*EC>,!E aut5or"_'ur"or CH!SB!
&B! SE>ECT @ &!BM aut5or"
B:E$ aut5or"_'ur"or
&ETC- $E?T &!BM aut5or"_'ur"or
B. Utili5ar cursores anidados para ela)orar resultados de in,or$es
Este ejemplo muestra cmo se pueden anidar los cursores para elaborar informes complejos. El
cursor interno se declara para cada autor.
SET $BCBH$T B$
*EC>,!E [au_id /ar'5ar(11), [au_7na#e /ar'5ar(2O), [au_0na#e
/ar'5ar(4O),
[#e""age /ar'5ar(GO), [tit0e /ar'5ar(GO)
:!I$T 9KKKKKKKK Hta5 ,ut5or" re%ort KKKKKKKK9
*EC>,!E aut5or"_'ur"or CH!SB! &B!
SE>ECT au_id, au_7na#e, au_0na#e
&!BM aut5or"
T-E!E "tate 8 9HT9
B!*E! <X au_id
Material de estudio Pgina: 194 de 249
Visual Basic 6.0 y SQLServer 7.0
B:E$ aut5or"_'ur"or
&ETC- $E?T &!BM aut5or"_'ur"or I$TB [au_id, [au_7na#e, [au_0na#e
T-I>E [[&ETC-_ST,THS 8 O
<EGI$
:!I$T 9 9
SE>ECT [#e""age 8 9KKKKK <ooC" b4 ,ut5or 9 E
[au_7na#e E 9 9 E [au_0na#e
:!I$T [#e""age
KK *e'0are an inner 'ur"or ba"ed
KK on au_id 7ro# t5e outer 'ur"or6
*EC>,!E tit0e"_'ur"or CH!SB! &B!
SE>ECT t6tit0e
&!BM tit0eaut5or ta, tit0e" t
T-E!E ta6tit0e_id 8 t6tit0e_id ,$*
ta6au_id 8 [au_id KK Variab0e /a0ue 7ro# t5e outer 'ur"or
B:E$ tit0e"_'ur"or
&ETC- $E?T &!BM tit0e"_'ur"or I$TB [tit0e
I& [[&ETC-_ST,THS `; O
:!I$T 9 ``$o <ooC";;9
T-I>E [[&ETC-_ST,THS 8 O
<EGI$
SE>ECT [#e""age 8 9 9 E [tit0e
:!I$T [#e""age
&ETC- $E?T &!BM tit0e"_'ur"or I$TB [tit0e
E$*
C>BSE tit0e"_'ur"or
*E,>>BC,TE tit0e"_'ur"or
KK Get t5e next aut5or6
&ETC- $E?T &!BM aut5or"_'ur"or I$TB [au_id, [au_7na#e, [au_0na#e
E$*
C>BSE aut5or"_'ur"or
*E,>>BC,TE aut5or"_'ur"or
GB
KKKKKKKK Hta5 ,ut5or" re%ort KKKKKKKK
KKKKK <ooC" b4 ,ut5or ,nne !inger
T5e Gour#et Mi'roLa/e
I" ,nger t5e Ene#4]
KKKKK <ooC" b4 ,ut5or ,0bert !inger
I" ,nger t5e Ene#4]
>i7e Tit5out &ear
1.7.4 Bloqueo de cursores
En la versin 7.0 de Microsoft SQL Server, la instruccin SELECT de la definicin de un cursor
est sujeta a las mismas reglas de bloqueo de transacciones que se aplican a cualquier otra
instruccin SELECT. Sin embargo, en los cursores se puede adquirir un conjunto adicional de
bloqueos de desplazamiento en funcin del grado de simultaneidad de un cursor.
Los bloqueos de transacciones que adquiere una instruccin SELECT, incluyendo la instruccin
SELECT de la definicin de un cursor, se controlan mediante:
La configuracin del nivel de aislamiento de transacciones de la conexin.
Las sugerencias de bloqueo especificadas en la clusula FROM.
Estos bloqueos se mantienen hasta el final de la transaccin actual para los cursores y las
instrucciones SELECT independientes. Cuando SQL Server se ejecuta en modo de confirmacin
automtica, cada instruccin de SQL individual es una transaccin y los bloqueos se liberan
Material de estudio Pgina: 195 de 249
Visual Basic 6.0 y SQLServer 7.0
cuando termina la instruccin. Si SQL Server se ejecuta en el modo de transacciones explcitas o
implcitas, se mantienen los bloqueos hasta que la transaccin se confirma o deshace.
Por ejemplo, el bloqueo realizado en estos dos ejemplos de Transact-SQL es esencialmente el
mismo:
J@ Exa#%0e 1 @J
SET T!,$S,CTIB$ ISB>,TIB$ >EVE> !E:E,T,<>E !E,*
GB
<EGI$ T!,$S,CTIB$
GB
SE>ECT @ &!BM aut5or"
GB
J@ Exa#%0e 2 @J
SET T!,$S,CTIB$ ISB>,TIB$ >EVE> !E:E,T,<>E !E,*
GB
<EGI$ T!,$S,CTIB$
GB
*EC>,!E ab' CH!SB! ST,TIC &B!
SE>ECT @ &!BM aut5or"
GB
B:E$ ab'
GB
Establecer el nivel de aislamiento de transacciones como lectura repetible significa que la
instruccin SELECT independiente del ejemplo 1 y la instruccin SELECT que contiene
DECLARE CURSOR en el ejemplo 2 generan bloqueos compartidos en cada fila que leen y que
se mantienen los bloqueos compartidos hasta que la transaccin se confirma o se deshace.
Ad!uirir )lo!ueos
Aunque los cursores obedecen las mismas reglas que las instrucciones SELECT independientes
acerca del tipo de bloqueos de transacciones adquiridos, stos se adquieren en momentos
diferentes. Los bloqueos que genera una instruccin SELECT independiente o un cursor siempre
se adquieren cuando se recupera una fila. Para una instruccin SELECT independiente, todas las
filas se recuperan cuando se ejecuta la instruccin. Sin embargo, los cursores recuperan las filas
en momentos diferentes segn el tipo de cursor:
Los cursores estticos recuperan el conjunto de resultados completo en el momento en
que se abre el cursor. As se bloquea cada fila del conjunto de resultados en el momento
de la apertura.
Los cursores controlados por conjunto de claves recuperan las claves de cada fila del
conjunto de resultados en el momento en que se abre el cursor. As se bloquea cada fila
del conjunto de resultados en el momento de la apertura.
Los cursores dinmicos, incluidos los cursores normales de desplazamiento slo hacia
adelante, no recuperan las filas hasta que se recopilan. Los bloqueos no se adquieren en
estas filas hasta que se han recopilado.
Los cursores de desplazamiento rpido slo adelante se diferencian en que adquieren sus
bloqueos dependiendo del plan de ejecucin seleccionado por el optimizador de
consultas. Si se selecciona un plan dinmico, no se adquieren bloqueos hasta que se
recopilan las filas. Si se generan tablas de trabajo, las filas se leen en la tabla de trabajo y
se bloquean en el momento de la apertura.
Los cursores tambin admiten sus propias especificaciones de simultaneidad, algunas de las
cuales generan bloqueos adicionales en las filas en cada recopilacin. Estos bloqueos de
desplazamiento se mantienen hasta la siguiente operacin de recopilacin o hasta que el cursor
est cerrado, lo que se produzca primero. Si la opcin de conexin para mantener cursores
abiertos en una confirmacin est activada, estos bloqueos se mantienen en las operaciones de
confirmar o de deshacer.
Material de estudio Pgina: 196 de 249
Visual Basic 6.0 y SQLServer 7.0
1.7.5 Obtener metadatos de cursores de servidor
Hay dos formas de obtener metadatos que describen un cursor de servidor:
Las aplicaciones que utilizan cursores de servidor de la AP con una AP de bases de
datos como ADO, OLE DB, ODBC o bibliotecas de bases de datos, normalmente utilizan
la funcionalidad de cursores de la AP para obtener informacin acerca del estado del
cursor.
Las secuencias de comandos, procedimientos almacenados y desencadenadores de
Transact-SQL pueden utilizar las funciones de Transact-SQL y procedimientos
almacenados del sistema explicados en este tema para obtener informacin acerca de un
cursor de Transact-SQL.
Hay varias funciones del sistema que informan del estado de un cursor de servidor o de un cursor
de servidor asignado a una variable de tipo cursor:
CURSOR_STATUS
ndica si un cursor est abierto o cerrado, o si una variable de tipo cursor est asociada
actualmente a un cursor.
@@FETCH_STATUS
ndica el xito o el error de la ltima operacin de recopilacin realizada en la conexin.
@@CURSOR_ROWS
Devuelve el nmero de filas llenadas en el ltimo cursor abierto en la conexin.
Hay varios procedimientos almacenados del sistema que informan de las caractersticas de un
cursor de servidor o de un cursor de servidor asignado a una variable de tipo cursor:
sp_describe_cursor
Devuelve un cursor que describe los atributos de un cursor como su alcance, nombre,
tipo, estado y nmero de filas.
sp_describe_cursor_coIumns
Devuelve un cursor que describe los atributos de cada columna del cursor, como el
nombre de la columna, posicin, tamao y tipo de datos.
sp_describe_cursor_tabIes
Devuelve un cursor que describe las tablas base a las que hace referencia el cursor.
sp_cursor_Iist
Devuelve un cursor que enumera todos los cursores actualmente visibles de la conexin.
El formato del cursor que devuelve sp_cursor_Iist es el mismo que el del cursor de
sp_describe_cursor.
Estos procedimientos almacenados del sistema devuelven sus conjuntos de resultados como
variables de cursores de salida. Las AP de bases de datos no admiten variables de tipo cursor,
por lo que no se puede llamar a estos procedimientos desde aplicaciones, solamente desde
secuencias de comandos, procedimientos almacenados y lotes de Transact-SQL. Las
aplicaciones deben utilizar la funcionalidad de cursor de las AP de bases de datos para obtener
los metadatos de los cursores de servidor de la AP.
Se debe tratar cuidadosamente la informacin de estado que devuelven estas funciones y
procedimientos almacenados, especialmente @@FETCH_STATUS. La informacin que devuelve
@@FETCH_STATUS cambia cada vez que se emite una instruccin FETCH contra cualquier
cursor abierto en la conexin. Un procedimiento almacenado o desencadenador que pueda
necesitar hacer referencia a la informacin de estado tras ejecutar varias instrucciones
adicionales debe guardar @@FETCH_STATUS en una variable de tipo integer inmediatamente
despus de la instruccin FETCH. Se puede restablecer @@FETCH_STATUS aunque no haya
instrucciones FETCH en el lote entre la instruccin FETCH y la instruccin que prueba el estado.
Si una instruccin NSERT, UPDATE o DELETE activa un desencadenador, ste puede abrir y
recopilar desde un cursor. @@FETCH_STATUS contendra entonces el estado de la ltima
instruccin FETCH del desencadenador.
Los procedimientos almacenados informan de su propio estado para un cursor especfico, por lo
que su informacin de estado no se ve afectada por las operaciones de otros cursores. Esta
informacin sigue afectada por las operaciones realizadas en el mismo cursor, por lo que se debe
Material de estudio Pgina: 197 de 249
Visual Basic 6.0 y SQLServer 7.0
tener cuidado todava al utilizar la informacin de estado que devuelven los procedimientos
almacenados.
1.C 3rocedimientos almacenados
Un procedimiento almacenado es un grupo de instrucciones Transact-SQL compiladas en un
nico plan de ejecucin.
Los procedimientos almacenados de Microsoft SQL Server tienen cuatro maneras de devolver
datos:
Parmetros de salida, que pueden devolver datos (como valor entero o carcter) o una
variable de cursor (los cursores son conjuntos de resultados que pueden devolver filas de
una en una).
Cdigos de retorno, que siempre son un valor entero.
Un conjunto de resultados por cada instruccin SELECT contenida en el procedimiento
almacenado o en cualquier otro procedimiento almacenado invocado por el procedimiento
almacenado original.
Un cursor global al que se puede hacer referencia desde fuera del procedimiento
almacenado.
Los procedimientos almacenados contribuyen a conseguir una implementacin coherente de una
lgica entre las aplicaciones. Las instrucciones SQL y la lgica necesarias para ejecutar una tarea
de ejecucin frecuente se pueden disear, escribir y probar de una sola vez en un procedimiento
almacenado. As, las aplicaciones que necesiten ejecutar dicha tarea slo tienen que ejecutar el
procedimiento almacenado. La escritura de la lgica de una funcin en un solo procedimiento
almacenado tambin ofrece un nico punto de control para asegurar la correcta ejecucin de
dicha funcin.
Los procedimientos almacenados tambin pueden aumentar el rendimiento. Muchas tareas estn
implementadas como series de instrucciones SQL. La lgica condicional aplicada a los resultados
de la primeras instrucciones SQL determina las instrucciones SQL que se ejecutan seguidamente.
Si dichas instrucciones SQL y la lgica condicional se escriben en un procedimiento almacenado,
forman parte de una nica unidad de ejecucin en el servidor. No es necesario devolver los
resultados al cliente para aplicar la lgica condicional; todo el trabajo se realiza en el servidor. La
instruccin F de este ejemplo muestra la inclusin de lgica condicional en un procedimiento para
impedir el envo de un conjunto de resultados a la aplicacin:
I& ([(uantit4Brdered ` (SE>ECT (uantit4Bn-and
&!BM In/entor4
T-E!E :artI* 8 [:artBrdered) )
<EGI$
KK S(> "tate#ent" to u%date tab0e" and %ro'e"" order6
E$*
E>SE
<EGI$
KK SE>ECT "tate#ent to retrie/e t5e I*" o7 a0ternate ite#"
KK to "ugge"t a" re%0a'e#ent" to t5e 'u"to#er6
E$*
Las aplicaciones no tienen que transmitir todas las instrucciones SQL del procedimiento: slo
tienen que transmitir una instruccin EXECUTE o CALL que contenga el nombre del
procedimiento y los valores de los parmetros.
Los procedimientos almacenados tambin aslan a los usuarios de los detalles de las tablas de la
base de datos. Si un conjunto de procedimientos almacenados implementa todas las funciones
que los usuarios necesitan, los usuarios nunca tienen que tener acceso a las tablas de forma
directa; slo tienen que ejecutar los procedimientos almacenados que implementan las funciones
diarias de su trabajo.
Material de estudio Pgina: 198 de 249
Visual Basic 6.0 y SQLServer 7.0
Una ilustracin de este uso de los procedimientos almacenados es el sistema de procedimientos
almacenados que SQL Server utiliza para aislar a los usuarios de las tablas del sistema. SQL
Server incluye un conjunto de procedimientos almacenados del sistema cuyos nombres suelen
empezar por sp_. Dichos procedimientos almacenados del sistema aceptan todas las tareas
administrativas requeridas para ejecutar un sistema SQL Server. Los sistemas SQL Server se
pueden administrar mediante las instrucciones Transact-SQL destinadas a la administracin
(como CREATE TABLE) o los procedimientos almacenados del sistema, y nunca se tienen que
actualizar directamente las tablas del sistema.
En versiones anteriores de SQL Server, los procedimientos almacenados eran una forma de
precompilar parcialmente un plan de ejecucin. En el momento de la creacin del procedimiento
almacenado, se almacenaba un plan de ejecucin parcialmente compilado en una tabla del
sistema. La ejecucin de un procedimiento almacenado era ms eficiente que la ejecucin de una
instruccin SQL, ya que SQL Server no tena que compilar el plan de ejecucin; slo tena que
completar la optimizacin del plan de ejecucin del procedimiento. Adems, el plan de ejecucin
totalmente compilado del procedimiento almacenado se conservaba en la cach de
procedimientos de SQL Server, lo que significa que las siguientes ejecuciones del mismo
procedimiento almacenado podan utilizar el plan de ejecucin precompilado.
SQL Server versin 7.0 introduce varios cambios al proceso de instrucciones que amplan
muchas de las ventajas de rendimiento de los procedimientos almacenados a todas las
instrucciones SQL. SQL Server 7.0 no guarda un plan parcialmente compilado para los
procedimientos almacenados cuando stos se crean. El procedimiento almacenado se compila en
tiempo de ejecucin como cualquier otra instruccin Transact-SQL. SQL Server 7.0 mantiene los
planes de ejecucin de todas las instrucciones SQL en la cach de procedimientos, no slo los
planes de ejecucin de los procedimientos almacenados. Utiliza un algoritmo muy eficiente para
comparar nuevas instrucciones Transact-SQL con las instrucciones Transact-SQL de los planes
de ejecucin existentes. Si SQL Server 7.0 determina que una nueva instruccin Transact-SQL
coincide con una instruccin Transact-SQL de un plan de ejecucin existente, utiliza dicho plan.
Esto reduce la ventaja de rendimiento relativa de la precompilacin de los procedimientos
almacenados al ampliar la posibilidad de volver a utilizar los planes de ejecucin a todas las
instrucciones SQL.
SQL Server 7.0 ofrece nuevas alternativas para procesar instrucciones SQL. SQL Server tambin
acepta procedimientos almacenados temporales que, al igual que las tablas temporales, se
eliminan automticamente al desconectar. Los procedimientos almacenados temporales se
almacenan en tempdb y son tiles en las conexiones con versiones anteriores de SQL Server.
Los procedimientos almacenados temporales se pueden utilizar en el caso en el que una
aplicacin genere instrucciones Transact-SQL dinmicas que se ejecuten varias veces. En lugar
de tener que volver a compilar las instrucciones Transact-SQL todas las veces, puede crear un
procedimiento almacenado temporal, que se compila en su primera ejecucin, y el resto de las
veces ejecuta el plan precompilado. Sin embargo, el uso intensivo de procedimientos
almacenados temporales puede producir conflictos en las tablas del sistema de tempdb.
Sin embargo, dos caractersticas de SQL Server 7.0 eliminan la necesidad de utilizar
procedimientos almacenados temporales:
SQL Server 7.0 puede utilizar planes de ejecucin de instrucciones SQL anteriores. Esto
es especialmente eficaz cuando se utiliza junto con el nuevo procedimiento almacenado
del sistema sp_executesqI.
SQL Server 7.0 acepta de forma nativa el modelo de preparacin y ejecucin de OLE DB
y ODBC sin el uso de procedimientos almacenados.
Este sencillo procedimiento almacenado de ejemplo ilustra tres formas en que los procedimientos
almacenados pueden devolver datos:
1. Primero emite una instruccin SELECT que devuelve un conjunto de resultados que
resume el orden de actividad de los almacenes de la tabla saIes.
2. Despus emite una instruccin SELECT que asigna un parmetro de salida.
3. Por ltimo, tiene una instruccin RETURN con una instruccin SELECT que devuelve un
valor entero. Los cdigos de retorno se utilizan generalmente para devolver informacin
Material de estudio Pgina: 199 de 249
Visual Basic 6.0 y SQLServer 7.0
para la comprobacin de errores. Este procedimiento se ejecuta sin errores, de modo que
devuelve otro valor para ilustrar cmo se asignan los cdigos de retorno.
HSE $ort5Lind
GB
*!B: :!BCE*H!E BrderSu##ar4
GB
C!E,TE :!BCE*H!E BrderSu##ar4 [Max(uantit4 I$T BHT:HT ,S
KK SE>ECT to return a re"u0t "et "u##ari2ing
KK e#%0o4ee "a0e"6
SE>ECT Brd6E#%0o4eeI*, Su##Sa0e" 8 SHM(Br*et6Hnit:ri'e @ Br*et6(uantit4)
&!BM Brder" ,S Brd
QBI$ ^Brder *etai0"_ ,S Br*et B$ (Brd6BrderI* 8 Br*et6BrderI*)
G!BH: <X Brd6E#%0o4eeI*
B!*E! <X Brd6E#%0o4eeI*
KK SE>ECT to 7i00 t5e out%ut %ara#eter Lit5 t5e
KK #axi#u# =uantit4 7ro# Brder *etai0"6
SE>ECT [Max(uantit4 8 M,?((uantit4) &!BM ^Brder *etai0"_
KK !eturn t5e nu#ber o7 a00 ite#" ordered6
!ETH!$ (SE>ECT SHM((uantit4) &!BM ^Brder *etai0"_)
GB
KK Te"t t5e "tored %ro'edure6
KK *EC>,!E /ariab0e" to 5o0d t5e return 'ode
KK and out%ut %ara#eter6
*EC>,!E [BrderSu# I$T
*EC>,!E [>arge"tBrder I$T
KK Exe'ute t5e %ro'edure, L5i'5 return"
KK t5e re"u0t "et 7ro# t5e 7ir"t SE>ECT6
E?EC [BrderSu# 8 BrderSu##ar4 [Max(uantit4 8 [>arge"tBrder BHT:HT
KK H"e t5e return 'ode and out%ut %ara#eter6
:!I$T .T5e "i2e o7 t5e 0arge"t "ing0e order La" . E
CB$VE!T(C-,!(A), [>arge"tBrder)
:!I$T .T5e "u# o7 t5e =uantitie" ordered La" . E
CB$VE!T(C-,!(A), [BrderSu#)
GB
El resultado de la ejecucin de este ejemplo es:
E#%0o4eeI* Su##Sa0e"
KKKKKKKKKKK KKKKKKKKKKKKKKKKKKKKKKKKKK
1 2O2,1436F1
2 1FF,F4\62A
3 213,OD163O
4 2DO,1GF64D
D FD,DAF6FD
A FG,1\G61O
F 141,2\D6\\
G 133,3O16O3
\ G2,\A46OO
T5e "i2e o7 t5e 0arge"t "ing0e order La" 13O
T5e "u# o7 t5e =uantitie" ordered La" D131F
1.C.1 3ro%ramar procedimientos almacenados
Casi cualquier cdigo Transact-SQL que pueda escribirse como un lote puede utilizarse para
crear un procedimiento almacenado.
Material de estudio Pgina: 200 de 249
Visual Basic 6.0 y SQLServer 7.0
*e+las de procedi$ientos al$acenados
Entre las reglas para la programacin de procedimientos almacenados, cabe citar las siguientes:
La propia definicin CREATE PROCEDURE puede incluir cualquier nmero y tipo de
instrucciones SQL, excepto las siguientes instrucciones CREATE, que no pueden ser
utilizadas nunca dentro de un procedimiento almacenado:
CREATE DEFAULT CREATE TRGGER
CREATE PROCEDURE CREATE VEW
CREATE RULE
Se puede crear otros objetos de base de datos dentro de un procedimiento almacenado.
Puede hacer referencia a un objeto creado en el mismo procedimiento almacenado,
siempre que se cree antes de que se haga referencia al objeto.
Puede hacer referencia a tablas temporales dentro de un procedimiento almacenado.
Si crea una tabla temporal privada dentro de un procedimiento almacenado, la tabla
temporal existir nicamente para los fines del procedimiento; desaparecer cuando ste
finalice.
Si ejecuta un procedimiento almacenado que llama a otro procedimiento almacenado, el
procedimiento al que se llama puede tener acceso a todos los objetos creados por el
primer procedimiento, incluidas las tablas temporales.
Si se ejecuta un procedimiento almacenado remoto que realiza cambios en un servidor
Microsoft SQL Server remoto, los cambios no se podrn deshacer. Los
procedimientos almacenados remotos no intervienen en las transacciones.
El nmero mximo de parmetros en un procedimiento almacenado es de 1.024.
El nmero mximo de variables locales en un procedimiento almacenado est limitado
nicamente por la memoria disponible.
En funcin de la memoria disponible, el tamao mximo de un procedimiento almacenado
es de 128 MB.
Cali,icar no$)res dentro de procedi$ientos al$acenados
Dentro de un procedimiento almacenado, los nombres de los objetos utilizados en instrucciones
(por ejemplo, SELECT o NSERT) que no sean calificados por el usuario se califican de forma
predeterminada con el nombre del propietario del procedimiento almacenado. Si un usuario que
crea un procedimiento almacenado no califica el nombre de las tablas a las que se hace
referencia en las instrucciones SELECT, NSERT, UPDATE o DELETE dentro del procedimiento
almacenado, de forma predeterminada, el acceso a esas tablas a travs del procedimiento
almacenado se restringe al creador del procedimiento.
Los nombres de objetos utilizados con las instrucciones ALTER TABLE, CREATE TABLE, DROP
TABLE, TRUNCATE TABLE, CREATE NDEX, DROP NDEX, UPDATE STATSTCS y DBCC
deben ser calificados con el nombre del propietario del objeto, si otros usuarios van a utilizar el
procedimiento almacenado. Por ejemplo, Marisa, propietaria de la tabla marisatab, debe calificar
el nombre de su tabla cuando se utiliza con una de estas instrucciones, si desea que otros
usuarios puedan ejecutar el procedimiento almacenado en el que se utiliza la tabla.
Esta regla es necesaria porque los nombres de los objetos se resuelven cuando se ejecuta el
procedimiento almacenado. Si marisatab no est calificada y Juan intenta ejecutar el
procedimiento, SQL Server buscar una tabla denominada marisatab que pertenezca a Juan.
Ci,rar de,iniciones de procedi$ientos
Si est creando un procedimiento almacenado y desea asegurarse de que la definicin del
procedimiento no pueda ser vista por otros usuarios, puede utilizar la clusula WTH
ENCRYPTON. La definicin del procedimiento se almacenar en un formato ilegible.
Despus de cifrarla, la definicin del procedimiento almacenado no puede ser descifrada ni vista
por nadie, ni siquiera por el propietario del procedimiento ni por el administrador del sistema.
6nstruccin SET
Cuando se conecta una aplicacin ODBC a SQL Server, el servidor configura automticamente
estas opciones para la sesin:
Material de estudio Pgina: 201 de 249
Visual Basic 6.0 y SQLServer 7.0
SET QUOTED_DENTFER ON
SET TEXTSZE 2147483647
SET ANS_DEFAULTS ON
SET CURSOR_CLOSE_ON_COMMT OFF
SET MPLCT_TRANSACTONS OFF
Esta configuracin aumenta la portabilidad de las aplicaciones ODBC. Dado que las aplicaciones
basadas en bibliotecas de bases de datos no suelen configurar estas opciones, se debe probar
los procedimientos almacenados mediante la activacin y desactivacin de las opciones SET
citadas anteriormente. De ese modo se garantiza que los procedimientos almacenados funcionen
correctamente, independientemente de las opciones que haya configurado una conexin
determinada cuando invoca al procedimiento. Un procedimiento almacenado que necesite una
configuracin determinada para una de estas opciones deber emitir una instruccin SET al
principio del procedimiento almacenado. Esta instruccin SET tendr efecto nicamente durante
la ejecucin del procedimiento almacenado; cuando finalice el procedimiento, se restaurar la
configuracin original.
E'e$plos
A. Crear un procedi$iento al$acenado !ue utilice par%$etros
En este ejemplo se muestra cmo crear un procedimiento almacenado de gran utilidad para la
base de datos pubs. A partir del nombre y primer apellido de un autor, el procedimiento muestra
el ttulo y el editor de cada uno de los libros del autor:
C!E,TE :!BC au_in7o [0a"tna#e /ar'5ar(4O), [7ir"tna#e /ar'5ar(2O)
,S
SE>ECT au_0na#e, au_7na#e, tit0e, %ub_na#e
&!BM aut5or" I$$E! QBI$ tit0eaut5or B$ aut5or"6au_id 8 tit0eaut5or6au_id
QBI$ tit0e" B$ tit0eaut5or6tit0e_id 8 tit0e"6tit0e_id
QBI$ %ub0i"5er" B$ tit0e"6%ub_id 8 %ub0i"5er"6%ub_id
T-E!E au_7na#e 8 [7ir"tna#e
,$* au_0na#e 8 [0a"tna#e
GB
Se obtiene un mensaje que indica que el comando no devolvi ningn dato ni ninguna fila, lo que
significa que se ha creado el procedimiento almacenado.
Ahora, ejecute au_info:
E?ECHTE au_in7o !inger, ,nne
GB
ste es el conjunto de resultados:
au_0na#e au_7na#e tit0e %ub_na#e
KKKKKKKKK KKKKKKKKK KKKKKKKKKKKKKKKKKKKKK KKKKKKKKKKKKKKKK
!inger ,nne T5e Gour#et Mi'roLa/e <innet P -ard0e4
!inger ,nne I" ,nger t5e Ene#4] $eL Moon <ooC"
(2 roL(") a77e'ted)
B. Crear un procedi$iento al$acenado !ue utilice valores predeter$inados para los par%$etros
El procedimiento almacenado pub_info2 muestra los nombres de todos los autores que han
escrito algn libro publicado por el editor que se especifica como parmetro. Si no se facilita
ningn nombre de editor, el procedimiento almacenado muestra los autores cuyos libros han sido
publicados por Algodata nfosystems.
C!E,TE :!BC %ub_in7o2 [%ubna#e /ar'5ar(4O) 8 .,0godata In7o"4"te#".
,S
SE>ECT au_0na#e, au_7na#e, %ub_na#e
&!BM aut5or" a I$$E! QBI$ tit0eaut5or ta B$ a6au_id 8 ta6au_id
QBI$ tit0e" t B$ ta6tit0e_id 8 t6tit0e_id
QBI$ %ub0i"5er" % B$ t6%ub_id 8 %6%ub_id
T-E!E [%ubna#e 8 %6%ub_na#e
Ejecute pub_info2 sin especificar ningn parmetro:
Material de estudio Pgina: 202 de 249
Visual Basic 6.0 y SQLServer 7.0
E?ECHTE %ub_in7o2
GB
ste es el conjunto de resultados:
au_0na#e au_7na#e %ub_na#e
KKKKKKKKKKKKKKKK KKKKKKKKKKKKKKKK KKKKKKKKKKKKKKKKKKKK
Green Marjorie ,0godata In7o"4"te#"
<ennet ,bra5a# ,0godata In7o"4"te#"
B.>ear4 Mi'5ae0 ,0godata In7o"4"te#"
Ma'&eat5er Stearn" ,0godata In7o"4"te#"
Straig5t *ean ,0godata In7o"4"te#"
Car"on C5er40 ,0godata In7o"4"te#"
*u00 ,nn ,0godata In7o"4"te#"
-unter S5er40 ,0godata In7o"4"te#"
>o'C"0e4 C5ar0ene ,0godata In7o"4"te#"
(\ roL(") a77e'ted)
C. E'ecutar un procedi$iento al$acenado !ue suplante al valor predeter$inado para el par%$etro
con un valor e(pl"cito
En el procedimiento almacenado showind2, se asignan los ttulos como valores predeterminados
para el parmetro @tabIe:
C!E,TE :!BC "5oLind2 [tab0e /ar'5ar(3O) 8 .tit0e".
,S
SE>ECT T,<>E_$,ME 8 "4"obje't"6na#e,
I$*E?_$,ME 8 "4"indexe"6na#e, I$*E?_I* 8 indid
&!BM "4"indexe" I$$E! QBI$ "4"obje't" B$ "4"obje't"6id 8 "4"indexe"6id
T-E!E "4"obje't"6na#e 8 [tab0e
Los ttulos de las columnas (por ejemplo, TABLE_NAME) facilitan la lectura de los resultados.
Esto es lo que muestra el procedimiento almacenado para la tabla authors:
E?ECHTE "5oLind2 aut5or"
GB
T,<>E_$,ME I$*E?_$,ME I$*E?_I*
KKKKKKKKKK KKKKKKKKKK KKKKKKKKKK
aut5or" H:RC>_auidind 1
aut5or" aun#ind 2
(2 roL(") a77e'ted)
Si el usuario no especifica ningn valor, SQL Server utiliza la tabla predeterminada, titIes:
E?ECHTE "5oLind2
GB
ste es el conjunto de resultados:
T,<>E_$,ME I$*E?_$,ME I$*E?_I*
KKKKKKKKKK KKKKKKKKKK KKKKKKKKKK
tit0e" H:RC>_tit0eidind 1
tit0e" tit0eind 2
(2 roL(") a77e'ted)
D. Crear un procedi$iento al$acenado !ue utilice un valor predeter$inado 4ULL para los
par%$etros
El valor predeterminado para los parmetros puede ser NULL. En ese caso, si el usuario no
especifica ningn parmetro, SQL Server ejecutar el procedimiento almacenado de acuerdo con
el resto de sus instrucciones. No se muestra ningn mensaje de error.
La definicin del procedimiento tambin puede especificar que se realice alguna otra accin si el
usuario no proporciona ningn parmetro. Por ejemplo:
C!E,TE :!BC "5oLind3 [tab0e /ar'5ar(3O) 8 $H>>
,S I& [tab0e IS $H>>
:!I$T .Gi/e a tab0e na#e.
Material de estudio Pgina: 203 de 249
Visual Basic 6.0 y SQLServer 7.0
E>SE
SE>ECT T,<>E_$,ME 8 "4"obje't"6na#e,
I$*E?_$,ME 8 "4"indexe"6na#e, I$*E?_I* 8 indid
&!BM "4"indexe" I$$E! QBI$ "4"obje't"
B$ "4"obje't"6id 8 "4"indexe"6id
T-E!E "4"obje't"6na#e 8 [tab0e
E. Crear un procedi$iento al$acenado !ue utilice un valor predeter$inado para un par%$etro !ue
inclu&a caracteres co$od"n
El valor predeterminado puede incluir caracteres comodn (%, _, [] y [^]), si el procedimiento
almacenado utiliza el parmetro con la palabra clave LKE. Por ejemplo, es posible modificar
showind para que se muestre informacin acerca de las tablas del sistema, si el usuario no
especifica ningn parmetro:
C!E,TE :!BC "5oLind4 [tab0e /ar'5ar(3O) 8 ."4"Y.
,S SE>ECT T,<>E_$,ME 8 "4"obje't"6na#e,
I$*E?_$,ME 8 "4"indexe"6na#e, I$*E?_I* 8 indid
&!BM "4"indexe" I$$E! QBI$ "4"obje't"
B$ "4"obje't"6id 8 "4"indexe"6id
T-E!E "4"obje't"6na#e >IRE [tab0e
La siguiente variacin del procedimiento almacenado au_info utiliza caracteres comodn como
valores predeterminados para ambos parmetros:
C!E,TE :!BC au_in7o2 [0a"tna#e /ar'5ar(3O) 8 .*Y.,
[7ir"tna#e /ar'5ar(1G) 8 .Y.
,S
SE>ECT au_0na#e, au_7na#e, tit0e, %ub_na#e
&!BM aut5or" I$$E! QBI$ tit0eaut5or B$ aut5or"6au_id 8 tit0eaut5or6au_id
QBI$ tit0e" B$ tit0eaut5or6tit0e_id 8 tit0e"6tit0e_id
QBI$ %ub0i"5er" B$ tit0e"6%ub_id 8 %ub0i"5er"6%ub_id
T-E!E au_7na#e >IRE [7ir"tna#e
,$* au_0na#e >IRE [0a"tna#e
Si se ejecuta au_info2 sin parmetros, se muestran todos los autores cuyo apellido empiece por
la letra D:
E?ECHTE au_in7o2
GB
ste es el conjunto de resultados:
au_0na#e au_7na#e tit0e %ub_na#e
KKKKKKKK KKKKKKKK KKKKKKKKKKKKKKKKKKKKK KKKKKKKKKKKKKKKKKKK
*u00 ,nn Se'ret" o7 Si0i'on Va0 ,0godata In7o"4"te#"
de0 Ca"ti00o Inne" Si0i'on Va0 Ga"trono <innet P -ard0e4
*e&ran'e Mi'5e0 T5e Gour#et Mi'roLa/e <innet P -ard0e4
(3 roL(") a77e'ted)
En este ejemplo se omite el segundo parmetro cuando se han definido valores predeterminados
para dos parmetros, as que puede buscar los libros y los editores para todos los autores cuyo
apellido sea Ringer:
E?ECHTE au_in7o2 !inger
GB
au_0na#e au_7na#e tit0e %ub_na#e
KKKKKKKKK KKKKKKKKK KKKKKKKKKKKKKKKKKKKKKK KKKKKKKKKKKKKKKK
!inger ,nne T5e Gour#et Mi'roLa/e <innet P -ard0e4
!inger ,nne I" ,nger t5e Ene#4] $eL Moon <ooC"
!inger ,0bert I" ,nger t5e Ene#4] $eL Moon <ooC"
!inger ,0bert >i7e Tit5out &ear $eL Moon <ooC"
(4 roL(") a77e'ted)
Material de estudio Pgina: 204 de 249
Visual Basic 6.0 y SQLServer 7.0
1.8.1.1 Devolver datos de un procedimiento almacenado
Los procedimientos almacenados de Microsoft SQL Server pueden devolver los datos de
cuatro formas distintas:
Parmetros de salida, que pueden devolver datos (como valor entero o carcter) o una
variable de cursor (los cursores son conjuntos de resultados que pueden devolver filas de
una en una).
Cdigos de retorno, que siempre son un valor entero.
Un conjunto de resultados por cada instruccin SELECT contenida en el procedimiento
almacenado o en cualquier otro procedimiento almacenado invocado por el procedimiento
almacenado original.
Un cursor global al que se puede hacer referencia desde fuera del procedimiento
almacenado.
1.8.1.2 Devolver datos mediante parmetros OUTPUT
Si especifica la palabra clave OUTPUT para un parmetro de la definicin del procedimiento, ste
podr devolver el valor actual del parmetro al programa que lo llama cuando el procedimiento
termine. Para guardar el valor del parmetro en una variable que pueda utilizarse en el programa
que realiza la llamada, el programa debe utilizar la palabra clave OUTPUT cuando ejecute el
procedimiento almacenado.
E'e$plos
En el ejemplo siguiente se muestra un procedimiento almacenado con un parmetro de entrada y
otro de salida. El primer parmetro del procedimiento almacenado, @titIe, recibir el valor de
entrada especificado por el programa que realiza la llamada, mientras que el segundo parmetro,
@ytd_saIes, se utilizar para devolver el valor al programa que realiza la llamada. La instruccin
SELECT utiliza el parmetro @titIe para obtener el valor ytd_saIes correcto y asigna ese valor al
parmetro de salida @ytd_saIes.
C!E,TE :!BCE*H!E get_"a0e"_7or_tit0e
[tit0e /ar'5ar(GO), KK T5i" i" t5e in%ut %ara#eter6
[4td_"a0e" int BHT:HT KK T5i" i" t5e out%ut %ara#eter6
,S
KK Get t5e "a0e" 7or t5e "%e'i7ied tit0e and
KK a""ign it to t5e out%ut %ara#eter6
SE>ECT [4td_"a0e" 8 4td_"a0e"
&!BM tit0e"
T-E!E tit0e 8 [tit0e
!ETH!$
GB
El programa siguiente ejecuta el procedimiento almacenado con un valor para el parmetro de
entrada y guarda el valor de salida del procedimiento en la variable local @ytd_saIes_for_titIe
del programa que efecta la llamada.
KK *e'0are t5e /ariab0e to re'ei/e t5e out%ut /a0ue o7 t5e %ro'edure6
*EC>,!E [4td_"a0e"_7or_tit0e int
KK Exe'ute t5e %ro'edure Lit5 a tit0e_id /a0ue
KK and "a/e t5e out%ut /a0ue in a /ariab0e6
E?ECHTE get_"a0e"_7or_tit0e
9Su"5i, ,n4one]9, [4td_"a0e" 8 [4td_"a0e"_7or_tit0e BHT:HT
KK *i"%0a4 t5e /a0ue returned b4 t5e %ro'edure6
:!I$T .Sa0e" 7or 9Su"5i, ,n4one]9 . E
'on/ert(/ar'5ar(A),[4td_"a0e"_7or_tit0e)
GB
Sa0e" 7or 9Su"5i, ,n4one]9 4O\D
Material de estudio Pgina: 205 de 249
Visual Basic 6.0 y SQLServer 7.0
Tambin es posible especificar los valores de entrada para los parmetros OUTPUT cuando se
ejecuta el procedimiento almacenado. Esto permite al procedimiento recibir un valor del programa
que realiza la llamada, cambiarlo o realizar operaciones con el valor, y devolver el nuevo valor al
programa que realiza la llamada. En el ejemplo anterior, es posible asignar un valor a la variable
@ytd_saIes_for_titIe antes de ejecutar el procedimiento. La variable @ytd_saIes contiene el
valor del parmetro en el cuerpo del procedimiento almacenado, y el valor de la variable
@ytd_saIes se devuelve al programa que realiza la llamada cuando el procedimiento termina. A
esto se le suele denominar "capacidad de paso por referencia.
Si especifica OUTPUT para un parmetro cuando ejecuta un procedimiento almacenado y el
parmetro no se define mediante OUTPUT en el procedimiento almacenado, se produce un
mensaje de error. Puede ejecutar un procedimiento con parmetros OUTPUT y no especificar
OUTPUT cuando se ejecute el procedimiento. No se devuelve ningn error, pero no podr utilizar
el valor de salida en el programa que realiza la llamada.
1.8.2.2 Devolver datos mediante un cdigo de retorno
Un procedimiento almacenado puede devolver un valor entero, denominado cdigo de retorno,
para indicar el estado de ejecucin de un procedimiento. Se especifica el cdigo de retorno para
un procedimiento mediante la instruccin RETURN. Al igual que con los parmetros OUTPUT,
debe guardar el cdigo de retorno en una variable cuando se ejecute el procedimiento
almacenado para utilizar su valor en el programa que realiza la llamada. Por ejemplo, la variable
de asignacin @resuIt del tipo de datos int se utiliza para almacenar el cdigo de retorno del
procedimiento almacenado my_proc:
*EC>,!E [re"u0t int
E?ECHTE [re"u0t 8 #4_%ro'
Los cdigos de retorno suelen utilizarse en los bloques de control de flujo dentro de los
procedimientos almacenados con el fin de establecer el valor del cdigo de retorno para cada
situacin de error posible. Puede utilizar la funcin @@ERROR despus de una instruccin de
Transact-SQL para detectar si se ha producido un error durante la ejecucin de una instruccin.
E'e$plos
A. Devolver otro cdi+o de retorno en ,uncin del tipo de error
En el ejemplo siguiente se muestra el procedimiento get_saIes_for_titIe con un tratamiento
especial que establece valores de cdigo de retorno especiales para distintos errores. En la tabla
se muestra el valor entero asignado por el procedimiento almacenado a cada error posible.
VaIor Significado
0 Ejecucin correcta.
1 No se ha especificado el valor del parmetro necesario.
2 Valor no vlido para el parmetro.
3 Error al obtener el valor de ventas.
4 Valor de ventas NULL para el ttulo.
C!E,TE :!BCE*H!E get_"a0e"_7or_tit0e
KK T5i" i" t5e in%ut %ara#eter, Lit5 a de7au0t6
[tit0e /ar'5ar(GO) 8 $H>>,
KK T5i" i" t5e out%ut %ara#eter6
[4td_"a0e" int BHT:HT
,S
KK Va0idate t5e [tit0e %ara#eter6
I& [tit0e IS $H>>
<EGI$
:!I$T 9E!!B! Xou #u"t "%e'i74 a tit0e /a0ue69
!ETH!$(1)
E$*
Material de estudio Pgina: 206 de 249
Visual Basic 6.0 y SQLServer 7.0
E>SE
<EGI$
KK MaCe "ure t5e tit0e i" /a0id6
I& (SE>ECT CBH$T(@) &!BM tit0e"
T-E!E tit0e 8 [tit0e) 8 O
!ETH!$(2)
E$*
KK Get t5e "a0e" 7or t5e "%e'i7ied tit0e and
KK a""ign it to t5e out%ut %ara#eter6
SE>ECT [4td_"a0e" 8 4td_"a0e"
&!BM tit0e"
T-E!E tit0e 8 [tit0e
KK C5e'C 7or S(> Ser/er error"6
I& [[E!!B! `; O
<EGI$
!ETH!$(3)
E$*
E>SE
<EGI$
KK C5e'C to "ee i7 t5e 4td_"a0e" /a0ue i" $H>>6
I& [4td_"a0e" IS $H>>
!ETH!$(4)
E>SE
KK SHCCESSVV
!ETH!$(O)
E$*
GB
Si se utilizan de este modo los cdigos de retorno, los programas que realicen llamadas podrn
detectar y tratar los errores que se produzcan cuando se ejecute el procedimiento.
B. Tratar los distintos cdi+os de error devueltos por un procedi$iento al$acenado
En este ejemplo se crea un programa que trata los cdigos de retorno devueltos por el
procedimiento get_saIes_for_titIe.
KK *e'0are t5e /ariab0e" to re'ei/e t5e out%ut /a0ue and return 'ode KK
o7 t5e %ro'edure6
*EC>,!E [4td_"a0e"_7or_tit0e int, [ret_'ode I$T
KK Exe'ute t5e %ro'edure Lit5 a tit0e_id /a0ue
KK and "a/e t5e out%ut /a0ue and return 'ode in /ariab0e"6
E?ECHTE [ret_'ode 8 get_"a0e"_7or_tit0e
9Su"5i, ,n4one]9,
[4td_"a0e" 8 [4td_"a0e"_7or_tit0e BHT:HT
KK C5e'C t5e return 'ode"6
I& [ret_'ode 8 O
<EGI$
:!I$T 9:ro'edure exe'uted "u''e""7u0049
KK *i"%0a4 t5e /a0ue returned b4 t5e %ro'edure6
:!I$T .Sa0e" 7or 9Su"5i, ,n4one]9 . E
CB$VE!T(/ar'5ar(A),[4td_"a0e"_7or_tit0e)
E$*
E>SE I& [ret_'ode 8 1
:!I$T 9E!!B! $o tit0e_id La" "%e'i7ied69
E>SE I& [ret_'ode 8 2
:!I$T 9E!!B! ,n in/a0id tit0e_id La" "%e'i7ied69
E>SE I& [ret_'ode 8 3
:!I$T 9E!!B! ,n error o''urred getting t5e 4td_"a0e"69
GB
Material de estudio Pgina: 207 de 249
Visual Basic 6.0 y SQLServer 7.0
1.8.2.3 Ejecutar un procedimiento almacenado
Cuando necesite ejecutar un procedimiento almacenado, utilice la instruccin EXECUTE de
Transact-SQL. Puede ejecutar un procedimiento almacenado sin necesidad de utilizar la palabra
clave EXECUTE, si el procedimiento almacenado es la primera instruccin del lote.
Es posible suministrar los valores de los parmetros si se escribe un procedimiento almacenado
que los acepte.
Nota Si especifica los parmetros con el formato Sparmetro 1 #alor, puede proporcionarlos en
cualquier orden. Tambin puede omitir los parmetros para los que se hayan especificado valores
predeterminados. Si slo especifica un parmetro con el formato Sparmetro 1 #alor, deber
proporcionar todos los parmetros siguientes del mismo modo. Si no especifica los parmetros
con el formato Sparmetro 1 #alor, deber especificarlos en el orden seguido en la instruccin
CREATE PROCEDURE.
Cuando ejecute un procedimiento almacenado, el servidor rechazar todos los parmetros que no
se incluyeran en la lista de parmetros durante la creacin del procedimiento. No se aceptar
ningn parmetro pasado por referencia (el nombre del parmetro se pasa explcitamente) si el
nombre del parmetro no coincide.
Aunque puede omitir los parmetros para los que se hayan especificado valores
predeterminados, slo puede truncar la lista de parmetros. Por ejemplo, si en un procedimiento
almacenado hay cinco parmetros, puede omitir el cuarto y el quinto, pero no puede omitir el
cuarto e incluir el quinto si no suministra los parmetros con el formato Sparmetro 1 #alor.
El valor predeterminado de un parmetro, si se ha definido para el parmetro en el procedimiento
almacenado, se utiliza cuando:
No se especifica ningn valor para el parmetro en el momento de ejecutar el
procedimiento almacenado.
Se especifica la palabra clave DEFAULT como valor para el parmetro.
Para ejecutar un procedimiento almacenado que est agrupado con otros procedimientos del
mismo nombre, especifique el nmero de identificacin del procedimiento almacenado dentro del
grupo. Por ejemplo, para ejecutar el segundo procedimiento almacenado del grupo my_proc,
ejecute:
E?ECHTE #4_%ro'I2
Material de estudio Pgina: 208 de 249
Visual Basic 6.0 y SQLServer 7.0
1.D !ri%%er ('esencadenadores&
El objeto Trigger expone los atributos de un solo desencadenador de Microsoft SQL Server.
#)servaciones
SQL Server admite el uso de desencadenadores como una clase de procedimiento almacenado.
Los desencadenadores se ejecutan cuando se intenta una modificacin de datos especificada,
como un intento de eliminar una fila, en la tabla en que se ha definido el desencadenador. Con el
objeto Trigger, puede:
Crear un desencadenador SQL Server en una tabla SQL Server existente.
Quitar un desencadenador SQL Server existente de una tabla SQL Server.
Generar una secuencia de comandos Transact-SQL que se pueda utilizar con otras
herramientas para volver a crear un desencadenador SQL Server existente.
Cambiar el propietario de un desencadenador SQL Server existente.
La propiedad Name de un objeto Trigger es una cadena de caracteres. El valor de la propiedad
identifica un desencadenador SQL Server por el nombre y debe cumplir las reglas de
denominacin de desencadenadores. La propiedad Name es necesaria al crear un
desencadenador SQL Server.
Para crear un desencadenador en una tabIa SQL Server existente
1. Cree un objeto Trigger.
2. Establezca la propiedad Name.
3. Establezca la propiedad Text para que contenga la secuencia de comandos Transact-
SQL que define el comportamiento del desencadenador SQL Server. Para obtener ms
informacin acerca de las secuencias de comandos de desencadenadores, consulte
CREATE TRGGER.
4. Obtenga el objeto TabIe que hace referencia a la tabla SQL Server que desea en la
coleccin TabIes del objeto Database apropiado.
5. Utilice el mtodo BeginAIter del objeto TabIe para marcar el inicio de los cambios en la
definicin de tabla SQL Server.
6. Agregue el nuevo objeto Trigger a la coleccin Triggers del objeto TabIe seleccionado.
7. Utilice el mtodo DoAIter del objeto TabIe para marcar el final de los cambios y crear el
desencadenador SQL Server.
Material de estudio Pgina: 209 de 249
Visual Basic 6.0 y SQLServer 7.0
1.9.1 Type (Trigger) (SQL-DMO) (Propiedad)
La propiedad Type expone los atributos configurados del componente de Microsoft SQL
Server al que se hace referencia.
Se aplica a
Objeto Trigger
Sinta(is
ob2eto.Type
Parte Descripcin
ob2eto Expresin que da como resultado un objeto de la lista Se aplica a.
Devuelve
En el objeto Trigger, la propiedad Type se interpreta con estos valores:
Constante VaIor Descripcin
SQLDMOTrig_All 7
Activado por cualquier instruccin de modificacin
de datos.
SQLDMOTrig_Delete 4 Activado por una instruccin DELETE.
SQLDMOTrig_nsert 1 Activado por una instruccin NSERT.
SQLDMOTrig_Unknown 0 Valor incorrecto o no vlido.
SQLDMOTrig_Update 2 Activado por una instruccin UPDATE.
#)servaciones
Puede activarse un desencadenador de SQL Server cuando una instruccin NSERT, UPDATE o
DELETE de Transact-SQL modifique datos de la tabla en la que est definido.
La secuencia de comandos Transact-SQL que define el desencadenador determina las
instrucciones Transact-SQL que causan su activacin.
Tipo de datos
Entero largo, enumerado
8odi,ica)le
De slo lectura
1.9.2 Desencadenadores anidados (recursive)
Con el .alor true :.erdadero;- permite a los desencadenadores acti.arse de forma
recursi.a0 La recursin indirecta se produce cuando un desencadenador se acti.a / reali@a
una accin 1ue pro.oca la acti.acin de un desencadenador de otra ta#la- con lo 1ue se
actuali@a la ta#la ori"inal /- a la .e@- se produce una nue.a acti.acin del desencadenador
ori"inal0
Con el .alor predeterminado ,alse :falso;- no es posi#le acti.ar los desencadenadores
de forma recursi.a0
Es posi#le determinar el estado de esta opcin mediante el e6amen de la propiedad
6s*ecursiveTri++ersEna)led de la funcin DATAGASEPROPERT%0
Material de estudio Pgina: 210 de 249
Visual Basic 6.0 y SQLServer 7.0
Desencadenadores anidados
Los desencadenadores se anidan cuando un desencadenador realiza una accin que provoca la
activacin de otro desencadenador que, a su vez, puede activar otro desencadenador y as
sucesivamente. Los desencadenadores puden anidarse hasta un mximo de 32 niveles y es
posible controlar si se pueden anidar mediante la opcin de configuracin del servidor nested
triggers (desencadenadores anidados).
Si se permiten desencadenadores anidados y un desencadenador de la cadena inicia un bucle
infinito, se superar el nivel de anidamiento y se terminar el desencadenador.
Puede utilizar desencadenadores anidados para realizar funciones de mantenimiento, tales como
el almacenamiento de una copia de seguridad de las filas afectadas por un desencadenador
anterior. Por ejemplo, puede crear un desencadenador en titIeauthor (autorTtulo) que guarde
una copia de seguridad de las filas de titIeauthor que haya eliminado el desencadenador
deIcascadetrig (desEliminCascada). Con la activacin de deIcascadetrig, la eliminacin del
valor PS2091 de la columna titIe_id de la tabla titIes elimina la fila o las filas correspondientes en
titIeauthor. Para guardar los datos, cree un desencadenador DELETE en la tabla titIeauthor que
guarde los datos eliminados en una nueva tabla, deI_save.
C!E,TE T!IGGE! "a/ede0
B$ tit0eaut5or
&B! *E>ETE
,S
I$SE!T de0_"a/e
SE>ECT @ &!BM de0eted
No es recomendable utilizar los desencadenadores anidados en una secuencia que dependa de
un orden. Utilice desencadenadores diferentes para realizar modificaciones de datos en cascada.
Nota Dado que los desencadenadores se ejecutan dentro de una transaccin, un error en
cualquier nivel de un conjunto de desencadenadores anidados anula toda la transaccin y
provoca que se deshagan todas las modificaciones de datos. ncluya instrucciones PRNT en los
desencadenadores para poder determinar dnde se produjo el error.
Desencadenadores recursivos
Un desencadenador no se llama a s mismo de forma recursiva a menos que se active la opcin
Desencadenadores recursivos de la base de datos. Hay dos tipos de recursividad:
La recursividad directa, que se produce cuando un desencadenador se activa y realiza
una accin que provoca que el mismo desencadenador se vuelva a activar. Por ejemplo,
una aplicacin actualiza la tabla T3, que provoca la activacin del desencadenador Trig3.
Trig3 vuelve a actualizar T3, lo que provoca una nueva activacin del mismo
desencadenador Trig3.
La recursividad indirecta, que se produce cuando un desencadenador se activa y realiza
una accin que provoca la activacin de un desencadenador en otra tabla. Este segundo
desencadenador causa una actualizacin en la tabla original, que, a su vez, provoca que
se vuelva a activar el desencadenador original. Por ejemplo, una aplicacin actualiza la
tabla T1, lo que provoca la activacin del desencadenador Trig1. Trig1 actualiza la tabla
T2, con lo que se activa el desencadenador Trig2. A su vez, Trig2 actualiza la tabla T1, lo
que provoca que se vuelva a activar Trig1.
E'e$plos
Es posible utilizar los desencadenadores recursivos en una tabla caracterizada por una relacin
de referencia a s misma (tambin conocida como de cierre transitivo). Por ejemplo, la tabla
emp_mgr (empResp) define:
A un empleado (emp) de una empresa.
Al responsable de cada empleado (mgr).
El nmero total de empleados en la estructura de la organizacin que dependen de cada
empleado (NoOfReports).
Material de estudio Pgina: 211 de 249
Visual Basic 6.0 y SQLServer 7.0
Un desencadenador de actualizacin recursivo puede servir para mantener actualizada la
columna NoOfReports a medida que se insertan nuevos registros. El desencadenador de
insercin actualiza la columna NoOfReports del registro de responsables, que actualiza de modo
recursivo la columna NoOfReports de otros registros de la jerarqua de administracin.
HSE %ub"
GB
KK Turn re'ur"i/e trigger" B$ in t5e databa"e6
E?ECHTE "%_dbo%tion .%ub"., .re'ur"i/e trigger"., T!HE
GB
C!E,TE T,<>E e#%_#gr (
e#% '5ar(3O) :!IM,!X REX,
#gr '5ar(3O) $H>> &B!EIG$ REX !E&E!E$CES e#%_#gr(e#%),
$oB7!e%ort" int *E&,H>T O
)
GB
C!E,TE T!IGGE! e#%_#grin" B$ e#%_#gr
&B! I$SE!T
,S
*EC>,!E [e '5ar(3O), [# '5ar(3O)
*EC>,!E '1 CH!SB! &B!
SE>ECT e#%_#gr6e#%
&!BM e#%_#gr, in"erted
T-E!E e#%_#gr6e#% 8 in"erted6#gr
B:E$ '1
&ETC- $E?T &!BM '1 I$TB [e
T-I>E [[7et'5_"tatu" 8 O
<EGI$
H:*,TE e#%_#gr
SET e#%_#gr6$oB7!e%ort" 8 e#%_#gr6$oB7!e%ort" E 1 KK add 1 7or neL04
T-E!E e#%_#gr6e#% 8 [e KK added e#%0o4ee
&ETC- $E?T &!BM '1 I$TB [e
E$*
C>BSE '1
*E,>>BC,TE '1
GB
KK T5i" re'ur"i/e H:*,TE trigger LorC" a""u#ing
KK 16 Bn04 "ing0eton u%date" on e#%_#gr6
KK 26 $o in"ert" in t5e #idd0e o7 t5e org tree6
C!E,TE T!IGGE! e#%_#gru%d B$ e#%_#gr &B! H:*,TE
,S
I& H:*,TE (#gr)
<EGI$
H:*,TE e#%_#gr
SET e#%_#gr6$oB7!e%ort" 8 e#%_#gr6$oB7!e%ort" E 1 KK In're#ent #gr."
&!BM in"erted KK (no6 o7 re%ort") b4
T-E!E e#%_#gr6e#% 8 in"erted6#gr KK 1 7or t5e neL re%ort6
H:*,TE e#%_#gr
SET e#%_#gr6$oB7!e%ort" 8 e#%_#gr6$oB7!e%ort" K 1 KK *e're#ent #gr."
&!BM de0eted KK (no6 o7 re%ort") b4 1
T-E!E e#%_#gr6e#% 8 de0eted6#gr KK 7or t5e neL re%ort
E$*
GB
KK In"ert "o#e te"t data roL"6
I$SE!T e#%_#gr(e#%, #gr) V,>HES (.-arr4., $H>>)
I$SE!T e#%_#gr(e#%, #gr) V,>HES (.,0i'e., .-arr4.)
I$SE!T e#%_#gr(e#%, #gr) V,>HES (.:au0., .,0i'e.)
I$SE!T e#%_#gr(e#%, #gr) V,>HES (.Qoe., .,0i'e.)
Material de estudio Pgina: 212 de 249
Visual Basic 6.0 y SQLServer 7.0
I$SE!T e#%_#gr(e#%, #gr) V,>HES (.*a/e., .Qoe.)
GB
SE>ECT @ &!BM e#%_#gr
GB
KK C5ange *a/e." #anager 7ro# Qoe to -arr4
H:*,TE e#%_#gr SET #gr 8 .-arr4.
T-E!E e#% 8 .*a/e.
GB
SE>ECT @ &!BM e#%_#gr
GB
stos son los resultados antes de la actualizacin:
e#% #gr $oB7!e%ort"
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKK KKKKKKKKKKKKKKKKKKKKKKKKKKKKK KKKKKKKKKKK
,0i'e -arr4 2
*a/e Qoe O
-arr4 $H>> 1
Qoe ,0i'e 1
:au0 ,0i'e O
stos son los resultados despus de la actualizacin:
e#% #gr $oB7!e%ort"
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKK KKKKKKKKKKKKKKKKKKKKKKKKKKKKK KKKKKKKKKKK
,0i'e -arr4 2
*a/e -arr4 O
-arr4 $H>> 2
Qoe ,0i'e O
:au0 ,0i'e O
1.9.3 CREATE TRGGER (Creacin de Disparadores)
Crea un desencadenador, que es una clase especial de procedimiento almacenado que se
ejecuta automticamente cuando un usuario intenta la instruccin especificada de modificacin de
datos en la tabla indicada. Microsoft SQL Server permite la creacin de varios
desencadenadores para cualquier instruccin NSERT, UPDATE o DELETE dada.
Sinta(is
CREATE TRGGER nombre'esencadenador
ON tabla
[WTH ENCRYPTON]
{
{FOR { [DELETE] [,] [NSERT] [,] [UPDATE] }
[WTH APPEND]
[NOT FOR REPLCATON]
AS
instrucci"n7L: [...n]
}
|
{FOR { [NSERT] [,] [UPDATE] }
[WTH APPEND]
[NOT FOR REPLCATON]
AS
{ F UPDATE (columna)
[{AND | OR} UPDATE (columna)]
Material de estudio Pgina: 213 de 249
Visual Basic 6.0 y SQLServer 7.0
[...n]
| F (COLUMNS_UPDATED() {operador/i#elBit} mscaraBitsBctualiOada)
{ operadorComparaci"n} mscaraBitsColumna [...n]
}
instrucci"n7L: [...n]
}
}
Argumentos
nombre'esencadenador
Es el nombre del desencadenador. Un nombre de desencadenador debe cumplir las reglas de
los identificadores y debe ser nico en la base de datos. Especificar el nombre del propietario
del desencadenador es opcional.
tabla
Es la tabla en que se ejecuta el desencadenador; algunas veces se llama la tabla del
desencadenador. Especificar el nombre del propietario de la tabla es opcional. No se pueden
especificar vistas.
WTH ENCRYPTON
Codifica las entradas syscomments que contienen el texto de CREATE TRGGER.
{ [DELETE] [,] [NSERT] [,] [UPDATE] } | { [NSERT] [,] [UPDATE]}
Son palabras clave que especifican qu instrucciones de modificacin de datos activan el
desencadenador cuando se intentan contra esta tabla. Se debe especificar al menos una
opcin. En la definicin del desencadenador se permite cualquier combinacin de stas. Si
especifica ms de una opcin, seprelas con comas.
WTH APPEND
Especifica que debe agregarse un desencadenador adicional de un tipo existente. El uso de
esta clusula opcional slo es necesario cuando el nivel de compatibilidad sea menor o igual
que 65. Si el nivel de compatibilidad es mayor o igual que 70, la clusula opcional WTH
APPEND no es necesaria para agregar un desencadenador adicional de un tipo existente
(ste es el comportamiento predeterminado de CREATE TRGGER con el valor de nivel de
compatibilidad mayor o igual que 70). Para obtener ms informacin, consulte
sp_dbcmptIeveI.
NOT FOR REPLCATON
ndica que el desencadenador no debe ejecutarse cuando un proceso de duplicacin modifica
la tabla involucrada en el mismo.
AS
Son las acciones que va a llevar a cabo el desencadenador.
instrucci"n7L:
Son las condiciones y acciones del desencadenador. Las condiciones del desencadenador
especifican los criterios adicionales que determinan si los intentos de las instrucciones
DELETE, NSERT o UPDATE hacen que se lleven a cabo las acciones del desencadenador.
Material de estudio Pgina: 214 de 249
Visual Basic 6.0 y SQLServer 7.0
Las acciones del desencadenador especificadas en las instrucciones Transact-SQL entran en
efecto cuando se intenta la accin del usuario (DELETE, NSERT o UPDATE).
Los desencadenadores pueden incluir cualquier nmero y clase de instrucciones Transact-
SQL excepto SELECT. Un desencadenador est diseado para comprobar o cambiar los
datos en base a una instruccin de modificacin de datos; no debe devolver datos al usuario.
Las instrucciones Transact-SQL de un desencadenador incluyen a menudo lenguaje de
control de flujo. En las instrucciones CREATE TRGGER se utilizan unas cuantas tablas
especiales:
deIeted e inserted son tablas lgicas (conceptuales). Son de estructura similar a
la tabla en que se define el desencadenador (es decir, la tabla en que se intenta la
accin del usuario) y mantiene los valores antiguos o nuevos de las filas que la accin
del usuario puede cambiar. Por ejemplo, para recuperar todos los valores de la tabla
deIeted, utilice:
SELECT *
FROM deleted
En un desencadenador DELETE, NSERT o UPDATE, SQL Server no admite
referencias de columnas text, ntext o image en las tablas inserted y deIeted si el
nivel de compatibilidad es igual a 70. No se puede tener acceso a los valores text,
ntext e image de las tablas inserted y deIeted. Para recuperar el nuevo valor de un
desencadenador NSERT o UPDATE, combine la tabla inserted con la tabla de
actualizacin original. Cuando el nivel de compatibilidad es 65 o inferior, se devuelven
valores Null para las columnas inserted o deIeted text, ntext o image que admiten
valores Null; si las columnas no permiten valores Null, se devuelven cadenas de
longitud cero.
n
Se trata de un marcador de posicin que indica que se pueden incluir varias instrucciones
Transact-SQL en el desencadenador. Para la instruccin F UPDATE (columna), se pueden
incluir varias columnas al repetir la clusula UPDATE (columna).
F UPDATE (columna)
Prueba una accin NSERT o UPDATE en una columna especificada y no se utiliza con
operaciones DELETE. Se puede especificar ms de una columna. Como el nombre de la
tabla se especifica en la clusula ON, no lo incluya antes del nombre de la columna en una
clusula F UPDATE. Para probar una accin NSERT o UPDATE para ms de una columna,
especifique una clusula UPDATE(columna) separada a continuacin de la primera.
Nota La clusula F UPDATE (columna) funciona de forma idntica a una instruccin F, F.
ELSE o WHLE, y puede utilizar el bloque BEGN.END. Para obtener ms informacin,
consulte Lenguaje de control de flujo.
UPDATE(columna) puede utilizarse en cualquier parte dentro del cuerpo del desencadenador.
columna
Es el nombre de la columna que se va a probar para una accin NSERT o UPDATE. Esta
columna puede ser de cualquier tipo de datos admitido por SQL Server. Para obtener ms
informacin, consulte Tipos de datos.
Material de estudio Pgina: 215 de 249
Visual Basic 6.0 y SQLServer 7.0
F (COLUMNS_UPDATED())
Prueba, slo en un desencadenador NSERT o UPDATE, si la columna o columnas
mencionadas se insertan o se actualizan. COLUMNS_UPDATED devuelve un patrn de bits
varbinary que indica qu columnas de la tabla se insertaron o se actualizaron.
COLUMNS_UPDATED puede utilizarse en cualquier parte dentro del cuerpo del
desencadenador.
operador/i#elBit
Es el operador de bits que se utilizar en las comparaciones.
mscaraBitsBctualiOada
Es la mscara de bits de enteros de las columnas realmente actualizadas o insertadas. Por
ejemplo, la tabla t1 contiene las columnas C1, C2, C3, C4 y C5. Para comprobar si las
columnas C2, C3 y C4 se han actualizado (con un desencadenador UPDATE en la tabla t1),
especifique un valor de 14. Para comprobar si slo se ha actualizado la columna C2,
especifique un valor de 2.
operadorComparaci"n
Es el operador de comparacin. Utilice el signo igual (=) para comprobar si todas las
columnas especificadas en mscaraBitsBctualiOada se han actualizado. Utilice el smbolo
mayor que (>) para comprobar si alguna de las columnas especificadas en
mscaraBitsBctualiOada se han actualizado.
mscaraBitsColumna
Es la mscara de bits de enteros de las columnas que hay que comprobar para ver si se han
actualizado o insertado.
Observaciones
A menudo se utilizan desencadenadores para exigir las reglas del negocio y la integridad de los
datos. SQL Server proporciona integridad referencial declarativa (DR, 'eclarati#e -eferential
nte%rit$) a travs de las instrucciones de creacin de tabla (ALTER TABLE y CREATE TABLE);
sin embargo, DR no proporciona integridad referencial entre bases de datos. Para exigir la
integridad referencial (reglas acerca de la relacin entre la clave principal y la clave externa de las
tablas), utilice las restricciones de clave principal y externa (las palabras clave PRMARY KEY y
FOREGN KEY de ALTER TABLE y CREATE TABLE). Si existen restricciones en la tabla del
desencadenador, se comprobarn antes de la ejecucin del desencadenador. Si se infringe
alguna de las restricciones PRMARY KEY o FOREGN KEY, el desencadenador no se ejecuta
(no se activa).
Nota El que SQL Server interprete una cadena vaca (NULL) como un espacio simple o como una
verdadera cadena vaca se controla mediante el valor de sp_dbcmptIeveI. Si el nivel de
compatibilidad es menor o igual que 65, SQL Server interpreta las cadenas vacas como espacios
individuales. Si el nivel de compatibilidad es igual a 70, SQL Server interpreta las cadenas vacas
como tales. Para obtener ms informacin, consulte sp_dbcmptIeveI.
Limitaciones de Ios desencadenadores
CREATE TRGGER debe ser la primera instruccin en el proceso por lotes y slo se puede
aplicar a una tabla.
Un desencadenador se crea solamente en la base de datos actual; sin embargo, un
desencadenador puede hacer referencia a objetos que estn fuera de la base de datos actual.
Material de estudio Pgina: 216 de 249
Visual Basic 6.0 y SQLServer 7.0
Si se especifica el nombre del propietario del desencadenador (para cualificar el
desencadenador), cualifique el nombre de la tabla de la misma forma.
La misma accin del desencadenador puede definirse para ms de una accin del usuario (por
ejemplo, NSERT y UPDATE) en la misma instruccin CREATE TRGGER.
En un desencadenador se puede especificar cualquier instruccin SET. La opcin SET elegida
permanece en efecto durante la ejecucin del desencadenador y, despus, vuelve a su
configuracin anterior.
Cuando se activa un desencadenador, los resultados se devuelven a la aplicacin que llama,
exactamente igual que con los procedimientos almacenados. Para impedir que los resultados
tengan que devolverse a la aplicacin debido a la activacin de un desencadenador, no incluya
las instrucciones SELECT que devuelven resultados o las instrucciones que realizan una
asignacin variable en un desencadenador. Un desencadenador que incluya instrucciones
SELECT que devuelven resultados al usuario o instrucciones que realizan asignaciones de
variables requiere un tratamiento especial; estos resultados devueltos tendran que escribirse en
cada aplicacin en la que se permiten modificaciones a la tabla del desencadenador. Si deben
ocurrir asignaciones de variable en un desencadenador, utilice una instruccin SET NOCOUNT al
principio del desencadenador para eliminar la devolucin de cualquier conjunto de resultados.
En una vista no se puede crear un desencadenador.
Un desencadenador DELETE no captura una instruccin TRUNCATE TABLE. Aunque una
instruccin TRUNCATE TABLE es, de hecho, un desencadenador DELETE sin una clusula
WHERE (quita todas las filas), no se registra y, por tanto, no puede ejecutar un desencadenador.
Dado que el permiso de la instruccin TRUNCATE TABLE es, de forma predeterminada, el del
propietario de la tabla y no se puede transferir, slo el propietario de la tabla debe preocuparse de
colocar sin darse cuenta una instruccin TRUNCATE TABLE en el desencadenador DELETE.
La instruccin WRTETEXT, ya se registre o no, no activa un desencadenador.
Las siguientes instrucciones Transact-SQL no estn permitidas en un desencadenador:
ALTER DATABASE ALTER PROCEDURE ALTER TABLE
ALTER TRGGER ALTER VEW CREATE DATABASE
CREATE DEFAULT CREATE NDEX CREATE PROCEDURE
CREATE RULE CREATE SCHEMA CREATE TABLE
CREATE TRGGER CREATE VEW DENY
DSK NT DSK RESZE DROP DATABASE
DROP DEFAULT DROP NDEX DROP PROCEDURE
DROP RULE DROP TABLE DROP TRGGER
DROP VEW GRANT LOAD DATABASE
LOAD LOG RESTORE DATABASE RESTORE LOG
REVOKE RECONFGURE
TRUNCATE TABLE UPDATE STATSTCS
Nota Debido a que SQL Server no admite desencadenadores definidos por el usuario en tablas
del sistema, se recomienda que no se creen desencadenadores definidos por el usuario en tablas
del sistema.
Desencadenadores mItipIes
SQL Server permite que se creen varios desencadenadores por cada evento de modificacin
(DELETE, NSERT o UPDATE). Por ejemplo, si se ejecuta CREATE TRGGER FOR UPDATE
para una tabla que ya tiene un desencadenador UPDATE, se crear un desencadenador de
actualizacin adicional. En las versiones anteriores, slo se permita un desencadenador por cada
evento de modificacin (NSERT, UPDATE, DELETE) en cada tabla.
Nota El comportamiento predeterminado de CREATE TRGGER (con un nivel de compatibilidad
de 70) es agregar desencadenadores adicionales a los ya existentes si los nombres de
Material de estudio Pgina: 217 de 249
Visual Basic 6.0 y SQLServer 7.0
desencadenadores son distintos. Si el nombre de los desencadenadores es el mismo, SQL
Server devuelve un mensaje de error. Sin embargo, si el nivel de compatibilidad es igual o menor
que 65, cualquier desencadenador creado con la instruccin CREATE TRGGER substituir a los
desencadenadores existentes del mismo tipo, incluso si los nombres de los desencadenadores
son distintos. Para obtener ms informacin, consulte sp_dbcmptIeveI.
Desencadenadores recursivos
SQL Server permite tambin la invocacin recursiva de desencadenadores cuando el valor
recursive triggers est habilitado en sp_dboption.
Los desencadenadores recursivos permiten dos tipos de recursin:
Recursin indirecta
Recursin directa
Con la recursin indirecta, una aplicacin actualiza la tabla T1, que activa el desencadenador TR1
para actualizar la tabla T2. En esta situacin, el desencadenador T2 activa y actualiza la tabla T1.
Con la recursin directa, la aplicacin actualiza la tabla T1, que activa el desencadenador TR1
para actualizar la tabla T1. Debido a que la tabla T1 ya se ha actualizado, el desencadenador TR1
se activa de nuevo, y as sucesivamente.
Este ejemplo utiliza ambas recursiones de desencadenador, directa e indirecta. Suponga que en
la tabla T1 se han definido dos desencadenadores de actualizacin, TR1 y TR2. El
desencadenador TR1 actualiza la tabla T1 recursivamente. Una instruccin UPDATE ejecuta cada
TR1 y TR2 una vez. Adems, la ejecucin de TR1 desencadena la ejecucin de TR1
(recursivamente) y TR2. Las tablas inserted y deIeted de un desencadenador dado contienen
filas que corresponden slo a la instruccin UPDATE que invoc al desencadenador.
Nota El comportamiento anterior slo se produce si el valor recursive triggers de sp_dboption
est habilitado. No hay un orden definido en el que se ejecuten los distintos desencadenadores
definidos de un evento dado. Cada desencadenador debe ser independiente.
Si alguno de los desencadenadores realiza una instruccin ROLLBACK TRANSACTON, no se
ejecuta ningn desencadenador posterior, independientemente del nivel de anidamiento.
Desencadenadores anidados
Los desencadenadores pueden anidarse hasta 32 niveles. Si un desencadenador cambia una
tabla en la que hay otro desencadenador, el segundo se activa y puede, entonces, llamar a un
tercero, y as sucesivamente. Si algn desencadenador de la cadena causa un bucle infinito, el
nivel de anidamiento se habr sobrepasado, con lo que se cancela el desencadenador. Para
deshabilitar los desencadenadores anidados, establezca la opcin nested triggers de
sp_configure en 0 (desactivada). La configuracin predeterminada permite desencadenadores
anidados. Si los desencadenadores anidados estn desactivados, los desencadenadores
recursivos tambin se deshabilitan, independientemente del valor de recursive triggers de
sp_dboption.
ResoIucin diferida de nombres
SQL Server permite que los procedimientos almacenados, desencadenadores y procesos por
lotes de Transact-SQL hagan referencia a tablas que no existen en el momento de la compilacin.
Esta capacidad se denomina resolucin diferida de nombres. Sin embargo, si los procedimientos
almacenados, desencadenadores y procesos por lotes de Transact-SQL hacen referencia a una
tabla definida en el procedimiento almacenado o desencadenador, se emitir una advertencia en
el momento de la creacin slo si el valor de nivel de compatibilidad (que se establece al ejecutar
sp_dbcmptIeveI) es igual a 65. Si se utiliza un proceso por lotes, la advertencia se emite en el
momento de la compilacin. Si la tabla a la que se hace referencia no existe, en el momento de la
ejecucin se devolver un mensaje de error. Para obtener ms informacin, consulte Resolucin
diferida de nombres y compilacin.
Material de estudio Pgina: 218 de 249
Visual Basic 6.0 y SQLServer 7.0
Permisos
De forma predeterminada, el permiso CREATE TRGGER es del propietario de la tabla en que se
ha definido el desencadenador o de los miembros de las funciones fijas de base de datos
db_owner y db_ddIadmin, y no se puede transferir.
EjempIos
A. UtiIizar un desencadenador con un mensaje de aviso
El siguiente desencadenador de ejemplo imprime un mensaje en el cliente cuando alguien intenta
agregar o cambiar datos en la tabla titIes.
Nota El mensaje 50009 es un mensaje definido por el usuario en sysmessages. Para obtener
informacin acerca de la creacin de mensajes definidos por el usuario, consulte
sp_addmessage.
USE pubs
F EXSTS (SELECT name FROM sysobjects
WHERE name = 'reminder' AND type = 'TR')
DROP TRGGER reminder
GO
CREATE TRGGER reminder
ON titles
FOR NSERT, UPDATE
AS RASERROR (50009, 16, 10)
GO
B. UtiIizar un desencadenador con un mensaje de correo eIectrnico de aviso
Este ejemplo enva un mensaje de correo electrnico a una persona especificada (MaryM)
cuando cambia la tabla titIes.
USE pubs
F EXSTS (SELECT name FROM sysobjects
WHERE name = 'reminder' AND type = 'TR')
DROP TRGGER reminder
GO
CREATE TRGGER reminder
ON titles
FOR NSERT, UPDATE, DELETE
AS
EXEC master..xp_sendmail 'MaryM',
'Don''t forget to print a report for the distributors.'
GO
C. UtiIizar un desencadenador de regIa de negocio entre Ias tabIas empIoyee y jobs
Debido a que las restricciones CHECK pueden hacer referencia slo a las columnas en que se
han definido las restricciones de nivel de columna o de nivel de tabla, cualquier restriccin de
tablas cruzadas (en este caso, reglas del negocio) debe definirse como desencadenadores.
Este ejemplo crea un desencadenador que, cuando se inserta o se cambia un nivel de trabajo de
empleado, comprueba que el nivel especificado del trabajo del empleado (job_IvIs) en el que se
basan los salarios se encuentra en el intervalo definido para el trabajo. Para obtener el intervalo
adecuado, debe hacerse referencia a la tabla jobs.
USE pubs
F EXSTS (SELECT name FROM sysobjects
WHERE name = 'reminder' AND type = 'TR')
DROP TRGGER reminder
GO
CREATE TRGGER employee_insupd
Material de estudio Pgina: 219 de 249
Visual Basic 6.0 y SQLServer 7.0
ON employee
FOR NSERT, UPDATE
AS
/* Get the range of level for this job type from the jobs table. */
DECLARE @min_lvl tinyint,
@max_lvl tinyint,
@emp_lvl tinyint,
@job_id smallint
SELECT @min_lvl = min_lvl,
@max_lvl = max_lvl,
@emp_lvl = i.job_lvl,
@job_id = i.job_id
FROM employee e NNER JON inserted i ON e.emp_id = i.emp_id
JON jobs j ON j.job_id = i.job_id
F (@job_id = 1) and (@emp_lvl <> 10)
BEGN
RASERROR ('Job id 1 expects the default level of 10.', 16, 1)
ROLLBACK TRANSACTON
END
ELSE
F NOT (@emp_lvl BETWEEN @min_lvl AND @max_lvl)
BEGN
RASERROR ('The level for job_id:%d should be between %d and %d.',
16, 1, @job_id, @min_lvl, @max_lvl)
ROLLBACK TRANSACTON
END
D. UtiIizar Ia resoIucin diferida de nombres
El ejemplo siguiente crea dos desencadenadores para ilustrar la resolucin diferida de nombres.
USE pubs
F EXSTS (SELECT name FROM sysobjects
WHERE name = 'trig1' AND type = 'TR')
DROP TRGGER trig1
GO
-- Creating a trigger on a nonexistent table.
CREATE TRGGER trig1
on authors
FOR NSERT, UPDATE, DELETE
AS
SELECT a.au_lname, a.au_fname, x.info
FROM authors a NNER JON does_not_exist x
ON a.au_id = x.au_id
GO
-- Here is the statement to actually see the text of the trigger.
SELECT o.id, c.text
FROM sysobjects o NNER JON syscomments c
ON o.id = c.id
WHERE o.type = 'TR' and o.name = 'trig1'
-- Creating a trigger on an existing table, but with a nonexistent
-- column.
USE pubs
F EXSTS (SELECT name FROM sysobjects
WHERE name = 'trig2' AND type = 'TR')
DROP TRGGER trig2
GO
CREATE TRGGER trig2
Material de estudio Pgina: 220 de 249
Visual Basic 6.0 y SQLServer 7.0
ON authors
FOR NSERT, UPDATE
AS
DECLARE @fax varchar(12)
SELECT @fax = phone
FROM authors
GO
-- Here is the statement to actually see the text of the trigger.
SELECT o.id, c.text
FROM sysobjects o NNER JON syscomments c
ON o.id = c.id
WHERE o.type = 'TR' and o.name = 'trig2'
E. UtiIizar COLUMNS_UPDATED
En este ejemplo se crean dos tablas. Una tabla empIoyeeData y una tabla auditEmpIoyeeData.
La tabla empIoyeeData, que contiene informacin confidencial de los sueldos de los empleados,
puede ser modificada por los miembros del departamento de recursos humanos. Si se cambia el
nmero de seguridad social del empleado, el sueldo anual o el nmero de cuenta bancaria, se
genera un registro de auditora y se inserta en la tabla de auditora auditEmpIoyeeData.
Con la funcin COLUMNS_UPDATED(), es posible comprobar rpidamente cualquier cambio en
estas columnas que contienen informacin confidencial de los empleados.
USE pubs
F EXSTS(SELECT TABLE_NAME FROM NFORMATON_SCHEMA.TABLES
WHERE TABLE_NAME = 'employeeData')
DROP TABLE employeeData
F EXSTS(SELECT TABLE_NAME FROM NFORMATON_SCHEMA.TABLES
WHERE TABLE_NAME = 'auditEmployeeData')
DROP TABLE auditEmployeeData
GO
CREATE TABLE employeeData (
emp_id int NOT NULL,
emp_bankAccountNumber char (10) NOT NULL,
emp_salary int NOT NULL,
emp_SSN char (11) NOT NULL,
emp_lname nchar (32) NOT NULL,
emp_fname nchar (32) NOT NULL,
emp_manager int NOT NULL
)
GO
CREATE TABLE auditEmployeeData (
audit_log_id uniqueidentifier DEFAULT NEWD(),
audit_log_type char (3) NOT NULL,
audit_emp_id int NOT NULL,
audit_emp_bankAccountNumber char (10) NULL,
audit_emp_salary int NULL,
audit_emp_SSN char (11) NULL,
audit_user sysname DEFAULT SUSER_SNAME(),
audit_changed datetime DEFAULT GETDATE()
)
GO
CREATE TRGGER updEmployeeData
ON employeeData
FOR update AS
-- Check whether columns 2, 3 or 4 has been updated. f any or all of
-- columns 2, 3 or 4 have been changed, create an audit record.
-- The bitmask is: power(2,(2-1))+power(2,(3-1))+power(2,(4-1)) = 14
Material de estudio Pgina: 221 de 249
Visual Basic 6.0 y SQLServer 7.0
-- To check if all columns 2, 3, and 4 are updated, use = 14 in place of
-- >0 (below).
F (COLUMNS_UPDATED() & 14) > 0
-- Use F (COLUMNS_UPDATED() & 14) = 14 to see if all of columns 2, 3,
-- and 4 are updated.
BEGN
-- Audit OLD record.
NSERT NTO auditEmployeeData
(audit_log_type,
audit_emp_id,
audit_emp_bankAccountNumber,
audit_emp_salary,
audit_emp_SSN)
SELECT 'OLD',
del.emp_id,
del.emp_bankAccountNumber,
del.emp_salary,
del.emp_SSN
FROM deleted del
-- Audit NEW record.
NSERT NTO auditEmployeeData
(audit_log_type,
audit_emp_id,
audit_emp_bankAccountNumber,
audit_emp_salary,
audit_emp_SSN)
SELECT 'NEW',
ins.emp_id,
ins.emp_bankAccountNumber,
ins.emp_salary,
ins.emp_SSN
FROM inserted ins
END
GO
--nserting a new employee does not cause the UPDATE trigger to fire.
NSERT NTO employeeData
VALUES ( 101, 'USA-987-01', 23000, 'R-M53550M', N'Mendel', N'Roland', 32)
GO
-- Updating the employee record for employee number 101 to change the
-- salary to 51000 causes the UPDATE trigger to fire and an audit trail
-- to be produced.
UPDATE employeeData
SET emp_salary = 51000
WHERE emp_id = 101
GO
SELECT * FROM auditEmployeeData
GO
--Updating the employee record for employee number 101 to change both the bank account
number and social security number (SSN) causes the UPDATE trigger to fire and an audit trail to
be produced.
UPDATE employeeData
SET emp_bankAccountNumber = '133146A0', emp_SSN = 'R-M53550M'
WHERE emp_id = 101
GO
SELECT * FROM auditEmployeeData
GO
Material de estudio Pgina: 222 de 249
Visual Basic 6.0 y SQLServer 7.0
Anexos
.1 7L: (:en%ua2e Estructurado de Consultas T 7tructured Luer$ :an%ua%eU&
ntes de exponer los si,uientes incisos de SQL desarrollaremos una idea
,lo&al del uncionamiento de SQL! ilustrando sus caracter*sticas y
unciones m)s importantes. %
SQL esta &asado en el modelo relacional que or,ani+a los datos en una &ase
como una colecci(n de ta&las.
4ada ta&la tiene un nom&re que la identiica un*vocamente.
4ada ta&la tiene una o m)s columnas dispuestas en un orden
espec*ico de i+quierda a derec/a.
4ada ta&la tiene cero o m)s ilas! conteniendo cada una un "nico
valor en cada columna. Las ilas est)n desordenadas.
Fodos los valores de una columna determinada tienen el mismo
tipo de datos! y -stos est)n extra*dos de un con5unto de valores
le,ales llamado el dominio de la columna.
Las ta&las est)n relacionadas unas con otras por los datos que contienen. 'l
modelo de datos relacional utili+a claves primarias y or)neas para
representar estas relaciones entre las ta&las.
1na clave primaria es una columna o com&inaci(n de columnas dentro
de una ta&la:s; cuyo:s; valor:es; identiica:n; un*vocamente a cada ila
de la ta&la.
1na clave or)nea es una columna o com&inaci(n de columnas en una
ta&la! cuyo:s; valor:es; es:son; un valor de la clave primaria .
1na com&inaci(n de claves primarias/or)neas crea una relaci(n
padre//i5o entre las ta&las que las contienen.
Fodas las sentencias en SQL comien+an con un ver&o! una pala&ra clave que
descri&e lo que la sentencia /ace :49'#F'! 37S'9F! %'L'F'! 48$$3F;! la
sentencia contin"a con una o m)s cl)usulas :Ver i,. ?.<;. 1na cl)usula puede
especiicar los datos so&re los que de&e actuar la sentencia! o proporcionar
m)s detalles acerca de lo que -sta /ace! tam&i-n comien+a con una pala&ra
clave :K6'9'! L98$! 37F8! 6#V37B! etc.;! al,unas son opcionales y otras son
necesarias. La estructura y contenido var*an de una cl)usula a otra.
p a l a b r a s
c l a v e
v e r b o c l u s u l a
, E & E ' E F R ( ) n o m b r e C d e C t a b l a
. E R E n o m b r e C c o l u m n a D c o n d i c i 1 n E D e < p r e s i 1 n E
Material de estudio Pgina: 223 de 249
Visual Basic 6.0 y SQLServer 7.0
i/- 0-1 Estructura de una entencia #$.
'l est)ndar SQL #7S3/3S8 :#merican 7ational Standards 3nstitute/3nternational
Standards 8r,ani+ation; especiica las pala&ras clave que se utili+an como
ver&os y cl)usulas de sentencias. %e acuerdo al est)ndar! estas pala&ras
clave no pueden ser utili+adas para desi,nar o&5etos de la &ase! tales como
ta&las! columnas y usuarios. Los o&5etos de una &ase de datos &asada en SQL
se identiican asi,n)ndoles nom&res "nicos! utili+)ndose en las sentencias
para identiicar el o&5eto en la &ase so&re la que la sentencia de&e actuar. 'l
est)ndar #7S3/3S8 especiica pala&ras permisi&les para identiicar ta&las!
columnas y usuariosO al,unas implementaciones soportan o&5etos como
procedimientos almacenados! relaciones clave primaria/or)nea y ormularios
de entrada de datos! entre otros.
'l est)ndar #7S3/3S8 especiica varios tipos de datos que pueden ser
almacenados y manipulados por el len,ua5e SQL y la mayor*a de los productos
los soporta! adem)s de orecer un con5unto m)s extenso que -ste.
4.1 .3*'(R3% F PER*PEC'3V%* ,E *@&.
1na de las principales tareas de un sistema computacional es almacenar y
,estionar datos! por tal motivo! pro,ramas especiali+ados en computadoras
conocidos como sistemas de ,esti(n de &ases de datos comen+aron a
aparecer a inales de los sesenta y comien+o de los setenta. #nteriormente un
sistema de ,esti(n de &ase datos o %B$S %istema &ane'ador de Base de
!atos( )!atabase &ana*ement "stem+,( ayuda&a a los usuarios a or,ani+ar y
estructurar sus datos! y permit*a al sistema computacional 5u,ar un papel m)s
activo en la ,esti(n de los datos. #unque los sistemas de &ases de datos se
desarrollaron inicialmente en mainrames! su popularidad se /a extendido a
minicomputadoras! computadoras personales y estaciones de tra&a5o.
%urante los "ltimos a.os se /a populari+ado un tipo espec*ico de %B$S!
llamado sistema de ,esti(n de &ase de datos relacional :9%B$S;. Las &ases de
datos relacionales or,ani+an los datos en una orma ta&ular sencilla y
proporcionan muc/as venta5as so&re los tipos anteriores de &ases de datos.
SQL :$en*ua'e Estructurado de Consultas ) tructured #uer" $an*ua*e+, es
un len,ua5e relacional utili+ado para tra&a5ar con &ases de datos relacionales.
BREVE 2ISTORIA DE S3L
Material de estudio Pgina: 224 de 249
Visual Basic 6.0 y SQLServer 7.0
La /istoria del len,ua5e SQL est) *ntimamente relacionada con el desarrollo de
las &ases de datos relacionales. La Fa&la ?.< muestra al,unos de los
acontecimientos en sus veinte a.os de /istoria.
'l concepto de &ase de datos relacional ue desarrollado ori,inalmente por el
%r. '. L. Fed 4odd! quien pu&lic( un art*culo titulado Q-n modelo relacional de
datos para *randes bancos de datos compartidosR que esquemati+a&a una
teor*a matem)tica de como los datos podr*an ser almacenados y manipulados
utili+ando una estructura ta&ular.
Fec;a %contecimiento
<C70 4odd deine el modelo de &ase de datos relacional.
<C7? 4omien+a el proyecto System/9 de 3B$.
<C7? Primer art*culo que descri&e el len,ua5e S'Q1'L.
<C7A Fest de clientes del System/9.
<C7C 8racle introduce el primer 9%B$S comercial.
<CA< 9elational Fec/nolo,y introduce 3n,res.
<CA< 3B$ anuncia SQL/%S.
<CA= #7S3 orma el comit- de est)ndares SQL.
<CA> 3B$ anuncia %B=.
<CA6 Se ratiica el est)ndar #7S3 SQL.
<CA6 Sy&ase introduce 9%B$S para procesamiento de
transacciones.
<CA7 Se ratiica el est)ndar 3S8 SQL
<CAA #s/tonGFate y $icrosot anuncian SQL Server para 8S/=
<CAA 3B$ anuncia la versi(n = de %B=
<CAC Primera entre,a de servidores de &ases de datos SQL para
8S/=
Tabla 0-1 .contecimientos en el desarrollo de #$.
ACEPTACI"N COMERCIAL
La pu&licaci(n del est)ndar #7S3/3S8 para SQL en <CA6! dio car)cter oicial a
SQL como est)ndar. La ta&la ?.= muestra al,unos de los sistemas de ,esti(n
de &ase de datos en SQL m)s populares so&re dierentes tipos de sistemas de
computadoras.
#l inicio de los noventa! SQL esta&a claramente esta&lecido como el len,ua5e
est)ndar de &ase de datos. Los vendedores de &ase de datos que no
soporta&an SQL se preocuparon de /acerlo so&re todo por que cualquier
nuevo producto de &ase de datos requer*a a SQL como reclamo para ser
tomado en serioO SQL se convirti( en el est)ndar oicial para las &ases de
datos relacionales.
,0)* *istemas informticos
Material de estudio Pgina: 225 de 249
Visual Basic 6.0 y SQLServer 7.0
%B= $ainrames 3B$ &a5o $VS.
SQL/%S $ainrames 3B$ &a5o V$ y %8S/VS'.
9d&/V$S $ainrames V#I/V$S de %i,ital.
8racle $ainrames! minicomputadoras y P4Ss.
3n,res $ainrames y P4Ss.
Sy&ase $ainrames y L#7s.
3normixGSQL $ainrames y P4Ss &asados en 173I.
1niy $ainrames &asados en 173I.
8S/= 'xtended
'dition
Sistemas PS/= de 3B$ &a5o 8S/=.
SQL Server P4 L#7s &asados en 8S/=.
SQLBase P4 L#7s &asados en %8S y 8S/=.
%B#S' 3V P4Ss y P4 L#7s.
Tabla 0-4 Principales sistemas de *estin de base de datos basados en #$.
1no de los desarrollos m)s importantes en la aceptaci(n del mercado de SQL
es la creaci(n de los est)ndares SQL. Las reerencias al Qest)ndar SQLR
si,niica ,eneralmente el est)ndar oicial adoptado por la #7S3 e 3S8.
La mayor*a de los desarrolladores de sot2are est)n de acuerdo en que un
est)ndar para SQL es esencial para el c(mputo cliente/servidor. Sin em&ar,o!
no menos de oc/o proyectos se est)n llevando a ca&o para crear un est)ndar
SQL. S(lo el #7S3 es responsa&le de tres est)ndares ya sean pu&licados o en
proceso. 8tros esuer+os involucran a consorcios de la industria! tales como
S#B :el ,rupo de acceso a SQL;! I/8pen y a compa.*as como 3B$! $icrosot y
Borland. Si adem)s consideramos que cualquier Base de %atos D/a&la su
propio dialecto de SQLE y tiene su propio con5unto de extensiones de este
len,ua5e! no es )cil la tarea para su estandari+aci(n .
Las ra+ones para la prolieraci(n de est)ndares de SQL son numerosasO una de
ellas es que los est)ndares est)n dise.ados solamente para servir como ,u*as!
esto de5a muc/o lu,ar para la interpretaci(n cuando un proveedor toma una
especiicaci(n del len,ua5e y la pone en pr)ctica en sot2are. Sin em&ar,o! la
mayor*a de las veces los proveedores intentan /acer muc/o m)s y el pro&lema
es que aunque cada proveedor tome decisiones excelentes! -stas son
dierentes acerca de como extender el est)ndar de SQL.
# alta de un est)ndar aceptado! los proveedores de &ases de datos est)n
reali+ando sus propios tra&a5os de estandari+aci(n. # continuaci(n
mencionamos los m)s si,niicativos para la creaci(n de est)ndares.
*@&GHI de %$*3. 'l est)ndar SQL del #7S3 ratiicado en <CAC ue el
primer nivel de estandari+aci(n de SQL.
*@&GIJ de %$*3. 1na extensi(n al est)ndar de <CAC que se convirti(
en un est)ndar importante en los si,uientes a.os! conorme los
proveedores de &ases de datos y /erramientas /icieron modiicaciones para
tener compati&ilidad con -l.
*@&GIK de %$*3. 1n esuer+o para expandir sustancialmente el
len,ua5e! proporciona m)s estructura y est)ndares para tener acceso a
&ases de datos orientadas a o&5etos.
Material de estudio Pgina: 226 de 249
Visual Basic 6.0 y SQLServer 7.0
*%B (Brupo de acceso a *@&" 9 2>(pen. S#B es un consorcio de
proveedores de &ases de datos y /erramientas. I/8pen es un consorcio de
la industria dedicado a pu&licar y reor+ar el uso de est)ndares para
sistemas a&iertos. 'stas dos a,rupaciones est)n tra&a5ando con5untamente
para esta&lecer un est)ndar de SQL y un #P3 &asados en el SQLSAC de #7S3!
y en los "ltimos avances en el )m&ito cliente/servidor.
3,%P3 (3nterface 3ntegrada para la Programaci1n de %plicaciones
de 0ases de ,atos". 3%#P3 est) &asada en el tra&a5o de S#B y de I/8pen!
rele5a el intento de Borland por deinir un #P3 para SQL.
,R,% (%cceso ,istribuido a 0ases de ,atos Relacionales". 'l
est)ndar emer,ente de 3B$ para acceso a &ases de datos a trav-s de todas
sus plataormas! incluye otra incursi(n en SQL.

La creciente popularidad de la conexi(n de computadoras por red durante los
"ltimos a.os /a tenido un uerte impacto en la ,esti(n de &ase de datos y /a
dado a SQL una mayor relevancia. 4onorme las redes pasan a ser m)s
comunes! las aplicaciones que /an corrido tradicionalmente en una
minicomputadora o mainrame central se est)n transiriendo a redes de )rea
local con estaciones de tra&a5o de so&remesa y servidores. 'n estas redes
SQL 5ue,a un papel crucial como v*nculo entre una aplicaci(n que corre en una
estaci(n de tra&a5o y el %B$S que ,estiona los datos compartidos en el
servidor! en los si,uientes incisos mostramos como actua el %B$S en tres
arquitecturas.
AR3UITECTURA CENTRALI5ADA
La arquitectura de &ase de datos tradicional utili+ada por %B=! SQL/%S y las
&ases de datos so&re minicomputadoras tales como 8racle e 3n,res se
muestra en la i,ura ?.=. 'n esta arquitectura el %B$S y los datos *sicos
residen en un sistema mainrame o minicomputadora central! 5unto con el
pro,rama de aplicaci(n que acepta entradas desde la terminal de usuario y
muestra los datos en la pantalla del usuario.
Supon,amos que el usuario teclea una consulta que requiere una &"squeda
secuencial en la &ase de datosO por e5emplo! /allar la cantidad media de
mercanc*as de todos los pedidosO el %B$S reci&e la consulta! explora la &ase
de datos para acceder a cada uno de los re,istros de datos del disco7 calcula
el promedio y muestra el resultado en la pantalla de la terminal.
Fanto el procesamiento de la aplicaci(n como el procesamiento de la &ase de
datos se producen en la computadora central! " como el sistema es
compartido por muc/os usuarios( cada usuario e0perimenta una de*radacin
del rendimiento cuando el sistema tiene una car*a fuerte.
Material de estudio Pgina: 227 de 249
A p l i c a c i n D B M S
B a s e d e
D a t o s
C o m a n d o s
S i s t e m a C e n t r a l
R e s u l t a d o s
T e r m i n a l
Visual Basic 6.0 y SQLServer 7.0
Fi*. 1.2. 3estin de Base !atos en una arquitectura centrali4ada.
AR3UITECTURA DE SERVIDOR DE ARC2IVOS
La introducci(n de las computadoras personales y de las redes de )rea local
condu5o al desarrollo de la arquitectura servidora de arc/ivos( mostrada en la
i,ura ?.>. 'n esta arquitectura! una aplicaci(n que corre en un computadora
personal puede acceder de orma transparente a datos locali+ados en un
servidor de arc/ivos que almacena los arc/ivos compartidos. 4uando una
aplicaci(n en P4 solicita datos de un arc/ivo compartido! el sot2are de red
recupera autom)ticamente el &loque solicitado del arc/ivo en el servidor.
Varias &ases de datos P4 populares! entre las que se incluye %&ase! 90B#S' y
Paradox! soportan esta estrate,ia servidora de arc/ivos! donde cada
computadora personal e5ecuta su propia copia del sot2are %B$S.
Para consultas t*picas esta arquitectura proporciona un rendimiento excelente!
ya que cada usuario dispone de la potencia completa de un computadora
personal e5ecutando su propia copia del %B$S. Sin em&ar,o! consideremos
una consulta que requiere una exploraci(n secuencial de la &ase de datos! el
%B$S solicita repentinamente &loques de datos de la &ase de datos! la cual
est) locali+ada *sicamente a trav-s de la red en el servidor! eventualmente
todos los bloques del arc/ivo estn solicitados " enviados a trav5s de la red.
6bviamente esta arquitectura produce un fuerte trfico de red " un ba'o
rendimiento para consultas de este tipo.
Fi*. 1.7.
3estin de base de datos en una arquitectura ervidor de .rc/ivos.
AR3UITECTURA CLIENTE /SERVIDOR
Material de estudio Pgina: 228 de 249
P C
P C P C
A p l i c a c i n D B M S
S o f t w a r e d e R e d
S e r v i d o r d e
A r c h i v o s
P e t i c i o n e s d e
E / S a D i s c o
B l o q u e s d e D i s c o
B . D . y A r c h i v o s
C o m p a r t i d o s
Visual Basic 6.0 y SQLServer 7.0
La i,ura ?.? muestra la emer,ente arquitectura cliente/servidor para ,esti(n
de &ase de datos. 'n esta arquitectura! las computadoras personales est)n
com&inadas en una red de )rea local 5unto con un servidor de base de datos
que almacena las &ases de datos compartidas. Las unciones del %B$S est)n
divididas en dos partes0 los Q rontales R :f'ont=ends; de &ase de datos! tales
como /erramientas de consulta interactiva! escritores de inorme y pro,ramas
de aplicaci(n! que se e5ecutan en la computadora personal y la m)quina de Q
soporte R %bac67end, de la &ase de datos que almacena y ,estiona los datos
se e5ecutan en el servidor. SQL se /a convertido en el len,ua5e de &ase de
datos est)ndar para comunicaci(n entre las /erramientas rontales y la
m)quina de soporte en esta arquitectura.
4onsideremos una ve+ m)s la consulta secuencial. 'n la arquitectura
cliente/servidor! la consulta via5a a trav-s de la red /asta el servidor de &ase
de datos como una petici(n SQL! la m)quina de &ase de datos en el servidor
procesa la petici(n y explora la &ase de datos! que tam&i-n reside en el
servidor. Cuando calcula el resultado( la mquina de base de datos env8a de
re*reso a trav5s de la red una 9nica contestacin a la peticin " la aplicacin
frontal la muestra en pantalla de la PC.
La arquitectura cliente/servidor reduce el tr)ico de red y divide la car,a de la
&ase de datos. Las unciones de intensiva relaci(n con el usuario! tales como
el mane5o de la entrada y la visuali+aci(n de los datos! se concentran en la P4.
Las unciones intensivas en proceso de datos! tales como la entrada/salida de
arc/ivos y el procesamiento de consultas! se concentran en el servidor de
datos. Lo que es m)s importante! el len,ua5e SQL proporciona una intera+
&ien deinida entre los sistemas rontales y de soporte! comunicando las
peticiones de acceso a la &ase de datos de una manera eiciente.
La arquitectura cliente/servidor /a reci&ido ,ran atenci(n con la introducci(n
de redes de P4 &asadas en 8S/=. SQL Server! el Servidor 8racle para SQLBase
de Bupta Fec/nolo,ies utili+an esta estrate,ia.
Fi*. 1.1.
3estin de B.!. en una arquitectura Cliente/ervidor.
SQL es un ve/*culo natural para implementar aplicaciones utili+ando una
arquitectura cliente/servidor distri&uida. 'n este papel! sirve como enlace
entre los sistemas inorm)ticos :frontales; %front-end, optimi+ados para
interactuar con el usuario y los sistemas Qde apoyoR %back-end, especiali+ados
para ,esti(n de &ases de datos! permitiendo que cada sistema rinda lo me5or
posi&le. Fam&i-n permite que las computadoras personales uncionen como
rontales de &ases de datos mayores dispuestas en minicomputadoras y
Material de estudio Pgina: 229 de 249
P C
P C P C
A p l i c a c i n
D B M S
S e r v i d o r d e
B . D .
P e t i c i o n e s S Q L
D a t o s
B a s e d e
D a t o s
Visual Basic 6.0 y SQLServer 7.0
mainrames! proporcionando acceso a datos corporativos desde aplicaciones
inorm)ticas personales.
S3L $ EL PROCESAMIENTO DE TRANSACCIONES
SQL y las &ases de datos relacionales /a&*an tenido /ist(ricamente muy poco
impacto en las aplicaciones de procesamiento de transacciones en l*nea
:8LFP;. #l /acer -nasis en las consultas! las &ases de datos relacionales se
coninaron! adem)s! al soporte de decisiones y aplicaciones en l*nea de &a5o
vol"men! en las cuales su rendimiento m)s lento era una desventa5a. Para
aplicaciones 8LFP! donde cientos de usuarios necesitan acceso en l*nea a los
datos y tiempos de respuesta por de&a5o del se,undo! el 3normation
$ana,ement System :3$S; no relacional de 3B$ predomina&a como %B$S.
'n <CA6 un nuevo vendedor %B$S! Sy&ase! introdu5o una nueva &ase de datos
&asada en SQL dise.ada especialmente para aplicaciones 8LFP. 'l %B$S
Sy&ase corr*a en minicomputadoras V#I/V$S y en estaciones de tra&a5o Sun!
y se centra&a en o&tener un rendimiento en l*nea m)ximo. 8racle 4orporation
y 9elational Fec/nolo,y si,uieron en &reve con anuncios de que tam&i-n ellos
orecer*an versiones 8LFP de sus populares sistemas de &ase de datos 8racle
e 3n,res. 'n el mercado 173I! 3normix anunci( una versi(n 8LFP de su %B$S!
llamada 3normixGFur&o.
'n a&ril de <CAA 3B$ supo su&irse al tren del 8LFP relacional con %B= Versi(n
=! cuyos pro,ramas de prue&a mostra&an que la nueva versi(n opera&a por
encima de =@0 transacciones por se,undo en mainramesO 3B$ proclam( que
el rendimiento de %B= era a/ora adecuado para casi todas las aplicaciones
8LFP excepto las m)s exi,entes! y anim( a los clientes a considerarla como
una serie alternativa a 3$S. Los &ancos de prue&a de 8LFP se /an convertido
a/ora en una /erramienta est)ndar de ventas para &ase de datos relacionales!
a pesar de serias cuestiones acerca de lo adecuado de esos pro,ramas para
medir eectivamente el rendimiento de aplicaciones reales.
La conveniencia de SQL para 8LFP contin"a me5orando! de&ido a los avances
en la tecnolo,*a relacional y a la mayor potencia del /ard2are que conducen a
tasas de transacciones cada ve+ m)s altas. Los clientes parecen considerar
a/ora seriamente a %B= y a las &ases de datos relacionales para su utili+aci(n
en aplicaciones 8LFP.
S3L EN COMPUTADORAS PERSONALES
SQL tuvo poco impacto en las computadoras personales /asta inales de los
oc/enta! para entonces! ya -ran comunes las P4 potentes que soporta&an
decenas o centenares de me,a&ytes de almacenamiento en disco. Los
usuarios se conecta&an! adem)s! mediante redes de )rea local y desea&an
compartir &ases de datos. 'n resumen! las P4 comen+aron a necesitar las
caracter*sticas que SQL y las &ases de datos relacionales pod*an
proporcionarles.
Las primeras &ases de datos &asadas en SQL para computadoras personales
ueron versiones de los productos populares para minicomputadoras que
Material de estudio Pgina: 230 de 249
Visual Basic 6.0 y SQLServer 7.0
di*cilmente se a5usta&an a las computadoras personales. Proessional 8racle!
anunciado en <CA?! requer*a = $& de memoria en un 3B$ P4! y 8racle
$acintos/! anunciado en <CAA! ten*a exi,encias an)lo,asO una versi(n P4 de
3n,res anunciada en <CA7! entra&a :aunque muy 5ustamente; dentro del l*mite
de 6?8 PB de $SG%8SO 3normixGSQL para $SG%8S ue anunciado en <CA6!
proporcionando una versi(n P4 de la popular &ase de datos 173I. Fam&i-n
en <CA6! Bupta Fec/nolo,ies! una empresa undada por un exGdiretor de
8racle! anunci( SQLBase! una &ase de datos para redes de )rea local P4.
SQLBase estuvo entre los primeros productos P4 en oertar una arquitectura
cliente/servidor! un avance de los anuncios de &ases de datos 8S/= por lle,ar.
SERVIDORES DE BASE DE DATOS BASADOS EN S3L
# inales de <CAC aparecieron una ,ran cantidad de anuncios de servidores de
&ases de datos &a5o 8S/= y cuatro de los productos emer,ieron como l*deres
en el mercado de servidores de &ases de datos como 0
OS/4 E8tended Edition. #unque su versi(n servidora a"n no esta&a
comerciali+ada! todos espera&an que el ,estor de &ase de datos 8S/= de
3B$ 5u,ara un papel importante en el mercado de servicios os/=.
S3L Se'(e' de Mic'osoft. 9espaldado por dos de los tres principales
desarrolladores de sot2are para P4! este servidor aparec*a como el 5u,ador
independiente m)s uerte. Fen*a la venta5a de una &uena tecnolo,*a
:procedente de Sy&ase;! pu&licidad excelente y una distri&uci(n
esta&lecida.
O'acle 9a'a OS/4 de O'acle. La versi(n 8S/= del %B$S relacional
independiente m)s importante reor+a&a la &uena conexi(n con las &ases
de datos 8racle so&re minicomputadoras y mainrames! con la potencia de
la uer+a de ventas directas de 8racle.
S3L Base de !+9ta- 'l primer vendedor con una &ase de datos en P4
L#7 ue el m)s peque.o de los cuatro y un contendiente oscuro! pero el
servidor era real! ten*a &uenas /erramientas rontales ,r)icas! esta&a
comerciali+)ndose :lo que no era necesariamente cierto de los otros tres; y
unciona&a.
'xist*an adem)s! productos servidores de &ases de datos de 7ovell :7etKare
SQL;! I%B System :I%B Server; y de otras compa.*as m)s peque.as.
La arquitectura cliente/servidor tam&i-n estimul( el desarrollo de
/erramientas de &ases de datos rontales que pod*an uncionar con los nuevos
servidores! qui+) el producto rontal m)s si,niicativo ue %&ase 3V! que
#s/tonGFate anunci( uncionar*a como rontal de SQL Server y de 8S/=
'xtended 'dition. Paradox y %ata'asy otras dos &ases de datos en P4!
tam&i-n anunciaron rontales para tres o cuatro de los principales servidores.
4ada vendedor de servidor tam&i-n oert( sus propios productos rontales!
incluyendo /erramientas de desarrollo de aplicaciones! consultas orientadas a
ventanas y acilidades de entradas de datos! /erramientas de inspecci(n de la
&ase de datos y otras.
Material de estudio Pgina: 231 de 249
Visual Basic 6.0 y SQLServer 7.0
'l modelo cliente/servidor de 8S/= tam&i-n si,niic( un nuevo incentivo para
las &ases de datos &asadas en $SG%8S. #unque los servidores requer*an
t*picamente la potencia del sistema 8S/=! un P4 &asado en $SG%8S era
adecuado como sistema rontal para muc/as aplicaciones! tales como entrada
de datos! ela&oraci(n de inormes y consultas interactivas.
4onorme los a.os oc/enta inali+a&an! el papel de los servidores de &ase de
datos &asados en SQL y 8S/= se convert*a en uno de los temas m)s novedosos
en la prensa inorm)tica. Sin em&ar,o! el tama.o "ltimo del mercado! la
aceptaci(n por parte de los clientes de los sistemas y el relativo -xito de los
a&ricantes! si,uen siendo cuestiones a&iertas a resolver en los noventa.
0-1-1 CONCEPTOS $ CONSULTAS
SQL se divide en cuatro ,randes cate,or*as de servicios! los cuales son 0
6. Len/+a:e de definici,n de Datos :%%L0 %ata %einition Lan,ua,e;.
4onsiste en comandos para deinir o&5etos en la &ase como ta&las! vistas!
*ndices e inte,ridad de datosO mediante estos comandos! el %B$S veriica
que las acciones que el usuario aplica a los o&5etos se realicen
correctamente.
66. Len/+a:e de *ani9+laci,n de datos :%$L0 %ata $anipulation Lan,ua,e;.
Son comandos que le permiten al usuario seleccionar! actuali+ar! insertar o
&orrar inormaci(n en la Base de %atos. 'ste acceso a los datos y unciones
de manipulaci(n es la ra+(n principal de usar un %B$S.
666. Len/+a:e de cont'ol de Datos :%4L0 %ata 4ontrol Lan,ua,e;.
4onsiste en comandos que controlan la e5ecuci(n de otros comandos.
'xisten comandos para el mane5o de concurrencia! se,uridad y consistencia
en la BaseO por e5emplo! existen comandos que controlan la e5ecuci(n de un
transacci(n y restauraci(n de datos si -sta alla.
6C. P'o/'a* Lan/+a/e Const'+cts. Son comandos que no pueden ser
usados en un modo interactivo con SQL! -stos s(lo pueden ser usados
desde un len,ua5e de pro,ramaci(n externo al del %B$S. Su prop(sito es
acilitar la interace entre SQL y los len,ua5es de pro,ramaci(n! como D4E.
La ta&la ?.> muestra los cuatro servicios que orece SQL! as* como al,unos
comandos de cada uno de estos ,rupos.
*ERV3C3( C()%$,(* RE&%C3($%,(*
%%L 49'#F'! %98P! #LF'9 F#BL'
%$L %'L'F'! 37S'9F! S'L'4F! 1P%#F'
%4L 48$$3F! 98LLB#4P! B9#7F! 9'V8P'! L84P
F#BL'
Pro,ram Len,ua,e
4onstructs
B'B37! %'4L#9' S'4F387! 'I'41F'! %'4L#9'
419S89! 8P'7! 4L8S'! L'F46
<.B$. 1.7 E'emplos de comandos de servicios de #$.
Material de estudio Pgina: 232 de 249
Visual Basic 6.0 y SQLServer 7.0
AR3UITECTURAS DE BASES DE DATOS
Las i,uras ?.@! ?.6 T ?.7 muestran tres arquitecturas para mane5ar en orma
remota &ases de datosO tales como0 proceso por cliente :processGperGclient;!
multi/ilos e /*&rido.
La arquitectura de 9'oceso 9o' cliente proporciona un m)ximo de
protecci(n de los procesos! dando a cada &ase de datos cliente! su propio
espacio de direcci(n para procesos. La &ase de datos corre en uno o m)s
procesos ormados por separado. La venta5a de esta arquitectura es que
prote,e a un usuario de los otros y tam&i-n prote,e al administrador de la
&ase de datos de los usuarios. #dem)s! el proceso puede ser )cilmente
cam&iado a otro procesador o una m)quina multiprocesador S7$P
:Protocolo para la administraci(n de red simple! DSimple 7et2orH
$ana,ement ProtocolE;! ya que la arquitectura depende del sistema
operativo local para los servicios de multitarea. La desventa5a de proceso
por cliente es que utili+an m)s memoria y recursos del 4P1 que los
esquemas alternativos e incluso puede ser lento ya que los procesos se
intercam&ian y usan 3P4. Sin em&ar,o! estos pro&lemas pueden ser
superados )cilmente con el uso de monitor de procesamiento de
transacciones :FP monitor; que mane5e una ronda de procesos reusa&les.
Proceso
Proceso
Proceso
Gase de Datos
Ser.idor
Clientes
Procesos en Ser.idor
Dedicado
i/- 0-;- .rquitectura de Proceso por Cliente.
La arquitectura *+lti<ilos orece la me5or e5ecuci(n corriendo todos los
usuarios conectados! las aplicaciones y la &ase de datos en el mismo
espacio de direcciones. 'sta arquitectura proporciona su propio
pro,ramador de tiempos que conserva memoria y capacidad de tra&a5o del
4P1 pues no requiere de intercam&ios recuentes de contexto.
Material de estudio Pgina: 233 de 249
Visual Basic 6.0 y SQLServer 7.0
Gase de Datos
Ser.idor
Clientes
Procesos
ulti5ilos
i/- 0-=- A'quitectura &ulti/ilos.
#dem)s! las implemetaciones en el servidor tienden a ser m)s porta&les
entre dierentes plataormas ya que no requiere de muc/os servicios del S8
local. La desventa5a es que un mal comportamiento de las aplicaciones del
usuario puede tirar todo el servidor de la &ase de datos y sus tareas.
3ncluso! los pro,ramas de usuario que tienen una duraci(n lar,a puede
consumir todos los recursos del servidor. Linalmente la pro,ramaci(n previa
de tareas orecida por el servidor tiende a ser inerior que la del S8.
La arquitectura <>b'ida consiste de tres componentes0 <; red multi/ilos
atenta a escuc/ar que participe en la conexi(n inicial de tarea al asi,nar el
cliente al despac/adorO =; despac/adores son tareas que ponen mensa5es
en una cola de mensa5es internos y entonces toma la respuesta y la env*a
de re,reso al clienteO y >; 'l servidor de procesos reusa&les y compartidos
que remueve los tra&a5os para li&erarlos de la cola! los e5ecuta y coloca la
respuesta so&re una cola de salida. La venta5a de esta arquitectura es que
orece un am&iente prote,ido para correr las tareas de usuario sin asi,nar
un proceso permanente a cada usuario. Las desventa5as son colas latentes.
'sta arquitectura es en apariencia &uena! su car,a de &alance no es tan
&uena como en un monitor FPO de /ec/o! las colas pueden estar en orma
de monitores FP teniendo sus propios al,oritmos de pro,ramaci(n de
tareas. 'l primer servidor de &ase de datos que implementa esta
arquitectura es 8racle.
Material de estudio Pgina: 234 de 249
Visual Basic 6.0 y SQLServer 7.0
Proceso Proceso
Proceso Proceso
Proceso Proceso
Clientes
Pro"rama
Escuc5a
Pool
Despac5ador
Compartido
Pool de
Proceso en
Ser.idor
Compartido
Cola
de
Solicitud
Respuesta
Gase de
Datos
Ser.idor
i/- 0-?- .rquitectura =8brida.
0-1-4 INTE!RIDAD $ TRANSACCIONES
INTE!RIDAD DE DATOS
'l t-rmino inte,ridad de datos se reiere a mantener la consistencia y
validaci(n de los datos almacenados en una &ase! el contenido de -sta puede
perderse de muc/as ormas al momento de reali+ar modiicaciones. #nte esto!
SQL cuenta con caracter*sticas que ayudan al %B$S en la tarea de preservar
la inte,ridad de los datos con el o&5eto de restrin,ir los valores creados o
insertados por actuali+aciones en la &ase! como son0
Datos 'e@+e'idos0 3mpide la existencia de valores nulos en campos
donde s(lo se permite un valor de dato v)lido.
Co*9'obaci,n de (alideA0 S(lo permite insertar valores que se
encuentren deinidos en el ran,o especiicado para el campo.
Inte/'idad de entidad0 Veriica la unicidad para claves primarias.
Inte/'idad 'efe'encial0 4omprue&a la relaci(n que para cada llave
or)nea exista una llave primaria.
Consistencia0 4ompro&aci(n de que un con5unto de sentencias ten,an
eecto en su totalidad en la &ase de datos y en caso de alla :sea por
Sot2are o por 6ard2are; nin,una de -stas sea reali+ada! a estos controles
se les denomina transacciones! que son tema de este inciso.
Re/las co*e'ciales0 La actuali+aci(n de datos pueden estar
restrin,idas por re,las esta&lecidas por las empresas. Las transacciones
que se reali+an en el mundo real est)n representadas por las
actuali+aciones a las &ases de datos. 'l %B$S puede compro&ar cada nuevo
dato introducido! ase,ur)ndose que sus valores no violan las re,las
Material de estudio Pgina: 235 de 249
Visual Basic 6.0 y SQLServer 7.0
comerciales! estos procesos pueden ser implantados en la &ase a trav-s de
los eventos llamados disparadores que se explicar)n m)s adelante.
TRANSACCIONES
SQL posi&ilita que la secuencia de actuali+aciones a una &ase de datos pueda
ser proposiciones Dtodo o nadaE mediante sus caracter*sticas de
procesamiento de transacciones.
1na transacci(n es un &loque secuencial de tra&a5o ormado por una o m)s
sentencias SQL relacionadas e interdependientes.
'l %B$S &asado en SQL comprue&a que la secuencia de sentencias entera se
eect"e ase,urando la inte,ridad de la &ase de datos. D6 todas las
sentencias son e'ecutadas con 50ito( o nin*una de las sentencias es
e'ecutadaE. 'l mane5ador tiene este compromiso incluso si el pro,rama de
aplicaci(n a&orta o se produce un allo /ard2are a mitad de la transacci(n.
# eecto de soportar las transacciones de &ase de datos! SQL utili+a las
sentencias 48$$3F y 98LLB#4P : Li,ura ?.A;.
C())3'0 Se.ala el inal con -xito de una transacci(nO inorma al %B$S que
todas las sentencias que orman la transacci(n /an sido e5ecutadas y la &ase
de datos es autoconsistente.
R(&&0%C?0 Se.ala el inal sin -xito de una transacci(n! inormando que un
usuario no desea completar -sta! ante esto! el %B$S de&e des/acer los
cam&ios reali+ados en la &ase a in de restaurar a la &ase de datos a su estado
previo al inicio de la transacci(n.
U P D A T E
C O M M T
N S E R T
D E L E T E
C O M M T
B . D .
c o n s i s t e n t e
T r a n s a c c i n
B . D .
c o n s i s t e n t e
T r a n s a c c i n
B . D .
c o n s i s t e n t e
U P D A T E
C O M M T
N S E R T
U P D A T E
C O M M T
N S E R T
D E L E T E
E l p r o g r a m a
a c a b a
C O M M T
N S E R T
E l p r o g r a m a
a b o r t a
( F a l l o d e
H a r d W a r e )
R O L L B A C K
Fi*. 1.>. <ransacciones en una base de datos utili4ando sentencias
C6&&?< " @6$$B.CA
Material de estudio Pgina: 236 de 249
Visual Basic 6.0 y SQLServer 7.0
EL MODELO DE TRANSACCI"N ANSI/ISO-
'l modelo de transacci(n SQL :que est) &asado en %B=;! est) deinido &a5o el
est)ndar #7S3/3S8! as* como la unci(n de 48$$3F y 98LLB#4P. 'l est)ndar
especiica que una transacci(n SQL comien+a autom)ticamente con la primera
sentencia SQL y contin"a en orma secuencial con las sentencias SQL
su&si,uientes /asta inali+ar de uno de los cuatro si,uientes modos0
Para *@& programado Para *@& interactivo
48$$3F inali+a la transacci(n con -xito /aciendo
los cam&ios en la &ase permanentes. Se inicia
inmediatamente una nueva transacci(n despu-s
de esa sentencia 48$$3F.
La terminaci(n de un pro,rama con -xito tam&i-n
inali+a la transacci(n correctamenteO sin em&ar,o!
puesto que el pro,rama est) inali+ado no /ay
nin,una transacci(n que comen+ar.
98LLB#4P a&orta la transacci(n! des/aciendo las
modiicaciones /ec/as a la &ase. Se inicia
inmediatamente una nueva transacci(n despu-s
de la sentencia 98LLB#4P.
La terminaci(n anormal de un pro,rama tam&i-n
a&orta la transacci(nO pero puesto que el pro,rama
est) inali+ado no /ay nin,una transacci(n que
comen+ar
0-1-B VISTAS
1na vista es una ta&la virtual ,enerada por una consulta a partir de una o
varias ta&las! en la vista! SQL permite el acceso y modiicaci(n de los datos
como si uera una ta&la real.
1na vista no existe en la &ase de datos! es la deinici(n de la vista la que se
almacena permanentemente en la &ase! al eectuar una consulta los datos
visi&les son el resultado de esta! ver i,ura ?.C
S e n t e n c i a S Q L c o n
r e e r e n c i a a u n a v i s t a
L o s r e s u l t a d o s s o n
p r e s e n t a d o s a l u s u a r i o .
S e l l e v a a c a & o l a
p e t i c i ( n e q u i v a l e n t e .
F r a d u c c i ( n d e l a p e t i c i ( n e n l a
c o n s u l t a c o n r e s p e c t o a l a s
t a & l a s u e n t e s d e l a v i s t a .
% e i n i c i ( n d e l a v i s t a
a l m a c e n a d a e n l a B . % .
Material de estudio Pgina: 237 de 249
Visual Basic 6.0 y SQLServer 7.0
Fi*. 1.B !esarrollo de una Cista en #$.
#l usar las vistas se o&tiene los si,uientes &eneicios0
Se,uridad al mostrar solo los datos autori+ados al usuario.
Simplicidad de consultas multita&la! presentadas como consultas de una
sola ta&la.
La estructurada de la B% no se altera ante las consultas
3nte,ridad de datos. 4ompro&aci(n de las restricciones de inte,ridad de
los datos introducidos a trav-s de la vista.
#l crear una vista! se de&e considerar que el %B$S de&e traducir las
consultas! con respectos a las ta&las uentes relacionadas. Para consultas
comple5as multita&la! la vista se convierte en una com&inaci(n complicada y
puede tardar muc/o tiempo en completarse. Si el usuario trata de actuali+ar la
inormaci(n en la vista! el %B$S de&e traducir la petici(n de actuali+aci(n a
las ta&las relacionadas en la vista! dado lo comple5o de este proceso este tipo
de vista son creadas de s(lo lectura.
'l est)ndar SQL #7S3/3S8! especiica las vistas que pueden ser actuali+adas!
en &ase a las consultas que las deine! las cuales de&en cumplir con las
si,uientes condiciones0
Las ilas duplicadas no de&en de ser suprimidas.
S(lo una ta&la uente relacionada en la vista puede ser actuali+adas
siempre que el usuario ten,a los privile,ios requeridos.
4ada elemento de selecci(n! de&e de ser una reerencia de columna
simple! la lista de selecci(n no puede contener expresiones! columnas
calculadas o unciones de columna
7o se puede deinir una su&consulta en la cl)usula K6'9'.
La consulta no de&e incluir B981P BT o 6#V37B
'stas restricciones se pueden resumir en el si,uiente concepto0
)Para que una vista sea actuali4able el !B& debe ser capa4 de relacionar
cualquier fila de la vista con la fila fuente. .nlo*amente( el !B& debe ser
capa4 de relacionar cada columna individual a actuali4ar con su columna
fuente.+
Si la vista satisace esta compro&aci(n es posi&le deinir operaciones 37S'9F!
%'L'F' y 1P%#F'! y tener eecto so&re los datos uente.
Fipos de Vistas0
2o'iAontales0 $uestran s(lo las ilas seleccionadas so&re una ta&la.
Ve'ticales- Permiten accesar s(lo a ciertas columnas seleccionadas de
una ta&la! cada ila de la ta&la uente est) representada en la vista.
Con s+bcon:+ntos ila/Col+*na0 Los datos visi&les son un
su&con5unto de ila/columna de una ta&la! contiene las columnas
desi,nadas y las ilas que satisacen una condici(n de &"squeda.
Material de estudio Pgina: 238 de 249
Visual Basic 6.0 y SQLServer 7.0
A/'+9adas0 #,rupaci(n de ilas relacionadas! ,enerando una ila de
resultados de consulta por cada ,rupo y sumari+ando los datos de ese
,rupo! en estas vistas se requiere muc/o tiempo de procesamiento a
eecto de mantener la ta&la virtual! no se puede actuali+ar de&ido! a que no
/ay modo de trasladar la petici(n de actuali+aci(n de la vista a las ilas de
la ta&la uente! este tipo de vistas son de s(lo lectura.
Co*9+estas0 'xtracci(n de datos de dos o m)s ta&las dierentes! en la
que cada ila es la com&inaci(n de una ila de cada ta&la uente! en estas
vistas el tiempo de procesamiento es considera&le! si la consulta lle,a a ser
demasiado comple5a! la vista se vuelve de s(lo lectura.
Se pretende que todas las vistas lle,uen a ser actuali+adas en un tiempo
m*nimo de proceso! pero esto a"n se encuentra en proceso de investi,aci(n.
0-1-0 SE!URIDAD
La se,uridad de la inormaci(n almacenada en la &ase de datos es
especialmente importante en un %B$S &asado en SQL. La implementaci(n de
un esquema de se,uridad y el reor+amiento de las restricciones de se,uridad
son responsa&ilidad del Sot2are del %B$S. 'l len,ua5e SQL deine un
panorama ,eneral para la se,uridad de la Base de %atos! y la sentencias SQL
son utili+adas para especiicar restricciones de se,uridad! el cual se &asa en
tres conceptos principales0
Los usuarios son los principales demandantes de la inormaci(n almacenada
en la Base de %atos. 4ada ve+ que el %B$S accesa a la &ase de datos! para
recuperar! insertar! suprimir o actuali+ar datos! lo /ace a cuenta de al,"n
usuario! por lo que el %B$S permitir) o pro/i&ir) la acci(n dependiendo de
qu- usuario este- eectuando la petici(n.
Los o&5etos de la &ase de datos son los elementos a los cuales se puede
aplicar la protecci(n de se,uridad. La se,uridad se aplica ,eneralmente a
ta&las y vistas! pero otros o&5etos tales como ormularios! pro,ramas de
aplicaci(n y &ases de datos enteras tam&i-n pueden ser prote,idos.
Los privile,ios son las acciones que un usuario tiene permitido eectuar
para un determinado o&5eto de la &ase de datos! por e5emplo! un usuario
puede tener permiso para recuperar o insertar datos en una ta&la
determinada! pero se le puede ne,ar el permiso de &orrar o actuali+ar
datos. # cada usuario se le pueden dar dierentes permisos para acceder a
la &ase de datos.
Para esta&lecer un esquema de se,uridad en una &ase de datos! es utili+ada
la sentencia SQL! B9#7F y 9'V8P' para ne,ar el acceso! como lo muestra el
si,uiente e5emplo0
Material de estudio Pgina: 239 de 249
Visual Basic 6.0 y SQLServer 7.0
G R A N T S E L E C T , N S E R T
O N L B R O S
T O J O S E
s e n t e n c i a S Q L
J O S E
B a s e d e
D a t o s
L

B
R
O
S
P E R M S O S D E :
C O N S U L T A R
E N S E R T A R
D A T O S
D E N T F C A D O R D E
U S U A R O
Fi*. 1.DE .cceso a -suarios a la Base de !atos.
La sentencia B9#7F especiica una com&inaci(n de un identiicador de usuario
:3%Gusuario Uos-;! un o&5eto :La ta&la Li&ros; y privile,ios concedidos para
recuperar e insertar datos. %e orma an)lo,a! se pueden ne,ar los accesos
permitidos si se cam&ia la pala&ra B9#7F por 9'V8P' en el e5emplo anterior.
# cada usuario de la &ase de datos &asada en SQL se le asi,na un 3%Gusuario!
que es un nom&re &reve que lo identiica dentro del %B$S. Fodas las
sentencias SQL e5ecutadas por el %B$S se llevan a ca&o a cuenta de un 3%G
usuario espec*ico! el %B$S! entonces! determina si el 3%Gusuario se le /an
concedido privile,ios para la sentencia que /a solicitado. 'l est)ndar SQL
#7S3/3S8 utili+a el t-rmino 3%Gautori+aci(n que! t-cnicamente es m)s
adecuado! la ra+(n de que se utilice este t-rmino! es que al,unos %B$S
utili+an el 3%Gusuario que es asi,nado para in,resar al sistema.
Los 3%Gusuarios est)n asociados con pro,ramas o ,rupos de pro,ramas! m)s
que con personas.
'n ciertas &ases de datos con recuencia existen ,rupos de usuarios con
necesidades similares. Ba5o el esquema de se,uridad de SQL #7S3/3S8! se
pueden mane5ar ,rupos de usuarios con similares necesidades de dos ormas
dierentes0
< Se puede asi,nar un 3%Gusuario "nico a todas las personas del ,rupo! esto
simpliica la administraci(n de la &ase de datos! ya que los privile,ios de
acceso a datos se asi,nan al "nico 3%Gusuario del ,rupo! pero la desventa5a
consiste en que las personas que comparten el 3%Gusuario no podr)n
distin,uirse en las visuali+aciones del operador del %B$S! ni en los inormes
del %B$S.
= Se puede asi,nar un 3%Gusuario dierente a cada persona del ,rupo! dando
la venta5a de asi,nar dierentes privile,ios de acceso a los datos a cada
usuario y distin,uirlos en los inormes producidos por el %B$S. Sin
em&ar,o! esto /ace que la administraci(n de la se,uridad de la &ase de
datos sea tediosa y propensa a errores.
Por lo tanto! el esquema de se,uridad que se eli5a! depender) particularmente
de los compromisos de cada &ase de datos y aplicaciones para lo que /ayan
sido creadas.
Las protecciones de se,uridad en el est)ndar SQL #7S3/3S8 se aplican a dos
o&5etos espec*icos! ta&las y vistas. #s* cada ta&la y vista en la &ase de datos
puede ser individualmente prote,ida. 'l acceso a una ta&la o vista puede ser
Material de estudio Pgina: 240 de 249
Visual Basic 6.0 y SQLServer 7.0
permitido para ciertos 3%Gusuarios y pro/i&ido para otros. 'l con5unto de
acciones que un usuario puede eectuar so&re un o&5eto en la &ase de datos
se denomina0 privile,ios que el usuario tiene so&re -ste.
'l est)ndar SQL #7S3/3S8 especiica cuatro privile,ios so&re los o&5etos0
<9ecuperaci(n de datos
=3nserci(n de datos
>Supresi(n de datos
?#ctuali+aci(n de datos. Posi&ilita la restricci(n de columnas espec*icas!
permitiendo actuali+aciones y desautori+ando a cualquier otra
columna.
'stos cuatro privile,ios son soportados por casi todos los productos SQL
comerciales! sin em&ar,o! la mayor*a soporta m)s de lo que el est)ndar
#7S3/3S8 /a deinido.
8tro privile,io que es importante mencionar es el de propiedad y -ste es
otor,ado al usuario al instante que crea un o&5eto :ta&la o vista; en la &ase de
datos. Quien crea un o&5eto en la &ase de datos se convierte en su propietario
y reci&e totales privile,ios so&re -ste! como son0 recuperaci(n! inserci(n!
supresi(n y actuali+aci(n de datos. Sin em&ar,o! /ay que tomar en cuenta que
para crear una vista! /ay que contar con los privile,ios de recuperaci(n de
datos y s* se tienen los dem)s privile,ios el %B$S los conceder).
#l crear un usurario un o&5eto! -ste es el "nico que puede otor,ar privile,ios a
otros usuarios para autori+ar el acceso a este o&5eto. Por lo que los privile,ios
otor,ados no podr)n ser transmitidos por quien:es; lo:s; /aya:n; reci&ido. %e
este modo! el propietario de un o&5eto mantiene un control muy estricto so&re
quien tiene permiso para autori+ar el o&5eto y so&re qu- ormas de acceso se
permiten. Sin em&ar,o! la mayor*a de los productos SQL! cuentan con
opciones de transmisi(n de privile,ios en cascada! dando mayor lexi&ilidad
del control del o&5eto al propietario.
0-1-; TRI!!ERS #DISPARADORES%
#ntes de iniciar el tema de disparadores! es necesario mencionar al,unos
conceptos.
'l est)ndar SQL #7S3/3S8 utili+a la sentencia 49'#F' F#BL' para especiicar
restricciones de unicidad en columnas o com&inaciones de columnas. Sin
em&ar,o! los valores 71LL presentan un pro&lema cuando aparecen en la
clave primaria de una ta&la o en una columna que est) especiicada en una
restricci(n de unicidad.
Por e5emplo! supon,amos que se intentase insertar una ila con una clave
primaria que uera 71LL :o parcialmente 71LL! si la clave primaria est)
compuesta por m)s de una columna;! de&ido al valor 71LL! el %B$S no puede
decidir concluyentemente si la clave primaria est) o no duplicada con
respecto a otra que ya existe. La respuesta de&e ser Dqui+)sE! dependiendo
del valor DrealE del dato que alta :71LL;.
Material de estudio Pgina: 241 de 249
Visual Basic 6.0 y SQLServer 7.0
Por esta ra+(n! SQL requiere que toda columna que orma parte de una clave
primaria y toda columna desi,nada en una restricci(n de unicidad de&e ser
declarada 78F 71LL.
SQL tam&i-n cuenta con la restricci(n de inte,ridad reerencial! la cual es una
parte esencial del modelo relacional desde que ue propuesto por el %r. 4odd!
donde se ase,ura la inte,ridad de las relaciones padre//i5o! creadas mediante
claves or)neas y claves primarias.
Los si,uientes puntos res"men los pro&lemas de actuali+aci(n a la &ase de
datos que pueden corromper la inte,ridad reerencial0
Inse'ci,n o act+aliAaci,n de +na fila #<i:oE0 4uando se inserta o
actuali+a una ila en la ta&la /i5o! su valor de clave or)nea de&e coincidir
con uno de los valores de la clave primaria en la ta&la padre.
S+9'esi,n o act+aliAaci,n de +na fila 9ad'e0 'l %B$S detecta error
si se intenta &orrar o actuali+ar una ila de la ta&la DpadreE a la cual se est)
/aciendo reerencia por otra ila de la ta&la D/i5oE.
#unque el est)ndar SQL #7S3/3S8 no proporciona en su totalidad la soluci(n de
los puntos anteriores! existen al,unos %B$S como %B=! SQL Kindo2s y
SyB#S' que incluyen el mane5o de inte,ridad reerencial m)s completo.
4itando al,unos e5emplos tenemos las si,uientes cl)usulas0
RE*'R3C'- 3mpide suprimir una ila de la ta&la padre si la ila tiene
al,una ila /i5o.
C%*C%,E- Si una ila padre es suprimida! tam&i-n son suprimidas todas
las ilas /i5o.
*E' $#&&- Si una ila padre es suprimida! los valores de la clave
or)nea en todas las ilas /i5o de&en ser actuali+adas al valor 71LL.
'l concepto de disparador se puede deinir como0 DPara cualquier evento que
provoca un cam&io en el contenido de una ta&la! se puede especiicar una
acci(n asociada al %B$S que de&e eectuarE.
Las sentencias que pueden disparar una acci(n son0
37S'9F
%'L'F'
1P%#F'
La acci(n disparada por estas cl)usulas son especiicadas mediante una
secuencia de sentencias SQL! como lo muestra el si,uiente e5emplo0
49'#F' F93BB'9 71'V8 P'%3%8
87 P'%3%8S
L89 37S'9F
#S 1P%#F' 9'PV'7F#S
S'F ventas V ventas W 3nserted.importe
Material de estudio Pgina: 242 de 249
Visual Basic 6.0 y SQLServer 7.0
L98$ 9epventas ! 3nserted
K6'9' 9epventas.numXempl V 3nserted.rep
1P%#F' Productos
S'F existencias V existencias G 3nserted.cant
L98$ Productos ! 3nserted
K6'9' Productos.idXdir V 3nserted.a&
#7% Productos.idXproducto V 3nserted.producto
8tras extensiones no mostradas en el e5emplo incluyen sentencias
3L/F6'7/'LS'! iteraciones! llamadas de procedimiento! e incluso sentencias
P937F que visuali+an mensa5es de usuario.
Los disparadores proporcionan un modo alternativo de implementar las
restricciones de inte,ridad reerencial! proporcionadas por claves or)neas y
primarias. %e /ec/o los deensores de esta caracter*stica! se.alan que el
mecanismo disparador es muc/o m)s lexi&le que la inte,ridad reerencial
proporcionada por al,unos %B$S e incluso por el est)ndar SQL #7S3/3S8.
La principal venta5a de los disparadores! es que las re,las comerciales pueden
almacenarse en las &ases de datos y ser or+adas consistentemente con cada
actuali+aci(n que ten,an. 'sto puede reducir su&stancialmente la comple5idad
de los pro,ramas de aplicaci(n que acceden a la &ase de datos. Sin em&ar,o!
al,unas desventa5as son0
Co*9le:idad de la Base de Datos0 4uando las re,las se trasladan al
interior de la &ase! prepararla! pasa a ser una tarea m)s comple5a. Los
usuarios que ra+ona&lemente pod*an esperar crear peque.as aplicaciones
propias con SQL! encontrar)n que la l(,ica del pro,rama de los
disparadores /ace la tarea muc/o m)s di*cil.
Re/las Oc+ltas0 4on las re,las ocultas dentro de la &ase de datos!
pro,ramas que parecen eectuar sencillas actuali+aciones! pueden de
/ec/o! ,enerar una enorme actividad en la &ase. 'l pro,ramador ya no
controla totalmente lo que sucede en la &ase de datos.
Los disparadores est)n ausentes del est)ndar SQL #7S3/3S8! aunque al,unos
vendedores de %B$S /an proclamado p"&licamente planes para a.adir las
caracter*sticas de los disparadores a las versiones uturas de sus productos! la
importancia utura es un poco ne&ulosa y solamente el tiempo dir) si se
convierten en parte importante del entorno SQL.
Material de estudio Pgina: 243 de 249
Visual Basic 6.0 y SQLServer 7.0
ConcIusiones
La arquitectura computacional C/S es la primera solucin en tecnologa informtica que satisface
las demandas actuales de costo-rendimiento, ofreciendo la optimizacin de las tareas existentes y
agregando nuevas funcionalidades. Es por eso que se observa una clara tendencia ha
implementar este modelo. Siendo sus ventajas, que la capacidad de cmputo est determinada
por todos los equipos interconectados con que se cuenta, agregacin de nuevas funcionalidades
y una considerable reduccin de trfico en la red, ya que las operaciones de procesamiento se
jerarquizan y la red da prioridad a las necesidades del usuario, transmitindole informacin
realmente til. Esto constituye un estimulo al uso de sistemas abiertos dado que tanto clientes
como servidores operan en diferentes plataformas de hardware y software, lo cual permite
comprar productos de diferentes proveedores sin interferir en el desempeo de las dems
aplicaciones y equipos instalados.
Las cualidades que ofrece esta arquitectura son interesantes y muy convincentes, pero esto no
significa que sea perfecta, sobre todo cuando lo que se persigue es la integracin plena de
ambientes heterogneos, por lo cual se enfrenta a :
Las diferentes capas de software de interoperabilidad (middleware) pueden afectar en la
duplicidad de tareas.
Muchas aplicaciones no son capaces de separar tareas por lo que el comportamiento en
la red ser el de una arquitectura tradicional.
Se requiere de una evaluacin y planeacin completas de la arquitectura C/S para
minimizar el trfico y evitar la saturacin del medio de comunicacin. Aspecto que una
aplicacin C/S bien diseada si prev.
Como la administracin de este ambiente es ms complicada, los procesos y
herramientas al conectar equipo pueden complicar ampliamente las labores de administracin
y control.
El personal que se requiere para dar soporte y administrar el ambiente seguramente
tendr que incrementarse. Primero porque al ser un medio abierto se requiere ms personal.
Segundo porque al tratarse de medios abiertos se requieren ms especialistas con
conocimientos en diversas tecnologas. Adems los costos de mantenimiento tambin se
elevan, pues cada versin de una aplicacin C/S se deber probar en diferentes plataformas.
Todos estos obstculos se pueden contrarrestar y quiz las grandes ventajas que ofrece un
ambiente abierto sean de mayor peso para emigrar a esta arquitectura.
Es importante recordar que la Tecnologa C/S siempre tiene que ver con redes, lo contrario sera
falso, es decir no todas las redes trabajan bajo la arquitectura C/S. Esta pequea pero importante
diferencia abre una brecha enorme en el tipo de productos o servicios que el usuario puede
adquirir para aprovechar su equipo. El conocer el verdadero significado del concepto es de
trascendental importancia para quien desea tener una solucin productiva y debe cuidar que
quien lo vende, o le asesora, realmente le ofrezca una arquitectura C/S.
Material de estudio Pgina: 244 de 249
Visual Basic 6.0 y SQLServer 7.0
.2 /omenclatura de ,b2etos
Prefijos de Controles
Tipo de ControI Prefijo Tipo de ControI Prefijo Tipo de ControI
3D Panel pnl_ Horizontal scroll bar hsb_ Picture clip
ADO Data ado_ mage img_ ProgressBar
Animated button ani_ mage combo imgcbo_ Remote Data Control
Check box chk_ mageList ils_ RichTextBox
Combo box, drop-down list box cbo_ Label lbl_ Shape
Command button cmd_ Lightweight check box lwchk_ Slider
Common dialog dlg_ Lightweight combo box lwcbo_ Spin
Communications com_ Lightweight command button lwcmd_ StatusBar
Control (usado para objetos
genricos)
ctr_ Lightweight frame lwfra_ Sysnfo
Data dat_ Lightweight horizontal scroll bar lwhsb_ TabStrip
Data-bound combo box dbcbo_ Lightweight list box lwlst_ Text box
Data-bound grid dbgrd_ Lightweight option button lwopt_ Timer
Data-bound list box dblst_ Lightweight text box lwtxt_ Toolbar
Data combo dbc_ Lightweight vertical scroll bar lwvsb_ TreeView
Data grid dgd_ Line lin_ UpDown
Data list dbl_ List box lst_ Vertical scroll bar
Data repeater drp_ ListView lvw_ Graph
Date picker dtp_ MAP message mpm_ Grid
Directory list box dir_ MAP session mps_ Hierarchical flexgrid
Drive list box drv_ MC mci_ OLE container
File list box fil_ Menu mnu_ Option button
Flat scroll bar fsb_ Month view mvw_ Picture box
Form frm_ MS Chart mch_ Remote Data Objects
Frame fra_ MS Flex grid mfg_ Data Acces Objects
Gauge gau_ MS Tab mst_ ActiveX Data Objects
Material de estudio Pgina: 245 de 249
Visual Basic 6.0 y SQLServer 7.0
Prefijos para Mens
Secuencia de Men EjempIo de Men
Archivo mnu_Archivo
Archivo Abrir mnu_ArchivoAbrir
Archivo envar correo mnu_ArchivoCorreo
Archivo envar fax mnu_ArchivoFax
Formato carcater mnu_FormatoCaracter
Ayuda mnu_Ayuda
4o$)res de Pre,i'os para otros Controles
Para otros controles no listados, se debern estandarizar utilizando slo letras minsculas y el
guin bajo. Procurando slo utilizar tres letras en los casos que el nombre sea descriptivo.
Material de estudio Pgina: 246 de 249
Visual Basic 6.0 y SQLServer 7.0
.+ Con#enciones de nombres de #ariables para Visual Basic
Los nombres de variables estarn determinados por el mbito de la variable y el tipo.
1. Ambito de la variable.
Bmbito Prefijo
Global g
Modular m
Local I
Parmetro p
2. Tipos de datos.
Tipo de dato Prefijo B$tes Rango EjempIo
Boolean bln 2 True o $alse blnExiste
Byte byt 1 0 255 bytColor
Collection object col - - colForma
Currency cur N
-922,337,203,685,477.5808 a
922,337,203,685,477.5807
curPago
Date (Time) dtm 8 01/01/100 a 31/12/9999. dtmNacimiento
Double (Precisin
de punto flotante)
dbl N
Para valores negativos:
-1.79769313486232E308 a
-4.94065645841247E-324
Para valores positivos:
4.94065645841247E-324 a
1.79769313486232E308
dblArea
Decimal dec 14
Sin punto decimal
+/-79,228,162,514,264,337,593,543,950,335
El valor ms pequeo es:
+/-0.0000000000000000000000000001
decPB
Error err - - errNumero
nteger int 2 -32,768 a 32,767 intCantidad
Long (nteger) lng 4 -2,147,483,648 a 2,147,483,647 lngDistancia
Object obj 4 Cualquier referencia a un objeto objActual
Single (Precisin
de punto flotante)
sng 4
Para valores negativos:
-3.402823E38 a -1.401298E-45
Para valores positivos:
1.401298E-45 to 3.402823E38
sngPromedio
String (Longitud
variable)
str
10 +
longitud
de la
cadena
0 a 2 billones
strApellido
String (Longitud
fija)
str
longitud
de la
cadena 1 a 65,400
strApellido
Tipo definido por
el usuario
udt
- Dependiendo del tipo de dato asignado
udtEmpleado
Variant vnt 16 Dependiendo del tipo de dato asignado vntSuma
Material de estudio Pgina: 247 de 249
Visual Basic 6.0 y SQLServer 7.0
3. Forzar que Visual Basic verifique la declaracin de Variables
Declarar todas las variables reduce el tiempo de programacin y los errores causados por
incompatibilidad de tipos.
VB permite utilizar variables sin que previamente hallan sido declaradas. Para forzar que VB
detecte las variables que no hallan sido declaradas realice lo siguiente.
i. Seleccione la opcin del men : TooIs\Options...
ii. Se despliega un dialogo con distintas pestaas.
iii. Seleccione la pestaa de : Editor
iv. Marque la casilla de "Require VariabIe DecIaration
Esto for@ar2 a 1ue VG detecte las .aria#les 1ue no 5allan sido declaradas en toda la aplicacin0
4. Creacin de nombres de Variables
El nombre de una variable debe ser descriptivo, para formar el nombre siga los siguientes pasos:
i. Primera Ietra : Determine el mbito de la variable (global, modular o
local).
ii. Siguientes Ietras minscuIas : Determine el tipo de la variable.
iii. Primera Ietra mayscuIa : nicio del nombre de la variable.
iv. Siguientes Ietras minscuIas : Complemente el nombre de la variable.
EjempIo : ldtmNacimento Donde
l = Ambito de lavariable local.
dtm = Tipo datetime.
Nacimiento = Nombre de la variable.
EjempIo : gstrLogin Donde
" O Am#ito de la .aria#le "lo#al
str = Tipo string (cadena)
Login = Nombre de la variable.
Notas: Los tipos definidos por el usuario debern ajustarse a las nomenclaturas antes
mencionadas.

5. Definicin de constantes
i. El nombre debe comenzar con el prefijo: CTE_
ii. El nombre estar en maysculas.
iii. El nombre deber ser descriptivo y podr contener guin bajo "_.
iv. Ejemplo: CTE_ARREGLO_NDCEMAXMO = 32532
P0 Definicin de arre"los
i. El nombre debe comenzar con el ambito de la variable: g,m,I o p
ii. Prefijo de la variable: arr
iii. Aplicar la nomenclatura de tipos de datos para el arreglo.
iv. Nombre de la variable del arreglo (primera letra con mayscula)
v. Ejemplo: marrblnPreguntas ;
m = Ambito de la variable modular.
arr = Arreglo.
bln = Tipo del arreglo boleano
Preguntas = Nombre de la variable.
Los tipos de datos definidos como arreglos requieren 20 bytes de memoria ms 4 bytes por
cada dimensin del arreglo, ms los bytes ocupados por el tipo de dato mismo.
7. Nomenclatura de parmetros.
Material de estudio Pgina: 248 de 249
Visual Basic 6.0 y SQLServer 7.0
Los parmetros debern iniciar con el prefijo p y la composicin del nombre de la variable
deber ajustarse a la nomenclatura de tipos de datos.
Material de estudio Pgina: 249 de 249

También podría gustarte