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 Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-04-2010
JuanchoDev JuanchoDev is offline
Miembro
 
Registrado: abr 2010
Posts: 15
Poder: 0
JuanchoDev Va por buen camino
"ADOQUERY3: Parameter 'p' not found" error (POR FAVOR AYUDA)

Estoy tratando de modificar una base en access y siempre me da este error"ADOQUERY3: Parameter 'p' not found" error
Cualquier ayuda la agradecercia enormemente...espero que me puedan dar una mano

procedure TForm3.Modificar1Click(Sender: TObject);
var cons1, cons2, cons3:string;

begin
if edit2.Text = edit9.Text then
begin
adoquery2.Close;
adoquery2.SQL.Text:='select id from colaboradores where usuario= :';
adoquery2.Parameters.ParamByName('p').Value:=edit1.Text;
adoquery2.Open;

adoquery3.Close;

//estos los comente porque me recomendaron usar .sql.add(blablabla) de ultima lo vuelvo a poner asi...

//cons1:='select colaboradores.id, colaboradores.usuario, colaboradores.password, colaboradores.nombre, colaboradores.apellido,
colaboradores.direccion, colaboradores.telefono, colaboradores.email, colaboradores.web, colaboradores.rol, colaboradores.fecha
';
//cons2:='from colaboradores, roles ';
//cons3:='where colaboradores.rol=roles.id and colaboradores.id= :';
adoquery3.SQL.Add('select colaboradores.id, colaboradores.usuario, colaboradores.password, colaboradores.nombre,
colaboradores.apellido, colaboradores.direccion, colaboradores.telefono, colaboradores.email, colaboradores.web,
colaboradores.rol, colaboradores.fecha ');



adoquery3.SQL.Add('from colaboradores, roles ');
adoquery3.SQL.Add('where colaboradores.rol=roles.id and colaboradores.id= :') ;
adoquery3.SQl.Text:=adoquery3.Parameters.ParseSQL(adoquery3.SQL.Text,true);
//adoquery3.SQL.Text:=cons1+cons2+cons3;
//adoquery3.Parameters.ParseSQL(adoquery3.SQL.Text,true);
adoquery3.Parameters.ParamByName('p').Value:=adoquery2.Fields[0].AsInteger;



//aca se da el error que no encuentra el parametro!!!!!!!!
//si adoquery2.fields[0]. lo pongo como asString pasa lo mismo...ademas el error seria distinto me imagino
//puse : porque el foro no me permite imagenes pero es con un solo ":"

adoquery3.Open;
adoquery3.Edit;
adoquery3.Fields[1].AsString:=edit1.Text;
adoquery3.Fields[2].AsString:=edit2.Text;
adoquery3.Fields[3].AsString:=edit3.Text;
adoquery3.Fields[4].AsString:=edit4.Text;
adoquery3.Fields[5].AsString:=edit5.Text;
adoquery3.Fields[6].AsString:=edit6.Text;
adoquery3.Fields[7].AsString:=edit7.Text;
adoquery3.Fields[8].AsString:=edit8.Text;
//averiguo el rol
adoquery4.Close;
adoquery4.SQL.Text:='select id from roles where rol= :';
adoquery4.Parameters.ParamByName('p').Value:=combobox1.Text ;
adoquery4.Open;
adoquery3.Fields[9].AsInteger:=adoquery4.Fields[10].AsInteger;
adoquery3.Fields[10].AsString:=edit10.Text;
adoquery3.Post;
showmessage('Registro modificado exitosamente!');
adoquery3.Close;
end
else
showmessage('Las Contraseñas no fueron confirmadas correctamente, deben ser iguales');

end;
Responder Con Cita
  #2  
Antiguo 20-04-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Esta es la parte que da el error?
Código Delphi [-]
adoquery3.SQL.Add('select colaboradores.id, colaboradores.usuario, colaboradores.password, colaboradores.nombre, 
colaboradores.apellido, colaboradores.direccion, colaboradores.telefono, colaboradores.email, colaboradores.web, 
colaboradores.rol, colaboradores.fecha ');

adoquery3.SQL.Add('from colaboradores, roles ');
adoquery3.SQL.Add('where colaboradores.rol=roles.id and colaboradores.id= :') ;
adoquery3.SQl.Text:=adoquery3.Parameters.ParseSQL(adoquery3.SQL.Text,true);
//adoquery3.SQL.Text:=cons1+cons2+cons3;
//adoquery3.Parameters.ParseSQL(adoquery3.SQL.Text,true);
adoquery3.Parameters.ParamByName('p').Value:=adoquery2.Fields[0].AsInteger;
Saludos
__________________
Siempre Novato
Responder Con Cita
  #3  
Antiguo 20-04-2010
JuanchoDev JuanchoDev is offline
Miembro
 
Registrado: abr 2010
Posts: 15
Poder: 0
JuanchoDev Va por buen camino
Si

exacto, el "" (quiero decir :[letra p] no aparece porque lo trunca el foro
adoquery3.SQL.Add('select colaboradores.id, colaboradores.usuario, colaboradores.password, colaboradores.nombre, colaboradores.apellido, colaboradores.direccion, colaboradores.telefono, colaboradores.email, colaboradores.web, colaboradores.rol, colaboradores.fecha ');
adoquery3.SQL.Add('from colaboradores, roles ');
adoquery3.SQL.Add('where colaboradores.rol=roles.id and colaboradores.id= :') ;
adoquery3.SQl.Text:=adoquery3.Parameters.ParseSQL(adoquery3.SQL.Text,true);
//adoquery3.SQL.Text:=cons1+cons2+cons3;
//adoquery3.Parameters.ParseSQL(adoquery3.SQL.Text,true);
adoquery3.Parameters.ParamByName('p').Value:=adoquery2.Fields[0].AsInteger;

Última edición por JuanchoDev fecha: 20-04-2010 a las 22:49:44. Razón: el sistema convierte en emoticons algunas porciones de texto
Responder Con Cita
  #4  
Antiguo 20-04-2010
JuanchoDev JuanchoDev is offline
Miembro
 
Registrado: abr 2010
Posts: 15
Poder: 0
JuanchoDev Va por buen camino
ademas

el parse lo comente porque tiraba list bound out of index
Responder Con Cita
  #5  
Antiguo 20-04-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Disculpa, para tratar de entender, que quieres hacer en esta linea, que es la que pretendes?
Código Delphi [-]
adoquery3.SQl.Text:=adoquery3.Parameters.ParseSQL(adoquery3.SQL.Text,true);
Saludos
__________________
Siempre Novato
Responder Con Cita
  #6  
Antiguo 20-04-2010
JuanchoDev JuanchoDev is offline
Miembro
 
Registrado: abr 2010
Posts: 15
Poder: 0
JuanchoDev Va por buen camino
mentira

el parse lo comente por error...por favor me das una mano?...
Responder Con Cita
  #7  
Antiguo 20-04-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
A ver:
Código Delphi [-]
adoquery3.SQL.Add('select colaboradores.id, colaboradores.usuario, colaboradores.password, colaboradores.nombre, 
colaboradores.apellido, colaboradores.direccion, colaboradores.telefono, colaboradores.email, colaboradores.web, 
colaboradores.rol, colaboradores.fecha ');
adoquery3.SQL.Add('from colaboradores, roles ');
adoquery3.SQL.Add('where colaboradores.rol=roles.id and colaboradores.id= :A');
adoquery3.Parameters[0].Value:= adoquery2.Fields[0].AsInteger;
Saludos
__________________
Siempre Novato
Responder Con Cita
  #8  
Antiguo 20-04-2010
JuanchoDev JuanchoDev is offline
Miembro
 
Registrado: abr 2010
Posts: 15
Poder: 0
JuanchoDev Va por buen camino
era una sugerencia que encontre

en el foro de embarcadero...
Responder Con Cita
  #9  
Antiguo 20-04-2010
JuanchoDev JuanchoDev is offline
Miembro
 
Registrado: abr 2010
Posts: 15
Poder: 0
JuanchoDev Va por buen camino
pero

si esa linea no esta...el error sigue dandose
Responder Con Cita
  #10  
Antiguo 20-04-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Estamos en lo mismo?.
As probado el ultimo codigo que puse?.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #11  
Antiguo 20-04-2010
JuanchoDev JuanchoDev is offline
Miembro
 
Registrado: abr 2010
Posts: 15
Poder: 0
JuanchoDev Va por buen camino
Ahora da

List Index Out Of Bounds (10)


despues probe cambiar un poco tu codigo y recibo el mismo error
adoquery3.SQL.Add('select colaboradores.id, colaboradores.usuario, colaboradores.password, colaboradores.nombre,colaboradores.apellido, colaboradores.direccion, colaboradores.telefono, colaboradores.email, colaboradores.web,colaboradores.rol, colaboradores.fecha ');
adoquery3.SQL.Add('from colaboradores, roles ');
adoquery3.SQL.Add('where colaboradores.rol=roles.id and colaboradores.id= :A');
adoquery3.Parameters.ParamByName('A').Value:= adoquery2.Fields[0].AsInteger;
Responder Con Cita
  #12  
Antiguo 21-04-2010
JuanchoDev JuanchoDev is offline
Miembro
 
Registrado: abr 2010
Posts: 15
Poder: 0
JuanchoDev Va por buen camino
quiero decir

recibo como error List Index Out Of Bounds (10)
Responder Con Cita
  #13  
Antiguo 21-04-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Lo que se me ocurre es que el adoquery2 no este open;
Saludos
__________________
Siempre Novato
Responder Con Cita
  #14  
Antiguo 21-04-2010
JuanchoDev JuanchoDev is offline
Miembro
 
Registrado: abr 2010
Posts: 15
Poder: 0
JuanchoDev Va por buen camino
Verificado

begin
if edit2.Text = edit9.Text then
begin
adoquery2.Close;
adoquery2.SQL.Text:='select id from colaboradores where usuario= :f';
adoquery2.Parameters.ParamByName('f').Value:=edit1.Text;
adoquery2.Open;


alguna otra idea...?
Responder Con Cita
  #15  
Antiguo 21-04-2010
JuanchoDev JuanchoDev is offline
Miembro
 
Registrado: abr 2010
Posts: 15
Poder: 0
JuanchoDev Va por buen camino
Te doy mil gracias

El error estaba en:
adoquery4.Close;
adoquery4.SQL.Text:='select id from roles where rol= :w';
adoquery4.Parameters.ParamByName('w').Value:=combobox1.Text ;
adoquery4.Open;
adoquery3.Fields[9].AsInteger:=adoquery4.Fields[10].AsInteger;

No podia ser adoquery4.Fields[10].AsInteger;
Ya que el adoquery4 solo retorna Fields[0].asinteger...


Ahora para que te de 1 millon de gracias ;-)
Mira lo que me pasa...
En la primer iteracion corre bien y modifica todo
En la segunda modificacion (cuando cambio otro registro) da error "Objeto Parameter mal definido. Se proporciono informacion incompleta o incoherente"

adoquery4.Close;
adoquery4.SQL.Text:='select id from roles where rol=:f';
adoquery4.Parameters.ParamByName('f').Value:=combobox1.Text ;
adoquery4.Open;
adoquery3.Fields[9].AsInteger:=adoquery4.Fields[0].AsInteger ;
adoquery4.Close;
adoquery3.Fields[10].AsString:=edit10.Text;
adoquery3.Post;
showmessage('Registro modificado exitosamente!');
adoquery3.Close;


Como veras tomé la precaución de cerrar el qry4.close

Espero ideas y no te molesto mas!
Responder Con Cita
  #16  
Antiguo 21-04-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Puedes colocar el codigo completo para verlo?.
Usa las etiquetas delphi, encierras el codigo entre :
[DELPHI ]aqui [ /DELPHI]
En el centro de estos pones el codigo.
Que base de datos usas?.
Saludos
PD: Si presionas avanzado veras un boton al lado del de sql, es el que pone las etiquetas.
__________________
Siempre Novato
Responder Con Cita
  #17  
Antiguo 21-04-2010
JuanchoDev JuanchoDev is offline
Miembro
 
Registrado: abr 2010
Posts: 15
Poder: 0
JuanchoDev Va por buen camino
re

Uso Access




Código Delphi [-]
 
procedure TForm3.Modificar1Click(Sender: TObject);
var cons1, cons2, cons3:string;

begin
if edit2.Text = edit9.Text then
begin
adoquery2.Close;
adoquery2.SQL.Text:='select id from colaboradores where usuario=';
adoquery2.Parameters.ParamByName('p').Value:=edit1.Text;
adoquery2.Open;
adoquery3.Close;
adoquery3.SQL.Add('select colaboradores.id, colaboradores.usuario, colaboradores.password, colaboradores.nombre,colaboradores.apellido, colaboradores.direccion, colaboradores.telefono, colaboradores.email, colaboradores.web,colaboradores.rol, colaboradores.fecha ');
adoquery3.SQL.Add('from colaboradores, roles ');
adoquery3.SQL.Add('where colaboradores.rol=roles.id and colaboradores.id=:a');
adoquery3.Parameters.ParamByName('a').Value:=adoquery2.Fields[0].AsString;
adoquery3.Open;
adoquery3.Edit;
adoquery3.Fields[1].AsString:=edit1.Text;
adoquery3.Fields[2].AsString:=edit2.Text;
adoquery3.Fields[3].AsString:=edit3.Text;
adoquery3.Fields[4].AsString:=edit4.Text;
adoquery3.Fields[5].AsString:=edit5.Text;
adoquery3.Fields[6].AsString:=edit6.Text;
adoquery3.Fields[7].AsString:=edit7.Text;
adoquery3.Fields[8].AsString:=edit8.Text;
//averiguo el rol
adoquery4.Close;
adoquery4.SQL.Text:='select id from roles where rol=:f';
adoquery4.Parameters.ParamByName('f').Value:=combobox1.Text  ;
adoquery4.Open;
adoquery3.Fields[9].AsInteger:=adoquery4.Fields[0].AsInteger ;
adoquery3.Fields[10].AsString:=edit10.Text;
adoquery3.Post;
showmessage('Registro modificado exitosamente!');

end
else
showmessage('Las Contraseñas no fueron confirmadas correctamente, deben ser iguales');

end;
Responder Con Cita
  #18  
Antiguo 21-04-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
A ver esto:

Código Delphi [-]
procedure TForm3.Modificar1Click(Sender: TObject);
var cons1, cons2, cons3:string;
begin
if edit2.Text = edit9.Text then
begin

adoquery2.Close;
adoquery2.SQL.Text:='select id from colaboradores where usuario= :X';
adoquery2.Parameters[0].Value:= edit1.Text;
adoquery2.Open;

adoquery3.Close;
adoquery3.SQL.Add('select colaboradores.id, colaboradores.usuario, colaboradores.password, colaboradores.nombre,colaboradores.apellido, colaboradores.direccion, colaboradores.telefono, colaboradores.email, colaboradores.web,colaboradores.rol, colaboradores.fecha ');
adoquery3.SQL.Add('from colaboradores, roles ');
adoquery3.SQL.Add('where colaboradores.rol=roles.id and colaboradores.id=:a');
adoquery3.Parameters[0].Value:= adoquery2.Fields[0].AsString;
adoquery3.Open;

//averiguo el rol
adoquery4.Close;
adoquery4.SQL.Text:='select id from roles where rol= :B';
adoquery4.Parameters[0].Value:= combobox1.Text  ;
adoquery4.Open;

adoquery3.Edit;
adoquery3.Fields[9].AsInteger:= adoquery4.Fields[0].AsInteger ;
adoquery3.Fields[10].AsString:= edit10.Text;
adoquery3.Fields[1].AsString:= edit1.Text;
adoquery3.Fields[2].AsString:= edit2.Text;
adoquery3.Fields[3].AsString:= edit3.Text;
adoquery3.Fields[4].AsString:= edit4.Text;
adoquery3.Fields[5].AsString:= edit5.Text;
adoquery3.Fields[6].AsString:= edit6.Text;
adoquery3.Fields[7].AsString:= edit7.Text;
adoquery3.Fields[8].AsString:= edit8.Text;
adoquery3.Post;
showmessage('Registro modificado exitosamente!');

end
else
showmessage('Las Contraseñas no fueron confirmadas correctamente, deben ser iguales');

end;
Saludos
__________________
Siempre Novato
Responder Con Cita
  #19  
Antiguo 21-04-2010
JuanchoDev JuanchoDev is offline
Miembro
 
Registrado: abr 2010
Posts: 15
Poder: 0
JuanchoDev Va por buen camino
mismo error

che te agradezco la buena onda...
Responder Con Cita
  #20  
Antiguo 21-04-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Creo entender que la primera vez modifica y hace todo bien, pero la segunda vez que tratas de modificar da el error.
Si es asi es por el uso de ADD en el query3 ya que no se limpia la consulta, por eso me gusta usar mas text.
Veamos esta vez a ver que pasa:
Código Delphi [-]
procedure TForm3.Modificar1Click(Sender: TObject);
var cons1, cons2, cons3:string;
begin
if edit2.Text = edit9.Text then
begin
adoquery2.Close;
adoquery2.SQL.Text:='select id from colaboradores where usuario= :X';
adoquery2.Parameters[0].Value:= edit1.Text;
adoquery2.Open;

adoquery3.Close;
adoquery3.SQL.Text:= 'select colaboradores.id, colaboradores.usuario,'+
             'colaboradores.password, colaboradores.nombre,colaboradores.apellido,'+
             'colaboradores.direccion, colaboradores.telefono, colaboradores.email,'+
             'colaboradores.web,colaboradores.rol, colaboradores.fecha '+
             'from colaboradores, roles where colaboradores.rol = roles.id and colaboradores.id = :A';
adoquery3.Parameters[0].Value:= adoquery2.Fields[0].AsString;
adoquery3.Open;

//averiguo el rol
adoquery4.Close;
adoquery4.SQL.Text:='select id from roles where rol= :B';
adoquery4.Parameters[0].Value:= combobox1.Text  ;
adoquery4.Open;

adoquery3.Edit;
adoquery3.Fields[9].AsInteger:= adoquery4.Fields[0].AsInteger ;
adoquery3.Fields[10].AsString:= edit10.Text;
adoquery3.Fields[1].AsString:= edit1.Text;
adoquery3.Fields[2].AsString:= edit2.Text;
adoquery3.Fields[3].AsString:= edit3.Text;
adoquery3.Fields[4].AsString:= edit4.Text;
adoquery3.Fields[5].AsString:= edit5.Text;
adoquery3.Fields[6].AsString:= edit6.Text;
adoquery3.Fields[7].AsString:= edit7.Text;
adoquery3.Fields[8].AsString:= edit8.Text;
adoquery3.Post;
showmessage('Registro modificado exitosamente!');

end
else
showmessage('Las Contraseñas no fueron confirmadas correctamente, deben ser iguales');

end;
Si no sale, coloca aqui el programa completo con la base de datos, en un zip, sin el exe y lo reviso.
Saludos
__________________
Siempre Novato
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Ayuda: "Record not found or changed by another user" alquimista_gdl Conexión con bases de datos 14 21-03-2009 21:09:21
Error "Invalid Parameter" usando Tquery cuando proceso una consulta grande CharlesWar SQL 5 18-06-2008 21:27:56
Error "File not found: AHMSystemClass.dcu" Miriamc Varios 2 05-06-2006 17:13:36
Error: "Record not found or changed by another user" jmlifi Varios 0 27-01-2006 11:16:57
Solución para el error "Field ID not found" Calderin Conexión con bases de datos 5 24-11-2004 12:18:26


La franja horaria es GMT +2. Ahora son las 14:50:46.


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