GARANTIR DESCONTO

Fórum Problemas com cadastro. #41181

27/12/2003

0

:) Estou com problemas ao cadastrar um novo registro em uma tabela o codigo é esse abaixo e a estrutura da tabela está logo abaixo dele.

procedure TfrmCadastroVisitante.btnCadastrarClick(Sender: TObject);
var
DataHora : string;
begin
DataHora := DateTimeToStr(now);

if (txtNome.text = ´´) or(txtHospede.text = ´´) then begin
begin
MessageDlg(´Você deve preencher todos os campos obrigatórios!´,mtError, [mbOK], 0);
Abort;
end;
//Começa a inserção dos dados no Banco
with dmCondominio do begin
if not (traAlteraQuarto.InTransaction) then
traAlteraQuarto.StartTransaction;
with sqlGeral do begin
Close;
with SQL do begin
Clear;
Add(´insert into Visitante (COD_VISI, NOM_VISI, IDE_VISI, CPF_VISI, COD_HOSP, DAT_HOR_ENT_VISI)´);
Add(´values (GEN_ID (GEN_COD_VISI,1),´´´+txtNome.Text+´´´,´´´+txtIdentidade.Text+´´´,´´´+txtCPF.Text+´´´,´´´+txtHospede.Text +´´´,´´´ + DataHora +´´´)´);//Atenção
end;
end;
end;
try
dmCondominio.sqlGeral.Prepare;
dmCondominio.sqlGeral.ExecQuery;
except
on EIBError do begin //Erro do InterBase
dmCondominio.traAlteraQuarto.Rollback;
MessageDlg(´Não foi possível cadastrar o quarto!´,mtError,[mbOK],0);
Abort;
Exit;
end;
end;
//Finalizando a transação com efetivação das modificações
dmCondominio.traAlteraQuarto.Commit;
MessageDlg(´Inserção do Item Quarto efetuada com sucesso!´,mtInformation,[mbOK],0);
//Executa um Refresh para atualizar o DBGrid
with dmCondominio.qryVisitante do begin
close;
sql.Clear;
sql.add(´select * from Visitante´);
Prepare;
dmCondominio.idbCondominio.Close;
dmCondominio.idbCondominio.open;
open;
end;
//Fim do cadastro
//Execução do cancelamento da transação somente se no botão estiver escrito Cancelar
end;
end;


ESTRUTURA DA TABELA:

CREATE TABLE ´VISITANTE´
(
´COD_VISI´INTEGER NOT NULL,
´DAT_HOR_ENT_VISI´TIMESTAMP NOT NULL,
´DAT_HOR_SAI_VISI´TIMESTAMP,
´NOM_VISI´CHAR(50) NOT NULL,
´IDE_VISI´CHAR(15),
´FOT_VISI´CHAR(254) NOT NULL,
´FOT_IDE_FRE_VISI´CHAR(254),
´FOT_IDE_VER_VISI´CHAR(254),
´COD_CONT´INTEGER,
´COD_HOSP´INTEGER NOT NULL,
PRIMARY KEY (´COD_VISI´)
);
ALTER TABLE ´VISITANTE´ ADD FOREIGN KEY (´COD_CONT´) REFERENCES CONTA (´COD_CONT´);
ALTER TABLE ´VISITANTE´ ADD FOREIGN KEY (´COD_HOSP´) REFERENCES HOSPEDE (´COD_HOSP´);

agradecido

:? :) :) Dougla Fiorini Carvalho


Douglasf

Douglasf

Responder

Posts

27/12/2003

Afarias

Vc esqueceu de dizer qual é o problema q está tendo.

mas, pra começar, substitua o código::

DataHora := DateTimeToStr(Now);


por::

DataHora := FormatDateTime(´mm/dd/yy HH:nn:ss´, Now);


pois o anterior é realmente um problema!


T+


Responder

Gostei + 0

27/12/2003

Douglasf

