Ir al contenido


Foto

Ya comenzamos


  • Por favor identifícate para responder
51 respuestas en este tema

#21 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 08 abril 2009 - 09:18

Hola

Intenta con esto,  vi algunos detalles que no estaban bien codificados.



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. //NO necesitas poner VAR para cada variable
  3. var
  4.   user,pass,nombre,query: string;
  5.   iuser : Integer;
  6. begin
  7.   if ComboBox1.Text = 'Usuario' then
  8.      Application.MessageBox(pchar('' +#13#10+
  9.                                   'Selecciona' +#13#10+
  10.                                   'un usuario'),
  11.                                   pchar(' Error '),0+16+0+4096)
  12.   else
  13.      if Edit1.Text = 'Contraseña' then
  14.         Application.MessageBox(pchar(  ''+#13#10+
  15.                                'Por favor ingresa'+#13#10+
  16.                                '  Tu password'),
  17.                                pchar(' Error '),0+32+0+4096)
  18.      //Necesitas encerrar todo el bloque de código involucrado
  19.      else begin
  20.             user  := ComboBox1.Text ;
  21.             pass  := Edit1.text      ;
  22.             query := 'SELECT nombre,id_usuario FROM usuario '+
  23.                      'WHERE usuario.usuario = '+
  24.                      QuotedStr(user)+ ' and usuario.password = '+
  25.                      QuotedStr(pass);
  26.             AdoQuery1.SQL.Text:=query;
  27.             AdoQuery1.Open; //En lugar de Active := True
  28.             //NO necesitas recorrer el dataset con while not.....
  29.             if ADOQuery.RecordCount > 0 then begin
  30.                nombre := AdoQuery1.Fields[0].Text;
  31.                Application.MessageBox(pchar(  ''+#13#10+
  32.                                               ' Bienvenido '+#13#10+
  33.                                                nombre),
  34.                                                pchar('Grupo Empresarial Suma'),
  35.                                                0+0+0);
  36.             end;
  37.             AdoQuery1.Close; //En lugar de Active := False
  38.      end;
  39. end;



Salud OS

  • 0

#22 root

root

    mister

  • Miembro Platino
  • PipPipPip
  • 529 mensajes
  • LocationMexico D.F:

Escrito 08 abril 2009 - 09:58

Ok si tatalmente de acuerdo en esos detalles
ademas pss si me merezco un soplamocos por no estructurar bien

ahora la sig pregunta es como cargo el siguiente formulario ??




  • 0

#23 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 08 abril 2009 - 10:04

Dentro de la condición que valida la contraseña del usario y te permite ingresar coloca:



delphi
  1. Form2.ShowModal; //Carga el segundo formulario desde el primero




  • 0

#24 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 08 abril 2009 - 10:46

Hola

Lo que vamos a hacer es comenzar con lo básico y desde el principio.

Adjunto un pequeño ejemplo que te servirá de base para continuar con lo demas.

El usuario es egostar y la contraseña es delphiaccess, dale un vistazo para que veas el funcionamiento y en base a eso podremos continuar.

Salud OS

Archivos adjuntos

  • Archivo adjunto  405_.zip   177,43KB   2 descargas

  • 0

#25 root

root

    mister

  • Miembro Platino
  • PipPipPip
  • 529 mensajes
  • LocationMexico D.F:

Escrito 08 abril 2009 - 03:59

Ok creo ya corregi todo lo que havia que corregir
PERO
ahora me dice que el query no regresa ningun valor
les paso el dato para que lo leean y me digan que cren que sea


delphi
  1.           AdoQuery1.Close;
  2.           AdoQuery1.sql.Clear ;
  3.           oper := '"acceso al sistema"';
  4.           query :=  'insert into control(iuser, evento, fecha) values ('
  5.                       + iuser
  6.                       +', '
  7.                       + oper
  8.                       +', now());';
  9.           AdoQuery1.SQL.Text := query ;
  10.           AdoQuery1.Open ;
  11.           AdoQuery1.Close ;




  • 0

#26 root

root

    mister

  • Miembro Platino
  • PipPipPip
  • 529 mensajes
  • LocationMexico D.F:

Escrito 08 abril 2009 - 04:16

Master egostar
ya revise el ejemplo
pero a ver por ejemplo no entendí­ del todo

