Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-01-2009
Lizette Lizette is offline
Miembro
 
Registrado: jun 2008
Posts: 98
Poder: 16
Lizette Va por buen camino
Almacenar en una tabla mysql una superclave

Hola, tengo un problema, al almacenar los valores de los edits en la tabla mysql, me genera el error: EDatabaseError with message 'A component named PRIMARY already exists'..

Almaceno los datos en 2 tablas, una que es paciente (cuya clave primaria es CvePac)y la otra ficha_identificacion(cuya superclave es CvePac, FichaId), los datos de paciente si me los guarda en su respectiva tabla, pero los de ficha_identificacion no, y me sale ese error..

En mi tabla, tengo como campos llave los dos que son CvePac y FichaId, y no entiendo porque me causa error, espero que alguien me pueda dar una idea, gracias
Responder Con Cita
  #2  
Antiguo 27-01-2009
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.265
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Podrías colocar el código que utilizas para guardar o la sentencia SQL.
No acabo de entender bien el error y no se que pinta ahí ese PRIMARY. ¿Es exactamente eso lo que te dice?
__________________
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.
Responder Con Cita
  #3  
Antiguo 27-01-2009
Lizette Lizette is offline
Miembro
 
Registrado: jun 2008
Posts: 98
Poder: 16
Lizette Va por buen camino
Si exactamente eso, tal vez no permite tener dos campos llave, no sé.. Mira aquí esta el código que utilizo para guardar:

Código Delphi [-]
var
 bann:Integer;
 bannd:Integer;
begin

 bann:=0;
 bannd:=0;

 if(completo=0)then
  begin
   bann:=1;
   EditNom.SetFocus;
  end;

 if(completo=15)then
  begin
   bann:=1;
   bannd:=1;
   ADOtblPac.Open;
  with ADOtblPac do
  begin
   ADOtblPac.Insert;
   ADOtblPac.FieldByName('CveCte').AsString:=EditCvePac.Text;
   ADOtblPac.FieldByName('NombreC').AsString:=EditNom.Text;
   ADOtblPac.FieldByName('ApellidoC').AsString:=EditApe.Text;
   ADOtblPac.FieldByName('CalleC').AsString:=EditCalle.Text;
   ADOtblPac.FieldByName('NoC').AsInteger:=StrToInt(EditNo.Text);
   ADOtblPac.FieldByName('CPC').AsInteger:=StrToInt(EditCp.Text);
   ADOtblPac.FieldByName('TelC').AsString:=EditTel.Text;
   ADOtblPac.FieldByName('CdC').AsString:=EditCd.Text;
   ADOtblPac.FieldByName('ColC').AsString:=EditCol.Text;
   ADOtblPac.FieldByName('RfcC').AsString:=EditRfc.Text;
   ADOtblPac.Post;
   ADOtblPac.Refresh;
   ADOtblPac.Close;
  end;

  ADOtblFichaId.Open;
  with ADOtblFichaId do
  begin
   ADOtblFichaId.Insert;
   ADOtblFichaId.FieldByName('CveCte').AsString:=EditCvePac.Text;
   ADOtblFichaId.FieldByName('IdFicha').AsString:=EditHClin.Text;
   ADOtblFichaId.FieldByName('FechaNac').AsString:=EditFNac.Text;
   ADOtblFichaId.FieldByName('LugarNac').AsString:=EditLNac.Text;
   ADOtblFichaId.FieldByName('Ocupacion').AsString:=EditOcup.Text;
   ADOtblFichaId.FieldByName('Escolaridad').AsString:=EditEsc.Text;
   ADOtblFichaId.FieldByName('Sexo').AsString:=ComboSexo.Text;
   ADOtblFichaId.FieldByName('Edocivil').AsString:=ComboEdoCivil.Text;
   ADOtblFichaId.FieldByName('FechaElabExp').AsString:=EditPrimCons.Text;
   ADOtblFichaId.Post;
   ADOtblFichaId.Refresh;
   ADOtblFichaId.Close;
  end;
  
     EditCvePac.Text:=EditVacio.Text;
     EditNom.Text:=EditVacio.Text;
     EditApe.Text:=EditVacio.Text;
     EditCalle.Text:=EditVacio.Text;
     EditNo.Text:=EditVacio.Text;
     EditCp.Text:=EditVacio.Text;
     EditCol.Text:=EditVacio.Text;
     EditTel.Text:=EditVacio.Text;
     EditCd.Text:=EditVacio.Text;
     EditFNac.Text:=EditVacio.Text;
     EditEdad.Text:=EditVacio.Text;
     EditLNac.Text:=EditVacio.Text;
     EditOcup.Text:=EditVacio.Text;
     EditEsc.Text:=EditVacio.Text;
     ComboSexo.Text:=EditVacio.Text;
     ComboEdoCivil.Text:=EditVacio.Text;
     EditRfc.Text:=EditVacio.Text;
     EditPrimCons.Text:=EditVacio.Text;

  end;

  if(bann=0)then
  begin
  if(EditNom.Text=EditVacio.Text)then
   EditNom.SetFocus
  else
  if(EditApe.Text=EditVacio.Text)then
   EditNom.SetFocus
  else
  if(EditCalle.Text=EditVacio.Text)then
   EditApe.SetFocus
  else
  if(EditNo.Text=EditVacio.Text)then
   EditCalle.SetFocus
  else
  if(EditCp.Text=EditVacio.Text)then
   EditNo.SetFocus
  else
  if(EditCol.Text=EditVacio.Text)then
   EditCp.SetFocus
  else
  if(EditTel.Text=EditVacio.Text)then
   EditCol.SetFocus
  else
  if(EditCd.Text=EditVacio.Text)then
   EditTel.SetFocus
  else
  if(EditFNac.Text=EditVacio.Text)then
   EditCd.SetFocus
  else
  if(EditLNac.Text=EditVacio.Text)then
   EditFNac.SetFocus
  else
  if(EditOcup.Text=EditVacio.Text)then
   EditLNac.SetFocus
  else
  if(EditEsc.Text=EditVacio.Text)then
   EditOcup.SetFocus
  else
  if(ComboSexo.Text=EditVacio.Text)then
   EditEsc.SetFocus
  else
  if(ComboEdoCivil.Text=EditVacio.Text)then
   ComboSexo.SetFocus
  else
  if(EditRfc.Text=EditVacio.Text)then
   ComboEdoCivil.SetFocus;
  end;

  if(bannd=1)then
  begin
  if(MessageDlg('Los datos han sido guardados satisfacoriamente, ¿Desea llenar la ficha clínica?', mtConfirmation, [mbYes,mbNo], 1)=mrYes) then
    begin
    showmessage('Ficha Clinica');
    end
   else
    begin
    showmessage('Menu PPAl');
    end;

