Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Validar insercion en BD con tquery (https://www.clubdelphi.com/foros/showthread.php?t=61169)

Elite237 28-10-2008 16:40:33

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;

Caral 28-10-2008 17:31:59

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

Elite237 28-10-2008 17:57:13

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)

Delphius 28-10-2008 18:09:38

Off-topic
 
Cita:

Empezado por Elite237 (Mensaje 322893)
Te queda bien el color de pelo de la foto(digo yo que eres tu)

Elite237, yo que vos me cuido:D. La foto de Caral es su hija.
Y por si preguntas, Caral es hombre.

Saludos,

Elite237 28-10-2008 18:14:34

:eek: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.:o

Delphius 28-10-2008 18:22:26

Cita:

Empezado por Elite237 (Mensaje 322902)
:eek: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.:o

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,

Caral 28-10-2008 18:35:44

Hola
Elite237 me alegro que te funcionara.
No te preocupes, como dice Delphius no es la primera vez y no me molesta.
Saludos

Elite237 28-10-2008 23:32:14

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

Caral 29-10-2008 01:39:46

Hola
Cita:

Empezado por Elite237 (Mensaje 322999)
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 (Mensaje 322999)
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

Caro 29-10-2008 01:44:44

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


La franja horaria es GMT +2. Ahora son las 02:45:48.

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