lo que pasa es que tu desde el form2
llamas a otro form donde se hace la validación
si no se valida pelas mikey mouse termina
pero es desde el form2

si estoy bien o mejor dejo de inhalar aire comprimido  :


  • 0

#27 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 08 abril 2009 - 08:31

Master egostar
ya revise el ejemplo
pero a ver por ejemplo no entendí­ del todo

lo que pasa es que tu desde el form2
llamas a otro form donde se hace la validación
si no se valida pelas mikey mouse termina
pero es desde el form2

si estoy bien o mejor dejo de inhalar aire comprimido  :


Hola

La cuestion es así­:

Tenemos dos forms, Form1 que es (será) la principal y Form2 que es la ventana de Login.

Utilizamos el evento OnShow de la Forma Principal (Form1) para "lanzar" la ventana de Login.


delphi
  1. procedure TForm1.FormShow(Sender: TObject);
  2. begin
  3.   // Evento que se ejecuta en el momento que se muestra la Forma Principal (Form1)
  4. end;



Se muestra La ventana de Login donde generamos una función de tipo Booleana donde harémos la consulta de la base de datos para determinar si los datos capturados en los TEdit son correctos.



delphi
  1. function TForm2.ValidaUsuario: Bool;
  2. begin
  3.   //Aqui metes el code de validacion que estas usando
  4.   if usuario.text = 'egostar' then begin
  5.     if password.text = 'delphiaccess' then begin
  6.         result := true;
  7.     end
  8.     else begin
  9.             result := false;
  10.     end;
  11.   end
  12.   else begin
  13.         result := false;
  14.   end;
  15. end;
  16.  
  17. procedure TForm2.BitBtn1Click(Sender: TObject);
  18. begin
  19.   if ValidaUsuario then
  20.     ModalResult := mrOK //Si es correcto regresamos el ModalResult OK
  21.   else ModalResult := mrCancel; //Si NO es correcto regresamos el ModalResult Cancel
  22. end;



Si los datos son correctos, mostramos la Forma Principal (Form1). En caso contrario, cerramos la aplicación.



delphi
  1. procedure TForm1.FormShow(Sender: TObject);
  2. begin
  3.   Form2.ShowModal;
  4.   if Form2.ModalResult = mrOK then begin
  5.     ShowMessage('Bienvenido usuario: ' + Form2.usuario.Text);
  6.   end
  7.   else begin
  8.         ShowMessage('Password o Usuario invalido!');
  9.         Close;
  10.   end;
  11. end;



Espero haber sido claro :)

Salud OS

  • 0

#28 root

root

    mister

  • Miembro Platino
  • PipPipPip
  • 529 mensajes
  • LocationMexico D.F:

Escrito 13 abril 2009 - 08:10

sip ya capte como esta el pexx

lo que si note es que si quiero llamar a un segundo form
tengo que declararlo en


delphi
  1. implementation
  2. uses unit2 ;



y asi ya puedo abrir el segundo form
otra cosa que tambien descubri es que
si quiero hacer un insert en la base de datos
no devo de hacerlo desde el
AdoQuery

sino desde un

AdoCommand

ya que el AdoQuery siempre espera una respuesta y por ejemplo el


delphi
  1.             CommandText := 'insert into control(iuser, evento, fecha) values ('
  2.                       + iuser
  3.                       +', '
  4.                       + oper
  5.                       +', now());';


no me da una respuesta por parte de la base de datos

ahora otra pregunta que tengo es

por cuestiones de limpieza.
ya saben memoria ciclos de CPU etc etc
es conveniente
a) solo hacer invisible el form
b) destruirlo ??

en el caso "a" seria solamente declarar el form 1 en el form 2
y luego decirlo
form1.visible := false
en el caso "b" como seria ??

GRACIAS

NOTA :
no soy tonto nomas lento


jajajjajaja



  • 0

#29 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 13 abril 2009 - 08:20

La mejor opción es liberar el form para así­ poder llamarlo de nuevo, en el evento onClose del Form colocas esto:



delphi
  1. Action := caFree;



De ese modo se libera de la memoria.

Saludos.
  • 0

#30 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 13 abril 2009 - 08:51

Por partes amigo enecumene, :)