Bem o problema q esta acontecendo é q não cadastra... simplesmente cai nesta parte do codigo:

except
on EIBError do begin //Erro do InterBase
dmCondominio.traAlteraQuarto.Rollback;
MessageDlg(´Não foi possível cadastrar o quarto!´,mtError,[mbOK],0);
Abort;
Exit;
end;


Responder

Gostei + 0

27/12/2003

Afarias

Se cai nesta parte do código é pq é gerada uma EXCEÇÃO...

qual a classe da exceção (Exception) gerada e sua mensagem original???


T+


Responder

Gostei + 0

28/12/2003

Douglasf

eu não sei...

como faço para ver issu?


Responder

Gostei + 0

29/12/2003

Martins

Qundo vc roda seu aplicativo atraves do [F9] do Delphi (em Run time), quando o seu codigo é direcionado para excessao, lhe é dada uma mensagem de erro antes da que vc personalizou, essa é a original, poste-a aqui, para que possamos ver o q tem de errado. Pq não podemos te orientar no escuro, falow.

T+


Responder

Gostei + 0

29/12/2003

Douglasf

Hahah... eis a questão!
Meu delphi não sei pq, mas toda vez q rodo o programa dessa forma trava o computador, já instalei-o umas 3 vezes e não deu certo, pensava que era memória e instalei no pc do meu pai que é um Pentium 700MHz 128RAM e cotinuou o problema....


já postei no forum e ninguem sabia oq era...


Responder

Gostei + 0

30/12/2003

Afarias

no seu except coloque o seginte código::


on E: EIBError do 
begin
  dmCondominio.traAlteraQuarto.Rollback;
     MessageDlg(Format(´¬s [¬d; ¬d]´, [E.message, E.SQLCode, E.IBErrorCode]),mtError,[mbOK],0);
  Abort; 
  Exit; 
end;



T+


Responder

Gostei + 0

02/01/2004

Douglasf

Afarias,

troquei o codigo q vc me falou e apareceu a seguinte mensagem...


[b:ed2e15e46b]transaction is not active[/b:ed2e15e46b]

olhei o q tava acontecendo e não vi nada de errado com os transactions


Responder

Gostei + 0

02/01/2004

Afarias

|troquei o codigo q vc me falou e apareceu a seguinte mensagem...


sobre o código do Except ?? o erro não tem a ver com o código em si mas com o fato da transação não estar aberta... é bom vc verificar isso mas, basta mudar o código com::


if dmCondominio.traAlteraQuarto.InTransaction then
  dmCondominio.traAlteraQuarto.Rollback;



T+


Responder

Gostei + 0

02/01/2004

Douglasf

Mas olha essa linha de código não faz a mesma coisa???



[b:6e17280860]
  if not (traAlteraQuarto.InTransaction) then 
      traAlteraQuarto.StartTransaction; 
[/b:6e17280860]


Responder

Gostei + 0

02/01/2004

Sremulador

Amigo seus cod estão meio confusos mas eu sempre faço assim
Fazer uma transação: CommitRetaining;
Desfafazer uma transação: RollbackRetaining;
No componente Ibquery tem uma propriedade chamado generatorField onde você colocará o generator.


Responder

Gostei + 0

02/01/2004

Afarias

|Mas olha essa linha de código não faz a mesma coisa???

+/- cara... mas são coisas diferentes ok?!...



T+


Responder

Gostei + 0

02/01/2004

Douglasf

Primeiramente muito obrigado pela dica [b:3005652987]sremulador[/b:3005652987]


Afarias aconteceu outro erro que não entendo oq possa ser. Eu já conferi no codigo se tinha algum problema com as chaves estrangeiras, não encotrei, como sempre.
o erro é esse


[color=red:3005652987][b:3005652987] Violation of FOREING KEY constraint ´INTEG_16´ on TABLE ´HOSPEDE´[-530;335544466][/b:3005652987][/color:3005652987]

