update na tabela com um CheckListBox?
Pessoal,
Com o primeiro código lanço na tabela 13 registros referentes as mensalidades do aluno, não consigo com o segundo código fazer um update que de acordo com um CheckListBox de 13 opções insira no campo SITUACAO = 'Pago' e no campo Data_Pagamento a data atual:
1º CODIGO
procedure TFrmFinanceiro.cxButtonClick(Sender: TObject);
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
try
DmDados.IBQryMensalidade.close;
DmDados.IBQryMensalidade.open;
dia := strtoint(EdtDia_Base.Text);
for mes := 0 to 12 do
begin
DmDados.IBQryMensalidade.Insert;
DmDados.IBQryMensalidadeMATRICULA_MENSALIDADE.AsString := DmDados.IBQryAlunoMATRICULA.AsString;
DmDados.IBQryMensalidade.FieldByName('Situacao').Value := IfThen(cxCheckListBox1.Items[mes].Checked, 'Aberta', 'Isento');
DmDados.IBQryMensalidadeMES_MENSALIDADE.AsString := MES_MENSALIDADE[mes];
DmDados.IBQryMensalidadeANO_MENSALIDADE.AsInteger := StrToInt(EdtAno.Text);
DmDados.IBQryMensalidadeVALOR_MENSALIDADE.AsFloat := EdtValorOrcado.Value;
DmDados.IBQryMensalidadeESCOLA.AsString := sEscola;
if cxCheckListBox1.Items[mes].Checked then
begin
vencimento := EncodeDate(StrToInt(EdtAno.Text), IfThen(mes = 0, 1, mes), dia);
case DayOfWeek(vencimento) of
1: DmDados.IBQryMensalidade.FieldByName('DATA_VENCIMENTO').AsDateTime := vencimento + 1;
7: DmDados.IBQryMensalidade.FieldByName('DATA_VENCIMENTO').AsDateTime := vencimento + 2;
else
DmDados.IBQryMensalidade.FieldByName('DATA_VENCIMENTO').AsDateTime := vencimento;
end;
DmDados.IBQryMensalidadeDIA_BASE.Value := EdtDia_Base.Text;
end;
end;
except on E: Exception do
begin
DmDados.IBQryMensalidade.Cancel;
Application.MessageBox(PChar('As Mensalidades deste Aluno já foram geradas neste Ano!' + #13), 'ATENÇÃO!', MB_ICONERROR);
abort;
end;
end;
DmDados.IBQryMensalidade.Post;
DmDados.IBQryMensalidade.Refresh;
DmDados.IBQryMensalidade.Close;
DmDados.IBQryMensalidade.Open;
DmDados.IBQryAluno.Close;
DmDados.IBQryAluno.Open;
Application.MessageBox('As Mensalidades foram geradas com sucesso!', 'Atenção', mb_iconinformation + mb_ok);
end;
2º CÓDIGO
procedure TFrmFinanceiro.BtnBaixarMensalidadeClick(Sender: TObject);
begin
with QryBaixarMensalidade do
begin
Close;
SQL.Clear;
SQL.ADD('Update MENSALIDADE set situacao = ''Pago'' WHERE ESCOLA = :ESCOLA and matricula_mensalidade = :matricula_mensalidade');
ParamByName('escola').AsInteger := DmDados.IBQryAlunoESCOLA.AsInteger;
ParamByName('matricula_mensalidade').AsInteger := DmDados.IBQryAlunoMATRICULA.AsInteger;
ExecSQL;
IBQryMensalidade.close;
IBQryMensalidade.open;
DmDados.IBQryAluno.Close;
DmDados.IBQryAluno.Open;
DmDados.IBTransaction.CommitRetaining;
end;
end;
Com o primeiro código lanço na tabela 13 registros referentes as mensalidades do aluno, não consigo com o segundo código fazer um update que de acordo com um CheckListBox de 13 opções insira no campo SITUACAO = 'Pago' e no campo Data_Pagamento a data atual:
1º CODIGO
procedure TFrmFinanceiro.cxButtonClick(Sender: TObject);
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
try
DmDados.IBQryMensalidade.close;
DmDados.IBQryMensalidade.open;
dia := strtoint(EdtDia_Base.Text);
for mes := 0 to 12 do
begin
DmDados.IBQryMensalidade.Insert;
DmDados.IBQryMensalidadeMATRICULA_MENSALIDADE.AsString := DmDados.IBQryAlunoMATRICULA.AsString;
DmDados.IBQryMensalidade.FieldByName('Situacao').Value := IfThen(cxCheckListBox1.Items[mes].Checked, 'Aberta', 'Isento');
DmDados.IBQryMensalidadeMES_MENSALIDADE.AsString := MES_MENSALIDADE[mes];
DmDados.IBQryMensalidadeANO_MENSALIDADE.AsInteger := StrToInt(EdtAno.Text);
DmDados.IBQryMensalidadeVALOR_MENSALIDADE.AsFloat := EdtValorOrcado.Value;
DmDados.IBQryMensalidadeESCOLA.AsString := sEscola;
if cxCheckListBox1.Items[mes].Checked then
begin
vencimento := EncodeDate(StrToInt(EdtAno.Text), IfThen(mes = 0, 1, mes), dia);
case DayOfWeek(vencimento) of
1: DmDados.IBQryMensalidade.FieldByName('DATA_VENCIMENTO').AsDateTime := vencimento + 1;
7: DmDados.IBQryMensalidade.FieldByName('DATA_VENCIMENTO').AsDateTime := vencimento + 2;
else
DmDados.IBQryMensalidade.FieldByName('DATA_VENCIMENTO').AsDateTime := vencimento;
end;
DmDados.IBQryMensalidadeDIA_BASE.Value := EdtDia_Base.Text;
end;
end;
except on E: Exception do
begin
DmDados.IBQryMensalidade.Cancel;
Application.MessageBox(PChar('As Mensalidades deste Aluno já foram geradas neste Ano!' + #13), 'ATENÇÃO!', MB_ICONERROR);
abort;
end;
end;
DmDados.IBQryMensalidade.Post;
DmDados.IBQryMensalidade.Refresh;
DmDados.IBQryMensalidade.Close;
DmDados.IBQryMensalidade.Open;
DmDados.IBQryAluno.Close;
DmDados.IBQryAluno.Open;
Application.MessageBox('As Mensalidades foram geradas com sucesso!', 'Atenção', mb_iconinformation + mb_ok);
end;
2º CÓDIGO
procedure TFrmFinanceiro.BtnBaixarMensalidadeClick(Sender: TObject);
begin
with QryBaixarMensalidade do
begin
Close;
SQL.Clear;
SQL.ADD('Update MENSALIDADE set situacao = ''Pago'' WHERE ESCOLA = :ESCOLA and matricula_mensalidade = :matricula_mensalidade');
ParamByName('escola').AsInteger := DmDados.IBQryAlunoESCOLA.AsInteger;
ParamByName('matricula_mensalidade').AsInteger := DmDados.IBQryAlunoMATRICULA.AsInteger;
ExecSQL;
IBQryMensalidade.close;
IBQryMensalidade.open;
DmDados.IBQryAluno.Close;
DmDados.IBQryAluno.Open;
DmDados.IBTransaction.CommitRetaining;
end;
end;
Osmar
Curtidas 0
Respostas
Claudia Nogueira
19/12/2012
Não entendi. Hehehehe.
GOSTEI 0
Osmar
19/12/2012
olha o 1º código esta funcionado beleza só coloquei para tentar explicar melhor, o que tentei passa e que no 2º código preciso dar um update na mesma tabela inserindo no campo DATA_PAGAMENTO a (data do sistema )e no campo SITUAÇÃO que está como 'Aberto' será substituido por 'Pago' , sendo que os campos DATA_PAGAMENTO e SITUAÇÃO só devem ser inseridos se o cxCheckListBox2 estiver setado, já tentei mas não consigo montar o código:
if cxCheckListBox2.Items[mes].Checked = true
X MATRICULA
X JANEIRO
X FEVEREIRO
X MARÇO
X ABRIL
X MAIO
X JUNHO
X JULHO
X AGOSTO
X SETEMBRO
X OUTUBRO
X NOVEMBRO
X DEZEMBRO
if cxCheckListBox2.Items[mes].Checked = true
X MATRICULA
X JANEIRO
X FEVEREIRO
X MARÇO
X ABRIL
X MAIO
X JUNHO
X JULHO
X AGOSTO
X SETEMBRO
X OUTUBRO
X NOVEMBRO
X DEZEMBRO
GOSTEI 0
André Celestino
19/12/2012
Acho que entendi mais ou menos...
Não seria o caso se você fazer um loop pra checar o CheckListBox assim como você fez no primeiro código?
Não seria o caso se você fazer um loop pra checar o CheckListBox assim como você fez no primeiro código?
GOSTEI 0
Osmar
19/12/2012
Batera,
Tentei fazer mas não consegui, você poderia postar o código?
Tentei fazer mas não consegui, você poderia postar o código?
GOSTEI 0
Osmar
19/12/2012
fiz dessa forma, mas só inseri os dados no primeiro registro.
procedure TFrmFinanceiro.BtnBaixarMensalidadeClick(Sender: TObject);
var
mes: Word;
begin
DmDados.IBQryMensalidade.close;
DmDados.IBQryMensalidade.open;
for mes := 0 to 12 do
begin
if cxCheckListBox2.Items[mes].Checked then
begin
DmDados.IBQryMensalidade.edit;
DmDados.IBQryMensalidadeDATA_PAGAMENTO.AsDateTime := StrToDateTimeDef('dd/mm/yyyy', MonthCalendar1.Date);
DmDados.IBQryMensalidadeSITUACAO.AsString := 'Pago';
end;
end;
DmDados.IBQryMensalidade.Post;
DmDados.IBQryMensalidade.Refresh;
DmDados.IBQryMensalidade.Close;
DmDados.IBQryMensalidade.Open;
DmDados.IBQryAluno.Close;
DmDados.IBQryAluno.Open;
IBQryMensalidade.Close;
IBQryMensalidade.open;
Application.MessageBox('As Mensalidades foram baixadas com sucesso!', 'Atenção', mb_iconinformation + mb_ok);
end;
procedure TFrmFinanceiro.BtnBaixarMensalidadeClick(Sender: TObject);
var
mes: Word;
begin
DmDados.IBQryMensalidade.close;
DmDados.IBQryMensalidade.open;
for mes := 0 to 12 do
begin
if cxCheckListBox2.Items[mes].Checked then
begin
DmDados.IBQryMensalidade.edit;
DmDados.IBQryMensalidadeDATA_PAGAMENTO.AsDateTime := StrToDateTimeDef('dd/mm/yyyy', MonthCalendar1.Date);
DmDados.IBQryMensalidadeSITUACAO.AsString := 'Pago';
end;
end;
DmDados.IBQryMensalidade.Post;
DmDados.IBQryMensalidade.Refresh;
DmDados.IBQryMensalidade.Close;
DmDados.IBQryMensalidade.Open;
DmDados.IBQryAluno.Close;
DmDados.IBQryAluno.Open;
IBQryMensalidade.Close;
IBQryMensalidade.open;
Application.MessageBox('As Mensalidades foram baixadas com sucesso!', 'Atenção', mb_iconinformation + mb_ok);
end;
GOSTEI 0