Necesitas enseñarle como crear el formulario en tiempo de ejecución y ya despues liberarlo de memoria :)

Salud OS
  • 0

#31 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 13 abril 2009 - 09:00

Por partes amigo enecumene, :)

Necesitas enseñarle como crear el formulario en tiempo de ejecución y ya despues liberarlo de memoria :)

Salud OS


Pues por la pregunta supuse que él ya aprendió cómo llamar o crear un formulario en tiempo de ejecución.  :$

Saludos.
  • 0

#32 root

root

    mister

  • Miembro Platino
  • PipPipPip
  • 529 mensajes
  • LocationMexico D.F:

Escrito 13 abril 2009 - 09:09

sip

digo a ver esa parte no la entendi
formulario es formulario y la parte de crearlo en tiempo de ejecucion ??? hay fue donde no entendi

por que los formularios
Segun yo

se crean desde el explorador de objetos, y se llaman desde el codigo.
si creara el formulario desde el codigo
tendria que crear toooodos los objetos en el ( a mano ) y pues la programacion orientada a objetos no tendria mucho caso no ??

o si ando herrado
Recuerden que a la juventud no se le reprime se le orienta, y soy novato.
  • 0

#33 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 13 abril 2009 - 09:19

Hola

Los formularios los creas en tiempo de diseño, sin embargo y para ahorrar memoria, puedes indicarle que los formularoios se van a crear (mostrar) en tiempo de ejecución, en el ejemplo que te puse, lo abres y en Project, Options, Forms, vas a ver las formas 1 y 2 dentro de la opción Auto-Create Forms esto crea todos los Formularios en el momento que ejecutas la aplicación, para crearlos dinamicamente, pasa Form2 a la derecha Available Forms.

Y para crearlo en tiempo de ejecución habrá que agregar esto:



delphi
  1.   Form2 := TForm2.Create(nil); //Creamos el Formulario
  2.   Form2.ShowModal;
  3.   if Form2.ModalResult = mrOK then begin
  4.      ShowMessage('Bienvenido usuario: ' + Form2.usuario.Text);
  5.   end
  6.   else begin
  7.          ShowMessage('Password o Usuario invalido!');
  8.          Close;
  9.   end;
  10.   Form2.Free; //Liberamos el formulario de memoria



Salud OS
  • 0

#34 root

root

    mister

  • Miembro Platino
  • PipPipPip
  • 529 mensajes
  • LocationMexico D.F:

Escrito 13 abril 2009 - 11:43

a ver
otra mega pregunta que me surgio

si declaro una variable y la trato de llenar con un el resultado de un Query pero el resultado es numerico
lo puedo recuperar como siempre ?
varible := AdoQuery1.Fields[0].Text ;
por que en la base de datos el dato es FLOAT
Me marca error
dice incompatlble types string and Extendend




  • 0

#35 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 13 abril 2009 - 12:23

a ver
otra mega pregunta que me surgio

si declaro una variable y la trato de llenar con un el resultado de un Query pero el resultado es numerico
lo puedo recuperar como siempre ?
varible := AdoQuery1.Fields[0].Text ;
por que en la base de datos el dato es FLOAT
Me marca error
dice incompatlble types string and Extendend


Lo que tienes que hacer es lo siguiente:



delphi
  1. Var
  2.   VariableFloat: Real;
  3.  
  4. begin
  5.    VariableFloat := AdoQuery1.Fields[0].Value; //Opcion 1
  6.    VariableFloat := AdoQuery1.Fields[0].AsFloat; //Opcion 2
  7. end;



Salud OS
  • 0

#36 root

root

    mister

  • Miembro Platino
  • PipPipPip
  • 529 mensajes
  • LocationMexico D.F:

Escrito 13 abril 2009 - 01:05

ok
pero entonces

ahora surge la sig duda no puedo usar el VALOR del query
en un siguiente query
mira


delphi
  1.   public
  2.     { Public declarations }
  3.     var idcuenta:real;