Utilizo también un archivo en el que se va incrementando las claves, para obtener automaticamente la clave del paciente y la clave de fichaid, con esto me generaria estas dos claves iguales p.e CvePac:000023 y FichaId:000023.. Pero ya tambien le modifique esa parte para que los numeros fueran diferentes y me marca lo mismo, así que creo q ese no es el prob y lo deje igual.. Este es el codigo q utilizo para hacer esto:


Código Delphi [-]
var
Cont : TStringList;
Int: Integer;
comp:String;

Cont1 : TStringList;
Int1: Integer;
comp1:String;
begin
completo:=0;
//PARA CVE PACIENTE
//Deseo que comienze desde el numero:
  Int:= 1;
  if FileExists('C:\CvePac.txt') then begin
//Creo StringList
  Cont:= TStringList.Create;
//Abro fichero
  Cont.LoadFromFile('C:\CvePac.txt');
//leo la primera linea y le sumo 1
  Int:= StrToInt(Cont[0]) + 1;
//Limpio el fichero txt
  Cont.Clear;
//Agrego el nuevo valor
  Cont.Add(IntToStr(Int));
  comp:=IntToStr(Int);
//Actualizo el fichero
  Cont.SaveToFile('C:\CvePac.txt');
//Destrozo lo que quedo en memoria
  Cont.Destroy;
  EditCvePac.Text:=(StringOfChar('0',6-length(comp))+comp);
end else begin
//Este es si no existe el fichero, Creo StringList
  Cont:= TStringList.Create;
//Agrego el nuevo valor por defecto 1
  Cont.Add(IntToStr(Int));
  comp:=IntToStr(Int);
//Grabo el fichero
  Cont.SaveToFile('C:\CvePac.txt');
//Destrozo lo que quedo en memoria
  Cont.Destroy;
  EditCvePac.Text:=(StringOfChar('0',6-length(comp))+comp);
 end;
 //PARA HISTORIA CLINICA (FICHA_ID)
 //Deseo que comienze desde el numero:
  Int1:= 1;
  if FileExists('C:\IdFicha.txt') then begin
//Creo StringList
  Cont1:= TStringList.Create;
//Abro fichero
  Cont1.LoadFromFile('C:\IdFicha.txt');
//leo la primera linea y le sumo 1
  Int1:= StrToInt(Cont1[0]) + 1;
//Limpio el fichero txt
  Cont1.Clear;
//Agrego el nuevo valor
  Cont1.Add(IntToStr(Int1));
  comp1:=IntToStr(Int1);
//Actualizo el fichero
  Cont1.SaveToFile('C:\IdFicha.txt');
//Destrozo lo que quedo en memoria
  Cont1.Destroy;
  EditHClin.Text:=(StringOfChar('0',6-length(comp1))+comp1);
end else begin
//Este es si no existe el fichero, Creo StringList
  Cont1:= TStringList.Create;
//Agrego el nuevo valor por defecto 1
  Cont1.Add(IntToStr(Int1));
  comp1:=IntToStr(Int1);
//Grabo el fichero
  Cont1.SaveToFile('C:\IdFicha.txt');
//Destrozo lo que quedo en memoria
  Cont1.Destroy;
  EditHClin.Text:=(StringOfChar('0',6-length(comp1))+comp1);
 end;
Responder Con Cita
  #4  
Antiguo 27-01-2009
Lizette Lizette is offline
Miembro
 
Registrado: jun 2008
Posts: 98
Poder: 16
Lizette Va por buen camino
Hola Neftali, mira le cale otra cosa, en la tabla ficha_id de mi bd mysql, tenia como campos llave idficha y cvepac, solo le deje como clave idficha, y ya no me da error y si me lo guardó.. Concluyo que no puedo tener dos campos claves jeje..
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
cómo almacenar enlaces a videos en mi base de datos mySQL carmelina SQL 1 20-05-2008 13:05:04
MySql puede almacenar datos en una tabla virtual? Damian666 MySQL 4 02-09-2007 08:35:30
almacenar valor de combobox a una tabla paco_galo C++ Builder 0 20-05-2007 20:06:56
Almacenar una formula en una tabla jgutti Firebird e Interbase 1 09-09-2004 15:41:46


La franja horaria es GMT +2. Ahora son las 13:35:53.


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