Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Programa (Mini Tutorial) novatos (https://www.clubdelphi.com/foros/showthread.php?t=44763)

Caral 14-06-2007 00:42:13

Programa (Mini Tutorial) novatos
 
Primero que nada agradecer al club delphi por permitirme este espacio.
Este mini tutorial solo pretende explicar los conceptos básicos para empezar a trabajar con Delphi, para este se tendrán que tener algunos conocimientos mínimos, muy mínimos, como los míos, así que animo.
He de mencionar que en este ejemplo uso Access como base de datos, no solo por que es el que mas conozco sino por ser de mas fácil acceso al principio, en tal caso se podrá utilizar cualquier base de datos con este ejemplo.
Debo decir que soy como muchos de los que empiezan un novato (aunque digan lo contrario y de lo cual esto agradecido) y que hay muchas maneras de hacer lo mismo, esta es solo una de ellas y no necesariamente la mejor, os aconsejo que este lo toméis como un ejemplo mas (mini tutorial).
Recordad que se me puede pasar algo, así que preguntad sin problemas.
Insto a los maestros de este club, así como a todos los foristas a ayudar en este mini tutorial.
Este programa va a ser para el manejo de una cuenta bancaria:
Depósitos, cheques, transacciones, reportes (QReport).

Iniciemos por la base de datos, Access:
Creemos una nueva base de datos y creemos nuestra primera tabla, Usuarios:



Como veis la clave principal esta en CodUsuario.
Este nos va a servir para entrar en nuestro programa en Delphi.

Ahora creemos nuestra segunda tabla, Banco:



CodTransac = numérico, automático
Retiros, Depósitos, SaldoAnt, SaldoTotal = Numérico, Doble, automático.



Bueno ahora seguimos con Delphi:
Empecemos un nuevo proyecto:
Al primer Form lo vamos a llamar, Banco y lo vamos a guardar, en la carpeta que nos interese, puede ser en proyects, al unit lo vamos a llamar UBanco.
NOTA: Es muy importante ponerle nombres alusivos a los forms, units y demás componentes ya que se nos hará más fácil entender los programas (esto lo aprendí por supuesto en el club Delphi, donde mas).
Vamos a File, new, Datamodule, esto nos creara un datamodule1, lo guardamos en la misma carpeta del proyecto al unit lo vamos a llamar UDM.
Vamos a View Units, y veremos los dos units Ubanco y UDM creados, además de uno que se llama Proyect1, que es el unit por decirlo así principal.
Abrid el proyect1 y cambiad el orden de esta línea así:
Código Delphi [-]
Begin      
Application.Initialize;
Application.CreateForm(TDataModule1, DataModule1); Application.CreateForm(TBanco, Banco); 
Application.Run;    
End.
Como veis esto hace que el datamodule se inicialice primero.

Bueno seguimos con el datamodule:
Vamos a utilizar los componentes ADO, están en la paleta ado.
Por que estos componentes, porque así no tendremos problemas con alias, instalaciones y demás cosas que nos afecten a los novatos.
Bien colocamos en el datamodule un ADOConnection y le cambiamos el nombre a AC1. (Ado Connection 1), fácil de recordar.
Quedaría así:




Ahora vamos a tratar de conectarnos a la base de datos:
Le damos doble clic al AC1, y nos aparecerá esta pantalla:


Le damos clic a Build y aparecerá esta otra pantalla:


Como veis usaremos el Provider: Microsoft Jet 4.0 OLE Provider, le damos clic a Siguiente, esto nos pasara a la siguiente pestaña, Conexión:


Aquí le daremos clic al botón con tres puntos y buscaremos la base de datos en la carpeta donde la hallamos guardado, (recordad donde fue).
Ahora le daremos clic al botón Probar Conexión, si la conexión fue correcta, nos aparecerá una indicación diciendo que la prueba de conexión fue satisfactoria, dadle aceptar a todo para salir de estas pantallas, ya tenéis conexión Delphi, Access, que bien.
Bueno en el siguiente post Tratare de empezar con el programa.
Aqui esta la base de datos:
Edito: Aqui: http://www.terawiki.clubdelphi.com/D...32/Tutoriales/
Esta el codigo completo del tutorial, se llama (Mini Tutorial, novatos.zip)

Saludos

Caral 14-06-2007 01:51:45

Aquí volvemos:
Bueno empecemos con lo interesante, Delphi:
Ya tenemos el primer form creado Banco, a este le vamos a añadir varios componentes:
NOTA: Hay que tener en cuenta que los componentes conectores de las tablas, AdoTable, AdoQuery, datasource, pueden ir en el datamodule que creamos, simplemente dandole la direccion a estos desde el form, lo digo como comentario, en este caso los colocare directo en el form para facilitar el tutorial.
Aquí veréis más o menos los que van:


Detalle:
2- Panel, en uno, al caption le ponemos (Nuestro Banco), el otro vació.
1- ADOTable
Cambiar nombre por Banco
2- ADOQuery
a- Cambiar nombre por SumRet
b- Cambiar nombre por SumDep
Ya veremos la sentencia sql de estos
1- PopupMenu
Este nos servirá para los reportes, ya llegaremos.
3- Datasource
Conectar
1- Banco
2- SumRet
3- SumDep
5- Botones, los que prefiráis
Cambiarles el nombre por:
1- Nueva transacción
2- Aceptar Depósito
3- Aceptar Cheque, (Quedara escondido debajo de aceptar depósito.)
4- Reportes
5- Cancelar
1- DBNavegator. ( + )
1- DateTimePicker
Cambiar nombre por DTP1
1- ComBobox
Cambiar nombre por CBTipo
5- DBEdit
1- DBNTransac
2- DBDescrip
3- DBDeposit
4- DBRetiros, (Quedara escondido debajo de dbdeposit.)
5- DBSalAnt
1 Edit
Cambiar nombre por ESaltot
No os olvideis de colocar los labels necesarios, para identificar cada parte, seguid la foto como referencia.

Bueno ya tenemos esto ahora hay que ponerlo en marcha, en mi siguiente post lo haremos, además de hacer el login, el archivo ini, los reportes, huiii, si que falta, bueno un poco de paciencia.
Saludos

Caral 14-06-2007 05:49:28

Bueno, aquí sigo:
Antes de conectar los componentes abrimos un momento al datamodule y nos posesionamos en el AC1, aquí colocaremos en su opción loginPrompt en False, con esto no nos pedira contraseña la base de datos.
Ahora abramos el form Banco y conectemos los componentes a las tablas.

Empecemos con el AdoTable (Banco):
Coloquémonos en este, en el inspector de objetos buscaremos y pondremos lo siguiente:
1- Connection: DataModule1.AC1
Con esto lo que estamos haciendo es conectarnos al datamodule y al AdoConnection (AC1), al hacer esto se activara el componente y pasaremos al segundo paso.
2- TableName: Buscaremos con la flecha la tabla Banco.
3- Dale doble clic al AdoTable (Banco), te saldrá una pantallita pequeña, dale clic derecho y addFields, te saldrá otra pantallita, en esta veras todos los campos de la tabla, seleccionados, presiona OK, cierra la pantallita pequeña, ya tenemos conectado y listo el primer componente.

Conectemos el ADOQuery1 (SumRet):
1- Hagamos lo mismo que el paso 1 del componente anterior (conectarnos).
2- Estos componentes hacen la conexión a la tabla por medio de sentencia sql, por esta razón no tienen la propiedad tablename, pero tienen la propiedad SQL (TStrings) en donde trabajaremos.
Bien coloquémonos en esta, veremos un botón con tres puntos, al presionarlo nos saldrá una nueva pantalla (String List Editor) en esta escribiremos la siguiente sentencia:
Código SQL [-]
SELECT DISTINCTROW Sum([Banco].[Retiros]) AS [Suma De Retiros]
FROM Banco;
Con esta sentencia hacemos una distinción entre los campos, a la vez sumamos el campo Retiros y lo renombramos, presiona OK y listo.
3-Haremos lo mismo que el paso 3 del componente anterior, por supuesto con este ADOQuery1 (SumRet).

Conectemos el ADOQuery2 (SumDep):
1- Lo mismo que ADOQuery1 (SumRet):
2- Siguiendo los mismos pasos del componente ADOQuery1 (SumRet), pero pondremos esta sentencia sql:
Código SQL [-]
SELECT DISTINCTROW Sum([Banco].[Depósitos]) AS [Suma De Depósitos]
FROM Banco;
3- Haremos lo mismo que el paso 3 del componente anterior, por supuesto con este ADOQuery2 (SumDep).

Bueno ya tenemos la base de datos conectada y a su vez las tablas con todos sus campos en el lugar adecuado.
NOTA: Me han hecho el comentario al respecto de colocar el código y la base de datos de este mini tutorial, si obtengo el permiso del club, lo colocare al final del mismo.
En el siguiente post veremos más.
Espero todavía sigáis este y os sirva.

Saludos

Neftali [Germán.Estévez] 14-06-2007 10:53:53

Pues muchas gracias Caral.
Estaría bien (si no te importa), subir el código de ejempo al FTP y añadir el link.
¿Qué te parece?

Caral 14-06-2007 20:46:33

Aquí seguimos.
Primero darle las gracias a Neftali por su comentario y apoyo, con vuestro permiso subiere el código al momento de terminar este, la base de datos creo que es pequeña y se puede poner aquí mismo.
He modificado en primer post, para subir la base de datos, así podrán seguir esto desde el principio.
Saludos

Caral 14-06-2007 21:52:29

Bueno aquí estoy de nuevo.
Ya nos conectamos a la base de datos ahora conectaremos los DBEdit a sus respectivos componentes.
Ya teníamos conectados los datasource con su respectivo componente ADO, esto lo vimos en el segundo post (revisadlo), de todos modos recordad que se conectan en su propiedad DataSet, con la flechita.
Ahora conectaremos los DBEdit a los DataSource.
NOTA: Quiero hacer notar que también se pueden obtener los dbedit directamente de los componentes Ado, recordáis la pantallita pequeña en donde están los campos, pues con solo seleccionarlos y paradlos al form quedaran listos y activados, este procedimiento es efectivo pero en mi caso prefiero hacer una colocación de los componentes primero y luego la activación de los mismos, es un asunto de gustos, pero de todos modos quise daros la explicación del caso.
Sigamos:
Primero recordad que a los DBEdit se les cambio el nombre así que usare estos (post 2).
1- DBNtransac:
Datasource = Datasource1
DataField = CodTransac
2- DBDescrip:
Datasource = Datasource1
DataField = Descripción
3- DBDeposit:
Datasource = Datasource1
DataField = Depósitos
4- DBRetiros:
Datasource = Datasource1
DataField = Retiros
5- DBSalAnt
Datasource = Datasource1
DataField = SaldoAnt
Listos y conectados, podéis cambiarles el tipo de letra y tamaño en su propiedad Font, bueno hay muchas cosas mas que se pueden hacer, seguro ya experimentareis.

El componente ComBobox (CBTipo):
Nos posesionamos en este y en su propiedad Items (TString) presionaremos el botón, con esto nos saldrá otra pantalla, en esta escribiremos lo siguiente:
Uno debajo del otro:
Retiros
Depósitos
Y presionamos OK en esta pantalla
Su propiedad ItemIndex tiene que estar en -1, con esto aparecerá en blanco obligando a escoger una de las dos opciones (podéis experimentar con esta veréis los resultados).

El componente DBNavigator :
Posesiónense en el y en su propiedad VisibleButtons presione el signo +, cambie a False todos los tipos con la flecha excepto el que dice NBInsert, este quedara True.
En su propiedad DataSource pondremos con la flecha DataSource1.

Bueno por ahora no hemos escrito nada de código (Delphi lo hace todo) pero ya estamos a punto de poner esto en marcha.
Espero sigáis este y no os aburráis con mis explicaciones, trato de ser lo mas explicito posible.
Saludos

Caral 14-06-2007 22:50:21

Bueno un poquito de código, aquí es donde me corrigen los maestros del Club, con mucho gusto acepto sus criticas.
Empecemos:
Nos posicionamos en el form Banco y le damos doble clic, con esto no llevara a su evento OnFormCreate, en donde ponemos esto:
NOTA: El código esta explicado:
Código Delphi [-]
procedure TBanco.FormCreate(Sender: TObject);
begin
   DTP1.DateTime:= now; // inicio la fecha al dia de hoy
   Banco.Active := True; // activo la tabla
   Banco.Last;  // le indico que lea el ultimo registro
   SumRet.Active := True; // activo el query
   SumDep.Active := True; // activo el query
   // coloco el resultado de (SumDep - SumRet) en el edit
   ESalTot.Text := FloatToStr((SumDep.Fields[0].AsFloat) - SumRet.Fields[0].AsFloat);
   // establecemos los dbedits como desactivados
   DBNTransac.Enabled := False;
   DBDescrip.Enabled := False;
   DBRetiros.Enabled := False;
   DBDeposit.Enabled := False;
   DBSalAnt.Enabled := False;
   // Deshabilitamos el combobox
   CBTipo.Enabled:= False;
   // Deshabilitamos el navegador
   DBNavigator1.Enabled := False;
   // escondemos los botones, con esto evitamos cometer errores
   BRetiros.Visible := False;
   BDeposito.Visible := False;
end;

Ahora le damos doble clic al boton Cancelar, este es el evento OnClick, ponemos esto:
Código Delphi [-]
procedure TBanco.BcancelaClick(Sender: TObject);
begin
   Close; // cerramos el programa
end;
NOTA: Este código lo voy probando, osea que se puede cortar y pegar, sugiero escribirlo, se aprende mejor.
Seguimos con lo demás en el siguiente post.
Saludos

Caral 14-06-2007 23:42:03

Vamos con dos partes mas:
Recordad que se cambio el caption a los botones asea el titulo, no me explique bien en el segundo post en ese punto, espero me lo disculpéis un dedazo. :D
El nombre (Name) de cada botón lo iré poniendo según se requiera entre paréntesis.
El botón Nueva Transacción (BNTrans):
En el evento OnClick:
Código Delphi [-]
procedure TBanco.BNTransClick(Sender: TObject);
begin
   // desactivo las tablas, esto es por si hemos hecho
   // alguna transaccion anterior
   Banco.Active := False;
   SumRet.Active := False;
   SumDep.Active := False;
   // confirmo que los botones estan escondidos
   BRetiros.Visible := False;
   BDeposito.Visible := False;
   // activo la tabla y querys
   Banco.Active := True;
   SumRet.Active := True;
   SumDep.Active := True;
   Banco.Last;
   // activo el combobox
   CBTipo.Enabled:= True;
   // activo el dbnavegator, con este ya se puede insertar un nuevo registro
   DBNavigator1.Enabled := True;
end;

Ahora el DBNavigator (DBNavigator1):
En el evento OnClick:
Código Delphi [-]
procedure TBanco.DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
begin
    // aqui vamos a definir el tipo de dato que se ingresa
    // para esto usaremos el combobox.
    case CBTipo.ItemIndex of
     0 : begin
         // activamos los dbedit
         DBNTransac.Enabled := True;
         DBDescrip.Enabled := True;
         DBRetiros.Enabled := True;
         DBDeposit.Enabled := False;
         // escondemos y presentamos
         DBRetiros.Visible:= true;
         DBDeposit.Visible:= False;
         end;
     1 : begin
         // activamos los dbedit
         DBNTransac.Enabled := True;
         DBDescrip.Enabled := True;
         DBDeposit.Enabled:= True;
         DBRetiros.Enabled := False;
         // escondemos y presentamos
         DBDeposit.Visible:= True;
         DBRetiros.Visible:= False;
         end;

end;
Bueno, ya se pueden hacer varias cosas con el programita pero todavía falta algo de camino, por ejemplo el calculo de ingresos (Depósitos) menos egresos (Retiros), ya casi vamos, ademas de los reportes.
Saludos

Caral 15-06-2007 00:10:59

Vamos con otro componente:
El Combobox (CBTipo):
En el evento ONChange:
Código Delphi [-]
procedure TBanco.CBTipoChange(Sender: TObject);
begin
    // Aqui activamos y desactivamos opciones
    case CBTipo.ItemIndex of
     0 : begin
        BDeposito.Visible:= False; // escondemos el boton deposito (BDeposito)
        BRetiros.Visible:= True; // hacemos visible el boton retiros (BRetiros)
        CBTipo.Enabled:= False; // Deshabilitamos  el combobox, evitamos errores
        DBNavigator1.Enabled:= True; // avilitamos el navegador
         end;
     1 : begin
        BRetiros.Visible:= False; // Escondemos el boton retiros (BRetiros)
        BDeposito.Visible:= True; // Hacemos visible el boton deposito (BDeposito)
        CBTipo.Enabled:= False; // Deshabilitamos  el combobox, evitamos errores
        DBNavigator1.Enabled:= True; // avilitamos el navegador
         end;
end;
end;
Este lo puse solito por que vienen los grandes, depósitos y retiros.:D
Saludos

Caral 15-06-2007 02:04:00

Aquí vamos con el primero, es realmente facil.
NOTA: Tanto para depositos como para los retiros en este estamos usando dos botones, escondiéndolos de vez en cuando, esto se puede hacer con un solo boton o de muchas maneras mas, en este caso lo hago así en recordatorio de como aprendí, bueno sigo aprendiendo, pero tómenlo en cuenta.
Boton Depositos, (BDeposito):
Código Delphi [-]
procedure TBanco.BDepositoClick(Sender: TObject);
  // hay otras maneras de hacer esto, por ejemplo con campos calculados
  // en este minitutorial lo hare con variables, son faciles de entender
    var
    n1,n2,sal,t1,salt: real; // estas las usaremos para hacer los calculos
 begin
   If DBNTransac.Text = '' then // aqui envio un mensaje si esta vacio el dbdeit
   begin
   MessageBox(Handle,
             PChar('Tiene que Indicar el numero de Deposito'),
             PChar(''),
             MB_OK + MB_ICONSTOP + MB_DEFBUTTON1 + MB_APPLMODAL);
   end
   else // de lo contrario hago lo que sigue
   begin
    Banco.Fields[2].AsString:= 'Dep'; //Con esto le coloco la palabra Dep.
    n1:= SumRet.Fields[0].AsFloat; // aqui se le asigna el valor a n1 Retiros
    n2:= SumDep.Fields[0].AsFloat; // aqui se le asigna el valor a n2 depositos
    t1:= StrTofloat(DBDeposit.Text); // aqui se le asigna el valor a t1 DBDeposito
    sal:= n2 - n1; // aqui se hace la primera operacion y se asigna a sal
    DBSalAnt.Text:= floatToStr(sal); // aqui se indica que sal = a DBSalAnt
    salt:= (t1 + sal);  // aqui se hace la segunda operacion y se asigna a salt
    Banco.Fields[8].AsFloat:= salt; // aqui le doy el valor de salt
    Begin
    Banco.Fields[3].AsDateTime:= DTP1.Date; // establezco la fecha
    Banco.Edit; // edito la tabla
    Banco.Post; // guardo los resultados
    // Deshabilitamos los dbdeit
    DBNTransac.Enabled := False;
    DBDescrip.Enabled := False;
    DBDeposit.Enabled:= False;
    DBRetiros.Enabled := False;
    DBSalAnt.Enabled:= False;
    // escondemos los botones
    BDeposito.Visible:= False;
    BRetiros.Visible:= False;
    // colocamos el combobox vacio y lo deshabilitamos
    CBTipo.Text := ' ';
    CBTipo.Enabled := False;
    // deshabilitamos el navegador
    DBNavigator1.Enabled := False;
    // cerramos las tablas, o las desactivamos
    Banco.Active := False;
    SumRet.Active := False;
    SumDep.Active := False;
    // abrimos de nuevo las tablas, con esto se actualizan
    Banco.Active := True;
    SumRet.Active := True;
    SumDep.Active := True;
    Banco.Last; // vemos el ultimo registro
    // colocamos el nuevo resultado en el edit
    ESalTot.Text := FloatToStr((SumDep.Fields[0].AsFloat) - SumRet.Fields[0].AsFloat);
    end;
       end;
           end;
Ya podeis entrar cifras y probar, el boton de retiros es practicamente el mismo codigo, aun asi lo colocare.
Saludos

Caral 15-06-2007 19:13:31

Aqui sigo, no se si alguien estará siguiendo este minitutorial, pero la intención es lo que cuenta.
Ya se hizo el código del botón depósitos, ahora necesitamos el botón retiros o Cheques.
Como dije en el post anterior, estos códigos son casi idénticos, casi, vamos a poner el código de este botón y fijaros en las sutiles diferencias, de echo copie y pegue el código del botón depósitos y solo le cambie estas diferencias, revisad lo y las encontrareis.
Botón Cheques (BRetiros):
Código Delphi [-]
procedure TBanco.BRetirosClick(Sender: TObject);
  // hay otras maneras de hacer esto, por ejemplo con campos calculados
  // en este minitutorial lo hare con variables, son faciles de entender
    var
    n1,n2,sal,t1,salt: real; // estas las usaremos para hacer los calculos
 begin
   If DBNTransac.Text = '' then // aqui envio un mensaje si esta vacio el dbdeit
   begin
   MessageBox(Handle,
             PChar('Tiene que Indicar el numero de Cheque'),
             PChar(''),
             MB_OK + MB_ICONSTOP + MB_DEFBUTTON1 + MB_APPLMODAL);
   end
   else // de lo contrario hago lo que sigue
   begin
    Banco.Fields[2].AsString:= 'Che'; //Con esto le coloco la palabra Che.
    n1:= SumRet.Fields[0].AsFloat; // aqui se le asigna el valor a n1 Retiros
    n2:= SumDep.Fields[0].AsFloat; // aqui se le asigna el valor a n2 depositos
    t1:= StrTofloat(DBRetiros.Text); // aqui se le asigna el valor a t1 DBRetiros
    sal:= n2 - n1; // aqui se hace la primera operacion y se asigna a sal
    DBSalAnt.Text:= floatToStr(sal); // aqui se indica que sal = a DBSalAnt
    salt:= (sal - t1);  // aqui se hace la segunda operacion y se asigna a salt
    Banco.Fields[8].AsFloat:= salt; // aqui le doy el valor de salt
    Begin
    Banco.Fields[3].AsDateTime:= DTP1.Date; // establezco la fecha
    Banco.Edit; // edito la tabla
    Banco.Post; // guardo los resultados
    // Deshabilitamos los dbdeit
    DBNTransac.Enabled := False;
    DBDescrip.Enabled := False;
    DBDeposit.Enabled:= False;
    DBRetiros.Enabled := False;
    DBSalAnt.Enabled:= False;
    // escondemos los botones
    BDeposito.Visible:= False;
    BRetiros.Visible:= False;
    // colocamos el combobox vacio y lo deshabilitamos
    CBTipo.Text := ' ';
    CBTipo.Enabled := False;
    // deshabilitamos el navegador
    DBNavigator1.Enabled := False;
    // cerramos las tablas, o las desactivamos
    Banco.Active := False;
    SumRet.Active := False;
    SumDep.Active := False;
    // abrimos de nuevo las tablas, con esto se actualizan
    Banco.Active := True;
    SumRet.Active := True;
    SumDep.Active := True;
    Banco.Last; // vemos el ultimo registro
    // colocamos el nuevo resultado en el edit
    ESalTot.Text := FloatToStr((SumDep.Fields[0].AsFloat) - SumRet.Fields[0].AsFloat);
    end;
       end;

end;
Como veis son casi exactos.
Ya podéis ingresar depósitos y hacer retiros (cheques), hasta aquí va funcionando bien, espero os sirva de algo.
Saludos

Caral 15-06-2007 20:34:59

Ya que tenemos el programa funcionando seguro no queremos que ingrese alguien sin autorización, pues vamos a hacer el login.
Primero vamos a File, New, Form.
Colocamos en el:
1- AdoQuery (ADLogin).
2- Edit
EUsuario
EClave
2- botones
BtnOk
BtnCancel
Y sus respectivos label indicativos.
Quedaria algo asi:


Lo guardamos con el nombre Flogin y el unit UFlogin.
Ahora para llamar a esta pantalla, le hacemos unos ligeros cambios al form Banco.
En el evento Onformcreate de este añadimos en la primera linea el siguiente codigo, quedaria asi:
Código Delphi [-]
procedure TBanco.FormCreate(Sender: TObject);
begin
    // Muestra la pantalla de Login
   FLogin:=TFLogin.Create(self);
   try
   FLogin.ShowModal;
   finally
   FLogin.Free;
   end;

   DTP1.DateTime:= now; // inicio la fecha al dia de hoy
   Banco.Active := True; // activo la tabla
   Banco.Last;  // le indico que lea el ultimo registro
   SumRet.Active := True; // activo el query
   SumDep.Active := True; // activo el query
   // coloco el resultado de (SumDep - SumRet) en el edit
   ESalTot.Text := FloatToStr((SumDep.Fields[0].AsFloat) - SumRet.Fields[0].AsFloat);
   // establecemos los dbedits como desactivados
   DBNTransac.Enabled := False;
   DBDescrip.Enabled := False;
   DBRetiros.Enabled := False;
   DBDeposit.Enabled := False;
   DBSalAnt.Enabled := False;
   // Deshabilitamos el combobox
   CBTipo.Enabled:= False;
   // Deshabilitamos el navegador
   DBNavigator1.Enabled := False;
   // escondemos los botones, con esto evitamos cometer errores
   BRetiros.Visible := False;
   BDeposito.Visible := False;
end;
Esto le indica al programa que busque el loguin.
Ahora en el evento OnformShow de este mismo (Banco):
Código Delphi [-]
procedure TBanco.FormShow(Sender: TObject);
begin
    If not LoginOK then Close;
end;
Esta indicacion es para que si no esta autorizado no se conecte.

Vamos al form (FLogin):
Siguiendo los mismos pasos que en los ADoquery que tenemos en el form Banco, vamos a clocar esta sentencia sql en el string de ADLogin:
Código SQL [-]
SELECT CodUsuario, Nombre, Clave  FROM Usuarios WHERE
Nombre = nom

Demosle doble clic a FLogin, en el evento OnCreate:
Código Delphi [-]
procedure TFLogin.FormCreate(Sender: TObject);
begin
   Cuenta := 0;
   Usuario := '';
   Nombre := '';
end;

Lo que sigue sera en los eventos OnClick. de los botones.
Demosle doble clic al boton Cancelar:
Código Delphi [-]
procedure TFLogin.BtnCancelClick(Sender: TObject);
begin
   LoginOK := False;
   Close;
end;

Demosle doble clic al boton OK:
Código Delphi [-]
procedure TFLogin.BtnOkClick(Sender: TObject);
begin
   LoginOK := False;
   ADLogin.Parameters.ParamByName('nom').Value:= EUsuario.Text;
   ADLogin.Active:= True;
   EUsuario.Text:= ADLogin.Fields[1].AsString;
   If ADLogin.RecordCount < 1 then
    Begin
       Cuenta := Cuenta + 1;
       MessageDlg('Usuario no encontrado',mtError, [mbOK], 0);
       EUsuario.Text := '';
       EClave.Text := '';
       ADLogin.Active := False;
       If Cuenta = 3 then Close;
    end
   else
       If ADLoginClave.AsString = EClave.Text then
        Begin
          // Usuario := AdoQuery1CodUsuario.AsString;
           LoginOk := True;
           Nombre := ADLoginNombre.AsString;
           ADLogin.Active := False;
           Close;
        end
     else
         Begin
           Cuenta := Cuenta + 1;
           MessageDlg('Clave Inválida',mtError, [mbOK], 0);
           EClave.Text := '';
           ADLogin.Active := False;
           If Cuenta = 3 then Close;
         end;

end;

Vamos a colocar unas variables, aqui:
Código Delphi [-]

var
  FLogin: TFLogin;
  Cuenta : integer;
  Usuario, Nombre : String;
  LoginOK : boolean;

implementation
Este no le he querido comentar mucho para que os familiaricéis con el código, asi aprendemos mejor.
Ahora abrid la tabla, colocar un usuario y clave y probad el programa.
Saludos

Caral 16-06-2007 01:08:59

Bueno ahora lo que queda es hacer un par de reportes y listo, para eso haré alguno que otro cambio.
Para que esto no se haga mas grande he decidido hacer los ligeros cambios y colocarlo, en esta dirección: http://terawiki.clubdelphi.com/Delph...niTutorial.zip
El programa se llama (Caral-MiniTutorial. zip)
Este contiene todo el código ademas de la base de datos.
Espero os sirva y le saquéis provecho.
Saludos y suerte

tenporal 17-07-2007 07:51:50

Una sugerencia de aplicacion
 
Saludos Caral, de verdad se agradecen tus ganas de compartir a la comunidad consejos muy utiles para los que se inician en Delphi.

Mi peticion a ti y a los programadores avanzados seria la siguiente:

Realizar una aplicacion paso a paso con las opciones siguientes: materias, profesores, grupos, alumnos. Que la base de datos estuviese en access con el nombre BD, con las siguientes tablas:

TABLA MATERIAS
Campo Tipo Longitud
cvemateria Alfanumerico 5 *campo llave
semestre Alfanumerico 1
materia Alfanumerico 50
*** un ejemplo podria ser 1101, 1, MATEMATICAS

TABLA PROFESOR
campo tipo Longitud
cveprofesor Alfanumerico 3 * campo llave (iniciales)
apellidop Alfanumerico 25
apellidom Alfanumerico 25
nombre Alfanumerico 25
*** un ejemplo podria ser JPL, PEREZ, LOPEZ, JUAN

TABLA GRUPOS
campo tipo longitud
ciclogrupomatprof Alfanumerico 17 *llave compuesta
observaciones Alfanumerico 50
*** un ejemplo podria ser 2007A1020 1101JPL, grupo especial
*** la llave compuesta seria (ciclo-escolar de 5 alfanumericos, grupo de 4 alfanumericos, materia de 5 alfanumericos, profesor de 3 alfanumericos)

TABLA ALUMNOS
campo tipo longitud
cvealumno A 10 *campo llave
ciclo A 5
grupo A 4
cvemateria A 5
cveprofesor A 3
calificacion A 2
observacion A 50

Esas serian las tablas de la base de datos.

Para las opcion de MATERIAS, pudiesemos tener los botones:
Nuevo (agregar una nueva materia, no puede haber 2 repetidas)
Modificar (cambiar los datos de una materia sin cambiar su clave)
Buscar (mostrar los datos de una materia especifica)
Eliminar (Solo se pueden eliminar las materias que no tengan grupos asignados, vease tabla grupos)
Salir (salir de la pantalla de Materias)

Los campos de esta pantalla deben manejarse con los componentes DBEDIT, accesandolos a traves de ADO

Hago esta peticion, por que trate de seguir la aplicacion de Bancos, pero llego el punto en que me perdi y creo que la aplicacion que propongo esta mas facil, espero su respuesta a mi peticion, Gracias por su apoyo.

Atte. Tenporal

Caral 17-07-2007 22:42:47

Hola tenporal
Te aconsejo que empieces la aplicacion que necesitas en un nuevo hilo, no importa si esta bien o mal, lo importante es que la comiences, con tus dudas incluidas.
Puede ser algo como:
Mi Aplicacion para el colegio, o algo asi.
Cuando empieces, ya le trataremos de meter mano, es mucho mejor, asi aprenderas, siguiendo lo que empieces.
Si hago todo yo o alguien mas es como hacer la tarea, no se trata de eso.:)
Saludos

