Club Delphi  
    Paypal   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 16-11-2010
yevabas yevabas is offline
Miembro
NULL
 
Registrado: nov 2010
Posts: 42
Poder: 0
yevabas Va por buen camino
ayuda excepciones

Buenos días, perdon pero estoy comenzando con delphi, y las excepciones no las tengo muy claras, el problema es q no se en que estoy fallando, y siempre me genra este error,-...

Project bas.exe raised exception class EIBInterBaseError with message 'violatio of PRIMARY or KEY UNIQUE constraint "PK_AGENDA" .........

Si alguien me puede ayudar y decir como hago para que la excepcion o me frene el programa y continue ya que si la llave esta duplicada no debe cargarlo y nada mas,, muchas gracia spor la ayuda..


var
Form1: TForm1;

f : TextFile;
Nom,Dir,Ciu,Tel,rec1,u,s,trama: AnsiString;
a,rec: Integer;
cadena,re,sLinea: String;
i: Integer;



implementation

uses base;


{$R *.dfm}

procedure TForm1.Botton1Click(Sender: TObject);


begin
AssignFile (f,'c:\bases\base.txt');
Reset (f);
Readln(f,cadena);
CloseFile (f);
re:=AnsiMidStr(cadena, 7, 8);
TrimRight( re);
i:= StrToInt(re);

while FileExists ('c:\bases\'+cadena+'.txt') do begin
if FileExists('c:\bases\'+cadena+'.txt') then
begin
AssignFile (f,'c:\bases\'+cadena+'.txt');
Reset (f);
while not Eof( F ) do begin
ReadLn( F, sLinea );
trama:=sLinea;
Rec1:=AnsiMidStr(trama, 1, 8);
Nom:=AnsiMidStr(trama, 9, 10);
Dir:=AnsiMidStr(trama, 19, 10);
Ciu:=AnsiMidStr(trama, 29, 10) ;
Tel:=AnsiMidStr(trama, 39, 10) ;

u := StringReplace(Rec1, ' ', '', [rfReplaceAll]);
TrimRight(u);
Form1.IBTable1.Insert; // Ponemos la tabla en modo insercion

Form1.IBTable1.FieldbyName('Recibo').AsInteger := StrToInt(u);
Form1.IBTable1.FieldbyName('Nombre').AsString := Nom; //
Form1.IBTable1.FieldbyName('Direccion').AsString := Dir; //
Form1.IBTable1.FieldbyName('Ciudad').AsString := Ciu; // Insertamos
Form1.IBTable1.FieldbyName('Telefono').AsString := Tel; //

try
Form1.IBTable1.Post; // Guardamos los cambios.
except
on E: EIBInterBaseError do
begin
case E.IBErrorCode of
335544665:
else
raise;
end;
end;
end;
//************************************
end;
CloseFile (f);
//*************************************
i:=i+1;
AssignFile (f,'c:\bases\base.txt');
Rewrite( F );
WriteLn(f,'nombre'+IntToStr(i));
CloseFile (f);

end
else //if
begin
ShowMessage('No hay datos para cargar');
close;
end;
//********************************************



AssignFile (f,'c:\bases\base.txt');
Reset (f);
Readln(f,cadena);
CloseFile (f);
end;
//********************************************
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
close
end;



end.
Responder Con Cita
  #2  
Antiguo 16-11-2010
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.669
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Hola, yevabas, bienvenido a clubdelphi, te aconsejo que leas nuestra guía de estilo para entendernos mejor, muchas gracias por tu colaboración.

p.d. Ese mensaje de error indica que ya tienes una clave igual a la que intentas dar de alta, o sea, que estaría repetida, por eso no te deja.
Responder Con Cita
  #3  
Antiguo 16-11-2010
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.740
Poder: 26
ContraVeneno Va por buen camino
Código Delphi [-]
with Form1.IBTable1 do begin 
 try
  Post; // Guardamos los cambios.
 except
  on  E: EIBInterBaseError do begin
   Cancel; // <<-- Aquí cancelas  los cambios...
   case E.IBErrorCode of
     335544665: begin
       //si ocurre este error
      end; 
     else
      raise; //cualquier error que no esté dentro del case muestra el mensaje
   end; //case
  end; //E:EIBInterbaseError
end; //with

Aunque no entiendo claramente cuál es el problema, con la estructura que tienes, el sistema no debería bloquearse.

o tal vez lo que te haga falta es utilizar transacciones...
__________________

Responder Con Cita
  #4  
Antiguo 16-11-2010
yevabas yevabas is offline
Miembro
NULL
 
Registrado: nov 2010
Posts: 42
Poder: 0
yevabas Va por buen camino
excepciones

Hola contraVeneno

gracias por contestarme y tan rapido ven te explico q estoy haciendo a ver si me entiendes.

lo q estoy tratando de hacer es cargar una base con datos de unos archivos planos, el archivo estaría así;

1 william carrera1 bogota 1111111
2 carlos calle2 cali 2222222
3 fernando diagonal medellin 3333333

el primer dato es la llave primaria para la base, entonces estos datos están en un archivo.txt, pero si por alguna razón se repite uno de estos datos en otro archivo o se vuelve a cargar por error este archivo, pues no se carga porq la clave ya existe, entonces no se como evitar q cuando suceda esto y me frene el programa ya copie tu código y me sale lo mismo, no se si es que estoy equivocado en la excepción q se esta generando o que pasa, lo siento pero lo de transacciones no se nada, como te dije hasta ahora son mis primeros pinos con delphi, pero necesito hacer un programa para cargar estos datos y tenerlos en una base

y muchas gracias por la colaboración q me estas prestando.
Responder Con Cita
  #5  
Antiguo 16-11-2010
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.740
Poder: 26
ContraVeneno Va por buen camino
Cita:
Empezado por yevabas Ver Mensaje
...entonces no se como evitar q cuando suceda esto y me frene el programa ya copie tu código y me sale lo mismo...
sigo sin captar que tratas de decir...
¿qué quieres evitar?
¿quieres que continue con el siguiente registro o que se detenga por completo?
__________________

Responder Con Cita
  #6  
Antiguo 17-11-2010
yevabas yevabas is offline
Miembro
NULL
 
Registrado: nov 2010
Posts: 42
Poder: 0
yevabas Va por buen camino
Thumbs up excepciones

buenos dias

Disculpa por no ser tan claro.

Correcto quiere que verifique el siguiente registro a ver si ya esta cargado o no, no quiero que frene el proceso sino continué, en este momento sale el error y la aplicación se frena mostrando un error de duplicación de llave, y no quiero que muestre ningún tipo de error de duplicación de llave primaria sino que termine de revisar todos y cargue los que falte y sino falta nada pues no haga nada pero no muestre errores que no se quede ahí y me saque de la aplicación sino que quede listo para continuar cuando uno le de clic en el botón insertar.

Espero haber sido un poco mas claro y gracias muchas gracias de verdad
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
Duda Sobre Excepciones - Propagar Excepciones entre los formularios Neeruu Varios 2 26-02-2010 20:36:50
Excepciones adpa OOP 5 14-12-2005 15:45:45
Excepciones Acker Tablas planas 6 06-08-2005 15:22:18
excepciones!!!!! hanna33 OOP 3 24-05-2005 17:10:10
Ayuda con Manejo de Excepciones buffygcs SQL 2 21-04-2005 17:52:09


La franja horaria es GMT +2. Ahora son las 01:08:21.


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
Copyright 1996-2007 Club Delphi