Fórum Como evitar duplicidade de registro na tabela? #430302
04/12/2012
0
Como evitar que as mensalidades do mesmo aluno sejam inseridas em duplicidade no mesmo ano.
Osmar.
procedure TFrmFinanceiro.cxButton1Click(Sender: TObject);
var
dia : integer;
begin
dia := strtoint(EdtDia_Base.Text);
begin
if cxCheckListBox1.Items[0].Checked then
begin
IBQryMensalidade.Insert;
IBQryMensalidadeMATRICULA_MENSALIDADE.AsString := IBQryAlunoMATRICULA.AsString;
IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value := (inttostr(dia)+'/'+ inttostr(1)+'/'+copy(datetostr(date),7,4));
begin
case dayofweek(StrToDate(inttostr(dia)+'/'+ inttostr(1)+'/'+copy(datetostr(date),7,4))) of
1 : begin
IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value := IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value + 1;
end;
7 : begin
IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value := IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value + 2;
end;
end;
end;
IBQryMensalidade.FieldByName('Situacao').Value := 'Aberta';
IBQryMensalidadeDIA_BASE.Value := EdtDia_Base.Text;
IBQryMensalidadeMES_MENSALIDADE.AsString := 'MATRÍCULA';
IBQryMensalidadeESCOLA.AsString := sEscola;
end
else
begin
IBQryMensalidade.Insert;
IBQryMensalidadeMATRICULA_MENSALIDADE.AsString := IBQryAlunoMATRICULA.AsString;
IBQryMensalidade.FieldByName('Situacao').Value := 'Isento';
IBQryMensalidadeMES_MENSALIDADE.AsString := 'MATRÍCULA';
IBQryMensalidadeESCOLA.AsString := sEscola;
end;
end;
begin
if cxCheckListBox1.Items[1].Checked then
begin
IBQryMensalidade.Insert;
IBQryMensalidadeMATRICULA_MENSALIDADE.AsString := IBQryAlunoMATRICULA.AsString;
IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value := (inttostr(dia)+'/'+ inttostr(1)+'/'+copy(datetostr(date),7,4));
begin
case dayofweek(StrToDate(inttostr(dia)+'/'+ inttostr(1)+'/'+copy(datetostr(date),7,4))) of
1 : begin
IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value := IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value + 1;
end;
7 : begin
IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value := IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value + 2;
end;
end;
end;
IBQryMensalidade.FieldByName('Situacao').Value := 'Aberta';
IBQryMensalidadeDIA_BASE.Value := EdtDia_Base.Text;
IBQryMensalidadeMES_MENSALIDADE.AsString := 'JANEIRO';
IBQryMensalidadeESCOLA.AsString := sEscola;
end
else
begin
IBQryMensalidade.Insert;
IBQryMensalidadeMATRICULA_MENSALIDADE.AsString := IBQryAlunoMATRICULA.AsString;
IBQryMensalidade.FieldByName('Situacao').Value := 'Isento';
IBQryMensalidadeMES_MENSALIDADE.AsString := 'JANEIRO';
IBQryMensalidadeESCOLA.AsString := sEscola;
end;
end;
begin
if cxCheckListBox1.Items[2].Checked then
begin
IBQryMensalidade.Insert;
IBQryMensalidadeMATRICULA_MENSALIDADE.AsString := IBQryAlunoMATRICULA.AsString;
IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value := (inttostr(dia)+'/'+ inttostr(2)+'/'+copy(datetostr(date),7,4));
begin
case dayofweek(StrToDate(inttostr(dia)+'/'+ inttostr(2)+'/'+copy(datetostr(date),7,4))) of
1 : begin
IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value := IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value + 1;
end;
7 : begin
IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value := IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value + 2;
end;
end;
end;
IBQryMensalidade.FieldByName('Situacao').Value := 'Aberta';
IBQryMensalidadeDIA_BASE.Value := EdtDia_Base.Text;
IBQryMensalidadeMES_MENSALIDADE.AsString := 'FEVEREIRO';
IBQryMensalidadeESCOLA.AsString := sEscola;
end
else
begin
IBQryMensalidade.Insert;
IBQryMensalidadeMATRICULA_MENSALIDADE.AsString := IBQryAlunoMATRICULA.AsString;
IBQryMensalidade.FieldByName('Situacao').Value := 'Isento';
IBQryMensalidadeMES_MENSALIDADE.AsString := 'FEVEREIRO';
IBQryMensalidadeESCOLA.AsString := sEscola;
end;
end;
begin
if cxCheckListBox1.Items[3].Checked then
begin
IBQryMensalidade.Insert;
IBQryMensalidadeMATRICULA_MENSALIDADE.AsString := IBQryAlunoMATRICULA.AsString;
IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value := (inttostr(dia)+'/'+ inttostr(3)+'/'+copy(datetostr(date),7,4));
begin
case dayofweek(StrToDate(inttostr(dia)+'/'+ inttostr(3)+'/'+copy(datetostr(date),7,4))) of
1 : begin
IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value := IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value + 1;
end;
7 : begin
IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value := IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value + 2;
end;
end;
end;
IBQryMensalidade.FieldByName('Situacao').Value := 'Aberta';
IBQryMensalidadeDIA_BASE.Value := EdtDia_Base.Text;
IBQryMensalidadeMES_MENSALIDADE.AsString := 'MARÇO';
IBQryMensalidadeESCOLA.AsString := sEscola;
end
else
begin
IBQryMensalidade.Insert;
IBQryMensalidadeMATRICULA_MENSALIDADE.AsString := IBQryAlunoMATRICULA.AsString;
IBQryMensalidade.FieldByName('Situacao').Value := 'Isento';
IBQryMensalidadeMES_MENSALIDADE.AsString := 'MARÇO';
IBQryMensalidadeESCOLA.AsString := sEscola;
end;
end;
begin
if cxCheckListBox1.Items[4].Checked then
begin
IBQryMensalidade.Insert;
IBQryMensalidadeMATRICULA_MENSALIDADE.AsString := IBQryAlunoMATRICULA.AsString;
IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value := (inttostr(dia)+'/'+ inttostr(4)+'/'+copy(datetostr(date),7,4));
begin
case dayofweek(StrToDate(inttostr(dia)+'/'+ inttostr(4)+'/'+copy(datetostr(date),7,4))) of
1 : begin
IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value := IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value + 1;
end;
7 : begin
IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value := IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value + 2;
end;
end;
end;
IBQryMensalidade.FieldByName('Situacao').Value := 'Aberta';
IBQryMensalidadeDIA_BASE.Value := EdtDia_Base.Text;
IBQryMensalidadeMES_MENSALIDADE.AsString := 'ABRIL';
IBQryMensalidadeESCOLA.AsString := sEscola;
end
else
begin
IBQryMensalidade.Insert;
IBQryMensalidadeMATRICULA_MENSALIDADE.AsString := IBQryAlunoMATRICULA.AsString;
IBQryMensalidade.FieldByName('Situacao').Value := 'Isento';
IBQryMensalidadeMES_MENSALIDADE.AsString := 'ABRIL';
IBQryMensalidadeESCOLA.AsString := sEscola;
end;
end;
begin
if cxCheckListBox1.Items[5].Checked then
begin
IBQryMensalidade.Insert;
IBQryMensalidadeMATRICULA_MENSALIDADE.AsString := IBQryAlunoMATRICULA.AsString;
IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value := (inttostr(dia)+'/'+ inttostr(5)+'/'+copy(datetostr(date),7,4));
begin
case dayofweek(StrToDate(inttostr(dia)+'/'+ inttostr(5)+'/'+copy(datetostr(date),7,4))) of
1 : begin
IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value := IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value + 1;
end;
7 : begin
IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value := IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value + 2;
end;
end;
end;
IBQryMensalidade.FieldByName('Situacao').Value := 'Aberta';
IBQryMensalidadeDIA_BASE.Value := EdtDia_Base.Text;
IBQryMensalidadeMES_MENSALIDADE.AsString := 'MAIO';
IBQryMensalidadeESCOLA.AsString := sEscola;
end
else
begin
IBQryMensalidade.Insert;
IBQryMensalidadeMATRICULA_MENSALIDADE.AsString := IBQryAlunoMATRICULA.AsString;
IBQryMensalidade.FieldByName('Situacao').Value := 'Isento';
IBQryMensalidadeMES_MENSALIDADE.AsString := 'MAIO';
IBQryMensalidadeESCOLA.AsString := sEscola;
end;
end;
begin
if cxCheckListBox1.Items[6].Checked then
begin
IBQryMensalidade.Insert;
IBQryMensalidadeMATRICULA_MENSALIDADE.AsString := IBQryAlunoMATRICULA.AsString;
IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value := (inttostr(dia)+'/'+ inttostr(6)+'/'+copy(datetostr(date),7,4));
begin
case dayofweek(StrToDate(inttostr(dia)+'/'+ inttostr(6)+'/'+copy(datetostr(date),7,4))) of
1 : begin
IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value := IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value + 1;
end;
7 : begin
IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value := IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value + 2;
end;
end;
end;
IBQryMensalidade.FieldByName('Situacao').Value := 'Aberta';
IBQryMensalidadeDIA_BASE.Value := EdtDia_Base.Text;
IBQryMensalidadeMES_MENSALIDADE.AsString := 'JUNHO';
IBQryMensalidadeESCOLA.AsString := sEscola;
end
else
begin
IBQryMensalidade.Insert;
IBQryMensalidadeMATRICULA_MENSALIDADE.AsString := IBQryAlunoMATRICULA.AsString;
IBQryMensalidade.FieldByName('Situacao').Value := 'Isento';
IBQryMensalidadeMES_MENSALIDADE.AsString := 'JUNHO';
IBQryMensalidadeESCOLA.AsString := sEscola;
end;
end;
begin
if cxCheckListBox1.Items[7].Checked then
begin
IBQryMensalidade.Insert;
IBQryMensalidadeMATRICULA_MENSALIDADE.AsString := IBQryAlunoMATRICULA.AsString;
IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value := (inttostr(dia)+'/'+ inttostr(7)+'/'+copy(datetostr(date),7,4));
begin
case dayofweek(StrToDate(inttostr(dia)+'/'+ inttostr(7)+'/'+copy(datetostr(date),7,4))) of
1 : begin
IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value := IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value + 1;
end;
7 : begin
IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value := IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value + 2;
end;
end;
end;
IBQryMensalidade.FieldByName('Situacao').Value := 'Aberta';
IBQryMensalidadeDIA_BASE.Value := EdtDia_Base.Text;
IBQryMensalidadeMES_MENSALIDADE.AsString := 'JULHO';
IBQryMensalidadeESCOLA.AsString := sEscola;
end
else
begin
IBQryMensalidade.Insert;
IBQryMensalidadeMATRICULA_MENSALIDADE.AsString := IBQryAlunoMATRICULA.AsString;
IBQryMensalidade.FieldByName('Situacao').Value := 'Isento';
IBQryMensalidadeMES_MENSALIDADE.AsString := 'JULHO';
IBQryMensalidadeESCOLA.AsString := sEscola;
end;
end;
begin
if cxCheckListBox1.Items[8].Checked then
begin
IBQryMensalidade.Insert;
IBQryMensalidadeMATRICULA_MENSALIDADE.AsString := IBQryAlunoMATRICULA.AsString;
IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value := (inttostr(dia)+'/'+ inttostr(8)+'/'+copy(datetostr(date),7,4));
begin
case dayofweek(StrToDate(inttostr(dia)+'/'+ inttostr(8)+'/'+copy(datetostr(date),7,4))) of
1 : begin
IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value := IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value + 1;
end;
7 : begin
IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value := IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value + 2;
end;
end;
end;
IBQryMensalidade.FieldByName('Situacao').Value := 'Aberta';
IBQryMensalidadeDIA_BASE.Value := EdtDia_Base.Text;
IBQryMensalidadeMES_MENSALIDADE.AsString := 'AGOSTO';
IBQryMensalidadeESCOLA.AsString := sEscola;
end
else
begin
IBQryMensalidade.Insert;
IBQryMensalidadeMATRICULA_MENSALIDADE.AsString := IBQryAlunoMATRICULA.AsString;
IBQryMensalidade.FieldByName('Situacao').Value := 'Isento';
IBQryMensalidadeMES_MENSALIDADE.AsString := 'AGOSTO';
IBQryMensalidadeESCOLA.AsString := sEscola;
end;
end;
begin
if cxCheckListBox1.Items[9].Checked then
begin
IBQryMensalidade.Insert;
IBQryMensalidadeMATRICULA_MENSALIDADE.AsString := IBQryAlunoMATRICULA.AsString;
IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value := (inttostr(dia)+'/'+ inttostr(9)+'/'+copy(datetostr(date),7,4));
begin
case dayofweek(StrToDate(inttostr(dia)+'/'+ inttostr(9)+'/'+copy(datetostr(date),7,4))) of
1 : begin
IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value := IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value + 1;
end;
7 : begin
IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value := IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value + 2;
end;
end;
end;
IBQryMensalidade.FieldByName('Situacao').Value := 'Aberta';
IBQryMensalidadeDIA_BASE.Value := EdtDia_Base.Text;
IBQryMensalidadeMES_MENSALIDADE.AsString := 'SETEMBRO';
IBQryMensalidadeESCOLA.AsString := sEscola;
end
else
begin
IBQryMensalidade.Insert;
IBQryMensalidadeMATRICULA_MENSALIDADE.AsString := IBQryAlunoMATRICULA.AsString;
IBQryMensalidade.FieldByName('Situacao').Value := 'Isento';
IBQryMensalidadeMES_MENSALIDADE.AsString := 'SETEMBRO';
IBQryMensalidadeESCOLA.AsString := sEscola;
end;
end;
begin
if cxCheckListBox1.Items[10].Checked then
begin
IBQryMensalidade.Insert;
IBQryMensalidadeMATRICULA_MENSALIDADE.AsString := IBQryAlunoMATRICULA.AsString;
IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value := (inttostr(dia)+'/'+ inttostr(10)+'/'+copy(datetostr(date),7,4));
begin
case dayofweek(StrToDate(inttostr(dia)+'/'+ inttostr(10)+'/'+copy(datetostr(date),7,4))) of
1 : begin
IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value := IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value + 1;
end;
7 : begin
IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value := IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value + 2;
end;
end;
end;
IBQryMensalidade.FieldByName('Situacao').Value := 'Aberta';
IBQryMensalidadeDIA_BASE.Value := EdtDia_Base.Text;
IBQryMensalidadeMES_MENSALIDADE.AsString := 'OUTUBRO';
IBQryMensalidadeESCOLA.AsString := sEscola;
end
else
begin
IBQryMensalidade.Insert;
IBQryMensalidadeMATRICULA_MENSALIDADE.AsString := IBQryAlunoMATRICULA.AsString;
IBQryMensalidade.FieldByName('Situacao').Value := 'Isento';
IBQryMensalidadeMES_MENSALIDADE.AsString := 'OUTUBRO';
IBQryMensalidadeESCOLA.AsString := sEscola;
end;
end;
begin
if cxCheckListBox1.Items[11].Checked then
begin
IBQryMensalidade.Insert;
IBQryMensalidadeMATRICULA_MENSALIDADE.AsString := IBQryAlunoMATRICULA.AsString;
IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value := (inttostr(dia)+'/'+ inttostr(11)+'/'+copy(datetostr(date),7,4));
begin
case dayofweek(StrToDate(inttostr(dia)+'/'+ inttostr(11)+'/'+copy(datetostr(date),7,4))) of
1 : begin
IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value := IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value + 1;
end;
7 : begin
IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value := IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value + 2;
end;
end;
end;
IBQryMensalidade.FieldByName('Situacao').Value := 'Aberta';
IBQryMensalidadeDIA_BASE.Value := EdtDia_Base.Text;
IBQryMensalidadeMES_MENSALIDADE.AsString := 'NOVEMBRO';
IBQryMensalidadeESCOLA.AsString := sEscola;
end
else
begin
IBQryMensalidade.Insert;
IBQryMensalidadeMATRICULA_MENSALIDADE.AsString := IBQryAlunoMATRICULA.AsString;
IBQryMensalidade.FieldByName('Situacao').Value := 'Isento';
IBQryMensalidadeMES_MENSALIDADE.AsString := 'NOVEMBRO';
IBQryMensalidadeESCOLA.AsString := sEscola;
end;
end;
begin
if cxCheckListBox1.Items[12].Checked then
begin
IBQryMensalidade.Insert;
IBQryMensalidadeMATRICULA_MENSALIDADE.AsString := IBQryAlunoMATRICULA.AsString;
IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value := (inttostr(dia)+'/'+ inttostr(12)+'/'+copy(datetostr(date),7,4));
begin
case dayofweek(StrToDate(inttostr(dia)+'/'+ inttostr(12)+'/'+copy(datetostr(date),7,4))) of
1 : begin
IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value := IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value + 1;
end;
7 : begin
IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value := IBQryMensalidade.FieldByName('DATA_VENCIMENTO').Value + 2;
end;
end;
end;
IBQryMensalidade.FieldByName('Situacao').Value := 'Aberta';
IBQryMensalidadeDIA_BASE.Value := EdtDia_Base.Text;
IBQryMensalidadeMES_MENSALIDADE.AsString := 'DEZEMBRO';
IBQryMensalidadeESCOLA.AsString := sEscola;
end
else
begin
IBQryMensalidade.Insert;
IBQryMensalidadeMATRICULA_MENSALIDADE.AsString := IBQryAlunoMATRICULA.AsString;
IBQryMensalidade.FieldByName('Situacao').Value := 'Isento';
IBQryMensalidadeMES_MENSALIDADE.AsString := 'DEZEMBRO';
IBQryMensalidadeESCOLA.AsString := sEscola;
end;
end;
IBQryMensalidade.Post;
IBQryMensalidade.Refresh;
IBQryMensalidade.Close;
IBQryMensalidade.Open;
IBQryAluno.Close;
IBQryAluno.Open;
end;
end.
Osmar
Curtir tópico
+ 0Posts
04/12/2012
Joel Rodrigues
Por exemplo: CODIGO DO ALUNO, MÊS, ANO. Assim, não poderia ser cadastrada a mensalidade do mesmo mês, do mesmo ano, para o mesmo aluno, duas vezes.
Boa sorte.
Gostei + 0
04/12/2012
Osmar
Nunca fiz chave composta, mas mesmo fazendo tem como enviar mensagem para o usário avisando da duplicidade. Uso firebird.
Osmar
Gostei + 0
05/12/2012
Alan Souza
const
MES_MENSALIDADE = array [0..12] of String = ('MATRÍCULA', 'JANEIRO', 'FEVEREIRO',
'MARÇO', 'ABRIL', 'MAIO', 'JUNHO', 'JULHO', 'AGOSTO', 'SETEMBRO',
'OUTUBRO', 'NOVEMBRO', 'DEZEMBRO');
var
dia, mes: Word;
vencimento: TDateTime;
begin
dia := strtoint(EdtDia_Base.Text);
for mes := 0 to {Pred(cxCheckListBox1.Items[mes].Count)} 12 do
begin
IBQryMensalidade.Insert;
IBQryMensalidadeMATRICULA_MENSALIDADE.AsString := IBQryAlunoMATRICULA.AsString;
IBQryMensalidade.FieldByName('Situacao').Value := IfThen(cxCheckListBox1.Items[mes].Checked, 'Aberta', 'Isento');
IBQryMensalidadeMES_MENSALIDADE.AsString := MES_MENSALIDADE[mes];
IBQryMensalidadeESCOLA.AsString := sEscola;
if cxCheckListBox1.Items[mes].Checked then
begin
vencimento := EncodeDate(YearOf(Date), IfThen(mes = 0, 1, mes), dia);
case DayOfWeek(vencimento) of
1: IBQryMensalidade.FieldByName('DATA_VENCIMENTO').AsDateTime := vencimento + 1;
7: IBQryMensalidade.FieldByName('DATA_VENCIMENTO').AsDateTime := vencimento + 2;
else
IBQryMensalidade.FieldByName('DATA_VENCIMENTO').AsDateTime := vencimento;
end;
IBQryMensalidadeDIA_BASE.Value := EdtDia_Base.Text;
end;
IBQryMensalidade.Post;
IBQryMensalidade.Refresh;
IBQryMensalidade.Close;
IBQryMensalidade.Open;
IBQryAluno.Close;
IBQryAluno.Open;
end;
end;
agora pra validar a data e aluno, dá pra criar uma constraint no próprio IBQuery IBQryMensalidade, só criar uma e configurar (infelizmente não tenho como testar agora nem achei nenhum exemplo disponível...)
desse modo dá pra validar e retornar a mensagem, mas é altamente recomendável criar a PK composta sugerida pelo Joel mesmo assim
Gostei + 0
05/12/2012
Osmar
Uso Delphi 2010 tive que adicionar essas duas funções na uses math e DateUtils.
IBQryMensalidade.FieldByName('Situacao').Value := IfThen(cxCheckListBox1.Items[mes].Checked, 'Aberta', 'Isento');
[DCC Error] UFinanceiro.pas(235): E2250 There is no overloaded version of 'IfThen' that can be called with these arguments
Gostei + 0
06/12/2012
Alan Souza
declare StrUtils no uses.
Gostei + 0
06/12/2012
Osmar
Agora compilou, olha não tenho muita experiência, você poderia fazer o código da constraint, a tabela está assim:
COD_MENSALIDADE (chave primária)
MATRICULA_MENSALIDADE
DATA_VENCIMENTO
DATA_PAGAMENTO
SITUACAO
MES_MENSALIDADE
DIA_BASE
ESCOLA (chave estrangeira)
Quanto a chave composta também nunca fiz uso Firiberd/IbExpert.
Gostei + 0
06/12/2012
Alan Souza
ALTER TABLE TABELA ADD CONSTRAINT PK_TABELA PRIMARY KEY (MATRICULA_MENSALIDADE, MES_MENSALIDADE, ANO_MENSALIDADE)
assim sua chave será composta pela matrícula, mês e ano. Quando for cadastrado os valores repetidos, a chave não deixará salvar outro registro. Então basta validar com um try/except para quando der a exceção relativa à PK, mostrar msg pro usuário.
(caso o campo cod_mensalidade seja necessário como seu identificador único, crie uma unique key para ele)
Gostei + 0
06/12/2012
Alan Souza
Gostei + 0
06/12/2012
Osmar
Gostei + 0
06/12/2012
Osmar
consegui fazer a unique, mas tem um detalhe, quando tentei fazer a mesma só com os campos MATRICULA_MENSALIDADE e DATA_VENCIMENTO dava erro, então também foi incluso o campo chave primaria COD_MENSALIDADE, ou seja ficaram os três campos na unique, então compilou.
Obs: Lembro que no próximo ano será lançado na tebela o mesmo aluno com a mesma MATRICULA_MENSALIDADE a diferença de inserção fica apenas por conta da data que será diferente devido ao ano, então pergunto neste caso o sistema permite a inserção?
Gostei + 0
06/12/2012
Osmar
Gostei + 0
06/12/2012
Alan Souza
--deixe a tabela com essa estrutura
COD_MENSALIDADE (PK)
MATRICULA_MENSALIDADE (UK)
DATA_VENCIMENTO
DATA_PAGAMENTO
SITUACAO
MES_MENSALIDADE (UK)
DIA_BASE
ESCOLA (FK)
ANO_MENSALIDADE (UK)
ou seja, terá uma PK, uma FK e uma UK
para criá-las:
--PK
ALTER TABLE TABELA ADD CONSTRAINT PK_TABELA PRIMARY KEY (COD_MENSALIDADE)
--FK
ALTER TABLE TABELA ADD CONSTRAINT FK_TABELA FOREIGN KEY (ESCOLA) REFERENCES TABELAESCOLA (CAMPORELACAOESCOLA)
--UK
ALTER TABLE TABELA ADD CONSTRAINT UK_TABELA UNIQUE (MATRICULA_MENSALIDADE, MES_MENSALIDADE, ANO_MENSALIDADE)
desse modo ele permitiria a inserção no ano seguinte, porque os valores não vão compor um conjunto único, pois o ano mudará.
Gostei + 0
06/12/2012
Osmar
Gostei + 0
06/12/2012
Alan Souza
Gostei + 0
06/12/2012
Osmar
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)