Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-10-2007
douglas douglas is offline
Miembro
 
Registrado: jul 2007
Posts: 145
Poder: 17
douglas Va por buen camino
dterminar si los datos que se van a enviar ya existen

buenas chicos, aqui miren sigo molestandolos y molestandolos, pero bueno espero que almenos todas mis dudas las aproveche otras personas que foreen, al igual que las aprovecho yo, disculpen la molestia, pero hago lo siguiente, supuestamente para ver si la fecha ya existen en esa tabla, si ya existe que tire un mensaje diciendo que no puede almacenar, y si no existe que almacene, pero no funciona, y no me tira ningun mensaje, perdon chicos, pero me quede crudo con las ideas, les dejo aqui el codigo para que los inspeccionen:
Código Delphi [-]
procedure TForm3.Button2Click(Sender: TObject);
var
temp:integer;
a:string;
begin
     dbtext1.Field.Text:=getlocald;
     query2.Active:=false;
     query2.SQL.Text:='select fecha from ciber';
     query2.Active:=true;
     while not query2.Eof do
     begin
          a:=query2.Fields[0].Text;
          if dbtext1.Field.Text=a then
          begin
               showmessage('NO SE ACEPTA DUPLICIDAD DE DATOS');
          end
          ELSE
          begin
               table2.Append;
               showmessage('TODOS LOS DATOS FUERON ALMACENADOS EXITOSAMENTE');
          end;
          query2.Next;
     end;
end;

espero no ponerlos en muchas molestias, de antemano les agradezco por la ayuda y tambien por todas las veces anteriores que me han ayudado.
Responder Con Cita
  #2  
Antiguo 30-10-2007
tefots tefots is offline
Miembro
 
Registrado: feb 2005
Posts: 108
Poder: 20
tefots Va por buen camino
Cita:
Empezado por douglas Ver Mensaje
buenas chicos, aqui miren sigo molestandolos y molestandolos, pero bueno espero que almenos todas mis dudas las aproveche otras personas que foreen, al igual que las aprovecho yo, disculpen la molestia, pero hago lo siguiente, supuestamente para ver si la fecha ya existen en esa tabla, si ya existe que tire un mensaje diciendo que no puede almacenar, y si no existe que almacene, pero no funciona, y no me tira ningun mensaje, perdon chicos, pero me quede crudo con las ideas, les dejo aqui el codigo para que los inspeccionen:
normal que no te funcione , vaya cacao maravillao has montao en esa busqueda.

primero
deberias hacer un query filtrando de la forma

Query2.SQL.Text:='select fecha from ciber where fecha=:f';
Query2.parambyname('f').datatype:=ftdatetime;
Query2.parambyname('f').value:=StrtoDatetime(A);
Query2.open;
if query2.recordcount>0 then Showmessage('Error , la fecha ya existe');
Query2.close;


luego , donde pones table1.append , aqui deberia ir un table1.post , ya que no tiene sentido lo que estas haciendo. las comprobaciones hay que hacerlas antes de guardar datos (post) , el append es para añadir un nuevo registro en blanco.


lo que debes hacer es ,
1º table1.append o table1.edit
2º establecer los valores que quieras en los campos o controles enlazados a los campos de la tabla.
3º antes de hacer table1.post , buscar con el query la fecha , si la encuentras no hacer post y sacar mensaje , sino , puedes hacer post y guardar los cambios.


Saludos.
Responder Con Cita
  #3  
Antiguo 30-10-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Lo normal en estos casos es crear un índice único en la tabla por el campo Fecha. Si intentas insertar una fecha, dará una excepción el motor de Bases de datos por violar la restricción de unicidad.

Así evitas tener que lanzar una consulta, el SGBBDD es más eficiente que tu al buscar por ese índice.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #4  
Antiguo 30-10-2007
douglas douglas is offline
Miembro
 
Registrado: jul 2007
Posts: 145
Poder: 17
douglas Va por buen camino
Cita:
Empezado por Lepe Ver Mensaje
Lo normal en estos casos es crear un índice único en la tabla por el campo Fecha. Si intentas insertar una fecha, dará una excepción el motor de Bases de datos por violar la restricción de unicidad.

Así evitas tener que lanzar una consulta, el SGBBDD es más eficiente que tu al buscar por ese índice.

Saludos
perdon pero al escribir lo anterior, te refiere a que en el campo fecha debo colocar una llave principal, eso es lo que te entiendo, y que de esa manera, evitare duplicidad de datos, mira perdon lepe, pero estoy trabajando en access, no sabes si de alguna manera puedo evitar la duplicidad de datos desde access, perdon por las molestias, y gracias por la ayuda chicos.
Responder Con Cita
  #5  
