Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-02-2016
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
problemas con ibdataset1.parambyname en ibx

Hola,
por mas que hago pruebas y reviso no soy capaz de saber el por qué no funciona esto:

Código Delphi [-]
function tfagregausuario.verificarnick:byte;
begin
ibdataset1.SelectSQL.clear;
ibdataset1.selectSQL.Text:='select * from usuarios';
ibdataset1.open;
ibdataset1.Close;
ibdataset1.SelectSQL.clear;
ibdataset1.selectSQL.add('select * from usuarios where nick = :nick4');
ibdataset1.ParamByName('nick4').value:=lowercase(enick.Text);
ibdataset1.open;

cuando lo ejecuto, me dice que nick4 no existe.
Leyendo y buscando sobre los componentes ibx, recomiendan no usar los ibtable ni los ibquery porque son para migracion, lo mas recomendable es usar los ibdataset. Pues bien, teniendo en cuenta, como sabeis, que estaba acostumbrado a los zeos y no he tenido problemas con ellos, ni con lo que escribi antes, no entiendo porque aqui no me deja pasar el parametro si es lo mismo que estuve haciendo con zeos y lo mismo que poneis en otros post.
Cerrar, limpiar, asignar el sql, el parametro y finalmente abrir.

nose la verdad

gracias
Responder Con Cita
  #2  
Antiguo 20-02-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola anubis.

Código Delphi [-]
function tfagregausuario.verificarnick:byte;
begin
  
{ **  las líneas siguientes son innecesarias **
  ibdataset1.SelectSQL.clear;
  ibdataset1.selectSQL.Text:='select * from usuarios';
  ibdataset1.open;
}
 
  // quedaría:
  ibdataset1.Close;
  ibdataset1.selectSQL.Text := 'select * from usuarios where nick = :nick4';
  ibdataset1.ParamByName('nick4').value := lowercase(Trim(enick.Text)); //(*)
  ibdataset1.open;
end;
(*) La función Trim quitará espacios indeseados. Asegurate que los valores de la columna nick estén almacenados en minúsculas o no hallará coincidencias.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 20-02-2016
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
Gracias por contestar de nuevo .

si eso me queda claro, lo que no me cuentra es nick4 que esta en parambyname, dice que no existe el campo, puedo poner lo que sea que dice que no existe.

Los valores que comentas que son innecesarios los pongo para poder volver a asignar seleccionar todos los registros y poder realizar otro filtro.

Última edición por anubis fecha: 20-02-2016 a las 06:19:23.
Responder Con Cita
  #4  
Antiguo 20-02-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola anubis.
Cita:
Empezado por anubis Ver Mensaje
Gracias por contestar de nuevo .

si eso me queda claro, lo que no me cuentra es nick4 que esta en parambyname, dice que no existe el campo.
Según tu código inicial, el nombre del campo es nick y el nombre del parámetro es nick4 por lo que el código del mensaje #2,
Código Delphi [-]
  ibdataset1.Close;
  ibdataset1.selectSQL.Text := 'select * from usuarios where nick = :nick4';
  ibdataset1.ParamByName('nick4').value := lowercase(Trim(enick.Text)); //(*)
  ibdataset1.open;
no tendría que dar ese tipo de error...

¿ Cuál es "literalmente" el error que te muestra ? (copia/pega)

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 20-02-2016
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
Cita:
Field "nick4" not found
A la hora ejecutar el programa, cuando vuelvo a poner otro usuario, ya me sale ese error.

Al quitar inicialmente las lineas que dices que no son necesarias, el programa me lo ejecuta normal de primera vez, me busca el usuario, al poner otro usuario y pasar por el mismo sitio, ya me salta el error.
Responder Con Cita
  #6  
Antiguo 20-02-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Suena como que hay residuos en la cadena, pero eso no debería pasar usando la propiedad Text ya que sobreescribe lo anterior.

¿ Estas usando el método Add de este modo ?
Código Delphi [-]
  ibdataset1.Close;
  ibdataset1.selectSQL.Add('select * from usuarios where nick = :nick4');

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 20-02-2016 a las 06:36:28. Razón: corrección
Responder Con Cita
  #7  