bem a tabela e vai ai o codigo:

                            with SQL do begin
          Clear;
          Add(´insert into Hospede(COD_HOSP, NOM_HOSP, TEL_HOSP, CEL_HOSP, BAI_HOSP, IDE_HOSP, CPF_HOSP, FOT_HOSP, FOT_IDE_FRE_HOSP, FOT_IDE_VER_HOSP, COD_ESTA, COD_QUAR, HOR_DAT_ENT_HOSP)´);
          Add(´values (GEN_ID (GEN_COD_HOSP,1),´´´ + txtNome.Text + ´´´,´´´ + txtTelefone.Text + ´´´,´´´ + txtCelular.Text + ´´´,´´´ + txtBairro.Text + ´´´,´´´ + txtIdentidade.Text + ´´´,´´´ + txtCPF.Text + ´´´,´´foto´´,´´foto´´,´´foto´´,´´2´´,´´´ + txtCodQuar.Text + ´´´,´´´ + DataHora + ´´´)´);
        end;



Vou por tb a estrutura das outras tabelas só para facilitar

TABLE "QUARTO" 
(
  "COD_QUAR"INTEGER NOT NULL,
  "NUM_QUAR"CHAR(6) NOT NULL,
  "AND_QUAR"CHAR(4) NOT NULL,
  "DES_QUAR"CHAR(40),
  "SIT_QUAR"CHAR(20) NOT NULL,
 PRIMARY KEY ("COD_QUAR")
);



ABLE "ESTADO" 
(
  "COD_ESTA"INTEGER NOT NULL,
  "COD_REG_ESTA"INTEGER NOT NULL,
  "NOM_ESTA"CHAR(30) NOT NULL,
 PRIMARY KEY ("COD_ESTA")
);



CREATE TABLE "HOSPEDE" 
(
  "COD_HOSP"INTEGER NOT NULL,
  "NOM_HOSP"CHAR(50) NOT NULL,
  "TEL_HOSP"CHAR(15),
  "CEL_HOSP"CHAR(15),
  "END_HOSP"CHAR(70),
  "BAI_HOSP"CHAR(40),
  "CID_HOSP"CHAR(50),
  "IDE_HOSP"CHAR(10),
  "CPF_HOSP"CHAR(11),
  "FOT_HOSP"CHAR(254) NOT NULL,
  "FOT_IDE_FRE_HOSP"CHAR(254),
  "FOT_IDE_VER_HOSP"CHAR(254),
  "COD_ESTA"INTEGER NOT NULL,
  "COD_QUAR"INTEGER NOT NULL,
  "HOR_DAT_SAI_HOSP"TIMESTAMP,
  "HOR_DAT_ENT_HOSP"TIMESTAMP,
 PRIMARY KEY ("COD_HOSP")
);
ALTER TABLE "HOSPEDE" ADD FOREIGN KEY ("COD_QUAR") REFERENCES QUARTO ("COD_QUAR");
ALTER TABLE "HOSPEDE" ADD FOREIGN KEY ("COD_ESTA") REFERENCES ESTADO ("COD_ESTA");


acho q é isso


muito obrigado


Responder

Gostei + 0

02/01/2004

Afarias

bom, os valores nos campos COD_QUAR, e COD_ESTA devem estar cadastrados nas tabelas QUARTOS e ESTADOS respectivamente.

E, como estes valores são INTEIROS, vc *não* devia estar passando entre ASPAS-simples no seu INSERT!


T+


Responder

Gostei + 0

02/01/2004

Douglasf

Que eu saiba os valores que devem ser passados para o [color=darkblue:7ba863d5a1][size=12:7ba863d5a1][size=18][b:7ba863d5a1]ADD [/b:7ba863d5a1][/size:7ba863d5a1][/size][/color:7ba863d5a1] tem q ser string por isso q ponho as ASPAS.

Ou estou errado?


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar