Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Email: Pablo@casadelphi.com
Web: www.casadelphi.com
Página 1
www.casadelphi.com Pablo Bustos Fernández.
Temas Página
Entorno de desarrollo. 3
Declaración de Variables. 13
Sentencias de Control. 17
Mensajes en Delphi 21
Bases de Datos. 41
Ficha BDE 43
Página 2
www.casadelphi.com Pablo Bustos Fernández.
Página 3
www.casadelphi.com Pablo Bustos Fernández.
Menú Principal . . . En él, Se puede realizar casi todo desde los diferentes
submenús como definir las opciones de compilación, personalizar las fichas de
componentes o agregar nuevas, guardar o abrir proyectos, etc., es necesario
revisarlo antes de comenzar.
Fichas de Componentes . . . Son las que dan Acceso a los componentes que
forman la biblioteca de componentes visuales conocida también como VCL (
Visual Component Library) y se encuentra dividida en varias categorías según
las funciones que realizán. Cada paleta incluye en su parte izquierda el botón
puntero que no es un componente sino que su función es parecida a la de
cualquier programa gráfico sirve para deseleccionar componentes
seleccionados, etc. Para insertar un componente en el formulario solo selecciona
el componente a insertar después pulsa sobre el formulario y arrastra el ratón
para definir su tamaño, en caso que no lo arrastres Delphi automáticamente le
pone su tamaño predeterminado. Otra forma de insertar los componentes es
dando doble Clic sobre el componente a insertar en la ficha de componentes.
Página 4
www.casadelphi.com Pablo Bustos Fernández.
BorderStyle: Despliega una lista con los diferentes estilos de bordes para el
formulario.
Página 5
www.casadelphi.com Pablo Bustos Fernández.
Position : Despliega una lista en la cual muestra las diferentes posiciones sobre
las cuales podemos mostrar nuestro formulario al momento de correrlo.
Para dimensionar nuestro formulario basta con alterar las propiedades Height y
Width aunque también se puede realizar posicionando sobre los bordes del
formulario el puntero del ratón y arrastrarlo hasta lograr la dimensión que
queramos.
Nota: Existen Propiedades que son iguales para varios componentes como
Caption, Font, Visible, etc.
Página 6
www.casadelphi.com Pablo Bustos Fernández.
Página 7
www.casadelphi.com Pablo Bustos Fernández.
se devuelve la memoria
usada a Windows.
OnPaint El formulario necesita ser
pintado, porque algo ha
cambiado en él.
OnResize Ha cambiado el tamaño del
formulario.
Nota: Existen eventos que nos ofrecen ciertos datos o variables propios del
evento a tratar con los cuales se puede trabajar y pueden ser de mucha utilidad
como es el caso de Key del evento OnkeyPress.
Nota: Antes de pasar a nuestro primer programa quisiera dar un tip. Una vez
que tenemos un componente insertado en nuestro formulario en caso de que
queramos moverlo lo podemos hacer con el ratón pero también lo podemos
Página 8
www.casadelphi.com Pablo Bustos Fernández.
Ahora si, para que veas que el manual va en serio desarrollaremos un sencillo
programa, muy clásico pero necesario. Entra a Delphi, automáticamente te va a
crear un nuevo proyecto, de cualquier forma puedes crearlo en el menú
File/New/Applications. bien ya tenemos un nuevo proyecto ahora realiza lo
siguiente:
Página 9
www.casadelphi.com Pablo Bustos Fernández.
Real Real
Página 10
www.casadelphi.com Pablo Bustos Fernández.
= Igualdad. Boolean
Página 11
www.casadelphi.com Pablo Bustos Fernández.
Página 12
www.casadelphi.com Pablo Bustos Fernández.
Página 13
www.casadelphi.com Pablo Bustos Fernández.
Bien ya vimos como declarar constantes y variables ahora es necesario ver los
tipos de datos soportados por Delphi.
Delphi Soporta tipos de datos simples y tipos de datos compuestos pero por
ahora nos enfocaremos a los simples.
Rango de
Tipo Formato
Valores
Byte 0 .. 25 8 bits sin signo
Word 0 .. 65535 16 bits sin signo
LongWord 0 .. 4294967295 32 bits sin signo
ShortInt -128 .. 127 8 bits con signo
SmallInt -32768 .. 32767 16 bits con signo
-2147483648 ..
LongInt 32 bits con signo
2147483648
-2Exp63 ..
Int64 64 bits con signo
2Exp63-1
-2147483648 ..
Integer 32 bits con signo
2147483648
Cardinal 0 .. 214 7483648 32 bits sin signo
Por defecto las operaciones aritméticas con valores enteros devolverán un valor
entero, hay que tener cuidado por que una variable de tipo entera no puede
almacenar un dato de tipo real, más sin embargo una variable de tipo real si
puede recibir un dato entero.
Tamaño
Dígitos
Tipo Rango de valores en
Significativos
Bytes
± 1.5 * 10Exp-45 .. ±
Single 7-8 4
3.4 * 10Exp38
± 2.9 * 10Exp-39 .. ±
Real48 11-12 6
1.7 * 10Exp38
Página 14
www.casadelphi.com Pablo Bustos Fernández.
± 5.0 * 10Exp-324 .. ±
Real 15-16 8
1.7 * 10Exp308
± 5.0 * 10Exp-324 .. ±
Double 15-16 8
1.7 * 10Exp308
± 3.4 * 10Exp-4932 .. ±
Extended 19-20 10
1.1 * 10Exp4392
Comp -2Exp63 .. 2Exp63 -1 19-20 8
-
9223372036854775808
Currency 19-20 8
..
9223372036854775807
Memoria Requerida
Tipo
en bytes
Boolean 1 (Recomendado)
ByteBoolean 1
WordBool 2
LongBool 4
Se declaran como cualquier otra variable solo que el valor que pueden recibir es
True o False. Ejemplo. Este código se puso en el evento Oncreate del
Formulario Ok.
Página 15
www.casadelphi.com Pablo Bustos Fernández.
Este fue un ejemplo inútil, pero es solo para ilustrar su manejo muy
simplemente, tu eres quien le darás una verdadera aplicación si tus problemas lo
requieren. Por lo pronto puedes experimentar cambiando la asignación de
compadre a False.
Memoria
Carácter que
Tipo requerida en
contiene
Bytes
Un Caracter
AnsiChar 1
Ansi
Un Caracter
WideChar 2
Unicode
Un Caracter
Char 1
Ansi
Carácter
Longitud
Tipo que Memoria
Máxima
contiene
~2Exp31 Hasta
AnsiString AnsiChar
Caracteres GB.
255 2 a 256
ShortString AnsiChar
Caracteres Bytes.
~2Exp31 256 hasta
String AnsiChar
Caracteres 2GB.
~2Exp30 Hasta
WideString WideChar
Caracteres 2GB.
Página 16
www.casadelphi.com Pablo Bustos Fernández.
Sentencias de control
Todo programa esta constituido por decisiones y acciones que se ejecutan
repetidamente en función del estado del programa y las sentencias de control,
son las que nos permiten hacer esas cosas. Explicaré las más utilizadas.
Condicion If ... Then : Las condiciones If sin duda son unas de las
mas utilizadas y permite condicionar la ejecución de un determinado código al
cumplirse una determinada condición. La sintaxis seria como sigue:
If Condicion Then
Codigo1
Else
Codigo2
Cuando los códigos a ejecutar tanto para el Else como para el IF son más de
una instrucción se deben de poner entre un Begin y un End. Para que quede
mas claro haremos un ejercicio mas practico, el código irá en el evento Oncreate
Página 17
www.casadelphi.com Pablo Bustos Fernández.
del Form. Se preguntarán por que utilizo ese evento bueno pues por que todavía
no les enseño como funcionan otros componentes.
Case Expresion Of
Lista de constantes separadas por comas : Codigo;
Valor Inicial .. Valor final : Codigo2;
Else
Codigo por Defecto;
Página 18
www.casadelphi.com Pablo Bustos Fernández.
Randomize();
numero := Random(4);
Case numero Of
0: ShowMessage('El numero es un Cero');
1: ShowMessage('El numero es un Uno');
2: ShowMessage('El numero es un Dos');
else
ShowMessage('El numero es mayor que dos');
end;
end;
Bueno creo que ha llegado la hora de explicar los ciclos o bucles así que
empezaremos.
Repeat
Codigo
Until Condicion
Les pondré un sencillo ejemplo pero ahora utilizaremos el evento OnClick del
Form.
Página 19
www.casadelphi.com Pablo Bustos Fernández.
ShowMessage(IntToStr(suma));
end;
While Condición Do
Codigo
Con esto hemos concluido una parte que es fundamental conocer para el
manejo de Delphi, como lo es su entorno de desarrollo, declaración de
constantes, variables y sus sentencias de control. Así que de aquí en adelante
nos dedicaremos a ver cosas mucho más interesantes, explotaremos la
potencialidad de Delphi y empezaremos por ver los tipos de mensajes que
Delphi permite realizar.
Página 20
www.casadelphi.com Pablo Bustos Fernández.
Mensajes en Delphi
Es verdaderamente útil poder interactuar con el usuario, decirle que es lo que
esta ocurriendo o dejarlo que tome decisiones. Esto en parte podemos lograrlo
con las ventanas o cuadros de mensaje, por si no tienes una idea clara de que
es lo que son pues son por ejemplo el cuadro que te aparece en Word (u otra
Aplicación) cuando no has guardado tu trabajo preguntando si deseas guardarlo.
• ShowMessage
• ShowMessagePos
• MessageDlg
• MessageDlgPos
• MessageBox
• mtIformation
Página 21
www.casadelphi.com Pablo Bustos Fernández.
• mtWarning
• mtError
• mtConfirmation
• mtCustom
• mbYes
• mbNo
• mbOk
• mbCancel
• mbAbort
• mbRetry
• mbIgnore
• mbAll
• mbHelp
Los tipos de botones que deseas debes ponerlos entre corchetes ([ ]), y
seguidos de una coma. O si lo prefieres Otra forma de hacerlo es poner un serie
de botones predefinidos, pero si lo haces no pongas los corchetes. Los botones
predefinidos son:
• mbYesNoCancel
• mbAbortRetryIgnore
• mbOkCancel
• mrNone
• mrAbort
• mrYes
• mrOk
• mrRetry
Página 22
www.casadelphi.com Pablo Bustos Fernández.
• mrNo
• mrCancel
• mrIgnore
• mrAll
Mb_IconAsterisk
Mb_IconError
Mb_IconExclamation
Mb_iconHand
Mb_IconInformation
Mb_IconQuestion
Mb_IconStop
Mb_IconWarning
Bueno creo que sobre mensajes seria todo. Ahora pasaremos a explicar lo que
estaban esperando las fichas de componentes visuales. Finalmente verdad...
Página 23
www.casadelphi.com Pablo Bustos Fernández.
Ficha Standar
En esta ficha se encuentran los componentes mas utilizados y es la que esta
activada cuando entramos a Delphi. Explicare únicamente los principales.
Ficha Standar.
Página 24
www.casadelphi.com Pablo Bustos Fernández.
Página 25
www.casadelphi.com Pablo Bustos Fernández.
Ahora vamos con el código. Vete al evento Onclick del Button1 que dice
Calcular. dentro de el pondremos el siguiente código:
Si te das cuenta en el Edit1 y Edit2 Guardamos los valores con los que aremos
una suma o resta según elija el usuario. El resultado lo pegaremos en el Label6
en su propiedad Caption. Tanto el Edit como el Label son de tipo String por lo
que para hacer la operación es necesario convertirlo por lo tanto los Edit los
convierto a flotantes mediante FloatToStr(). Ahora el resultado será un tipo de
dato flotante para asignárselo al Label que es de tipo String tengo que
convertirlo mediante la instrucción FloatToStr();
En lo que respecta al uso del ComboBox me sirve para que el usuario elija el
tipo de operación a realizar (Suma o Resta) yo previamente definí Suma y Resta
Página 26
www.casadelphi.com Pablo Bustos Fernández.
Muy bien Ahora en el Evento Onclick del Button2 que dice Aplicar pon este
código.
Ahora vete al menú desplegable y dale Click en la opción Salir de esta forma
Delphi te creara el procedimiento Tform1.Salir1Click en el cual pondrás este
código.
Application.Terminate;
Ficha Additional
Contiene componentes que amplían los componentes de la estándar y que
igualmente se utilizan frecuentemente. Explicare solo algunos de ellos. De
cualquier forma si sabes un poco de ingles puedes consultar la ayuda de Delphi
seleccionando la ficha y después presionando F1.
Página 27
www.casadelphi.com Pablo Bustos Fernández.
Crea una nueva aplicación, al Caption del formulario ponle Ficha Addiotional, en
el formulario por un componente StaticText, en la Propiedad Caption pon Fecha,
la propiedad BorderStyle ponla en sbsSunken.
MaskEdit1.Text := DateToStr(Date);
Página 28
www.casadelphi.com Pablo Bustos Fernández.
Página 29
www.casadelphi.com Pablo Bustos Fernández.
if numero = 2 then
Shape1.Brush.Color := ClYellow;
if numero = 3 then
Shape1.Brush.Color := ClLime;
end;
Página 30
www.casadelphi.com Pablo Bustos Fernández.
Ficha Win32
Contiene componentes que permiten la creación de aplicaciones que cumplen
con las especificaciones de Windows 95 o superior. A continuación se muestra.
Crea una nueva aplicación, al caption del form ponle Ficha Win32, coloca un
componente Image list en el form, dale doble Click al componente, te saldrá una
ventana en la cual podrás agregar imágenes, dale al botón que dice Add, vete a
Página 31
www.casadelphi.com Pablo Bustos Fernández.
Página 32
www.casadelphi.com Pablo Bustos Fernández.
Muy bien ahora vamos a introducir el código, empezaremos por los botones de
la barra de herramientas.
Dale Doble Click al primer botón que le pusimos Salir, con esto te genera
automáticamente el evento Onclick, puedes hacerlo de la otra forma que tu ya
sabes no importa. Bueno pon este código.
Application.Terminate;
Ahora en el Tercer botón que le pusimos Animación pondrás este otro código.
PageControl1.ActivePageIndex := 0;
Como puedes ver las paginas del PageControl tienen un índice empezando de
cero así es que solo es cuestión de poner que pagina es la que quieres activar.
PageControl1.ActivePageIndex := 1;
Muy bien ahora selecciona la pagina que dice Animacion del PageControl. en el
evento Onclick del Button Animar pondrás este código.
Animate1.Active := True;
Por ultimo en el evento Onclick del botón Detener pon este código.
Página 33
www.casadelphi.com Pablo Bustos Fernández.
Animate1.Stop;
Muy bien.... traigan la tequila compadres.. pos ya terminamos. ahora solo córrelo
con F9 y listo.
Ficha System
Contiene componentes que permiten acceder a algunos elementos importantes
del sistema, enseguida muestro la ficha.
Muy bien ahora como se supone que ya sabemos utilizar alguna variedad de
componentes pues lo que haremos es un reproductor de vídeo casi casi
profesional....... Bueno ustedes son los que retocaran algunos detalles.
Página 34
www.casadelphi.com Pablo Bustos Fernández.
Reproductor de Vídeo
Primeramente diseñaremos el aspecto visual después nos iremos con el código
Ok.
Crea una nueva Aplicación. Al Caption del Form ponle Mi Reproductor de Vídeo.
Mira compadre no explique todas las fichas que trae Delphi. Ok. pero con lo que
hemos visto hasta ahora ya sabes navegar entre las fichas y sus componentes
así es que vamos a utilizar un componente que esta en otra ficha diferente a las
vistas.
Bien una vez puesto este componente vete a la propiedad Filter da doble Click a
su derecha y te saldrá una venta dividida en dos partes la de la izquierda dice
Filter Name y la de la derecha dice Filter. Ahora en filter name Escribirás
Página 35
www.casadelphi.com Pablo Bustos Fernández.
Archivos Avi, en Filter escribiras *.Avi, nuevamente en una nueva fila escribe en
Filter Name Todos los Archivos y en Filter *.*. Esa ventana quedaría de la
siguiente forma.
Muy bien si has hecho todo lo que te dije el Formulario tiene que lucir mas o
menos Así.
Página 36
www.casadelphi.com Pablo Bustos Fernández.
Ahora viene lo interesante el código. Ojo el código va completo con todo y los
procedimientos que Delphi me genera en cada evento. Esos procedimientos no
se copian por que Delphi te los crea. Ok. Ahora pon este código en el BitBtn1 al
que le pusimos Abrir.
Página 37
www.casadelphi.com Pablo Bustos Fernández.
Hasta ahora con el código que hemos puesto, nuestra aplicación es capaz de
reproducir vídeo y esta bien pero que tal si le damos un toque mas especialon
como que al presionar las teclas Alt + Enter, el vídeo se vea a pantalla completa
y de igual forma al volverlas a presionar regrese a pantalla normal. Bueno para
lograr eso pon este código en el evento OnKeyDown del Formulario.
Página 38
www.casadelphi.com Pablo Bustos Fernández.
rect(0,0,Form1.Clientwidth,Form1.ClientHeight);
end
else
begin
Form1.WindowState := WsNormal;
Form1.Width := Ancho;
Form1.Height := Alto;
Form1.Position := PoScreenCenter;
Label1.Visible := True;
Label2.Visible := True;
Label3.Visible := True;
Label4.Visible := True;
MediaPlayer1.Visible := True;
BitBtn1.Visible := True;
StatusBar1.Visible := True;
ScrollBar1.Visible := True;
OleContainer1.Visible := True;
Form1.BorderStyle := BsSingle;
MediaPlayer1.Display := OleContainer1;
MediaPlayer1.DisplayRect :=
rect(0,0,Form1.Clientwidth,Form1.ClientHeight);
end;
end;
end;
Como puedes ver es mas código verdad, pues si pero es que para reproducir el
vídeo a pantalla completa tenemos que poner en False la propiedad Visible de
todos los componentes Visuales y de igual forma ponerla en True cuando
regrese a pantalla normal. Antes de seguir con el código debes saber que he
declarado dos variables de tipo global para este formulario, las variables son
Ancho y Alto, las utilizo para almacenar el tamaño del Form al momento de
maximizarlo a pantalla completa y de esta forma cuando el usuario regrese a
pantalla normal utilizo el valor de esas variables para volver el Form a su tamaño
original.
Las variables Globales del Form las declaras en la cláusula Var del Unit del
Form. esta justo arriba de la cláusula Implementation. mira para que te ubiques
te muestro la parte en donde tienes que declararlas. Ok.
var
Form1: TForm1;
Ancho : Integer; //Aqui estan declaradas
Alto : Integer;
implementation
Página 39
www.casadelphi.com Pablo Bustos Fernández.
{$R *.dfm}
Como ves están casi al inicio del Unit. Sí puedes encontrarlo y declararlas
verdad. yo se que si.
Órale pues..... cuando se minimiza pues simplemente pones visibles todos los
componentes visuales, volvemos a poner el BorderStyle del Form en BsSingle,
la propiedad WindowsState del form la ponemos en WsNormal, mediante las
variables Globales Ancho y Alto ponemos las dimensiones del Form, le
indicamos al mediaPlayer que se reproducirá en el OleContainer y listo. Hay
otras cosillas pero es básicamente esto.
Baya hasta que termine el ejemplo verdad compadres.... Bueno pero el manual
aun sigue le cuelga siempre muchita información todavía.
Página 40
www.casadelphi.com Pablo Bustos Fernández.
Bases de Datos
Baya por fin hemos llegado a una parte que tal vez estabas esperando. Antes de
empezar quiero adelantarles que durante los capítulos siguientes aremos
algunas bases de datos.
Delphi posee una herramienta que nos permite diseñar nuestras bases de datos,
es un programa llamado Database DeskTop.
Página 41
www.casadelphi.com Pablo Bustos Fernández.
Página 42
www.casadelphi.com Pablo Bustos Fernández.
Ficha BDE
Esta ficha contiene componentes que habilitan la conexión a bases de datos
utilizando el BDE engine de Delphi.
Página 43
www.casadelphi.com Pablo Bustos Fernández.
Database DeskTop
Delphi nos permite crear bases de datos en tiempo de ejecución mediante
código, pero también nos brinda la posibilidad de crearlas en tiempo de diseño
mediante el Database Desktop. Esta herramientas nos permite en realidad hacer
otras cosillas, pero no quiero adentrarme mucho en, solo quiero enseñarles lo
básico para continuar con este manual o curso.
Muy bien para entrar al DataBase DeskTop lo podemos hacer de dos formas, la
primera es accesando desde el menú inicio/programas/Delphi/Database
DeskTop. La otra es Dentro de Delphi te vas al Menú Tools y encontraras la
opción Database Desktop. Muy al accesar al el te aparecerá de la siguiente
forma.
Página 44
www.casadelphi.com Pablo Bustos Fernández.
Muy bien, antes de seguir quiero explicar que en Delphi se manejan mucho los
alias, los cuales son un identificador para un directorio o carpeta en los cuales
se tienen guardadas las bases de datos. Estos alias son muy útiles ya que
usualmente tienes que indicar la ruta en dónde está tu tabla como por ejemplo
c:\programa\Tablas, ahora el detalle está que cuando pasas tu aplicación a otra
unidad debes cambiar la ruta a cada tabla y recompilar. todo eso se soluciona
pues utilizando alias, de hecho en los programas instaladores como el Install
Shield te permite crear el alias que en tu aplicación ayas puesto, es útil de
verdad. Solo que para estos ejercicios lo are de la forma tradicional solo queria
informarles que existe esa posibilidad, por cierto en el alias DbDemos Delphi
guarda algunas tablas de ejemplo por si después quieres hecharles un ojillo
primo.
Muy bien vete al menú que dice File, después al New y por ultimo Table, de
esta forma creamos nosotros una tabla, pero antes nos presenta una pequeña
ventana en la cual nos pide que elijamos que tipo de dato crearemos, si va hacer
paradox, foxpro, etc. te presento esa venta.
Elige Paradox 7, de hecho esta activada por defaul. después de eso te saldrá la
siguiente ventana:
Página 45
www.casadelphi.com Pablo Bustos Fernández.
Después está otra leyenda que dice Type, contendrá el tipo de dato que será
nuestro campo, para seleccionar el tipo de dato basta con situarnos en Type y
presionar la barra espaciadora y nos desplegara todos los tipos de datos, de
cualquier forma si sabemos su tecla abreviada se la podemos escribir
directamente.
Está la leyenda que dice Size la cual indica el tamaño del campo, eso se lo
indicamos tecleándolos directamente.
Por ultimo está la leyenda Key, sirve para indicar cuales campos serán nuestras
claves primarias. para elegir un campo como clave primaria posicionate en Key y
presiona la barra espaciadora, se pondrá un asterisco en señal de que es clave
primaria.
Página 46
www.casadelphi.com Pablo Bustos Fernández.
Precio $ (Money)
Minimo I (Integer)
Muy bien ya que tecleaste esta estructura quiero que te ubiques en la parte
izquierda de tu ventana, encontraras una leyenda que dice Table Properties y
debajo de ella un especie de Combobox. Ese combobox contiene las
propiedades de la tabla que tu puedes configurar. No entrare en mas detalles,
solo te digo que experimentes un poco con ellas.
No vamos a crear algún índice secundario en esta tabla por que usaremos
algunas sentencias Sql en búsquedas por producto con propósito de
aprendizaje, por lo tanto no es necesario crearlo.
Muy bien ahora solo quiero que des Click en el botón que dice Save As, y
guardes la tabla en el directorio c:\Ejemplo con el nombre de Inventario. Para
crear el directorio vete al explorador ó Mi PC y simplemente vete a la unidad C y
créala.
De igual forma como creaste esta tabla quiero que hagas las siguientes tablas y
las guardes en el mismo directorio OK.
Página 47
www.casadelphi.com Pablo Bustos Fernández.
Componente TTable
Es un componente no visual y se encuentra en la ficha BDE.
El componente Table tiene una larga lista de eventos, que se pueden dividir en
tres grupos, los eventos que se producen antes de un operación como una
apertura, cierre, lectura, etc., los cuales empiezan por la palabra Before, luego
están los eventos que se producen en el momento y cuyo nombre empieza por
On y por ultimo los eventos que se producen después, cuyo nombre empieza
por After . A continuación te listo los principales eventos del componente Table.
Página 48
www.casadelphi.com Pablo Bustos Fernández.
Página 49
www.casadelphi.com Pablo Bustos Fernández.
Table1.FieldByName('Producto').AsString := 'Sabritas';
Como ves primeramente va el nombre del componente Table que estará ligada a
nuestra base de datos física, posteriormente escribimos FieldByName en el cual
dentro de paréntesis y entre comillas simples indicaremos el nombre del campo
al cual aremos referencia, por ultimo bastara con indicarle el tipo de dato que es
el campo al cual hacemos referencia, que por cierto eso lo indicamos con el .As.
En caso de que quieras leer el valor de un campo y asignarlo a una variable
pues simplemente cambia la posición de la línea de código anteriormente escrita
solo recuerda que los tipos de datos sean iguales.
Ordenación de Registros . . .
Una vez que se ha definido un DataSet los registros que contiene se encuentran
ordenados por su índice activo y este índice queda determinado por el valor de
la propiedad IndexName del componente TTable si no se especifica u índice
secundario se tomara el índice primario. Otra forma de ordenar la tabla es
utilizando la propiedad IndexFieldNames en la cual se pondrá el índice primario
por el cual se quiere ordenar. Los índices previamente se tuvieron que haber
declarado en la tabla. En tiempo de ejecución también se puede cambiar el
índice de ordenación, por ejemplo el código para ordenar la tabla Inventario a
través de su Clave primaria seria así.
Table1.IndexFieldNames := 'Clave';
Búsquedas de Registros . . .
El componente Table proporciona una serie de herramientas para realizar
búsquedas de registros con la limitación de que solo se realizaran con campos
Página 50
www.casadelphi.com Pablo Bustos Fernández.
ShowMessage('Producto Localizado')
Else
ShowMessage('Producto no encontrado');
ShowMessage('Producto Localizado')
Else
Table1.FindNearest([Edit1.Text]);
El otro método de búsquedas es Locate, el cual nos permite buscar por una
condición en un columna o por varias columnas. Locate es una función que
devuelve True o False según ha tenido éxito o no, y si su busqueda fue exitosa
Página 51
www.casadelphi.com Pablo Bustos Fernández.
la tabla muestra la fila que cumplió la condición. Para usar este método se han
de pasar una serie de parámetros y a continuación te muestro su sintaxis:
Table1.Locate ('Producto','CocaCola',[]);
DataSource
El componente table pertenece a un grupo de componentes que son derivan del
componente TDataset, estos componentes acceden por diferentes caminos a los
datos, por lo que la interfaz obtenida difiere según el componente empleado.
Para que los diferentes controles que muestran los datos sean capaces de
acceder a esta variedad de interfaces pues se utiliza el DataSource el cual es un
componente intermedio el cual tiene la tarea de mostrar una interfaz común a
todos los controles.
Página 52
www.casadelphi.com Pablo Bustos Fernández.
Controles Data-Aware
Son los que se encuentran en la ficha DataAcces y Excepto por el componente
DbNavigator el resto de los componentes son utilizados para presentar los datos
de las tablas. Uno de los componentes mas comunes sin duda es el Dbgrid el
cual esta constituido por un conjunto de rejillas a través de las cuales nos
presenta la información de las tablas. A continuación te lo explicare.
Componente DBGrid . . .
Nos sirve para visualizar información almacenada en una tabla, pero aparte de
eso podemos también realizar inserciones, ediciones, modificaciones, etc. y
cuenta con varias propiedades y métodos que nos ofrecen una amplia gama de
configuraciones tanto para el aspecto como para el funcionamiento del control.
Página 53
www.casadelphi.com Pablo Bustos Fernández.
mensaje
Cancelas las inserciones vacías al salir
dgCancelOnExit
del control
Permite seleccionar múltiples filas a la
dgMultiSelect
vez
Para accesar al editor de columnas basta con dar doble click sobre el
componente o dar un click con el botón secundario y elegir la opción Columns
Editor del menú emergente, saldrá la siguiente ventana.
1. Pon un componente
Table, en su propiedad
DataBasename elige
DBDemos, en su
propiedad TableName
elige la tabla Animals,
pon la propiedad Active
en True.
2. Coloca un componente
DataSource y en su
propiedad DataSet pon
Table1.
Ahora viene algo importante, hasta ahora nos mostrara todos los campos de la
tabla en nuestro DBGrid por lo tanto quiero que des doble Click sobre el DBGrid
y aparecerá el editor de columnas, pero sorpresa verdad esta vacío y eso es por
que no se han definido y para definirlos basta con dar un click en el tercer icono
que dice Add All Fields y nos agregara una columna para cada campo de
nuestra base de datos empezando por un índice cero, bien ahora ya tengo todos
los campos de mi base de datos por lo tanto si quiero borrar algunos bastara con
Página 54
www.casadelphi.com Pablo Bustos Fernández.
seleccionarlos y dar un click en el segundo icono que dice Delete Selected (Del),
cabe mencionar que no solo puedo borrar algunos campos que no quiera si no
que también puedo cambiar el orden de las columnas arrastrando con el puntero
del ratón a la posición que deseo un campo en particular.
Ahora la opción Title tiene ciertas propiedades que son interesantes es por eso
pariente que las describo.
Página 55
www.casadelphi.com Pablo Bustos Fernández.
DBNAvigator . . .
Este control tiene incorporada las funcionalidades mas comunes que se realizan
sobre una base de datos ya que con el podemos navegar entre los registros,
eliminar un registro, ponerlo en modo de edición, insertar registros, etc. su
propiedad mas importante es la DataSource en la cual se tiene que indicar el
DataSource sobre el cual trabajara. Describo los botones del navegador.
Página 56
www.casadelphi.com Pablo Bustos Fernández.
La propiedad Hints permite colocar una leyenda para cada botón, si desactivaste
algún botón su leyenda solo déjala en blanco. sale primo.
Otra propiedad interesante podría ser ReadOnly la cual recibe un valor Boolano
y sirve para poner el campo en solo lectura desabilitando de esta forma que se
capture información sobre el. Las demás propiedades son iguales a las del Edit.
Página 57
www.casadelphi.com Pablo Bustos Fernández.
BUSQUEDAS SQL. . .
Para poder ejecutar una consulta SQL es necesario añadir un componente
TQuery. Con el componente TQuery podemos acceder a varias tablas a la vez o
filtrar dinámicamente cualquier tipo de registros.
La ejecución de una consulta SQL entrega como resultado una nueva tabla, las
características de esta tabla son en principio independientes de la base de
datos. A continuación te listo algunas sentencias SQL.
Propiedades de TQuery.
Propiedad Descripción
DataBaseName Nombre de la base de datos a la que se accede.
Array de string que contiene la consulta que dará
SQL
lugar a la nueva tabla.
Provoca la presentación inmediata de los datos
Active
ejecutando la consulta.
Params Array que incluye los parámetros de una consulta.
Permite modificar los registros que fueron resultado
RequestLive
de una consulta.
Metodos de TQuery.
Método Descripción
Ejecuta la sentencia SQL sea o no de selección de
ExecSQL
registros.
Ejecuta una consulta SQL de selección de
Open
registros.
Close Cierra el componente.
First
Last
Navegación por los registros de la tabla.
Next
Prior
MoveBy
Append
Insert
Métodos para Insertar Registros.
AppendRecord
InsertRecord
Página 58
www.casadelphi.com Pablo Bustos Fernández.
Página 59
www.casadelphi.com Pablo Bustos Fernández.
Muy bien ahora viene lo interesante tienes que recordar que en la propiedad
SQL del Query es donde
introduciremos el código SQL
para realizar la búsqueda,
ahora debemos tomar en
cuenta que es un array y que
nosotros estamos manejando
una variable que es el nombre
del producto a buscar mismo
que se guarda en el Edit1. Por
lo tanto para generar la
consulta es necesario realizar
una serie de concatenaciones
que para no hacértela pesada
pariente de muestro el codigo
que pondrías en el evento
Onclick del BitBtn.
FROM Tabla
[WHERE Predicado]
[ORDER BY Columna]
Página 60
www.casadelphi.com Pablo Bustos Fernández.
En donde Col1 y Col2 son los nombres de las columnas de las tablas, en caso
de que se quieran mostrar todas las columnas utiliza el asterisco ( * ).
Ahora bien para utilizar el LIKE es necesario echar mano de un comodín que es
el % el cual deberá ir entre comillas simples. Por lo tanto entonces LIKE debera
estar por ejemplo LIKE '%COCA%'. Es por eso que al inicio y al final del
SELECT le pongo un % y entre los % coloco el contenido del Edit1.
Ahora comprendes por que utilizo una variable y realizo varias concatenaciones.
Bueno parientes después de que pongo toda la consulta que quiero realizar en
la variable consulta simplemente se la agrego a la propiedad SQL del Query
mediante QUERY1.SQL.ADD(consulta) y posteriormente Activo la consulta con
QUERY1.Active := TRUE Y QUERY1.Open para ejecutar la consulta.
Las consultas SQL tienen mucha mas potencialidad que lo que aquí te estoy
explicando te recomiendo que bajes algun manual sobre SQL y lo estudies de
cualquier forma el Query soporta la mayoría de las instrucciones SQL utilizadas.
Pariente solo te queda correr el programa y experimentar con el. Solo agrégale
algunos productos a la base de datos por que seguramente estará en blanco.
Puedes utilizar el DBGrid y DBNavigator que por cierto ya te los explique verdad.
Vamos amigo no te desanimes que todavía faltan los reportes y claro el ejercicio
final con nuestras bases de datos.
Página 61
www.casadelphi.com Pablo Bustos Fernández.
Ficha QReport
Contiene 23 componentes que facilitan la creación de informes. Te describo solo
algunos de ellos.
Ficha QReport.
Página 62
www.casadelphi.com Pablo Bustos Fernández.
Hay que mencionar que Delphi posee un asistente que te ayuda a generar
automáticamente el reporte, durante el proceso tu le indicas la tabla, los
registros que quieres imprimir, el tipo de reporte, etc. pero bueno eso lo puedes
experimentar por ti mismo esta en File/News/Others te saldrá una ventana elige
la pestaña de Business y el icono que dice QuickReport Wizad.
Propiedad Descripción
La propiedad DataSet del QuickReport nos
sirve para indicarle sobre que tabla se estará
trabajando, en caso de que la tabla se tuviera
DataSet
en otro formulario pues simplemente se le pone
el nombre del formulario en el que esta, seguido
del nombre de la tabla.
Indica si se visualiza una ventana mientras se
ShowProgress generan datos a incluir en el informe, indicando
el estado de preparación del informe.
Controla si se debe imprimir el informe en el
PrintEmpty
caso de que no tenga ningún dato.
Página 63
www.casadelphi.com Pablo Bustos Fernández.
Componente QRBand . . .
Un informe compadres esta dividido en varias secciones como lo son la
cabecera de pagina, el titulo, la cabecera de columnas, el pie de pagina, etc., y
este componente nos permite definir todas estas secciones comportándose
como un contenedor para cada una de esas secciones. Una de sus principales
propiedades es BandType en la cual indicamos el tipo de banda que utilizaremos
pero bueno no te aguites compita a continuación te listo los posibles valores
para esta propiedad.
Tipos de Bandas . . .
Constante Descripción
Banda con el titulo del informe y se imprime
rbTitle
solo en la primera pagina.
Cabecera de todas las paginas del informe,
esta se va a imprimir en la primera pagina
rbPageHeader
dependiendo del valor de la propiedad
TQuickRep.Options.FirstPageHeader.
Es el pie de pagina y se va a imprimir en la
rbPageFooter ultima pagina dependiendo del valor de la
propiedad TQuickRep.Options.LastPageFooter.
Es un sumario que se imprime solo en la ultima
rbSummary
pagina al final de todos los datos.
Es el titulo de cada columna de datos y se
rbColumnHeader
imprime en cada pagina.
Registros del informe, se imprime una fila por
rbDetail
cada registro del DataSet del informe.
Es una banda especial que permite extender la
rbChild
presentación de los registros de un informe.
Es una banda especial que permite la
rbSubDetail agrupación de los registros en grupos de
detalle.
rbGroupHeader Es la cabecera de los grupos de detalle.
rbGroupFotter Es el pie de los grupos de detalle.
Página 64
www.casadelphi.com Pablo Bustos Fernández.
Pon un Componente Button en el cual diga Imprimir. ahora el diseño del primer
formulario quedaría así.
Ahora solo pon Dos Labels en el primero pon Lista de animales y colócalo arriba
del DBGrid y al segundo ponle Imagen y ponlo arriba del componente DBIMage.
Página 65
www.casadelphi.com Pablo Bustos Fernández.
Muy bien ya tenemos el primer formulario, ahora añade o crea otro formulario en
tu aplicación.
Pon otros dos QRLabel sobre el QRBand a uno ponle en su propiedad caption
Animal y al otro ponle Imagen. y colócalos uno después del otro en forma
horizontal dejando una distancia entre ellos.
Ahora pon un componente QRDBText en la otra Banda que dice Detail, vete a la
propiedad DataSet y ponle Form1. Table1 Después ve a la propiedad DataField
y elige el campo NAME. alinea este componente en dirección al QRLabel que
dice Animal.
Página 66
www.casadelphi.com Pablo Bustos Fernández.
Ahora solo ajusta la anchura de la banda Detail para que se vea todo el
componente QRDBImage. de cualquier forma te muestro el diseño.
Con esto hemos terminado nuestro reporte ahora solo necesitamos mandarlo
llamar desde el botón imprimir del formulario uno, así que vete al formulario uno
y en el evento onclick del Botón pon este código.
Form2.QuickRep1.Preview;
Página 67
www.casadelphi.com Pablo Bustos Fernández.
no te preocupes Delphi lo hace por ti, solo dale Click en el botón de Yes y listo
vuelve a correr tu programa y experimenta con el.
Método Descripción
Imprime el informe directamente
Print sobre la impresora predeterminada de
windows.
Despliega la misma ventana de
previsualización que puede verse en
diseño. Es una ventana estándar de
Preview
QuickReport pero se puede utilizar
cualquier otra utilizando el método
TQuickRep.OnPreview.
Crea un proceso en segundo plano
para imprimir el informe y devuelve
PrintBackGround
instantáneamente la ejecución a la
aplicación.
Muy bien ahora para terminar este curso o manual como quiera que le llames
falta realizar una pequeña aplicación en la cual utilizaremos las bases de datos
creadas anteriormente en el Database DeskTop. La aplicación va a ser muy
sencilla, será un modulo de Inventario con todas su operaciones sobre los
productos, un modulo de ventas y otro de consultas de utilidades pero bueno
mejor dale continuar pariente.
Creación de la Aplicación
Bueno ha llegado el momento de que pongamos en practica lo que aprendimos,
así que crea una nueva aplicación en Delphi.
1)Salir
2)Almacén
Página 68
www.casadelphi.com Pablo Bustos Fernández.
3)Ventas
4)Reportes
Ahora ponles una imagen a los botones en su propiedad Glyph. Después pon su
propiedad Flat en True.
Dale dobleClick sobre el componente y con esto te abrirá una ventana la cual es
el editor de paneles del StatusBar, es decir un StatusBar lo puedes dividir en
varias partes llamadas Panels. Bueno ya que estamos en el editor de paneles
trae cuatro iconos, el primero de izquierda a derecha me inserta un panel así es
que quiero que le des un click a ese icono, bien ya que te creó un panel vete a
sus propiedades en el inspector de objetos, ve a la propiedad Text y ponle hora.
Después vea la propiedad Width y ponle 100. Ve a la propiedad AlingMent y
ponla en Center.
Bien ahora vuelve a insertar un nuevo Panel, en su propiedad Text ponle fecha,
la propiedad AlignMent ponla en Center y por ultimo la propiedad Width ponla en
100.
StatusBar1.Panels[0].Text := TimeToStr(Time);
StatusBar1.Panels[1].Text := DateToStr(Date);
Página 69
www.casadelphi.com Pablo Bustos Fernández.
Sobre el GroupBox pondrías cinco Labels a continuación te digo los textos que
pondrás en sus captions.
1) Clave
2) Producto
3) Precio
Página 70
www.casadelphi.com Pablo Bustos Fernández.
4) Cantidad
5) E. Mínima
1) Clave
2) Producto
3) Precio
4) Cantidad
5) Mínimo
con esto ya tenemos ligados los DBEdits con los campos de la base de datos
ahora lo que falta es crear una serie de botones que me permitan realizar las
operaciones más comunes sobre la tabla. en este caso no utilizaremos el
DBNavigator en su lugar utilizaremos código directamente. así es que coloca
cuatro BitBtn justo abajo del GroupBox y otros tres a su costado. En total serian
siete botones, enseguida te muestro el texto que ira en sus Captions.
1) Guardar
2) Nuevo
3) Eliminar
4) Buscar
5) Anterior
6) Siguiente
7) Cerrar
Página 71
www.casadelphi.com Pablo Bustos Fernández.
Table1.Post;
Table1.Edit;
Table1.Insert;
If Application.MessageBox('SEGURO DE
ELIMINARLO?','PIENSA',MB_OKCANCEL+
MB_ICONQUESTION)=IDOK then
Table1.Delete;
Table1.Edit;
Table1.Prior;
Table1.Edit;
Table1.Next;
Table1.Edit;
Close;
Página 72
www.casadelphi.com Pablo Bustos Fernández.
Página 73
www.casadelphi.com Pablo Bustos Fernández.
Coloca dos componentes BitBtn uno delante del otro, al primero ponle en cu
Caption Registrar y al segundo ponle Limpiar, colócales una imagen alusiva al
texto a cada botón.
Muy bien no creo que hayas tenido problemas con esto, de cualquier forma te
presento el diseño final de este formulario.
Página 74
www.casadelphi.com Pablo Bustos Fernández.
Bien si pusiste atención a lo que te dije veraz que estaremos trabajando con el
evento OnKeyPress. por lo tanto aquí te listo el código correspondiente al
evento OnKeyPress del DBGrid.
cantidad := Form2.Table1.FieldByName('Cantidad').AsFloat -
DbGrid1.Fields[1].AsFloat;
if cantidad >= 0 then //Resto la cantidaddel almacen con la que se vende
para
begin //checar si se abastece.
if Cantidad <= Form2.Table1.FieldByName('Minimo').AsFloat then
ShowMessage('ESTE PRODUCTO SE ESTA AGOTANDO EN ALMACEN');
//En las líneas siguientes pego el producto y su precio en el DBGrid y calculo el Subtotal
Dbgrid1.Fields[2].AsString:=Form2.Table1.FieldbyName('Producto').AsString;
Dbgrid1.Fields[3].AsFloat:=Form2.Table1.FieldbyName('Precio').AsFloat;
Dbgrid1.Fields[4].AsFloat:=Form2.Table1.FieldbyName('Precio').AsFloat *
Dbgrid1.Fields[1].AsFloat;
Dbgrid1.Fields[1].FocusControl;
Table1.First;
Label3.Caption := '0';
Table1.First; //Este ciclo sobre la tabla y demás se puede hacer de otras formas, solo lo
Página 75
www.casadelphi.com Pablo Bustos Fernández.
aclaro.
while Table1.Eof = false do
Begin //Caculo el total de la venta sumando todos los subtotales.
Label3.Caption := FloatToStr(Table1.FieldByName('Subtotal').AsFloat +
StrToFloat(Label3.Caption));
Table1.Next;
end;
end
else
ShowMessage('LA CANTIDAD DE ESTE PRODUCTO QUE ESTAS VENDIENDO
NO LA ABASTECE EL ALMACÉN');
end
else
begin
ShowMessage('Producto no encontrado');
Dbgrid1.Fields[0].FocusControl;
end;
end;
end;
end;
Como puedes ver en los comentarios que realice sobre el código, todo es
realmente sencillo cabe mencionar que esta es solo una forma de hacerlo. En
este código Accesamos a el campo seleccionado del DBGrid mediante la
instrucción DBGRid1.Fields[Número_Campo].As y el tipo de dato del campo.
Bien ahora hasta este momento el sistema me arrojará los productos que se
venden, sus precios, sus subtotales y el total general de la venta, pero que pasa
si quiero borrar un producto del DBGrid ? ha pues tengo que recalcular el total
general y borrarlo del DBGrid, esto se realiza mediante el siguiente código.
Página 76
www.casadelphi.com Pablo Bustos Fernández.
Ahora si tenemos completo todo el código que va dentro del DBGrid. pero aún
nos falta el código de los dos botones que pusimos por lo tanto vamos a
continuar.
Página 77
www.casadelphi.com Pablo Bustos Fernández.
Form2.Table1.Edit;
Form2.Table1.FieldByName('Cantidad').AsInteger :=
Form2.Table1.FieldByName('Cantidad').AsInteger - 1;
Form2.Table1.Post;
Table1.Next;
end;
//Registro la venta en la tabla Ventas.
Table2.Edit;
Table2.FieldByName('Ingreso').AsFloat :=
Table2.FieldByName('Ingreso').AsFloat + StrToFloat(Label3.Caption);
Table2.Post;
BitBtn2.Click; //Mando llamar a que se ejecute el evento Onclick del BitBtn2
(Limpiar)
Dbgrid1.Fields[0].FocusControl;
end
else
begin
ShowMessage('El Pago es menor al total a pagar');
Edit1.SetFocus;
end;
end;
Existe una función que utilizo para dar el cambio la cual es Round, esta función
redondea un numero, pero en este caso utilizo un truquillo para que lo haga en
base al tercer digito. Revisa la sección de trucos encontraras más información al
respecto.
Edit1.Text := '0';
Label3.Caption := '0';
DbGrid1.Fields[0].FocusControl; //Posiciono el cursor en la columna Clave del
DBGrid
end;
Página 78
www.casadelphi.com Pablo Bustos Fernández.
Cabe mencionar que existen otras formas de vaciar la tabla pero es necesario
ponerla en modo exclusivo y si estamos dentro de Delphi posiblemente no se
pueda. Es por eso que trato de poner un código sencillo para que sea entendible
tanto para los que ya programan visualmente como para los que apenas andan
dando sus primeros pasos.
Ahora mira como se está utilizando una tabla para realizar las ventas, pues es
necesario estar eliminando los productos cada que se entra al modulo de ventas
o que se registra una de ellas. Es por eso que debes poner el siguiente código
en el evento OnShow del Formulario.
Mira eso de la tabla auxiliar para ventas se pudo haber evitado utilizando otro
componente de rejillas pero bueno sirve de practica o no?.
Hemos finalizado con el modulo de ventas..... Baya ... ahora vienen los demás.
Página 79
www.casadelphi.com Pablo Bustos Fernández.
Coloca Cuatro QRLabel sobre el QRBand uno delante del otro. A continuación
te listo lo que pondrás en sus Captions.
1)Del
2)FechInicial
3)Al
4)FechFinal
De lo que se trata es de que en esos QrLabel salga la fecha inicial y final del
reporte por ejemplo Del 01/01/02 Al 31/05/02. Órale pues verdad. bueno
proseguimos.
Página 80
www.casadelphi.com Pablo Bustos Fernández.
Ahora coloca otro Label y ponle en su Caption Fecha Final, coloca otro
componente MaskEditor enfrente de el y al igual que al anterior ponle una
mascara de fechas.
Coloca fuera del GroupBox dos BitBtn, al primero ponle en su caption Continuar
y al segundo Cancelar. Colócales una imagen para que no se vean feos.
procedure
TForm5.BitBtn2Click(Sender:
TObject);
begin
Close; end;
Página 81
www.casadelphi.com Pablo Bustos Fernández.
[StrToDate(MaskEdit2.Text)]);
Form4.QuickRep1.Preview;
Form3.Table1.CancelRange;
Close;
end;
Para utilizar el SetRange tiene que estar indexado el campo por el cual se hace
la fijación, en nuestro caso Fecha.
Formulario de Búsqueda de
Productos(Form6)
Crea un nuevo formulario, en su caption ponle Buscar Producto, biMaximize de
la propiedad BorderIcons ponla en False, la propiedad Position ponla en
poScreenCenter.
Página 82
www.casadelphi.com Pablo Bustos Fernández.
Coloca un componente Edit justo enfrente del Label. Su Propiedad Text dejala
en Blanco.
Coloca dos BitBtn fuera del GroupBox. al primero en su Caption Ponle Buscar y
al segundo ponle Cancelar. Colócales una imagen a cada uno de ellos.
procedure TForm6.BitBtn1Click(Sender:
TObject);
begin
Form2.Table1.IndexFieldNames := 'Clave';
if Form2.Table1.FindKey([Edit1.Text]) =
False then
ShowMessage('PRODUCTO NO
REGISTRADO');
Close;
end;
Ahora aquí tienes el código del evento Onclick del BitBtn2 (Cancelar)
Baya.... baya..... baya......baya.... por fin gracias a Dios hemos terminado con
este manual...... el sistema ya esta, es solo cuestión de que lo corras y listo.
Ojalá y te haya servido este manual de ser así me sentiré a gusto por que
significa que si cumplió con mi objetivo.
Mira puedes bajarte el Sistema de Ventas desde aquí, no incluyo el Exe para
que sea mas chico el tamaño del archivo comprimido, de cualquier forma al
correrlo Delphi te genera automáticamente el ejecutable
Página 83