Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Captura de Datos de Ado (https://www.clubdelphi.com/foros/showthread.php?t=66650)

Fiebru 06-03-2010 02:54:52

Lo probare tambien....
 
Ya que ahora mismo estoy en un cyber....hey si sigues asi seras buen profesor.

Fiebru 08-03-2010 23:14:29

Tengo otro problemita
 
El codigo que me diste lo adapte a mi programa, este es el codigo actual de la ventana...
Código Delphi [-]
unit EntradaUsuario;

interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Mask, DBCtrls, DB, DBTables, ADODB;

type
  TFrmEntradaUsuario = class(TForm)
    BtnAceptar: TButton;
    BtnCancelar: TButton;
    DataSource1: TDataSource;
    ADOQuery1: TADOQuery;
    ADOQuery1NombredeUsuario: TWideStringField;
    ADOQuery1Contrasena: TWideStringField;
    Label1: TLabel;
    Label2: TLabel;
    EUsuario: TEdit;
    EContrasena: TEdit;
    ADOConnection1: TADOConnection;
    procedure BtnCancelarClick(Sender: TObject);
    procedure BtnAceptarClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FrmEntradaUsuario: TFrmEntradaUsuario;

implementation

uses Menu;

{$R *.dfm}

procedure TFrmEntradaUsuario.BtnCancelarClick(Sender: TObject);
begin
FrmEntradaUsuario.close
end;

procedure TFrmEntradaUsuario.BtnAceptarClick(Sender: TObject);

begin
ADOQuery1.Parameters.ParamByName('nom').Value:= EUsuario.Text;
ADOQuery1.Active:= True;
EUsuario.Text:= ADOQuery1.Fields[1].AsString;
If ADOQuery1.RecordCount < 1 then
    Begin
MessageDlg('Usuario no encontrado',mtError, [mbOK], 0);
 EUsuario.Text := '';
       EContrasena.Text := '';
ADOQuery1.Active := False;
end
   else
If ADOQuery1Contrasena.AsString = EContrasena.Text then
Begin
 ADOQuery1.Active := False;
FrmMenu:=TFrmMenu.Create(self);
           try
FrmEntradaUsuario.Visible:= False;
FrmMenu.ShowModal;
           finally
           FrmMenu.Free;
           end;
           Close;
        end
     else
end;
end.

Pero ahora hay otro incidente. Es que cuando voy a entrar cualquier clave, me sale una ventana con un error diciendo que falta un operador en la expresion de consulta 'Nombre de Usuario'.

Creo que se refiere al contenido del String List Editor:
SELECT Nombre de Usuario, Contrasena FROM
Usuarios WHERE
Nombre de Usuario = :nom


Bueno creo que ya estoy cerca de dar con el problema, pero necesito un empujon, jejeje.

Caral 09-03-2010 01:43:36

Hola
A ver asi:
Código Delphi [-]
procedure TFrmEntradaUsuario.BtnAceptarClick(Sender: TObject);
begin
ADOQuery1.SQL.Text:= 'SELECT Usuario, Contrasena FROM Usuarios WHERE Usuario = :nom';
ADOQuery1.Parameters[0].Value:= EUsuario.Text;
ADOQuery1.Active:= True;
EUsuario.Text:= ADOQuery1.Fields[1].AsString;
If ADOQuery1.RecordCount < 1 then
Begin
MessageDlg('Usuario no encontrado',mtError, [mbOK], 0);
EUsuario.Text := '';
EContrasena.Text := '';
ADOQuery1.Active := False;
end
else
If ADOQuery1Contrasena.AsString = EContrasena.Text then
Begin
ADOQuery1.Active := False;
FrmMenu:=TFrmMenu.Create(self);
try
FrmEntradaUsuario.Visible:= False;
FrmMenu.ShowModal;
finally
FrmMenu.Free;
end;
Close;
end
else
end;
end.
La diferencia esta en que simplemente se hace la sentencia sql por codigo y no directa en la casilla string del query, que por cierto se necesita especificar el parametro, ahi esta el error que te da.
Saludos

Neftali [Germán.Estévez] 09-03-2010 12:01:49

Fiebru, si utilizas TAG's cuando escribas código Delphi verás que se lee bastante mejor.

En el anterior ya las añado yo.

Fiebru 09-03-2010 23:19:24

Bien Caral....
 
Ya estoy entendiendo por donde va el asunto.

Neftali: disculpa lo de
Código Delphi [-]
los tags,
no sabia lo que era, pero te prometo que los usare mas adelante. ;)

Caral: despues te dire si llegue al tic del asunto o no.

Gracias.

Neftali [Germán.Estévez] 10-03-2010 12:16:28

Cita:

Empezado por Fiebru (Mensaje 356280)
Neftali: disculpa lo delos tags, no sabia lo que era...

No hace falta disculparse, al principio suele pasar... ;)

Un saludo.

Fiebru 10-03-2010 23:02:32

Ya hasta verguenza me da...
 
Ahora me sale un error que me dice "No se han especificado algunos parametros requeridos". Pero no se si se refiere al string o al codigo en si.

