PDA

Ver la Versión Completa : Error No existe columna 'cod'


magnu9
10-07-2007, 19:49:13
Un saludo a ver quien me da una mano... estoy trantando de hacer la entrada de usuario antes de acceder al sistema... lo intento con siguiente codigo. Utilizo SQL SERVER. Dicho codigo me da un error de que no existe la columna "cod" pues se lo tengo como parameters... aun asi me da el error.
En el string de mi adoquery coloco la siguiente sentencia "
SELECT codusu, nomusu, pasusu FROM Usuario where codusu=cod"
procedure TFLogin.BtnOkClick(Sender: TObject);

begin

LoginOK :=False;
AdoQuery1.Parameters.ParamByName('cod').Value:= Edit1.Text;
AdoQuery1.Active:= True;
If AdoQuery1.RecordCount < 1 then
Begin
Cuenta := Cuenta + 1;
MessageDlg('Usuario no encontrado',mtError, [mbOK], 0);
Edit1.Text := '';
Edit2.Text := '';
AdoQuery1.Active := False;
If Cuenta = 3 then Application.Terminate;
end
else
If AdoQuery1pasusu.AsString = Edit2.Text then
Begin
LoginOk := True;
Usuario := AdoQuery1codusu.AsString;
Nombre := AdoQuery1nomusu.AsString;
AdoQuery1.Active := False;
Close;
end
else
Begin
Cuenta := Cuenta + 1;
MessageDlg('Clave Inválida',mtError, [mbOK], 0);
Edit2.Text := '';
AdoQuery1.Active := False;
If Cuenta = 3 then Application.Terminate;
end;

end;
procedure TFLogin.BtnCancelClick(Sender: TObject);
begin
LoginOK :=False;
Application.Terminate;
end;
procedure TFLogin.FormCreate(Sender: TObject);
begin
Cuenta := 0;
Usuario := '';
Nombre := '';
end;

Caral
10-07-2007, 20:04:41
Hola
En parameters tienes que añadir Cod
http://img65.imageshack.us/img65/4119/dibujoou4.th.png
Saludos

magnu9
10-07-2007, 20:11:04
De ante manos gracias Caral, siempre tu empeño por ayudar y que mas que bendecirte.

Y muy buena tu manera de informar con la pantalla. Sabes ese código lo tomé de tu sistema gesatrans. Pero hago eso en parameters coloco Cod, pero creo que el error es en el String del ADOQUERI1 que no encuentra Cod en CODUSU=Cod. Oh quizas mi base de datos.

Lo seguiré intentando a ver... si tiene una opinión bien recibida será.

Caral
10-07-2007, 20:21:02
Hola
Cambia la sentencia del adoquery1 asi:
SELECT codusu, nomusu, pasusu FROM Usuario
Y cambia la primera parte del codigo asi:

LoginOK :=False;
// AdoQuery1.Parameters.ParamByName('cod').Value:= Edit1.Text;
ADOQuery1.SQL.Add('Where codusu = '''+Edit1.Text+'''');
AdoQuery1.Active:= True;
Si tienes algun problema con las comillas del edit, esto depende de la base de datos, puedes probar varias formas, pero creo que funcionara.
Este sistema es esencialmente lo mismo, solo que sin parametros.
Saludos

Onti
10-07-2007, 20:29:50
lo intento con siguiente codigo. Utilizo SQL SERVER. Dicho codigo me da un error de que no existe la columna "cod" pues se lo tengo como parameters... aun asi me da el error.
En el string de mi adoquery coloco la siguiente sentencia "
SELECT codusu, nomusu, pasusu FROM Usuario where codusu=cod"


en tu sentencia original solo tienes que incluir "dos puntos" para que sea reconocida como parámetro


SELECT codusu, nomusu, pasusu FROM Usuario where codusu= :cod

magnu9
10-07-2007, 21:58:18
Gracias ya logré resolver cierta parte de pasar el parametro con los =: puntos agregados antes de Cod en el String del EQL.

El problema radica ahora en que no me reconoce la clave de entrada. Pero si en vez de ponerlo IGUAL =.. lo coloco <> accede al sistema. En la parte que coloque las dos caritas.


procedure TFLogin.BtnOkClick(Sender: TObject);
begin
LoginOK :=False;
// ADOQuery1.SQL.Add('Where codusu = '''+txtUsuario.Text+'''');
AdoQuery1.Parameters.ParamByName('cod').Value:= txtUsuario.Text;
AdoQuery1.Active:= True;
If AdoQuery1.RecordCount < 1 then
Begin
Cuenta := Cuenta + 1;
MessageDlg('Usuario no encontrado',mtError, [mbOK], 0);
txtUsuario.Text := '';
txtContra.Text := '';
AdoQuery1.Active := False;
If Cuenta = 3 then Application.Terminate;
end
else
:confused: If AdoQuery1pasusu.AsString = txtContra.Text then
Begin
LoginOk := True;
Usuario := AdoQuery1codusu.AsString;
Nombre := AdoQuery1pasusu.AsString;
AdoQuery1.Active := false;
Close;:eek:
end
else
Begin
Cuenta := Cuenta + 1;
MessageDlg('Clave Inválida',mtError, [mbOK], 0);
txtContra.Text := '';
AdoQuery1.Active := False;
If Cuenta = 3 then Application.Terminate;
end;

mamaro
11-07-2007, 13:43:10
Puede ser que se trate de un problema con las mayúsculas y minusculas.

prueba esto:

SELECT codusu, nomusu, pasusu FROM Usuario where UPPERCASE(codusu)= UPPERCASE(:cod)

PD: No estoy seguro si UPPERCASE es reconocido en SQL Server (yo utilizo Firebird). :rolleyes:

magnu9
11-07-2007, 20:52:14
Saludos a todos, Mamaro, Caral y Onti. Lo he intentado de muchas maneras, y encontre la siguiente manera... pero tienes ciertas fallas.. por ejemplo si no logras entrar en la primera oportunidad la segunda y la tercera no importan ya que sale el mismo error como cuando te equivoca la primera vez... creo que al que afinarla un poquito más... a ver si se animan apoyarme. Gracias de antemanos.
LoginOK :=False;
AdoQuery1.Parameters.ParamByName('Cod').Value:= Edit1.Text;
ADOQuery1.SQL.Add('and pasusu = '''+edit2.Text+'''');
AdoQuery1.Active:= True;
IF (Edit1.Text= '') OR (EDIT2.Text = '') THEN BEGIN
MessageDlg('DIGITE LOS ESPACIO EN BLANCO', mtInformation,[mbCancel], 0,);
Edit1.Text := '';
Edit2.Text := '';
END
ELSE If AdoQuery1.RecordCount < 1 then
Begin
Cuenta := Cuenta + 1;
MessageDlg('Usuario no encontrado',mtError, [mbOK], 0);
Edit1.Text := '';
Edit2.Text := '';
If Cuenta = 3 then Application.Terminate;
END
else close;

Onti
11-07-2007, 21:18:07
Algunos cambios sugeridos:

1.- Cambia tu Sql inicial por
SELECT codusu, nomusu, pasusu FROM Usuario where codusu=:cod and PasUsu = :PasUsu"
2.- Valida si los "edits" están vacíos antes de realizar la consulta y mejor si utilizas la función "length"

3. Utiliza ParamByName para el pass
4. Utiliza la funcion Inc para incrementar tu contador


// Verificar edit vacios
If (Length(Edit1.text)+Length(Edit2.text))=0 then
Begin
MessageDlg('DIGITE LOS ESPACIO EN BLANCO',mtInformation,[mbCancel], 0,);
Exit;
End;

// Inicializar variables
LoginOK :=False;

// Realizar consulta
AdoQuery1.Close;
AdoQuery1.Parameters.ParamByName('Cod').Value := Edit1.Text;
AdoQuery1.Parameters.ParamByName('PasUsu').Value := Edit2.Text;
AdoQuery1.Open;
If AdoQuery1.RecordCount =0 then
Begin
Inc(Cuenta);
MessageDlg('Usuario no encontrado',mtError, [mbOK], 0);
Edit1.Text := '';
Edit2.Text := '';
End
Else
LoginOk:=True;
AdoQuery1.Close;
If Cuenta = 3 then
Application.Terminate;

magnu9
11-07-2007, 22:11:16
Gracias Onti y a los demas... tu última respuesta termino siendo lo que queria hasta el momento todo funciona a la perfeccion asi que Mil Gracias. Y no se preocupen mis siguientes dudas estan a la deriba de mi sistema. ;) :confused: