Lenguaje Pascal
Lenguaje Pascal
l ambiente delphi y sus librerías son basados en el lenguaje de programación Borland Object Pascal, que es
una extensión del lenguaje Pascal. Esta unidad abarca todos los temas para conocer en su base el lenguaje
Borland Object Pascal y está enfocado a desarrolladores que no conozca el lenguaje. En el próximo curso esta
parte será complementada en sección más avanzada. Al finalizar el curso el desarrollador habrá aprendido las
principales palabras reservadas del lenguaje, así como el manejo de los ciclos y conocimientos de tipos de
datos predeterminados. En fin el desarrollador tendrá la capacidad de crear procedimientos y funciones
adecuadamente con el uso de los elementos adquiridos en la unidad.
Palabras reservadas
Esto es una lista de palabras reservadas y estas no pueden redefinirse o ser usadas como identificadores:
1
do downto else end
if implementation in inherited
not object of or
xor
En adición a las palabras arriba, private, protected, public, published, y automated actúan como palabras
reservadas dentro las declaraciones de tipos de objetos, pero en otra forma son tratadas como directrices.
También las palabras at y on tienen significados especiales.
En el nivel más simple, un programa es una secuencia de tokens delimitados por separators. Un token es la
parte textual más pequeña con significado en un programa. Un separator puede ser un espacio o un
comentario. Estrictamente hablando, no es necesario que siempre se coloque un separator entre dos tokens;
por ejemplo, el siguiente fragmento:
Size:=20;Price:=10;
Size := 20;
Price := 10;
Los Tokens son categorizados como símbolos especiales, identificadores, palabras reservadas, directrices,
números, etiquetas y cadenas de caracteres. Un separator puede ser parte de un token solo si el token es parte
de una cadena de caracteres. Al lado de un identificador, palabra reservada, numero, y etiqueta debe existir
uno o más separators entre ellos.
2
Símbolos especiales
Los símbolos especiales son caracteres no alfabéticos, o pares de estos caracteres, que tienen significados
fijos. Los siguientes caracteres son símbolos especiales:
#$&'()*+,−./:;<=>@[]^{}
Los comentarios son ignorados por el compilador, excepto cuando su función es de separadores delimitando
tokens adyacentes o directrices de compilación. Existen muchas directrices de compilación:
{$WARNINGS OFF}
Operadores aritméticos
Los operadores aritméticos, que operan con enteros o reales, incluye +, −, *, /, div, y mod.
Operadores Boléanos
Los operadores Boléanos not, and, or, and xor toman como operadores tipos boléanos y retorna tipos
boléanos.
3
Operador Operación Tipos Operadores Tipo resultado Ejemplo
Estas operaciones son gobernadas por reglas estándar de lógica boleana. Por ejemplo, la expresión de la forma
X y Y es verdadera si y solo si ambas X y Y son verdaderas(True).
Cuando se declara un procedimiento o una función se especifica el nombre, el número y el tipo de los
parámetros, y , en el caso de una función el tipo que retorna; esta parte es llamada Encabezado. Luego se
escribe el bloque de código que se desea que ejecute siempre que se ejecute el procedimiento o función; esta
parte es llamada cuerpo o bloque.
El procedimiento estándar Exit puede ser llamado en el cuerpo de un procedimiento o de una función. Exit
para la ejecución de la rutina cuando ocurre e inmediatamente pasa el control al programa devuelta al punto
donde la rutina fue llamada.
DeclaracionesLocales;
begin
Comandos;
End;
var
V: Integer;
begin
V := Abs(N);
4
S := '';
repeat
V := V div 10;
until V = 0;
end;
DeclaracionesLocales;
begin
Comandos;
End;
Donde el NombreFuncion es cualquier identificador valido, TipoRetorno es cualquier tipo de datos, comandos
es una secuencia de comandos que se ejecuta cuando el procedimiento es llamado, y (ListaParametro),
directrices;, y DeclaracionesLocales; son opcionales. El nombre de la función dentro del bloque de la misma
actúa como variable para devolver el valor de la función así como la variable Result.
var
V: Integer;
S: String;
begin
V := Abs(N);
S := '';
repeat
V := V div 10;
5
until V = 0;
Result := S;
end;
Ciclos
Los ciclos permiten que se ejecute una secuencia de comandos repetidamente, usando una condición control o
una variable para determinar cuando la ejecución debe parar. Object Pascal tiene tres tipos de ciclos.
Comando Repeat, Comando While, y comando For.
Se puede usar los procedimientos estándares Break y Continue para controlar el flujo de la repetición, para los
comandos While, o For. Break termina el comando en el que se llama, mientras que Continue inicia
ejecutando la siguiente iteración de la secuencia.
Donde expresión devuelve un valor boleano. El ultimo punto y coma antes del until es opcional. El comando
repeat ejecuta continuamente las iteraciones hasta que se cumpla la condición de la expresión y evalúa al
final. La secuencia se ejecuta al menos una vez ya que la evaluación no se realiza al inicio sino al final.
Ejemplo
repeat
K := I mod J;
I := J;
J := K;
until J = 0;
repeat
Readln(I);
El comando While es similar al comando repeat, excepto que la condición control es evaluada antes de la
primera ejecución de la secuencia de comandos. Si inicialmente, la condición es falsa, la secuencia de
comandos no se ejecutara. La sintaxis para un comando while es:
6
Donde expresión retorna un valor boleano y comando puede ser una secuencia compuesta de comandos. El
comando while ejecuta continuamente el bloque de comando, probando antes de ejecutar cada iteración.
Mientras la sentencia sea verdadera se estará ejecutando la iteración.
Ejemplo:
while I > 0 do
begin
if Odd(I) then Z := Z * X;
I := I div 2;
X := Sqr(X);
end;
begin
Readln(InputFile, Line);
Process(Line);
end;
El comando For, a diferencia de los comandos repeat y while, requiere que se especifique explícitamente el
numero de veces que se desea repetir el ciclo. La sintaxis es la siguiente:
donde
El comando for asigna el ValorInicial al contador, luego ejecuta el comando repetidamente, incrementando o
disminuyendo el valor de contador en cada iteración. Cuando contador retorna el mismo valor que
ValorFinal, el comando es ejecutado una vez mas y el comando For termina.
Ejemplos:
for I := 2 to 63 do
7
if Data[I] > Max then
Max := Data[I];
ListBox1.Items[I] := UpperCase(ListBox1.Items[I]);
for I := 1 to 10 do
for J := 1 to 10 do
begin
X := 0;
for K := 1 to 10 do
Mat[I, J] := X;
end;
Tipo de Datos
simple
− ordinal
− integer
− character
− Boolean
− enumerated
− subrange
− real
string
structured
− set
8
− array
− record
− file
− class
− class reference
− interface
pointer
procedural
variant
Un tipo de dato entero representa un subconjunto de todos los números. Los tipos enteros genéricos son
Integer y Cardinal; use esto cuando sea posible, ya que resulta que estos son los más entendibles para el CPU
y el sistema operativo. En la siguiente tabla se presenta sus rangos y los formatos para guardar por el
compilador de 32 Bits.
Existen otros tipos de enteros fundamentales con son: Shortint, Smallint, Longint, Int64, Byte, Word, y
Longword.
El tipo de dato real define un conjunto de números que puede ser representado con notación de punto flotante.
La siguiente tabla presenta los rangos y los formatos de almacenados para los tipos fundamentales de reales:
9
Real48 2.9 x 10^−39 .. 1.7 x 10^38 11−12 6
n una herramienta de desarrollo visual como Delphi, el rol del ambiente es definitivamente importante, y a
veces más importante que el lenguaje de programación en sí. En esta unidad se presentan los diferentes
componentes del ambiente Delphi. El desarrollador podrá reconocer y utilizar los componentes visuales más
importantes del ambiente de desarrollo de Delphi, y esto le dará la facilidad y la confianza para crear
aplicaciones rápidamente.
ToolBars de Delphi
Los toolbars en el IDE proveen accesos rápidos a comandos de menú. Los comandos son organizados en
diferentes toolbars, que pueden ser independientemente reposicionados o sacadas como ventanas flotantes
arrastrándolos con el mouse.
Se puede desplegar o remover los toolbars a través de View|Toolbars o haciendo click derecho en cualquiera
de los toolbars y marcando o desmarcando los nombres de los toolbar.
◊ Standard
◊ View
◊ Debug
◊ Custom
◊ ComponentPalette
◊ Desktops
Los toolbars tiene Help Hints. Para habilitar los Help Hints, seleccione Show Hints desde las pagina Options
del dialogo Customize Toolbar. Cuando los Help Hints están habilitados, se puede posicionarse en cualquiera
de los botones para ver para que se utilice.
Standard
10
Botón Significado
New Abre el dialogo de New Items.
Despliega el dialogo de abrir archivo. El botón Open tiene un menú
Open desplegable hacia abajo que le permite elegir entre los proyectos abiertos
más recientes.
Le permite guardar todos los cambios a todos los archivos del proyecto
Save abierto usando el nombre actual de cada archivo. Esto es lo mismo que
seleccionar File|Save desde el menú.
Permite guardar todos los archivos abiertos, incluyendo el proyecto actual
Save All y sus módulos. Esto es lo mismo que seleccionar File|Save All desde el
menú.
Permite abrir un proyecto existente. Esto es lo mismo que seleccionar
Open Project
File|OpenProject desde el menú.
Add file to project Abre el dialogo Add to Project.
Remove file from project Abre el dialogo Remove from Project.
View toolbar
Botón Significado
View Unit Abre el dialogo View Unit.
View Form Abre el dialogo View Form.
Toggle Form/Unit Cambia de ventana entre el form y la unidad correspondiente.
Crea y agrega un form en blanco al proyecto actual. Esto es lo mismo que
New Form
elegir File| New Form desde el menú.
Object Inspector
El Object Inspector es la conexión entre la apariencia visual de las aplicaciones y el código que hace la
aplicación correr.
El seleccionador de objetos en la parte superior del Object Inspector en una lista desplegable hacia abajo que
contiene todos los componentes del form activo y también despliega el tipo del componente seleccionado.
Esto permite desplegar rápidamente propiedades y eventos para diferentes componentes en el form actual. Se
puede cambiar el tamaño de las columnas del Object Inspector arrastrando la línea separadora a una nueva
posición.
11
◊ Propiedades
◊ Eventos
TApplication, Tscreen y TForm son clases VCL que forman la base de toda aplicación Delphi controlando el
comportamiento del proyecto. La clase TApplication forma la base de las aplicaciones Windows proveyendo
propiedades y métodos que encapsulen el comportamiento de un programa Windows. TScreen es usado en
tiempo de ejecución para mantener monitorizado los forms y los módulos de datos que han sido cargados a
memoria, así como, información especifica del sistema tal como la resolución de la pantalla y que fuentes
están disponibles para desplegar. Instancias de la clase TForm son creados para generar la interface de usuario
de las aplicaciones. Las ventanas y los diálogos son basados en TForm.
Componente Form
Los forms son la base de toda aplicación Delphi. El form es un componente. Se colocan otros componentes en
área conformada por el form para construir interface de aplicaciones.
Se desarrolla la aplicación personalizando el form principal, y agregando y personalizando forms para otras
interfaces. Se personalizan los form agregando componentes y cambiando sus propiedades.
Los forms son ventanas, y por esto por defecto incluyen cierta funcionalidad estándar de ventanas como:
• Control de menú
• Botones Minimizar y Maximizar
• Barra de titulo
• Bordes para cambiar tamaño
Estas características, pueden ser cambiadas en modo diseño así como cualquier propiedad a través del Object
Inspector.
Una aplicación usualmente contiene múltiples forms: Un form principal, que es la interface primaria del
usuario, y otros forms como ventana de diálogos, ventanas secundarias, y así sucesivamente. Se puede iniciar
del diseño del form desde uno de las planillas que provee Delphi de forms. Se puede guardar cualquier form
que se diseñe como una planilla para rehusarla en otros proyectos.
◊ Para hacer que una ventana se mantenga encima de las demás ventanas abiertas en
tiempo de corrida configure la propiedad FormStyle a fsStayOnTop.
12
◊ Para quitar los scrollbars por defecto de los forms, cambie el valor de las propiedades
HorzScrollBar y VertScrollBar.
◊ Para cambiar los estilos de los bordes, utilice las propiedades BorderIcons y
BorderStyle. (Los resultados son visible en tiempo de corrida.)
◊ Para cambiar el icono para el form minimizado, use la propiedad Icon.
◊ Para especificar la posición inicial de un form en la aplicación Windows, use la
propiedad Position.
◊ Para especificar el estado inicial del form, (e.g., minimizado, maximizado o normal)
use la propiedad WindowState.
◊ Para definir el área de trabajo del form en tiempo de corrida, use las propiedades
ClientHeight y ClientWidth.
◊ Para especificar cual control tenga el foco inicial de la forma en tiempo de corrida,
use la propiedad ActiveControl.
◊ Para pasar todos los eventos del teclado al form, en vez del control seleccionado, use
la propiedad KeyPreview.
◊ Para especificar un menú particular, si el form contiene mas de un menú, use la
propiedad Menú.
Muchas veces no se desea que la aplicación cargue a memoria todos los forms al mismo tiempo. Para reducir
la cantidad de memoria requerida en el momento de la carga de la aplicación, es posible que se desee crear
algunos forms solo cuando se necesiten. Por ejemplo, un dialogo necesita estar en memoria solo durante el
tiempo el usuario interactúa con él.
Esto remueve la invocación del form al inicio. Como una alternativa, se puede remover manualmente la línea
del fuente del proyecto:
Application.CreateForm(TResultsForm, ResultsForm);
• Invocar el form cuando se necesite usando el método Show del form, si el form no es modal, o el método
ShowModal, si el form es modal.
Un manejador de evento para el form principal debe crear una instancia del form resultado y destruirla. Una
forma de invocar el form resultado es usar una variable global como se presenta.
begin
ResultsForm:=TResultForm.Create(self)
ResultsForm.ShowModal;
ResultsForm.Free;
end;
El manejador de evento en el ejemplo borra el form después de ser cerrado, así que el form debe ser recreado
13
si se desea usar en otro lado de la aplicación.
asta este punto ha sido introducido al ambiente Delphi y ha visto superficialmente el lenguaje Object Pascal,
con esto podemos pasar a ver el uso de los componentes en Delphi. Delphi se trata de esto precisamente.
Programación Visual usando componentes es la característica principal del ambiente de desarrollo.
Delphi viene con un numero detallado de componentes listo para usar. El objetivo de esta unidad es de
mostrar como utilizar los principales componentes de las principales barras.
Introducción
Todos los componentes de Delphi derivan de la clase TComponent por esta razón todos los componentes
heredan las propiedades públicas (published) Name y Tag. A través de la propiedad Name se puede accesar las
propiedades y métodos del objeto. La propiedad Tag es una propiedad Integer para uso en cualquier propósito.
Los componentes visibles derivan de las clases TGraphicControl, para aquellos que no usan manejadores de
ventanas, o TWinControl, para aquellos que poseen manejadores de ventanas. Estas dos clases derivan
directamente de la clase base TControl por esta razón todos los componentes visibles poseen algunas
propiedades y métodos comunes tales como: cursor, height, hint, left, top, width, action, show, hide, showhint,
refresh, visible, entre otros...
Nota: No se preocupe si no entiende a cabalidad los párrafos anteriores, ya que en el próximo curso se tocarán
temas donde muchos de estos términos serán debidamente definidos.
14
Componentes Standard
Los componentes de la página de Standard de la paleta de Componentes forma los elementos de Controles de
Windows para la aplicación:
15
para abrir el diseñador de menú.
Crea un menú popup que aparece cuando el usuario hace click derecho. Para
PopupMenu accesar los eventos de los ítem en un menú popup, agregue el componente a un
form y haga doble click para abrir el diseñador de menú.
Despliega un texto que el usuario no puede seleccionar o manipular, como un
Label
titulo de una caja de edición.
Despliega una área para editar donde el usuario puede entrar y modificar una
Edit
línea de texto. El Edit es uno de algunos controles de Texto.
Despliega una área para editar donde el usuario puede entrar y modificar
Memo
múltiples líneas de datos.
Button Crea un botón para presionar que el usuario utiliza para iniciar acciones.
Presenta una opción que el usuario puede cambiar entre Si/No o Falso/Verdadero.
Use los check boxes para desplegar un grupo de opciones que no sean
CheckBox
mutuamente exclusivas. Los usuarios puede seleccionar mas de una opción a la
vez.
Presenta una opción que el usuario puede cambiar entre Si/No o Falso/Verdadero.
RadioButton Use los radio buttons para desplegar un grupo de opciones mutuamente
exclusivas. Los usuarios solo podrán seleccionar una opción.
ListBox Despliega una lista de opciones con scroll.
Despliega una lista de opciones en una combinación de list box y Edit Box. Los
ComboBox
usuarios pueden entrar datos en el edit box o seleccionar un ítem del list box.
GroupBox Provee un contenedor para agrupar opciones relacionadas en un form.
RadioGroup Crea una caja de grupo que contiene radio buttons en un form.
Crea paneles que pueden contener otros componentes en un form. Se puede usar
Panel
paneles para crear toolbars y líneas de status.
ActionList Crea una colección de acciones que centraliza las acciones de la aplicación.
Componentes Additional
Los componentes en la pagina Additional de la paleta de Componentes hace los elementos especializados de
una aplicación Windows:
Componentes Win32
Los componentes de la pagina Win32 provee acceso a los controles comunes de la interface de usuario de
Windows 32−bit a las aplicaciones.
16
Similar a los divisores de un gabinete de archivos o de un cuaderno, este
TabControl
componente provee un conjunto de tabs para dividir.
Un conjunto de paginas que hace un dialogo multipaginas. Use este control
PageControl para definir múltiples paginas lógicas o secciones de información dentro de la
misma ventana.
Esto es una colección de imágenes del mismo tamaño, cada cual puede ser
referenciado por su índice (Index). Las listas de imágenes son usadas para
manejar eficientemente los conjuntos grandes de iconos y bitmaps. Todas las
imágenes en un listado de imágenes son contenidas en un simple y gran
ImageList bitmap en un formato de dispositivo de pantalla. Un image list también
incluye bitmaps monocromáticos que contengan mascaras usadas para
dibujar imágenes transparentemente. Para crear un listado de imágenes,
agregue el componente ImageList al form y haga doble click para desplegar
el editor de Listado de Imágenes.
Una barra rectangular que llena de izquierda a derecha, similar a la que se
presenta cuando se copia archivos en el explorador de Windows. Use este
ProgressBar
control para proveer información acerca el progreso de una operación larga o
procesos en background.
Un control de Windows de animación que silenciosamente despliega un
Animate Audio Video Interleaved (AVI), una serie de cortes de bitmaps como un
película.
Despliega un list box para entrada de fechas u horas. Los usuarios pueden
seleccionar del calendario o seleccionar fechas y horas con las flechas de
DateTimePicker Arriba y Abajo o escribiéndolo. Se debe tener la ultima versión del
COMCTL32.DLL, usualmente se localiza en el directorio Windows\System
o en el directorio Windows\System32.
StatusBar Área para desplegar el estado de las acciones en el fondo de la pantalla.
Maneja botones de herramientas y otros controles, ordenándolos en fila y
ToolBar
automáticamente ajustando sus tamaños y posiciones.
A continuación crearemos una aplicación utilizando los componentes Button, Edit, Label, CheckBox y
Radiogroup.
• Primero, se crea un nuevo proyecto, haga click en el menú File | New Application.
• Segundo, colocaremos los componentes como se muestran:
17
• Tercero, asignaremos las propiedades que como se muestra:
• Cuarto, haremos doble click en el botón para asignar su evente OnClick como se muestra:
var
begin
FS := [];
if CheckBox1.Checked Then
//conjunto
if CheckBox2.Checked Then
Include(FS,fsItalic);
Edit1.Font.Style := FS;
Case RadioGroup1.ItemIndex of
0: Edit1.Color := clWhite;
1: Edit1.Color := clBlue;
2: Edit1.Color := clYellow;
3: Edit1.Color := clRed;
end;
end;
18
Ejemplo Componentes Additional:
A continuación crearemos una aplicación utilizando los componentes Image, BitBtn y SpeedButton.
• Primero, se crea un nuevo proyecto, haga click en el menú File | New Application.
• Segundo, colocaremos los componentes como se muestran:
begin
end;
• SpeedButton2
begin
end;
19
• Quinto, corra la aplicación. Al hacer click en el botón Stretch podemos darnos cuenta que la imagen
toma el tamaño del recuadro. Cuando se presiona el botón Center se pude notar que la imagen es
centralizada en el recuadro, esto lo podremos notar si no se encuentra Stretch.
A continuación crearemos una aplicación utilizando los componentes ProgressBar, StatusBar, PageControl,
Animate, MonthCalendar, ImageList y ToolBar.
• Primero, se crea un nuevo proyecto, haga click en el menú File | New Application.
• Segundo, se colocan los componentes en el formulario se se les asigna las propiedades:
• ImageList1 haga doble click en el componente para agregar las imagenes que serán utilizadas. (Las
imagenes seleccionadas en el ejemplo fueron tomadas del Program Files\Common Files\Borland
Shared\Images\Buttons\ )
ToolButton1
begin
PageControl1.ActivePage := TabSheet1;
end;
ToolButton2
begin
PageControl1.ActivePage := TabSheet2;
20
end;
ToolButton3
begin
PageControl1.ActivePage := TabSheet3;
end;
begin
StatusBar1.SimpleText := PageControl1.ActivePage.Caption;
end;
Haga click derecho en el pagecontrol para crear tres tabsheet en la opción New Page. A en el primer
sheet asgigne su propiedad Caption=Calendario y coloque el componente Month Calendar1. En el
segundo tab asigne su propiedad Caption=Animación y coloque el componente Animate1 y asigne su
propiedad CommonAvi= aviCopyFiles y su propiedad Active=True. El tercer tab asigne su propiedad
Caption=Barra Progreso y coloque el componente ProgressBar1 asigne su propiedad Max=10000 y
Step=1. Además coloque un Button1 y asigne su propiedad Caption=Activa y haga doble click en él
para programar su evento OnClick.
begin
progressbar1.Position := 0;
progressbar1.StepIt;
end;
21
E
l soporte para desarrollo de aplicaciones para base de datos en Delphi es una de la principales
características del ambiente de programación. Muchos programadores gastan la mayor parte de su
tiempo desarrollando código para acceso a base de datos, que debe ser la porción mas robusta de la
aplicación. En esta unidad se presenta una introducción de extenso soporte para desarrollo de
aplicaciones para base de datos.
Lo que no se cubre en esta sección es una discusión sobre la teoría del diseño de base de datos. Se
asume que usted ya conoce los fundamentos del diseño de base de datos y ya ha diseñado la estructura
de alguna base de datos.
Introducción al BDE
Borland Database Engine (BDE) es un software de 32 bits basado en Windows que es el corazón del
manejo de Base de Datos y el encargado de las conexión a la misma detrás de los productos Borland,
así como en Paradox para Windows y Visual dBase para Windows.
El BDE ofrece un conjunto de características robustas para asistir los desarrolladores de aplicaciones
Cliente−Servidor.
22
Acerca de Base de Datos y Tablas en Delphi
En general, podemos utilizar el termino base de datos cono una colección de tablas. ¿Pero que es
exactamente una tabla?
Una tabla en un base de datos puede ser comparada con un archivo de registros en pascal . Una tabla
tiene registros o filas, y un numero determinado de columnas, una para cada campo del registro.
Una vez se tenga un tabla de base de datos, uested puede realizar un numero determindado de
acciones, como editar valores, insertar registros, y borrar registros existentes.
Delphi incluye un numero de componetntes relativos a Base de Datos .La paleta de componentes Data
Access contiene componentes usados para interactuar con las base de datos. La mayoría de ellos son
componnetes no visuales, ya que ellos encapsulan connexiones de base de datos, tablas, queries, y
elementos similares. Delphi tambien provee un numero predefinido de componentes usted puede
utilizar para visualizar y editar los datos. En la paleta de componentes Data Controls, estan los
componentes visibles usados para visualizar y editar los datos en un Form. Estos controles son
llamados controles data−aware.
La manera más simple de especificar acceso a los datos en Delphi es usando el componente Table. Un
objeto Table simplemente se refiere a una tabla de la base de datos. Cuando usted use un componente
Table, usted necesita indicar el nombre de la base de datos que usted quiere utilizar en la propiedad
DatabaseName. Puede poner un alias o un path de un directory donde se encuentre los archivos de
datos. El Object Inspector lista los nombres disponibles, que dependen de los alias definidos e
23
instalados en el BDE.
Ademas debe especificar la propiedad TableName. El Object inspector listará todas las tablas
disponibles en la base de datos actual o el directorio, por ende debe asignar un valor a la propiedad
DatabaseName primero y luego la propiedad TableName.
Otro componente de acceso a datos en Delphi es el componente Query. Un query es usualmente más
complejo que un Table, poque requiere un comando del lenguaje SQL. El componente Query tiene la
propiedad DatabaseName como el componente Table, pero no tiene una propiedad TableName. La
tabla es indicada en el comando SQL, guardado en la propiedad SQL
donde .customers es el nombre de la tabla, y el asterisco (*) indica que cuanda se quiere usar todos los
campos de la tabla. Si posee buenos conocimientos de SQL, usted podría usar un componente query
más a menudo, pero la eficiencia de la tabla o el query depende de la base de datos que se utilice. El
componente Table tiende a ser más rápido en base de datos locales, mientras que el componente
Query tiende a ser más rápido en los servidores SQL, además esto no es siempre el caso.
En un dataset se pueden realizar un numero de operaciones para manejo de los datos, entre ellos:
Cuando usted opera los datos con cada uno de estos tres componentes, se puede trabajar con
diferentes estados que son especificados por la propiedad State, que puede tomar diferentes valores:
♦ dsBrowse indica que el conjunto de datos en modo normal, y es utilizado para ver y revisar
los datos.
♦ dsEdit indica que el conjunto de datos esta en estado de edicción. Estos componetes entran en
modo de edicción cuando el programa llama su método Edit o el componente Datasource
24
tiene su propiedad AutoEdit con valor true, y el usario inicia una edicción en un componente
data−aware. Como DBGrid o DBEdit. Cuando el registro editado es guardado, el conjuto de
datos sale del estado dsEdit.
♦ dsInsert indica cuando un registro nueva está siendo agregado al conjunto de datos. Esto
puede suceder cuando se llama el método Insert del componente.
♦ dsInactive es el estado de un conjunto de datos cerrado.
♦ dsSetKey indica cuando se está preparando una busqueda en el conjunto de datos. Este es el
estado entre la llamada SetKey y la llamada a Gotokey or GotoNearst.
♦ dsFilter es el estado del conjunto de datos mientras se asigna un filtro; esto es, durante la
llamada al evento OnFilterRecord.
♦ Además tenemos los estados dsCalcFields, dsNewValue, dsOldValue y ds CurValue.
Componentes Data Access
Los componentes en la pagina de Data Access de la paleta de Componentes permite conectarse a base
de datos usando el Borland Database Engine (BDE):
Tablero que permite ver y editar los datos tabularmente similar a un hoja
DBGrid
electrónica.
Botones de navegación que permite mover el puntero del registro actual
hacia delante y hacia atrás. El navegador puede poner la tabla en estados
DBNavigator
de Insert, Edit o Browse, guardar o modificar registros y tomar datos
actualizados para actualizar el despliegue.
DBText Etiqueta que despliega el valor de un campo en el registro actual.
DBEdit Caja de edición que despliega o edita un campo en el registro actual.
25
DBRadioGroup Grupo de botones radio que despliega o guarda valores de columna.
♦ Primero, se crea un nuevo proyecto, haga click en el menú File | New Application.
♦ Segundo, colocaremos los componentes como se muestran:
begin
if Table1.Bof Then
lPos.Caption := 'Inicio'
lPos.Caption := 'Fin'
else
26
lPos.Caption := 'Entre el inicio y el fin';
end;
• bPrimero (OnClick)
begin
Table1.First;
end;
• bAnterior (OnClick)
begin
Table1.Prior;
end;
• bSiguiente (OnClick)
begin
Table1.Next;
end;
• bUltimo (OnClick)
begin
Table1.Last;
end;
27
TDatasource
Un componente TDatasource fue utilizado en el ejemplo anterior. TDatasource es la vía para abilitar
la conexion entre un componente Data Acces como TTable y un componente Data Control como el
TDBEdit o el TDBGrid que utilizamos en el ejemplo anterior. El TDatasource tiene unas cuantas
propiedades y eventos que hacen la vida del programador mas simple cuando se manipulan datos.
La propiedad State del TDatasource nos dice el estado actual del dataset. El evento OnStateChange se
dispara cuando el valor de esta propiedad cambia.
El evento OnDataChange es ejecutado cuando el dataset se activa o el dataset informa que los datos
han cambiado en algo.
El evento OnUpdateData ocurre cuando un registro es insertado o actualizado. Puede responder a este
evento siempre que necesite dar seguimiento a algunos de los datos en su aplicación.
Los módulos de datos le permite tener todas las reglas de base de datos y relaciones de forma
centralizadas para ser compartida a los diferentes proyectos, grupos y entidades de la corporación. Los
módulos de datos están encapsulados en el componente TDataModule del VCL. Piense en un
TDataModule como un Form invisible donde puede colocar los componentes Data Access que se
utilizarán en el proyecto. Para crear un instancia del módulo de datos es bastante simple: Seleccione
File | New del menú prinicipal y luego seleccione Data Module del repositorio de objetos.
La justificación simple para usar el TDataModule de poner sólo los componentes Data Access en un
Form es que es mas sencillo compartir los mismos datos a multiples Forms y unidades en su proyecto.
En una situación más compleja, se tendrá una gran cantidad de componentes TTable, Tquery y/o
TstoredProc. Se tendrá relaciones definidas entre los componentes y además reglas a nivel de campos,
como valores mínimo / máximo o fromatos de despliegues. Además este arreglo de componentes Data
Access modela las reglas del negocio de la corporación. Despues de tomar tanto tiempo para
28
configurar esto, no se desearía tener que hacer esto nuevamente en otra aplicación. En estos casos,
podría guardar su módulo de datos en el repositorio de objetos para usarlo luego. Si trabaja en un
ambiente de equipo, debería guardarse el objeto de repositorio compartido en la red para ser utilizado
por los desarrolladores del equipo.
En Delphi V el módulo de datos adquirio nuevas caracteristicas para darle mayor facilidad en el
manejo de los datos y los componentes dentro del mismo. El diseñador de módulo de datos se divide
en dos paneles:
♦ El panel izquierdo, llamado Tree view, muestra la relación padre−hijo de los componentes en
el módulo de datos.
♦ El panel derecho tiene dos paneles: Componentes (Components) y Diagrama de Datos (Data
Diagram).
♦ Haga click en la pestaña Components para ver los componentes del módulo como
aparecerían en un Form (representados por los iconos de la paleta).
♦ Haga click en la pestaña Data Diagram la dependencia entre componentes. Los componentes
no aparecerán en el diagrama hasta que sean arrastrados desde el panel izquierdo Tree View.
Puede agregar componentes al módulo de datos seleccionandolos de la paleta de componentes y
haciendo click en el Tree View o en la página de Componentes. Se puede utilizar el Object Inspector
para configurar las propiedades de los componentes mientras se trabaja en diseño.
Desarrollo en Delphi V
29