delphi
  1. procedure TForm2.Button1Click(Sender: TObject);
  2. var trabajador :string ;
  3. begin
  4. if
  5.   Edit1.Text <> '' then
  6.   trabajador := Edit1.Text ;
  7.   AdoQuery1.sql.text := 'select cuenta.folio, cuenta.id_cuenta from cuenta where cuenta.ifolio=' + trabajador + ' order by cuenta.folio' ;
  8.   AdoQuery1.Open;
  9.   While not AdoQuery1.Eof do
  10.   begin
  11.   ComboBox1.Items.add(AdoQuery1.Fields[0].text);
  12.   AdoQuery1.Next  ;
  13.   idcuenta := AdoQuery1.Fields[1].value ;
  14.   AdoQuery1.Close
  15.  
  16.   END;
  17. END;




delphi
  1. procedure TForm2.ComboBox1Select(Sender: TObject);
  2. var saldo : Real  ;
  3. begin
  4. AdoQuery1.SQL.Text := 'Select cuenta.folio, cuenta.no_credito, cuenta.nombre, cuenta.comercio, status.status  from cuenta Inner Join status On cuenta.id_status=status.id_status where cuenta.id_cuenta = ' +  idcuenta  ;
  5. AdoQuery1.Open;
  6. if ADOQuery1.RecordCount > 0 then begin  ;
  7.   label9.Caption:= AdoQuery1.Fields[0].Text;
  8.   label10.Caption:= AdoQuery1.Fields[1].Text ;
  9.   label11.Caption:= AdoQuery1.Fields[2].Text ;
  10.   label12.caption:=Adoquery1.Fields[3].text;
  11.   label13.caption:=AdoQuery1.Fields[4].Text ;
  12.   AdoQuery1.Close ;
  13.   AdoQuery1.Open ;
  14.   Adoquery1.SQL.Text:= 'SELECT saldo.saldo FROM saldo Where saldo.id_cuenta =  '+ idcuenta;
  15.   saldo:= AdoQuery1.Fields[0].Value;
  16.   AdoQuery1.Close ;
  17.   label14.Caption:= saldo ;
  18.  
  19. end;
  20. end;



ahora me dice que
[DCC Error] Unit2.pas(77): E2010 Incompatible types: 'string' and 'Real'
tengo que convertirlo de nuevo a STR para poder usarlo en un query ??
o estoy bateando de foul ???





  • 0

#37 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 13 abril 2009 - 01:14

Lo que pasa es que tienes que hacer el CASTING del dato, puedes hacer esto:



delphi
  1.   while not AdoQuery1.Eof do begin
  2.     ComboBox1.Items.add(AdoQuery1.Fields[0].AsString); //no uses AdoQuery1.Fields[0].Text
  3.     AdoQuery1.Next ;
  4.     idcuenta := AdoQuery1.Fields[1].value; //¿Esto que es lo que hace?, siempre traerá el último valor leí­do..... 
  5.   end;
  6.   AdoQuery1.Close; //Esta instrucción debe estar al final del while, de otra forma cierras la consulta y te da error.



Salud OS
  • 0

#38 root

root

    mister

  • Miembro Platino
  • PipPipPip
  • 529 mensajes
  • LocationMexico D.F:

Escrito 13 abril 2009 - 02:09

no osea los datos del ComboBox1 si los toma bien me deja seleccionarlos
pero donde marca el error es en la linea


delphi
  1. Adoquery1.SQL.Text:= 'SELECT saldo.saldo FROM saldo Where saldo.id_cuenta =  '+ idcuenta;


Segun mis bastos conocimientos de ingles
me dice que no puedo ocupar "idcuenta" por que esta declarada como "REAL"
Entonces tengo que convertir "idcuenta" con valor real a valor string

digo no hay algo asi como StrToInt pero que sea real to string



  • 0

#39 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 13 abril 2009 - 02:17

Prueba con FloatToString.

Saludos.
  • 0

#40 root

root

    mister

  • Miembro Platino
  • PipPipPip
  • 529 mensajes
  • LocationMexico D.F:

Escrito 13 abril 2009 - 04:29

bueno ya la rutina quedo
pues si no del todo bien quedo satisfactoria
ahora tengo otro problemita
por alguna extraña y maligna razon el procedimiento lo puse en la propiedad de on select

entonces ahora agregue un boton que limpia los datos del combo box y de el caption de el edit y demas
pero ahora cuando quiero nuevamente repetir la rutina
para otro busqueda no la hace

por que ??


  • 0




IP.Board spam blocked by CleanTalk.