FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
Campos unicos al introducir
Holas!
Quisiera saber como tengo que realizar el codigo para que no me permita introducir informacion duplicada, siendo estos campos NO llaves. Ejemlo tengo CI, NOmbres, Apellidos, MateriasProgramas, SiglaMateria, etc 1234567 Juan Perez Matematicas MAT-100 1001234 Juan Perez...../Que no me permita ya que nombres y apellidos se repiten. 1234567 Juan Perez Matematicas MAT-100//Que no me permita por que se repiten las Materias con la sigla 1234567 Maria Cruz....// No permita por que se repite el mismo CI almacenado antes en la Base de Datos. Por si caso estoy usando como gestor de BD SQL Server, y programo en Delphi. ///(quizas..) algun componente que pueda facilitarme? Gracias |
#2
|
||||
|
||||
Hola sisne.
No sé que componente usas para ingresar los datos, si es con un TEdit esto podría ser una opción: Código:
procedure TForm1.Edit1Exit(Sender: TObject); begin with IBQry do begin SQL.Text:= 'SELECT * FROM MISDATOS WHERE NOmbres = ' + QuotedStr(Edit1.Text); Open; if not IsEmpty then begin MessageDlg('NOMBRE EXISTENTE',mtError,[mbOk],0); //... //... end end end; para verificar su existencia. Código:
procedure TForm1.IBDSetNombreSetText(Sender: TField; const Text: String); var Nombre: string; begin Nombre:= Text; with IBQry do begin Close; SQL.Text:= 'SELECT * FROM MISDATOS WHERE NOmbres = '+QuotedStr(Nombre); Open; if not IsEmpty then begin MessageDlg('NOMBRE EXISTENTE',mtError,[mbOk],0); //... //... end end end; Saludos.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#3
|
||||
|
||||
Hola ecfisa!
Gracias por el código, estoy usando DBEdit (con Base de datos SQL SERVER), voy a probar ok? Saludos. |
#4
|
||||
|
||||
Hola de nuevo sisne.
Sin darme cuenta dí por sentado unas líneas que si faltan te podrían complicar; amplio el código: Código:
procedure TForm1.IBDSetNombreSetText(Sender: TField; const Text: String); var Nombre: string; begin Nombre:= Text; with IBQry do begin Close; SQL.Text:= 'SELECT * FROM MISDATOS WHERE NOmbres = '+QuotedStr(Nombre); Open; if not IsEmpty then begin MessageDlg('NOMBRE EXISTENTE',mtError,[mbOk],0); //... //... Abort; // Cancelar el ingreso end else TField(Sender).Value:= Nombre; // Restaurar el valor ingresado end end;
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#5
|
||||
|
||||
Hola ecfisa, gracias por tu ayuda. Olvide mencionar que estoy usando Query o ADOQuery y pues...
Mi codigo es este: Código:
procedure TFmateria.NombreMExit(Sender: TObject); var nombre: string; begin nombre := Fmateria.NombreM.Text; Query1.Close; Query1.SQL.Text := 'Select * From BDmateria where NombreM = '+QuotedStr(nombre); Query1.Open; if not Query1.IsEmpty then begin MessageDlg('Nombre materia existente',mtError,[mbOk],0); Fmateria.NombreM.SetFocus; Abort; // cancelar el ingreso end else //TField(Sender).Value:= Nombre; // Restaurar el valor ingresado end; Código:
end else TField(Sender).Value:= Nombre; // Restaurar el valor ingresado end end; Podrias aclararme por favor? Que tendria que colocar? El Codigo es perfecto para campos unicos, pero si quisiera que tres campos iguales no se introzcan en una Base de Datos? Ejemplo: Juan Perez Flores//valido Rosa Perez Cruz//Valido Juan Perez Flores // puede haber el caso de que de pronto este repitiendo los mismos datos con el mismo nombre y apellidos (no valido) Jose Perez Flores// esto es valido Gracias! Última edición por sisne fecha: 06-04-2010 a las 00:31:14. |
#6
|
||||
|
||||
Hola sisne.
No me he topado con ADO todavía, así que te pido disculpas si no puedo ayudarte todo lo que desearía. Te explico el porqué de esas líneas, para que las adaptes y quizá ni te hagan falta El Abort es una excepción silenciosa y no depende de la base de datos que estes usando, es sólo para cancelar el ingreso si el dato ya existe. En cuanto a la otra línea sólo es necesaria para restaurar el valor del parámetro Text del evento OnSetText. Pero como veo que estás usando la comprobación en el evento OnExit del DBEDit su uso, no tiene ningún sentido en tu caso. Saludos.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#7
|
||||
|
||||
¿Porqué no utilizas índices en la Base de Datos? Será más eficiente que cualquier código que añadas a tu programa.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#8
|
||||
|
||||
Holas! Gracias por la ayuda!
Respecto a el funcionamiento de los indices en la base de datos pues no tengo conocimiento. Gracias! |
#9
|
||||
|
||||
Cita:
Pues deberías revisarlo ya que creo que te puede ser útil. Pudes definir un índice ÚNICO por uno o varios campos y la Base de Datos se encargará de que no introduzcas información duplicada segun el índice definido. Te evitarás tener que hacer nada más.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Valores previos únicos en controles data-aware | gorsan | Conexión con bases de datos | 7 | 21-03-2008 18:54:43 |
Introducir Objetos en una DLL | Delar | Varios | 0 | 10-10-2006 19:39:07 |
Como introducir los campos en en reporte de FreeReport | Goyo | Impresión | 1 | 30-09-2006 00:39:59 |
Distincion de mayusculas en campos unicos | xerkan | Firebird e Interbase | 4 | 01-09-2004 18:45:46 |
Valores unicos en tablas mySQL | jmselesan | MySQL | 1 | 05-08-2003 16:26:48 |
|