Fórum Problemas com cadastro. #41181
27/12/2003
0
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
Curtir tópico
+ 0Posts
27/12/2003
Afarias
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+
Gostei + 0
27/12/2003
Douglasf
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;
Gostei + 0
27/12/2003
Afarias
qual a classe da exceção (Exception) gerada e sua mensagem original???
T+
Gostei + 0
28/12/2003
Douglasf
como faço para ver issu?
Gostei + 0
29/12/2003
Martins
T+
Gostei + 0
29/12/2003
Douglasf
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...
Gostei + 0
30/12/2003
Afarias
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+
Gostei + 0
02/01/2004
Douglasf
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
Gostei + 0
02/01/2004
Afarias
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+
Gostei + 0
02/01/2004
Douglasf
[b:6e17280860]
if not (traAlteraQuarto.InTransaction) then traAlteraQuarto.StartTransaction;
Gostei + 0
02/01/2004
Sremulador
Fazer uma transação: CommitRetaining;
Desfafazer uma transação: RollbackRetaining;
No componente Ibquery tem uma propriedade chamado generatorField onde você colocará o generator.
Gostei + 0
02/01/2004
Afarias
+/- cara... mas são coisas diferentes ok?!...
T+
Gostei + 0
02/01/2004
Douglasf
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
Gostei + 0
02/01/2004
Afarias
E, como estes valores são INTEIROS, vc *não* devia estar passando entre ASPAS-simples no seu INSERT!
T+
Gostei + 0
02/01/2004
Douglasf
Ou estou errado?
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)