Antiguo 20-02-2016
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
No la verdad no, es como te lo he mostrado, con selectsql.text no con add.
Responder Con Cita
  #8  
Antiguo 20-02-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Que extraño...

¿ Podrías copiar/pegar las líneas que ejecutas cada vez que ingresas un usuario ?

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #9  
Antiguo 20-02-2016
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
Código Delphi [-]
function tfagregausuario.verificarnick:byte;
begin
ibdataset1.Close;
ibdataset1.selectSQL.text:='select * from usuarios where nick = :nick4';
ibdataset1.ParamByName('nick4').value:=lowercase(trim(enick.Text));
ibdataset1.Open;

if (ibdataset1.IsEmpty) then
begin
end
else
showmessage('el usuario existe');
end;

Esa es la funcion y este es el procedimiento

Código Delphi [-]
procedure TFagregausuario.enickKeyPress(Sender: TObject; var Key: char);
begin

if not (key in ['A'..'Z','a'..'z',#7,#8, #13]) then
key:=#0
else
  if (key=#13) and (enick.text<>'') then
  begin
   verificarnick;
   end;

No hay mas, cada vez que escribo en text1.text y pulso enter, se va a verificar si el usuario existe.
De primera vez si lo hace bien, de segunda vez, sin cerrar el programa, ya me aparece que nick4 not found.

Efectivamente, faltaba poner en la funcion algo como esto:

Código Delphi [-]
ibdataset1.Close;
ibdataset1.SelectSQL.text:='select * from usuarios';
ibdataset1.open;
Para que de la segunda vuelta empiece de nuevo con el select de todos los usuarios, pero poniendolo al principio o al final de la funcion, me da el error antes o despues.
Responder Con Cita
  #10  
Antiguo 20-02-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola de nuevo.

Me quedé pensando de donde podría venir ese error y me acordé de algo... ¿ Por casualidad cuando creaste la tabla hiciste parecido a esto ?
Código SQL [-]
CREATE TABLE USUARIOS (
    ID          INTEGER,
    "Nick"      VARCHAR(20), /* <- el nombre en esta línea */
    ...
);
¿ Haciendo que el nombre de la columna contenga mayúsculas y minúsculas ? De ser así, podría aparecerte ese mensaje.

Ejecuta esta línea desde tu gestor (IBExpert, Flamerobin, etc),
Código SQL [-]
ALTER TABLE USUARIOS ALTER COLUMN "Nick" TO NICK;  /* (1) */
aplica commit y luego intenta nuevamente desde Delphi.

(1) Donde Nick deberá ser exáctamente el nombre dado al campo (respetando mayúsculas y minúsculas en su órden).

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #11  
Antiguo 20-02-2016
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
Gracias en verdad.

La verdad es que genere otra aplicacion de prueba con los componentes basicos y funciono tal y como lo puse sin problema, asi que volvi a mi aplicacion anterior y estaba viendo que coloque un componente ibdynamicgrid que me estaba haciendo la puñeta .

Lo quite y ya no hubo ningun problema .

gracias de nuevo, voy a seguir completando la informacion con todo lo que me pusiste en el otro post.

Gracias de nuevo, esto de cambiar de componentes (de zeos a ibx) es un dolor de cabeza .
Responder Con Cita
  #12  
Antiguo 20-02-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Me alegra que lo hayas podido solucionar

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
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
Problema con Parambyname Perenquen MySQL 9 19-09-2012 03:13:59
Problemas con el ParambyName giancarlorc SQL 1 23-10-2011 19:27:06
Sobre el uso de ParamByName salvica SQL 11 24-11-2008 18:28:50
ParamByName en ADO silviodp Tablas planas 5 12-01-2008 12:50:01
Problemas con ParamByName Memo ramonibk MS SQL Server 2 14-09-2004 13:15:26


La franja horaria es GMT +2. Ahora son las 12:12:07.


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