Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-01-2008
sdiaz1983 sdiaz1983 is offline
Miembro
 
Registrado: sep 2007
Posts: 52
Poder: 17
sdiaz1983 Va por buen camino
Buen Dia

Señores Vengo a comentarles una consulta que tengo, antes quiero mostrarles este codigo:

Código Delphi [-]
unit INGRESO;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, DBTables, DB, ExtCtrls;
type
  TFrmIngreso = class(TForm)
    LblNombre: TLabel;
    LblClave: TLabel;
    LblIngreso: TLabel;
    BtnAceptar: TButton;
    BtnCancelar: TButton;
    EdtNombre: TEdit;
    EdtClave: TEdit;
    DtUsuario: TDataSource;
    TblUsuario: TTable;
    QryUsuario: TQuery;
    RgRol: TRadioGroup;
    procedure FormCreate(Sender: TObject);
    procedure BtnCancelarClick(Sender: TObject);
    procedure BtnAceptarClick(Sender: TObject);
 
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  FrmIngreso: TFrmIngreso;
implementation
uses BIENVENIDA;
{$R *.dfm}
procedure TFrmIngreso.FormCreate(Sender: TObject);
begin
FrmBienvenida.Visible:=False;
TblUsuario.Active:=False;
QryUsuario.Active:=False;
end;
procedure TFrmIngreso.BtnCancelarClick(Sender: TObject);
begin
FrmIngreso.Close;
end;
procedure TFrmIngreso.BtnAceptarClick(Sender: TObject);
var a: String;
begin
QryUsuario.SQL.Text:='select * from usuario where Nombre=:P1 and Clave=:P2 and Rol:=P3';
QryUsuario.Params[1].AsString:=EdtNombre.Text;
QryUsuario.Params[2].AsString:=EdtClave.Text;
if(RgRol.ItemIndex=0) then
  begin
  a:='operador';
  QryUsuario.Params[3].AsString:=a;
  end
else
  begin
  a:='administrador';
  QryUsuario.Params[3].AsString:=a;
  end;
if(QryUsuario.RecordCount>0) then
  begin
  ShowMessage('INFORMACION CORRECTA')
  end
else
ShowMessage('INFORMACION INCORRECTA');
end;
end.

En el formulario tengo una pantalla de ingreso que consta de dos Edit un datasource, un table, un query y un radiogroup, en el codigo estoy consultando una tabla creada en Paradox 7.0 que se llama usuario que tiene tres campos que son nombre, clave, rol que el usuario tiene registrado en la tabla usuario, pero cuando ejecuto el programa me esta arrojando la siguiente excepcion cuando en la pantalla de ingreso le meto la informacion y le doy el boton de aceptar: List index out of bounds (3).

Señores soy principiante en delphi, queria preguntarles que correcciòn le tnego que hacer al codigo para que me valide correctamente los datos y pues me muestre los mensajes que aparecen en showmessages por ahora mientras avanzo, y de paso queria aprovechar para preguntarles que material me recomiendan para estudiar mas acerca de el manejo de componentes de bases de datos en delphi y Paradox par apoder afianzar mejor mis conocimientos.

Mil gracias por su ayuda y estaré pendiente de su respuesta.

Última edición por dec fecha: 06-01-2008 a las 17:39:55.
Responder Con Cita
  #2  
Antiguo 06-01-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Veamos el problema aca:
Código Delphi [-]
procedure TFrmIngreso.BtnAceptarClick(Sender: TObject);
var a: String;
begin
QryUsuario.SQL.Text:='select * from usuario where Nombre=:P1 and Clave=:P2 and Rol:=P3';
QryUsuario.Params[1].AsString:=EdtNombre.Text;
QryUsuario.Params[2].AsString:=EdtClave.Text;
if(RgRol.ItemIndex=0) then
begin
a:='operador';
QryUsuario.Params[3].AsString:=a;
end
else
begin
a:='administrador';
QryUsuario.Params[3].AsString:=a;
end;
if(QryUsuario.RecordCount>0) then
begin
ShowMessage('INFORMACION CORRECTA')
end
else
ShowMessage('INFORMACION INCORRECTA');
end;
Veamos que el parametro Rol esta mal escrito:
Cita:
Rol:=P3';
Veamos que dice el mensaje:
Cita:
List index out of bounds (3).
Veamos como van los archivos o registros de una tabla.
Nombre = 0
Clave = 1
Rol = 2.

Ahora veamos la logica de mensaje:
HEYYYY amigo, DONDE ESTA EL REGISTRO 3 ??????

Comprendes?
Usemos la logica, si no, no vamos a entender a Delphi.
Saludos
Responder Con Cita
  #3  
Antiguo 06-01-2008
sdiaz1983 sdiaz1983 is offline
Miembro
 
Registrado: sep 2007
Posts: 52
Poder: 17
sdiaz1983 Va por buen camino
Gracias

ok ya te entendi, como te dije soy novato en delphi, te agradezco tu ayuda voy a mirar haber que sale y cualquier cosa te aviso listo.

Gracias
Responder Con Cita
  #4  
Antiguo 06-01-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Me parece muy bien, ahora una guia mas:
Primero la consulta seria asi:
Código Delphi [-]
QryUsuario.SQL.Text:='select * from usuario where Nombre = :P1 and Clave = :P2 and Rol= :P3';
QryUsuario.Params[0].AsString:=EdtNombre.Text;
QryUsuario.Params[1].AsString:=EdtClave.Text;
Los parametros empezarian desde 0, lo ves?
Tenemos tres parametros, verdad?, pero solo tengo dos referencias a los mismos, verdad?.
De donde saco la tercera referencia, osea el parámetro ROL, donde esta?.
Saludos
Responder Con Cita
  #5  
Antiguo 06-01-2008
sdiaz1983 sdiaz1983 is offline
Miembro
 
Registrado: sep 2007
Posts: 52
Poder: 17
sdiaz1983 Va por buen camino
Tengo Otro Problema

Código Delphi [-]
procedure TFrmIngreso.BtnAceptarClick(Sender: TObject);
var a: String;
begin
QryUsuario.Active:=True;
TblUsuario.Active:=True;
QryUsuario.SQL.Text:='select * from usuario where Nombre=:P0 and Clave=:P1 and Rol:=P2';
QryUsuario.Params[0].AsString:=EdtNombre.Text;
QryUsuario.Params[1].AsString:=EdtClave.Text;
if(RgRol.ItemIndex=0) then
  begin
  a:='operador';
  QryUsuario.Params[2].AsString:=a;
  end
else
  begin
  a:='administrador';
  QryUsuario.Params[2].AsString:=a;
  end;
QryUsuario.ExecSQL;
if(QryUsuario.RecordCount>0) then
  begin
  ShowMessage('INFORMACION CORRECTA')
  end
else
ShowMessage('INFORMACION INCORRECTA');
end;
end.

Hice las correcciones de los parámetros, pero ahora que lo ejecuto me bota la siguiente excpeción

QryUsuario: No Sql Statement available

A que se debra, que tengo que corregir del codigo de nuevo????

Mil Gracias por su atencion y perdone la molestia.
Responder Con Cita
  #6  
Antiguo 06-01-2008
sdiaz1983 sdiaz1983 is offline
Miembro
 
Registrado: sep 2007
Posts: 52
Poder: 17
sdiaz1983 Va por buen camino
Una Cosa Mas

El parametro tres esta en esta parte:

Código Delphi [-]
if(RgRol.ItemIndex=0) then
  begin
  a:='operador';
  QryUsuario.Params[2].AsString:=a;
  end
else
  begin
  a:='administrador';
  QryUsuario.Params[2].AsString:=a;
  end;

Lo que hago es validar la propiedad ItemIndex del RadioGroup si es 0 me guarde en la variable a que he definido previamente una palabra y esa sea la que consult een al base de datos, pero la verdad no se si me quedo bien, no habia leido la cita tuya de arriba de que en la consulta empezaban los parametros p1,p2,p3 ya le hice esta modificacion o sea asi:

Código Delphi [-]
QryUsuario.SQL.Text:='select * from usuario where Nombre=:P1 and Clave=:P2 and Rol:=P3';

Pero aun me bot ael error que dije anteriormente

Una vez mas mil gracias por tu ayuda.
Responder Con Cita
  #7  
Antiguo 06-01-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Te lo puedo decir, pero te voy a poner a pensar un poco.
Piensa en esto:
Primero: creo la consulta.
Segundo: coloco los parametros que especifico en la consulta.
Tercero: Abro o ACTIVO el query.

Lo tienes asi????
Verdad que no.
Revisalo y me dices si no lo ves.
Saludos
Responder Con Cita
  #8  
Antiguo 06-01-2008
sdiaz1983 sdiaz1983 is offline
Miembro
 
Registrado: sep 2007
Posts: 52
Poder: 17
sdiaz1983 Va por buen camino
Si

Si tiene razon en eso, gracias por su paciencia, ya modifque eso.

Tengo un problema con respecto la validacion del dato de rol, el programa no lo esta validando, dice que no lo encuentra porque sera?????, que tengo que corregir

gracias una vez mas

Última edición por sdiaz1983 fecha: 06-01-2008 a las 18:04:04.
Responder Con Cita
  #9  
Antiguo 06-01-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Parametros?????
Si tengo tres y solo pongo dos la consulta me enviara dos.
Código Delphi [-]
procedure TFrmIngreso.BtnAceptarClick(Sender: TObject);
var a: String;
begin
TblUsuario.Active:=True;
QryUsuario.SQL.Text:='select * from usuario where Nombre=:P0 and Clave=:P1 and Rol=:P2';
QryUsuario.Params[0].AsString:=EdtNombre.Text;
QryUsuario.Params[1].AsString:=EdtClave.Text;
QryUsuario.Params[2].Value:=0; // aqui esta el parametro que falta
QryUsuario.Active:=True; // aqui activo

if(RgRol.ItemIndex=0) then // aqui defino el parametro ROL supongo?
  begin
  a:='operador';
  QryUsuario.Params[2].AsString:=a;
  end
else
  begin
  a:='administrador';
  QryUsuario.Params[2].AsString:=a;
  end;
QryUsuario.ExecSQL;
if(QryUsuario.RecordCount>0) then
  begin
  ShowMessage('INFORMACION CORRECTA')
  end
else
ShowMessage('INFORMACION INCORRECTA');
end;
end.
Saludos
Responder Con Cita
  #10  
Antiguo 06-01-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
RgRol que es?
Parece un combobox o un listboxt, me equivoco?
Saludos
Responder Con Cita
  #11  
Antiguo 06-01-2008
sdiaz1983 sdiaz1983 is offline
Miembro
 
Registrado: sep 2007
Posts: 52
Poder: 17
sdiaz1983 Va por buen camino
Con respecto a tu pregunta es un radiogroup, pero lo cambie mejor por puros campos de edición para facilitar mas las cosas, muchas gracias por su ayuda y hasta otra oportunidad.
Responder Con Cita
  #12  
Antiguo 06-01-2008
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Hola.

El título de este mensaje está mal. En adelante debes tomar el tiempo necesario para encontrar un título de tema que sea acorde a la pregunta que harás, de acuerdo a lo expuesto en la guía de estilo.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
muy buen monologo eduarcol La Taberna 2 17-10-2007 20:30:55
que es ser un buen programador? nikotina Debates 44 24-04-2007 16:18:23
Buen chiste!!! joHn je@N Humor 2 28-02-2007 09:36:57
Buen Día edwin1 OOP 1 29-07-2003 15:09:57
Un buen editor??? Tanix PHP 2 13-06-2003 16:07:21


La franja horaria es GMT +2. Ahora son las 05:50:45.


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
Copyright 1996-2007 Club Delphi