A continuacion el cogido actual, que veras algunas pequeñas modificaciones...

Código Delphi [-]
unit EntradaUsuario;

interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Mask, DBCtrls, DB, DBTables, ADODB;

type
  TFrmEntradaUsuario = class(TForm)
    BtnAceptar: TButton;
    BtnCancelar: TButton;
    DataSource1: TDataSource;
    ADOQuery1: TADOQuery;
    ADOQuery1NombredeUsuario: TWideStringField;
    ADOQuery1Contrasena: TWideStringField;
    Label1: TLabel;
    Label2: TLabel;
    EUsuario: TEdit;
    EContrasena: TEdit;
    ADOConnection1: TADOConnection;
    procedure BtnCancelarClick(Sender: TObject);
    procedure BtnAceptarClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FrmEntradaUsuario: TFrmEntradaUsuario;

implementation

uses Menu;

{$R *.dfm}

procedure TFrmEntradaUsuario.BtnCancelarClick(Sender: TObject);
begin
FrmEntradaUsuario.close
end;

procedure TFrmEntradaUsuario.BtnAceptarClick(Sender: TObject);

begin
ADOQuery1.SQL.Text:= 'SELECT Usuario, Contrasena FROM Usuarios WHERE Usuario = :nom';
ADOQuery1.Parameters[0].Value:= EUsuario.Text;
ADOQuery1.Parameters.ParamByName('nom').Value:= EUsuario.Text;
ADOQuery1.Active:= True;
EUsuario.Text:= ADOQuery1.Fields[1].AsString;
If ADOQuery1.RecordCount < 1 then
    Begin
MessageDlg('Usuario no encontrado',mtError, [mbOK], 0);
 EUsuario.Text := '';
       EContrasena.Text := '';
ADOQuery1.Active := False;
end
   else
If ADOQuery1Contrasena.AsString = EContrasena.Text then
Begin
 ADOQuery1.Active := False;
FrmMenu:=TFrmMenu.Create(self);
           try
FrmEntradaUsuario.Visible:= False;
FrmMenu.ShowModal;
           finally
           FrmMenu.Free;
           end;
           Close;
        end
     else
end;
end.


La linea que resalte en negrita: EUsuario.Text:=ADOQuery1.Fields[1].AsString; es donde me señala el error. Pero puede ser que los parametros que tengan problemas son los del String. Que dicen: Select * from Usuarios

Bueno, como quiera que sea, hoy tengo clases y aprovechare para preguntarle a mi profe.

Gracias de todos modos.

Caral 11-03-2010 01:14:56

Hola
Veamos el codigo:
Código Delphi [-]
procedure TFrmEntradaUsuario.BtnAceptarClick(Sender: TObject);
begin
ADOQuery1.SQL.Text:= 'SELECT Usuario, Contrasena FROM Usuarios WHERE Usuario = :nom';
ADOQuery1.Parameters[0].Value:= EUsuario.Text;// aqui indico el parametro BIEN
// ADOQuery1.Parameters.ParamByName('nom').Value:= EUsuario.Text; // aqui estoy indicando otra vez lo mismo sobra NO TAN BIEN, o es uno u otro.
ADOQuery1.Active:= True; // activo BIEN
// EUsuario.Text:= ADOQuery1.Fields[1].AsString; // aqui indicas que el usuario es el 1, cuando es el 0 osea: 
//como en el codigo siguiente, mira la diferencia:
EUsuario.Text:= ADOQuery1.Fields[0].AsString; // usuario 0, Contraseña 1
If ADOQuery1.RecordCount < 1 then // si hago un recuento entonces...
    Begin
MessageDlg('Usuario no encontrado',mtError, [mbOK], 0);
 EUsuario.Text := '';
       EContrasena.Text := '';
ADOQuery1.Active := False;
end
   else
If ADOQuery1Contrasena.AsString = EContrasena.Text then
Begin
 ADOQuery1.Active := False;
FrmMenu:=TFrmMenu.Create(self);
           try
FrmEntradaUsuario.Visible:= False;
FrmMenu.ShowModal;
           finally
           FrmMenu.Free;
           end;
           Close;
        end
     else
end;
Debería funcionar, no le veo mas inconvenientes, aunque recuerda que solo trato de aportar, no me hagas mucho caso.
Para mi, vas muy bien.
Saludos

Fiebru 11-03-2010 22:29:24

Lo termine!!!!!!!!!!!!!
 
El unico problemita que faltaba era que el nombre del campo que llamaba el codigo es "Usuario", mientras que el campo de la tabla que realmente yo habia conectado se llamaba "Nombre de Usuario".
Lo unico que tuve que hacer fue cambiarle el nombre en Access, de "Nombre de Usuario" a "Usuario".
Esto lo hice, no sin antes haberle preguntado a mi profe :cool:.

Bueno, usare esta misma tecnica para las demas ventanas que me estan dando el mismo problema.

Muchas gracias Caral.


La franja horaria es GMT +2. Ahora son las 22:00:24.

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