Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-10-2008
Elite237 Elite237 is offline
Miembro
 
Registrado: jul 2007
Posts: 162
Poder: 17
Elite237 Va por buen camino
Validar insercion en BD con tquery

Hola de nuevo, fijense que tengo una duda...como puedo validar al guardar un usuario con tquery, osea que si ya existe que me mande un aviso de que no se puede guardar pues ya existe en la BD(lo se hacer con table, con un locate, pero con tquery no, y no puedo cambiarlo puesto que asi me lo piden). Tengo que hacer un procedimiento? o una funcion?

este es el codigo que uso, pero no me funciona correctamente, ya que cuando lo uso no me deja guardar.

Esta es mi funcion:
Código Delphi [-]
function TForm1.VerificarGuardar: Boolean;
begin
 with query1 do
 begin
   close;
   sql.clear;
   sql.add('select * from tevaluacion');
   sql.add('where eval_descripcion='''+ednombre.text+'''');
   open;
   if recordcount<>0 then
   begin
    
    application.messagebox('El nombre de la evaluacion ya existe','Error de entrada',mb_Ok+mb_IconExclamation);
   end;
 end;
end;

Asi la uso en mi boton y no me deja guardar:
Código Delphi [-]
procedure TForm1.BitBtnAPGuardarClick(Sender: TObject);
var
evalua:string;
begin
   evalua:=copy(cmbEvaluacion.text,0,pos('-',cmbEvaluacion.text)-1); //Sacamos la clave del combo de la evaluacion
if verificarguardar = false then
begin   
query2.close;
   query2.sql.clear;
   query2.sql.add('insert into det_evaluacion(det_eval,det_version,det_clave,det_pregunta,det_tipo,det_valor)');
   query2.sql.add('values(:det_eval,:det_version,:det_clave,:det_pregunta,:det_tipo,:det_valor)');
   query2.ParamByName('det_eval').AsString:=evalua;
   query2.ParamByName('det_version').AsString:=edversion.text;
   query2.ParamByName('det_clave').AsString:=edclave.text;
   query2.ParamByName('det_pregunta').AsString:=edpregunta.text;
   query2.ParamByName('det_tipo').AsString:=edtipo.text;
   query2.ParamByName('det_valor').AsString:=edvalor.text;
   try
    query2.execsql
   except
   end;
    edversion.Clear;
    edclave.Clear;
    edpregunta.Clear;
    edtipo.Clear;
    edvalor.clear;
    application.messagebox('Los datos se guardaron correctamente','Mensaje de confirmación',mb_OK+mb_IconInformation);
    LlenarGridPreguntas(sender);
end;
end;
Responder Con Cita
  #2  
Antiguo 28-10-2008
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 asi:

Código Delphi [-]
procedure TForm1.BitBtnAPGuardarClick(Sender: TObject);
begin
query2.SQL.Text := 'select * from tevaluacion where eval_descripcion= :Nom';
query2.ParamByName('Nom').AsString:= ednombre.text;
query2.Open;
     If query2.Fields[0].AsString = ednombre.text then
     begin
     MessageDlg('El nombre de la evaluacion ya existe','Error de entrada',mtError,[mbOK],0);
     ednombre.SetFocus;
     query2.Close;
end
else
begin
   query2.sql.clear;
   query2.sql.add('insert into det_evaluacion(det_eval,det_version,det_clave,det_pregunta,det_tipo,det_valor)');
   query2.sql.add('values(:det_eval,:det_version,:det_clave,:det_pregunta,:det_tipo,:det_valor)');
   query2.ParamByName('det_eval').AsString:=evalua;
   query2.ParamByName('det_version').AsString:=edversion.text;
   query2.ParamByName('det_clave').AsString:=edclave.text;
   query2.ParamByName('det_pregunta').AsString:=edpregunta.text;
   query2.ParamByName('det_tipo').AsString:=edtipo.text;
   query2.ParamByName('det_valor').AsString:=edvalor.text;
   query2.execsql
   edversion.Clear;
   edclave.Clear;
   edpregunta.Clear;
   edtipo.Clear;
   edvalor.clear;
   application.messagebox('Los datos se guardaron correctamente','Mensaje de confirmación',mb_OK+mb_IconInformation);
    LlenarGridPreguntas(sender);
end;
end;
Saludos
__________________
Siempre Novato
Responder Con Cita
  #3  
Antiguo 28-10-2008
Elite237 Elite237 is offline
Miembro
 
Registrado: jul 2007
Posts: 162
Poder: 17
Elite237 Va por buen camino
Excelente Caral..ya lo validó.Muchas gracias por tu respuesta y mas por tu tiempo.Te queda bien el color de pelo de la foto(digo yo que eres tu)
Responder Con Cita
  #4  
Antiguo 28-10-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Off-topic

Cita:
Empezado por Elite237 Ver Mensaje
Te queda bien el color de pelo de la foto(digo yo que eres tu)
Elite237, yo que vos me cuido. La foto de Caral es su hija.
Y por si preguntas, Caral es hombre.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #5  
Antiguo 28-10-2008
Elite237 Elite237 is offline
Miembro
 
Registrado: jul 2007
Posts: 162
Poder: 17
Elite237 Va por buen camino
Disculpa caral.....en serio mil disculpas,no sabia(ahora lo se).En ocasiones las fotos que colocan son las mismas personas que contestan.En serio disculpa.
Responder Con Cita
  #6  
Antiguo 28-10-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por Elite237 Ver Mensaje
Disculpa caral.....en serio mil disculpas,no sabia(ahora lo se).En ocasiones las fotos que colocan son las mismas personas que contestan.En serio disculpa.
No es necesario que te disculpes, no creo que eso le moleste.
No eres el primero que lo confunde con una mujer, mejor dicho con su hija.

Nomás yo te decía en broma que debes cuidarte. En todo caso soy yo quien debe pedir disculpa.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #7  
Antiguo 28-10-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Elite237 me alegro que te funcionara.
No te preocupes, como dice Delphius no es la primera vez y no me molesta.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #8  
Antiguo 28-10-2008
Elite237 Elite237 is offline
Miembro
 
Registrado: jul 2007
Posts: 162
Poder: 17
Elite237 Va por buen camino
Una duda, solo es para confirmar..a que se refiere ese :Nom' que usaste?Digo por si lo quiero usar mas adelante..

Código Delphi [-]

eval_descripcion= :Nom';
query2.ParamByName('Nom').AsString:= ednombre.text;
y aqui a que se hace referencia? es a un arreglo?me refiero
especificamente en el query2.fields[0]
Código Delphi [-]
     If query2.Fields[0].AsString = ednombre.text then
Responder Con Cita
  #9  
Antiguo 29-10-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Cita:
Empezado por Elite237 Ver Mensaje
Una duda, solo es para confirmar..a que se refiere ese :Nom' que usaste?Digo por si lo quiero usar mas adelante..

Código Delphi [-]
eval_descripcion= :Nom';
query2.ParamByName('Nom').AsString:= ednombre.text;
Nom es un parametro, te explico:
Los parametros se usan en una consulta sql para hacer referencia a algun dato o para hacer comparaciones.
Estos pueden tener cualquier nombre y están precedidos por dos puntos.
Igual que use :Nom, podria usar :Pato o :XXXX o el nombre que sea.

Cita:
Empezado por Elite237 Ver Mensaje
y aqui a que se hace referencia? es a un arreglo?me refiero
especificamente en el query2.fields[0]

Código Delphi [-]
If query2.Fields[0].AsString = ednombre.text then
Aqui lo que se hace es tomar un dato de un campo.
Query2 es el query
Fields es el campo.
[0] hace referencia al primer campo.
AsString es el tipo de dato
No es ningún arreglo ni nada complicado, eso se lo dejo a los maestros.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #10  
Antiguo 29-10-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola Elite237, no te guarda porque tu función VerificarGuardar no esta devolviendo ningún resultado, por lo tanto te devolvera siempre True y al preguntar tu por False nunca entrara a ese bloque.

Tu función debería quedar así:

Código Delphi [-]
function TForm1.VerificarGuardar: Boolean;
begin
  with query1 do
   begin
     close;
     sql.clear;
     sql.add('select * from tevaluacion');
     sql.add('where eval_descripcion='''+ednombre.text+'''');
     open;
     if recordcount<>0 then
     begin    
      application.messagebox('El nombre de la evaluacion ya existe','Error de entrada',mb_Ok+mb_IconExclamation);
      Result := True;
     end
    else
     Result := False;
   end;
end;

inclusive puedes preguntar por Query.IsEmpty.

Código Delphi [-]
   ........................
    open;
     if Not IsEmpty then
     begin    
      application.messagebox('El nombre de la evaluacion ya existe','Error de entrada',mb_Ok+mb_IconExclamation);
      Result := True;
     end
    else
     Result := False; //No existe
  ......................

Sobre tus ultimas preguntas, :nom significa que nom es un parametro, y al hacer query2.ParamByName('Nom').AsString:= ednombre.text; estamos llenando con el valor de ednombre.text ese parametro. Y sobre query2.fields[0] , si es un arreglo de campos, cuando tu haces en la consulta select * From... , con ese * te trae todos los campos en el orden que los tienes en tu tabla "Fields[0]" se refiere al primer campo. En en tu caso ya no sería necesario ese if "If query2.Fields[0].AsString = ednombre.text then
", ya que en tu consulta estas filtrando por ese nombre y solo sería preguntar si hay resultados o no con IsEmpty.

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
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
Inserción de Componentes FerCastro Servers 0 20-10-2008 17:48:21
insercion en ado vroa74 Conexión con bases de datos 1 28-03-2007 00:13:27
insercion en GDB vroa74 Conexión con bases de datos 1 22-03-2007 11:09:39
Insercion de fecha Alexita22 MySQL 5 06-07-2006 18:57:44
Inserción de comprobante Ulises Providers 0 25-07-2003 04:15:13


La franja horaria es GMT +2. Ahora son las 06:31:08.


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