Antiguo 30-10-2007
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
como te decia el amigo LEPE, debes crear una llave principal para que acces se encargue de la duplicidad, y si, si se puede hacer en acces
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #6  
Antiguo 30-10-2007
douglas douglas is offline
Miembro
 
Registrado: jul 2007
Posts: 145
Poder: 17
douglas Va por buen camino
Código Delphi [-]
query2.close;
query2.sql.add('select fecha from ciber');
query2.sql.add(' where fecha between :Fechain and :Fechafin');
query2.parambyname('Fechain').value:=dbtext1.caption;
query2.parambyname('Fechafin').value:=dbtext1.caption;
query2.open;
a:=query2.fields[0].AsString;
query2.close;
if a <> dbtext1.caption then 
begin 
       table2.append;
       showmessage('LOS DATOS FUERON ALMACENADOS');
       table2.insert;
end
else
begin 
       showmessage('los datos ya existen')
       form3.close;
end;

gracias por la ayuda aqui esta el codigo con el que me funciono la restriccion.
Responder Con Cita
  #7  
Antiguo 30-10-2007
tefots tefots is offline
Miembro
 
Registrado: feb 2005
Posts: 108
Poder: 20
tefots Va por buen camino
Funcionar funcionar , no lo tengo yo muy claro que te funcione bien...
y no se porque usas un betwen , si con un = seria suficiente.

y como te he dicho , lo normal es comprobar las condiciones (si tal registro existe ) justo antes de hacer el post.


Ademas , revisa lo siguiente a ver que tienes mal , creo que los conceptos de insert, post , edit, etc. no los tienes muy claros...

Código Delphi [-]
 
 table2.append;
 Showmessage('LOS DATOS FUERON ALMACENADOS')
 table2.insert;


como ya te han dicho la mejor solucion es definir el campo para que no puedas almacenar duplicados. en access, puedes definir el campo como indexado sin duplicados , con esto te evitas el tener que buscar y todo lo anterior. aunque no te evitas tener que controlar y capturar el error al hacer post.

saludos.
Responder Con Cita
  #8  
Antiguo 30-10-2007
douglas douglas is offline
Miembro
 
Registrado: jul 2007
Posts: 145
Poder: 17
douglas Va por buen camino
Cita:
Empezado por tefots Ver Mensaje
Funcionar funcionar , no lo tengo yo muy claro que te funcione bien...
y no se porque usas un betwen , si con un = seria suficiente.

y como te he dicho , lo normal es comprobar las condiciones (si tal registro existe ) justo antes de hacer el post.


Ademas , revisa lo siguiente a ver que tienes mal , creo que los conceptos de insert, post , edit, etc. no los tienes muy claros...

Código Delphi [-]
table2.append;
Showmessage('LOS DATOS FUERON ALMACENADOS')
table2.insert;



como ya te han dicho la mejor solucion es definir el campo para que no puedas almacenar duplicados. en access, puedes definir el campo como indexado sin duplicados , con esto te evitas el tener que buscar y todo lo anterior. aunque no te evitas tener que controlar y capturar el error al hacer post.

saludos.
pues mira, segun yo el table2.append; me funciona pra enviar a bases de datos, pues perdon por mi ignorancia, es que apenas estoy iniciandome en las bases de datos delphi, pues de echo es el primer lenguaje hacia objetos que tomo, y el append me a funcionado, ahora, la cuestion del table2.insert, es que como luego de haber ingresado data a la base de datos, se quedan como que limpios los bdedit, pero me funcionaban, puesto que me envianban de nuevo la misma informacion, por tanto me tiraba error, luego se me ocurrio porner el insert, y woala me funciono, no de una manera bonita ni muy profecional, pero cumple con lo que yo deseaba hacer, como te repito gracias por toda la buena ayuda que me han brindado todos, y ademas que soy un poco ignorante en las bases de datos, no llevo mucho parendiendolas, pero cualquier observacion es bien recibida, y si fueras tan amable de explicarme que otros metodos puedo utilizar para esto
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
Enviar datos de un formulario lucasarts_18 HTML, Javascript y otros 2 19-12-2006 17:18:26
Enviar datos via internet JULIPO Internet 0 05-10-2006 07:54:28
Enviar Datos a una Aplicacion Esau API de Windows 2 02-06-2006 16:01:26
enviar datos a un puerto... JoseBozzano Internet 1 19-08-2004 23:52:11
Enviar datos a disco Ignacio Varios 5 07-04-2004 02:49:24


La franja horaria es GMT +2. Ahora son las 06:52:10.


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