nachopro 12-08-2007 09:50:36

Caral, Excelente... logré conectar con ADO mi ejemplo a MySQL vía OBDC

Me gustaría tener el código fuente de esta aplicación porque hay cosas que se me pierden.... (soy nuevo, 2 días en Delphi) y quiero tenerlas bien claras, y dado que el link no funciona aquí estoy

espero que sigas teniendo la fuente, muchas gracias

Caral 12-08-2007 16:30:40

Hola
El ftp del club a tenido ciertos problemas, no te preocupes ya se van a solucionar.
Saludos

nachopro 13-08-2007 06:11:07

Caral, se complica mucho si te pido que lo subas a rapidshare o me lo envíes por mail?

izar 31-12-2007 02:58:37

Buen tutorial. Gracias.

ctrl_attack 17-01-2008 09:33:08

bien
 
excelente tutorial, me ha servido de mucho, muchas gracias, por cierto, me encontre con un error, en el query adlogin, me decia que el parametro nom no tenia valor, asi que le puse null y se arreglo, pero como no sabia en un principio, me daba de topes, :pjejeje, por cierto, una pregunta a lo mejor torpe jeje:D, me podrias decir como hacerle en el form de login que al dar enter, verifique la clave, ya para no tener que andarle pulsando con el mause a el boton ok, de antemano muchas gracias por tu ayuda


La franja horaria es GMT +2. Ahora son las 20:03:08.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi