Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-07-2010
marareta marareta is offline
Miembro
 
Registrado: ago 2008
Posts: 33
Poder: 0
marareta Va por buen camino
en query -- ExcecSQL y Open

Hola amigos, aca otra vez molestandolos, tengo un pequeño problemita, tengo una tabla pacientes en donde los voy agregando, y al momento de llenar los datos en mi aplicacion le doy guardar y todo perfecto, el problema viene cuando inmediatamente despues intento guardar otro paciente ya no me respeta cuando intento validar si el paciente existe. Aqui les va el codigo:

En el boton de guardar tengo otras cosas pero aqui es donde tengo el problema.
Esto esta al principio para checar si el usuario existe:
Código Delphi [-]
 
Querypac.Close;
querypac.SQL.Clear;
Querypac.Sql.Text := 'Select * From pacientes';
Querypac.Open;
if ((Querypac.FieldValues['nombre']= edit3.Text)) then //edit 3 es donde pongo el nombre del paciente
   begin
   showmessage('El usuario ya existe');
   exit;
   end
  end;
Inmediatamente despues ya que se que el usuario no existe lo ingreso a la tabla con el siguiente codigo:
Código Delphi [-]
 
QueryPac.Close;
QueryPac.SQL.Clear;
QueryPac.SQL.Add('Insert into pacientes(nombre,edad) values'
            +chr(39)+edit71.Text+chr(39)+','+chr(39)+edit72.Text+chr(39)+')');
QueryPac.ExecSQL;
showmessage('El paciente se agregó correctamente');

Hasta aquí todo bien, el problema es si intento guardar otro paciente, le pongo el mismo nombre y no me dice que está duplicado.
Antes tenia el código cuando lo voy a insertar envez de tener:
Código Delphi [-]
 
QueryPac.ExcecSQL;
//tenia
QueryPac.Open;
pero me decia "Error creating cursor handle"
y por eso se lo cambie, no se si exista una instrucción como para despues de utilizar ExcecSQL poder cancelar o algo asi porque siento que esa es la instruccion que me esta danmdo problemas.
ojalá me pudieran ayudar porque me estoy volviendo loco por no poder resolver esto, como siempre muchas gracias de antemano

Última edición por marareta fecha: 20-07-2010 a las 07:10:33.
Responder Con Cita
  #2  
Antiguo 20-07-2010
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 19
olbeup Va camino a la fama
En la primera sentencia que haces, no esta bien por que te traes todos los pacientes y solo te compara uno, de los xx que te trae.
Cita:
Querypac.Close;
querypac.SQL.Clear;
Querypac.Sql.Text := 'Select * From pacientes';
Querypac.Open;
if ((Querypac.FieldValues['nombre']= edit3.Text)) then //edit 3 es donde pongo el nombre del paciente
begin
showmessage('El usuario ya existe');
exit;
end
end;
Lo correcto seria:
Código Delphi [-]
Querypac.Close;
querypac.SQL.Clear;
Querypac.Sql.Text := 'Select count(*) AS Existe From pacientes where nombre = ' + QuotedStr(edit3.Text);
Querypac.Open;
if (Querypac.FieldValues['Existe'] > 0) then // Si el valor devuelto es mayor que 0 (cero) el paciente ya existe
   begin
   showmessage('El usuario ya existe');
   exit;
   end
  end;
Un saludo.
Responder Con Cita
  #3  
Antiguo 20-07-2010
Avatar de afunez2007
afunez2007 afunez2007 is offline
Miembro
 
Registrado: oct 2007
Ubicación: La Ceiba, Honduras
Posts: 170
Poder: 17
afunez2007 Va por buen camino
Lightbulb

Hola Amigo

Solo hacerte un par de comentarios:

1.- Siempre que vas a utilizar una query debes desactivarla antes de cambiarle el sql text, en vez de utilizar open / close, a mi en lo particular me da mejores resultados:

Código Delphi [-]
Querypac.Active:=False;
Querypac.SQL.Clear; 
Querypac.Sql.Text := 'Select * From pacientes where nombre ='+QuotedStr(edit3.Text);
Querypac.Active:=True;
  if Querypac.RecordCount>0 then
   begin
     showmessage('El paciente ya existe');
     exit;
  end;

2.- Por una practica sana si utilizas una query para checar la existencia del cliente, utiliza otra para hacer el insert
Código Delphi [-]
QueryPac2.Sql.Clear;
QueryPac2.SQL.Text:='Insert into pacientes(nombre,edad)  values('
                    +QuotedStr(edit71.Text)+','+QuotedStr(edit72.Text)+')';
QueryPac2.ExecSQL;
showmessage('El paciente se agregó correctamente');

Espero te sirvan este par de comentarios y como veras he cambiado un poco el texto en ambas querys, yo utilizo este tipo de cosas rutinariamente y con esto no me falla

Saludos
__________________
Si robas, roba un beso, si mientes que sea por amor y si engañas que sea a la muerte!!
Responder Con Cita
  #4  
Antiguo 21-07-2010
Avatar de radenf
radenf radenf is offline
Miembro
 
Registrado: oct 2007
Ubicación: Viña del Mar,Chile
Posts: 608
Poder: 17
radenf Va por buen camino
Estimado marareta :

Otro comentario.
Yo también programo aplicaciones para uso con pacientes y es sorprendente la cantidad de pacientes que tienen el mismo nombre. Si utilizas este criterio para incluir nuevos registros en tu base de datos probablemente tendrás problemas.
A mi me ha resultado de mayor utilidad utilizar un número único de identificación, que puede ser el Nº de la ficha del paciente o su RUT, NIF o como se llame en tu país.

Saludos y ojalá este comentario te sirva
Responder Con Cita
  #5  
Antiguo 21-07-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.037
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Totalmente de acuerdo con radenf, usa el DNI o algún identificador único, porque como uses nombres... ya veo extirpándole el apéndice al que fue a curarse una picadura de mosquito, y amputarle el pié al que fue por una gripe
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
Open Cv fmtidona Gráficos 0 13-02-2009 19:52:08
Error en Query.Open : Invalid field type (BLOB) natalinuyo Gráficos 4 15-10-2008 20:16:29
Declarar variable y select en la misma llamada a Query.Open Lord Delfos SQL 5 20-02-2008 01:05:19
Query dentro de otro query (Access) FGarcia SQL 2 28-12-2007 05:46:05
Como hacer referencia a un query dentro de otro query? JuanBCT SQL 2 05-09-2006 18:35:25


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


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