If, then, else quem pode ajudar?
Amigos,
O sistema é ESCOLAR preciso numerar os alunos que são matriculados no campo NUMERO, como vcs podem ver já estou conseguindo numerar, só que preciso colocar uma restrição na numeração, ou seja, quando formamos uma turma, exemplo 20 alunos todos eles recebem o seu numero, o qual será colocado no diário de classe, fichas, etc. Imagine que chegue um aluno no meio do ano, essa turma não pode mais ser renumerada, pois teria que trocar todos os documentos já preenchidos. Então o que preciso é fazer uma opção que mim permita ao matricular este aluno recem chegado, o sistema pegue o último número da tabela, ou seja, o número 20 +1, então esse aluno ficará fora da ordem alfabética será o 21.
O objetivo é este ao criar uma turma, exemplo de 3 alunos, lembrado que os alunos sao inseridos um a cada vez, vejamos como deve ser:
ao inserir o aluno joão o campo numero(claro que aqui só fica o numero) ficaria assim;
1 - joao
ao inserir o aluno bete, o sistema organiza em ordem alfabetica e depois numera.
1 - Bete
2 - joao
ao inserir o aluno Antonio, o sistema organiza em ordem alfabetica e depois numera.
1 - Antonio
2 - Bete
3 - Joao
então chegará um momento que a minha turma já esta fechada para começar a trabalhar o ano, então supondo que no meio do ano chegue um aluno, não posso mais alterar o que já esta numerado, aí nesse caso pensei colocar o ELSE para ele NÃO MAIS organizar em ordem e NEM NUMERAR conforme o IF e sim pegar o ultimo número da tabela NUMERO que seria o 3 somar com mais 1 então o aluno que esta entranto no meio do ano seria o numero 4, exemplo, Abelardo, então gostaria que ficasse assim:
1 - Antonio
2 - Bete
3 - Joao
4 - Abelardo
Pessoal fiz algumas mudanças, mas ainda não funciona, vejam como está:
procedure TFrmCadTurDisc.BtnSalvarAlunoClick(Sender: TObject);
var I : Integer;
begin
if RadioButton1.Checked then
begin
I := 1;
IBQryAlunoTurma.First;
while not DmDados.IBQryAlunoTurma.Eof do
begin
IBQryAlunoTurma.Edit;
IBQryAlunoTurma.FieldByName('numero').AsInteger := I;
IBQryAlunoTurma.Post;
IBQryAlunoTurma.Next;
Inc(I);
end;
end
else
if RadioButton2.Checked then
begin
IBQryAlunoTurma.Close;
IBQryAlunoTurma.SQL.Clear;
IBQryAlunoTurma.sql.add('SELECT MAX(numero)+1 FROM ALUNOTURMA WHERE ESCOLA = :ESCOLA and codigo_turma=:turma');
end;
end;
O sistema é ESCOLAR preciso numerar os alunos que são matriculados no campo NUMERO, como vcs podem ver já estou conseguindo numerar, só que preciso colocar uma restrição na numeração, ou seja, quando formamos uma turma, exemplo 20 alunos todos eles recebem o seu numero, o qual será colocado no diário de classe, fichas, etc. Imagine que chegue um aluno no meio do ano, essa turma não pode mais ser renumerada, pois teria que trocar todos os documentos já preenchidos. Então o que preciso é fazer uma opção que mim permita ao matricular este aluno recem chegado, o sistema pegue o último número da tabela, ou seja, o número 20 +1, então esse aluno ficará fora da ordem alfabética será o 21.
O objetivo é este ao criar uma turma, exemplo de 3 alunos, lembrado que os alunos sao inseridos um a cada vez, vejamos como deve ser:
ao inserir o aluno joão o campo numero(claro que aqui só fica o numero) ficaria assim;
1 - joao
ao inserir o aluno bete, o sistema organiza em ordem alfabetica e depois numera.
1 - Bete
2 - joao
ao inserir o aluno Antonio, o sistema organiza em ordem alfabetica e depois numera.
1 - Antonio
2 - Bete
3 - Joao
então chegará um momento que a minha turma já esta fechada para começar a trabalhar o ano, então supondo que no meio do ano chegue um aluno, não posso mais alterar o que já esta numerado, aí nesse caso pensei colocar o ELSE para ele NÃO MAIS organizar em ordem e NEM NUMERAR conforme o IF e sim pegar o ultimo número da tabela NUMERO que seria o 3 somar com mais 1 então o aluno que esta entranto no meio do ano seria o numero 4, exemplo, Abelardo, então gostaria que ficasse assim:
1 - Antonio
2 - Bete
3 - Joao
4 - Abelardo
Pessoal fiz algumas mudanças, mas ainda não funciona, vejam como está:
procedure TFrmCadTurDisc.BtnSalvarAlunoClick(Sender: TObject);
var I : Integer;
begin
if RadioButton1.Checked then
begin
I := 1;
IBQryAlunoTurma.First;
while not DmDados.IBQryAlunoTurma.Eof do
begin
IBQryAlunoTurma.Edit;
IBQryAlunoTurma.FieldByName('numero').AsInteger := I;
IBQryAlunoTurma.Post;
IBQryAlunoTurma.Next;
Inc(I);
end;
end
else
if RadioButton2.Checked then
begin
IBQryAlunoTurma.Close;
IBQryAlunoTurma.SQL.Clear;
IBQryAlunoTurma.sql.add('SELECT MAX(numero)+1 FROM ALUNOTURMA WHERE ESCOLA = :ESCOLA and codigo_turma=:turma');
end;
end;
Osmar
Curtidas 0
Respostas
Wilson Junior
30/09/2010
Crie um campo, CHEGOU_APOS como CHAR(1) e para os alunos que foram cadastrados antes você atribui o valor N (Não), já para os alunos cadastrados depois você atribui o valor S (Sim). Mande organizar pelos campos Chegou_Apos e por Nome. Assim você já saberá até quem foi matriculado após o fechamento da turma.
Espero ter colaborado.
Espero ter colaborado.
GOSTEI 0
Osmar
30/09/2010
Bom dia Wilson,
Olha eu preciso imprimir estes alunos com NOME e NUMERO apenas, ou seja, todos juntos os que já estão nas escola e os que chegaram depois, conforme já expliquei anteriormente.
Agradeço a atençao.
Osmar.
GOSTEI 0
Eriley Barbosa
30/09/2010
procedure TFrmCadTurDisc.BtnSalvarAlunoClick(Sender: TObject);
var
I : Integer;
Qry: TIBQuery;
begin
if RadioButton1.Checked then
begin
I := 1;
IBQryAlunoTurma.First;
while not DmDados.IBQryAlunoTurma.Eof do
begin
IBQryAlunoTurma.Edit;
IBQryAlunoTurma.FieldByName('numero').AsInteger := I;
IBQryAlunoTurma.Post;
IBQryAlunoTurma.Next;
Inc(I);
end;
end
else
if RadioButton2.Checked then
begin
Qry := TIBQuery.Create(nil); {: cria uma instância do objeto}
try
Qry.Database := SeuIBDataBase;
Qry.SQL.Add('SELECT MAX(numero)+1 FROM ALUNOTURMA WHERE ESCOLA = :ESCOLA and codigo_turma=:turma);
Qry.Params[0].AsString := SeuCampo que Guarda a escola;
Qry.Params[1].AsInteger := SeuCampo que Guarda o codigo da turma;
Qry.Open;
IBQryAlunoTurma.FieldByName('numero').AsInteger := Qry.Fields[0].AsInteger;
finally
FreeAndNil(Qry); {: libera o objeto da memória}
end;
end;
end;
var
I : Integer;
Qry: TIBQuery;
begin
if RadioButton1.Checked then
begin
I := 1;
IBQryAlunoTurma.First;
while not DmDados.IBQryAlunoTurma.Eof do
begin
IBQryAlunoTurma.Edit;
IBQryAlunoTurma.FieldByName('numero').AsInteger := I;
IBQryAlunoTurma.Post;
IBQryAlunoTurma.Next;
Inc(I);
end;
end
else
if RadioButton2.Checked then
begin
Qry := TIBQuery.Create(nil); {: cria uma instância do objeto}
try
Qry.Database := SeuIBDataBase;
Qry.SQL.Add('SELECT MAX(numero)+1 FROM ALUNOTURMA WHERE ESCOLA = :ESCOLA and codigo_turma=:turma);
Qry.Params[0].AsString := SeuCampo que Guarda a escola;
Qry.Params[1].AsInteger := SeuCampo que Guarda o codigo da turma;
Qry.Open;
IBQryAlunoTurma.FieldByName('numero').AsInteger := Qry.Fields[0].AsInteger;
finally
FreeAndNil(Qry); {: libera o objeto da memória}
end;
end;
end;
GOSTEI 0
Wilson Junior
30/09/2010
O que lhe sugeri é incluir um campo a mais na sua tabela, assim ficará muito mais fácil para você imprimir.
PS: Tendo um campo na tabela não significa que o mesmo deve ser impresso.
Exemplo:
Numero Nome Chegou_Apos
------ -------------- -----------
1 Antonio N
2 Bete N
3 Joao N
4 Abelardo S
Seu SQL:
Após executar o SQL, faça o seu código antes de imprimir, mas somente esta parte.
Espero ter colaborado.
PS: Tendo um campo na tabela não significa que o mesmo deve ser impresso.
Exemplo:
Numero Nome Chegou_Apos
------ -------------- -----------
1 Antonio N
2 Bete N
3 Joao N
4 Abelardo S
Seu SQL:
SELECT CAST(0 AS INTEGER) AS Numero, Nome FROM ALUNO_TURMA ORDER BY Chegou_Apos, Nome
Após executar o SQL, faça o seu código antes de imprimir, mas somente esta parte.
I := 1;
IBQryAlunoTurma.First;
while not DmDados.IBQryAlunoTurma.Eof do
begin
IBQryAlunoTurma.Edit;
IBQryAlunoTurma.FieldByName('Numero').AsInteger := I;
IBQryAlunoTurma.Post;
IBQryAlunoTurma.Next;
Inc( I );
end;
Espero ter colaborado.
GOSTEI 0
Osmar
30/09/2010
procedure TFrmCadTurDisc.BtnSalvarAlunoClick(Sender: TObject);
var
I : Integer;
Qry: TIBQuery;
begin
if RadioButton1.Checked then
begin
I := 1;
DmDados.IBQryAlunoTurma.First;
while not DmDados.IBQryAlunoTurma.Eof do
begin
DmDados.IBQryAlunoTurma.Edit;
DmDados.IBQryAlunoTurma.FieldByName('numero').AsInteger := I;
DmDados.IBQryAlunoTurma.Post;
DmDados.IBQryAlunoTurma.Next;
Inc(I);
end;
end
else
if RadioButton2.Checked then
begin
Qry := TIBQuery.Create(nil); {: cria uma instância do objeto}
try
Qry.Database := SeuIBDataBase;
Qry.SQL.Add('SELECT MAX(numero)+1 FROM ALUNOTURMA WHERE ESCOLA = :ESCOLA and codigo_turma=:turma);
Qry.Params[0].AsString := SeuCampo que Guarda a escola;
Qry.Params[1].AsInteger := SeuCampo que Guarda o codigo da turma;
Qry.Open;
DmDados.IBQryAlunoTurma.FieldByName('numero').AsInteger := Qry.Fields[0].AsInteger;
finally
FreeAndNil(Qry); {: libera o objeto da memória}
end;
end;
end;
var
I : Integer;
Qry: TIBQuery;
begin
if RadioButton1.Checked then
begin
I := 1;
DmDados.IBQryAlunoTurma.First;
while not DmDados.IBQryAlunoTurma.Eof do
begin
DmDados.IBQryAlunoTurma.Edit;
DmDados.IBQryAlunoTurma.FieldByName('numero').AsInteger := I;
DmDados.IBQryAlunoTurma.Post;
DmDados.IBQryAlunoTurma.Next;
Inc(I);
end;
end
else
if RadioButton2.Checked then
begin
Qry := TIBQuery.Create(nil); {: cria uma instância do objeto}
try
Qry.Database := SeuIBDataBase;
Qry.SQL.Add('SELECT MAX(numero)+1 FROM ALUNOTURMA WHERE ESCOLA = :ESCOLA and codigo_turma=:turma);
Qry.Params[0].AsString := SeuCampo que Guarda a escola;
Qry.Params[1].AsInteger := SeuCampo que Guarda o codigo da turma;
Qry.Open;
DmDados.IBQryAlunoTurma.FieldByName('numero').AsInteger := Qry.Fields[0].AsInteger;
finally
FreeAndNil(Qry); {: libera o objeto da memória}
end;
end;
end;
GOSTEI 0
Osmar
30/09/2010
Bom dia Eriley,
Desculpe, acho que na hora de colar o codigo eu mudei alguma coisa e cololei errado, mas na hora de inserir a sua dica fiz a correção, mas não compila esta travado, segue abaixo o codigo e a dica onde está travando.
procedure TFrmCadTurDisc.BtnSalvarAlunoClick(Sender: TObject);
var
I : Integer;
Qry: TIBQuery;
if RadioButton1.Checked then
begin
I := 1;
DmDados.IBQryAlunoTurma.First;
while not DmDados.IBQryAlunoTurma.Eof do
begin
DmDados.IBQryAlunoTurma.Edit;
DmDados.IBQryAlunoTurma.FieldByName('numero').AsInteger := I;
Dmdados.IBQryAlunoTurma.Post;
DmDados.IBQryAlunoTurma.Next;
Inc(I);
end;
end
else
if RadioButton2.Checked then
begin
Qry := TIBQuery.Create(nil); {: cria uma instância do objeto}
try
Qry.Database := DmDados.IBDatabase;
(AQUI TRAVA) Qry.IBQryAlunoTurma.SQL.Add('SELECT MAX(numero)+1 FROM ALUNOTURMA WHERE ESCOLA = :ESCOLA and codigo_turma=:turma);
Qry.IBQryAlunoTurma.Params[0].AsString := DmDados.IBQryAlunoTurmaESCOLA.AsString // que Guarda a escola;
Qry.IBQryAlunoTurma.Params[1].AsInteger := DmDados.IBQryAlunoTurmaCODIGO_TURMA // que Guarda o codigo da turma;
Qry.IBQryAlunoTurma.Open;
Qry.IBQryAlunoTurma.FieldByName('numero').AsInteger := Qry.Fields[0].AsInteger;
finally
FreeAndNil(Qry); {: libera o objeto da memória}
end;
end;
end;
var
I : Integer;
Qry: TIBQuery;
if RadioButton1.Checked then
begin
I := 1;
DmDados.IBQryAlunoTurma.First;
while not DmDados.IBQryAlunoTurma.Eof do
begin
DmDados.IBQryAlunoTurma.Edit;
DmDados.IBQryAlunoTurma.FieldByName('numero').AsInteger := I;
Dmdados.IBQryAlunoTurma.Post;
DmDados.IBQryAlunoTurma.Next;
Inc(I);
end;
end
else
if RadioButton2.Checked then
begin
Qry := TIBQuery.Create(nil); {: cria uma instância do objeto}
try
Qry.Database := DmDados.IBDatabase;
(AQUI TRAVA) Qry.IBQryAlunoTurma.SQL.Add('SELECT MAX(numero)+1 FROM ALUNOTURMA WHERE ESCOLA = :ESCOLA and codigo_turma=:turma);
Qry.IBQryAlunoTurma.Params[0].AsString := DmDados.IBQryAlunoTurmaESCOLA.AsString // que Guarda a escola;
Qry.IBQryAlunoTurma.Params[1].AsInteger := DmDados.IBQryAlunoTurmaCODIGO_TURMA // que Guarda o codigo da turma;
Qry.IBQryAlunoTurma.Open;
Qry.IBQryAlunoTurma.FieldByName('numero').AsInteger := Qry.Fields[0].AsInteger;
finally
FreeAndNil(Qry); {: libera o objeto da memória}
end;
end;
end;
GOSTEI 0
Eriley Barbosa
30/09/2010
Você fez uma grande mistura, mas segue o código corrigido, acho que não precisa mexer em nada:
procedure TFrmCadTurDisc.BtnSalvarAlunoClick(Sender: TObject);
var
I : Integer;
Qry: TIBQuery;
begin
if RadioButton1.Checked then
begin
I := 1;
DmDados.IBQryAlunoTurma.First;
while not DmDados.IBQryAlunoTurma.Eof do
begin
DmDados.IBQryAlunoTurma.Edit;
DmDados.IBQryAlunoTurma.FieldByName('numero').AsInteger := I;
Dmdados.IBQryAlunoTurma.Post;
DmDados.IBQryAlunoTurma.Next;
Inc(I);
end;
end
else
if RadioButton2.Checked then
begin
Qry := TIBQuery.Create(nil); {: cria uma instância do objeto}
try
Qry.Database := DmDados.IBDatabase;
Qry.SQL.Add('SELECT MAX(numero)+1 FROM ALUNOTURMA WHERE ESCOLA = :ESCOLA and codigo_turma=:turma');
Qry.Params[0].AsString := DmDados.IBQryAlunoTurmaESCOLA.AsString; // que Guarda a escola
Qry.Params[1].AsInteger := DmDados.IBQryAlunoTurmaCODIGO_TURMA.AsInteger; // que Guarda o codigo da turma;
Qry.Open;
DmDados.FieldByName('numero').AsInteger := Qry.Fields[0].AsInteger;
Dmdados.IBQryAlunoTurma.Post;
finally
FreeAndNil(Qry); {: libera o objeto da memória}
end;
end;
end;
var
I : Integer;
Qry: TIBQuery;
begin
if RadioButton1.Checked then
begin
I := 1;
DmDados.IBQryAlunoTurma.First;
while not DmDados.IBQryAlunoTurma.Eof do
begin
DmDados.IBQryAlunoTurma.Edit;
DmDados.IBQryAlunoTurma.FieldByName('numero').AsInteger := I;
Dmdados.IBQryAlunoTurma.Post;
DmDados.IBQryAlunoTurma.Next;
Inc(I);
end;
end
else
if RadioButton2.Checked then
begin
Qry := TIBQuery.Create(nil); {: cria uma instância do objeto}
try
Qry.Database := DmDados.IBDatabase;
Qry.SQL.Add('SELECT MAX(numero)+1 FROM ALUNOTURMA WHERE ESCOLA = :ESCOLA and codigo_turma=:turma');
Qry.Params[0].AsString := DmDados.IBQryAlunoTurmaESCOLA.AsString; // que Guarda a escola
Qry.Params[1].AsInteger := DmDados.IBQryAlunoTurmaCODIGO_TURMA.AsInteger; // que Guarda o codigo da turma;
Qry.Open;
DmDados.FieldByName('numero').AsInteger := Qry.Fields[0].AsInteger;
Dmdados.IBQryAlunoTurma.Post;
finally
FreeAndNil(Qry); {: libera o objeto da memória}
end;
end;
end;
GOSTEI 0
Osmar
30/09/2010
Eriley,
esta parando nesta linha.
DmDados.FieldByName('numero').AsInteger := Qry.Fields[0].AsInteger;
[Error] UCadTurDisc.pas(551): Undeclared identifier: 'FieldByName'
osmar
GOSTEI 0
Eriley Barbosa
30/09/2010
Desculpe, troque por esta:
DmDados.IBQryAlunoTurma.FieldByName('numero').AsInteger := Qry.Fields[0].AsInteger;
GOSTEI 0
Osmar
30/09/2010
Eriley
Olha está compilando normal, então ao selecionar o RadioButton2 e clicar no botão salvar coloquei para debugar, e dá pau no post, esta é a mensagem:
'Not in edit mode', process stoped,
este é o select que está na IbqryAlunoTurma, a qual está Dmdados
Select *from ALUNOTURMA
where ESCOLA = :ESCOLA
and codigo_turma=:turma Osmar
where ESCOLA = :ESCOLA
and codigo_turma=:turma Osmar
GOSTEI 0
Eriley Barbosa
30/09/2010
Altere o trecho de código abaixo:
DmDados.IBQryAlunoTurma.Edit;
DmDados.IBQryAlunoTurma.FieldByName('numero').AsInteger := Qry.Fields[0].AsInteger;
DmDados.IBQryAlunoTurma.Post;
GOSTEI 0
Osmar
30/09/2010
Eriley,
Cara agora funcionou beleza, não tenho como agradecer, estou a dois dias tentando resolver esse problema, mas, você sabe pouca expeiência.
Ficam aqui mais uma vez registrados os meus sinceros agradecimentos, porque pessoas como você e os outros que tentaram ajudar, tornam a internet um instrumento de grande interatividade e incentivo aos iniciantes em programação, ajudando assim na ampliação de seus conhecimentos.
Fica com Deus.
Osmar.
GOSTEI 0
Osmar
30/09/2010
Eriley,
Olha o codigo está gravando e numerando, mas depois eu percebi um pequeno engano ou seja tem que ser feita uma rotina no if rbautomatico para que ele todas as vezes que for numerar reordenar a tabela em ordem alfabetica e depois numerar. Exemplo:
como está no momento, ao cadastrar o aluno PEDRO ele recebe o numero 1, ao cadastrar o aluno ANTONIO ele recebe numero 2, ou seja, ficaria:
1 PEDRO
2 ANTONIO
mas para ficar correto, estando habilitado o rbAUTOMATCO deveria ficar assim:
1 ANTONIO
2 PEDRO
lembro que os alunos são inseridos na turma um de cada vez, entao ao terminar de cadastrar a turma, TODOS os alunos deveriam esta em ordem alfabetica e respectivamente numerados em ordem crescente. Segue abaixo como está o codigo:
procedure TFrmCadTurDisc.BtnSalvarAlunoClick(Sender: TObject);
var
I : Integer;
Qry : TIBQuery; begin
If TForm(self).tag = 0 then
DmDados.IBQryAlunoTurmaESCOLA.AsString := sEscola; If dbEdtMatricula.Text = '' then
begin
ShowMessage('A Matrícula do Aluno deve ser Pesquisada!');
Exit;
end; DmDados.IBQryAlunoTurmaCODIGO_TURMA.Value := DmDados.IBQryTurmaCODIGO.Value;
DmDados.IBQryAlunoTurmaNOME_ALUNO.AsString := DmDados.IBQryAlunoNOME.AsString;
DmDados.IBQryAlunoTurmaMATRICULA_ALUNO.Value := DmDados.IBQryAlunoMATRICULA.Value; DmDados.IBQryAlunoTurma.Post; if rbAutomatica.Checked then
begin
I := 1;
DmDados.IBQryAlunoTurma.First;
while not DmDados.IBQryAlunoTurma.Eof do
begin
DmDados.IBQryAlunoTurma.Edit;
DmDados.IBQryAlunoTurma.FieldByName('numero').AsInteger := I;
Dmdados.IBQryAlunoTurma.Post;
DmDados.IBQryAlunoTurma.Next;
Inc(I);
end;
end
else
if rbManual.Checked then
begin
Qry := TIBQuery.Create(nil); {: cria uma instância do objeto}
try
Qry.Database := DmDados.IBDatabase;
Qry.SQL.Add('SELECT MAX(numero)+1 FROM ALUNOTURMA WHERE ESCOLA = :ESCOLA and codigo_turma=:turma order by NOME_ALUNO');
Qry.Params[0].AsString := DmDados.IBQryAlunoTurmaESCOLA.AsString; // que Guarda a escola
Qry.Params[1].AsInteger := DmDados.IBQryAlunoTurmaCODIGO_TURMA.AsInteger; // que Guarda o codigo da turma;
Qry.Open;
DmDados.IBQryAlunoTurma.Edit;
DmDados.IBQryAlunoTurma.FieldByName('numero').AsInteger := Qry.Fields[0].AsInteger;
Dmdados.IBQryAlunoTurma.Post;
finally
FreeAndNil(Qry); { libera o objeto da memória}
end;
end; PcAluno.ActivePageIndex := 0; end; end.
var
I : Integer;
Qry : TIBQuery; begin
If TForm(self).tag = 0 then
DmDados.IBQryAlunoTurmaESCOLA.AsString := sEscola; If dbEdtMatricula.Text = '' then
begin
ShowMessage('A Matrícula do Aluno deve ser Pesquisada!');
Exit;
end; DmDados.IBQryAlunoTurmaCODIGO_TURMA.Value := DmDados.IBQryTurmaCODIGO.Value;
DmDados.IBQryAlunoTurmaNOME_ALUNO.AsString := DmDados.IBQryAlunoNOME.AsString;
DmDados.IBQryAlunoTurmaMATRICULA_ALUNO.Value := DmDados.IBQryAlunoMATRICULA.Value; DmDados.IBQryAlunoTurma.Post; if rbAutomatica.Checked then
begin
I := 1;
DmDados.IBQryAlunoTurma.First;
while not DmDados.IBQryAlunoTurma.Eof do
begin
DmDados.IBQryAlunoTurma.Edit;
DmDados.IBQryAlunoTurma.FieldByName('numero').AsInteger := I;
Dmdados.IBQryAlunoTurma.Post;
DmDados.IBQryAlunoTurma.Next;
Inc(I);
end;
end
else
if rbManual.Checked then
begin
Qry := TIBQuery.Create(nil); {: cria uma instância do objeto}
try
Qry.Database := DmDados.IBDatabase;
Qry.SQL.Add('SELECT MAX(numero)+1 FROM ALUNOTURMA WHERE ESCOLA = :ESCOLA and codigo_turma=:turma order by NOME_ALUNO');
Qry.Params[0].AsString := DmDados.IBQryAlunoTurmaESCOLA.AsString; // que Guarda a escola
Qry.Params[1].AsInteger := DmDados.IBQryAlunoTurmaCODIGO_TURMA.AsInteger; // que Guarda o codigo da turma;
Qry.Open;
DmDados.IBQryAlunoTurma.Edit;
DmDados.IBQryAlunoTurma.FieldByName('numero').AsInteger := Qry.Fields[0].AsInteger;
Dmdados.IBQryAlunoTurma.Post;
finally
FreeAndNil(Qry); { libera o objeto da memória}
end;
end; PcAluno.ActivePageIndex := 0; end; end.
GOSTEI 0
Eriley Barbosa
30/09/2010
Mude o select que está na IbqryAlunoTurma, a qual está no Dmdados para:
Select *from ALUNOTURMA
where ESCOLA = :ESCOLA
and codigo_turma=:turma
order by NOME_ALUNO procedure TFrmCadTurDisc.BtnSalvarAlunoClick(Sender: TObject);
var
I : Integer;
Qry : TIBQuery;
begin
If TForm(self).tag = 0 then
DmDados.IBQryAlunoTurmaESCOLA.AsString := sEscola; If dbEdtMatricula.Text = '' then
begin
ShowMessage('A Matrícula do Aluno deve ser Pesquisada!');
Exit;
end;
DmDados.IBQryAlunoTurmaCODIGO_TURMA.Value := DmDados.IBQryTurmaCODIGO.Value;
DmDados.IBQryAlunoTurmaNOME_ALUNO.AsString := DmDados.IBQryAlunoNOME.AsString;
DmDados.IBQryAlunoTurmaMATRICULA_ALUNO.Value := DmDados.IBQryAlunoMATRICULA.Value; DmDados.IBQryAlunoTurma.Post;
//Vamos ver se só o refresh resolve, caso contrario tem que abrir e fechar a query novamente
DmDados.IBQryAlunoTurma.Refresh;
//Se não funcionar descomente o código abaixo
{DmDados.IBQryAlunoTurma.Close;
DmDados.IBQryAlunoTurma.Open;}
if rbAutomatica.Checked then
begin
I := 1;
DmDados.IBQryAlunoTurma.First;
while not DmDados.IBQryAlunoTurma.Eof do
begin
DmDados.IBQryAlunoTurma.Edit;
DmDados.IBQryAlunoTurma.FieldByName('numero').AsInteger := I;
Dmdados.IBQryAlunoTurma.Post;
DmDados.IBQryAlunoTurma.Next;
Inc(I);
end;
end
else
if rbManual.Checked then
begin
Qry := TIBQuery.Create(nil); {: cria uma instância do objeto}
try
Qry.Database := DmDados.IBDatabase;
Qry.SQL.Add('SELECT MAX(numero)+1 FROM ALUNOTURMA WHERE ESCOLA = :ESCOLA and codigo_turma=:turma order by NOME_ALUNO');
Qry.Params[0].AsString := DmDados.IBQryAlunoTurmaESCOLA.AsString; // que Guarda a escola
Qry.Params[1].AsInteger := DmDados.IBQryAlunoTurmaCODIGO_TURMA.AsInteger; // que Guarda o codigo da turma;
Qry.Open;
DmDados.IBQryAlunoTurma.Edit;
DmDados.IBQryAlunoTurma.FieldByName('numero').AsInteger := Qry.Fields[0].AsInteger;
Dmdados.IBQryAlunoTurma.Post;
finally
FreeAndNil(Qry); { libera o objeto da memória}
end;
end;
PcAluno.ActivePageIndex := 0;
end;
Select *from ALUNOTURMA
where ESCOLA = :ESCOLA
and codigo_turma=:turma
order by NOME_ALUNO procedure TFrmCadTurDisc.BtnSalvarAlunoClick(Sender: TObject);
var
I : Integer;
Qry : TIBQuery;
begin
If TForm(self).tag = 0 then
DmDados.IBQryAlunoTurmaESCOLA.AsString := sEscola; If dbEdtMatricula.Text = '' then
begin
ShowMessage('A Matrícula do Aluno deve ser Pesquisada!');
Exit;
end;
DmDados.IBQryAlunoTurmaCODIGO_TURMA.Value := DmDados.IBQryTurmaCODIGO.Value;
DmDados.IBQryAlunoTurmaNOME_ALUNO.AsString := DmDados.IBQryAlunoNOME.AsString;
DmDados.IBQryAlunoTurmaMATRICULA_ALUNO.Value := DmDados.IBQryAlunoMATRICULA.Value; DmDados.IBQryAlunoTurma.Post;
//Vamos ver se só o refresh resolve, caso contrario tem que abrir e fechar a query novamente
DmDados.IBQryAlunoTurma.Refresh;
//Se não funcionar descomente o código abaixo
{DmDados.IBQryAlunoTurma.Close;
DmDados.IBQryAlunoTurma.Open;}
if rbAutomatica.Checked then
begin
I := 1;
DmDados.IBQryAlunoTurma.First;
while not DmDados.IBQryAlunoTurma.Eof do
begin
DmDados.IBQryAlunoTurma.Edit;
DmDados.IBQryAlunoTurma.FieldByName('numero').AsInteger := I;
Dmdados.IBQryAlunoTurma.Post;
DmDados.IBQryAlunoTurma.Next;
Inc(I);
end;
end
else
if rbManual.Checked then
begin
Qry := TIBQuery.Create(nil); {: cria uma instância do objeto}
try
Qry.Database := DmDados.IBDatabase;
Qry.SQL.Add('SELECT MAX(numero)+1 FROM ALUNOTURMA WHERE ESCOLA = :ESCOLA and codigo_turma=:turma order by NOME_ALUNO');
Qry.Params[0].AsString := DmDados.IBQryAlunoTurmaESCOLA.AsString; // que Guarda a escola
Qry.Params[1].AsInteger := DmDados.IBQryAlunoTurmaCODIGO_TURMA.AsInteger; // que Guarda o codigo da turma;
Qry.Open;
DmDados.IBQryAlunoTurma.Edit;
DmDados.IBQryAlunoTurma.FieldByName('numero').AsInteger := Qry.Fields[0].AsInteger;
Dmdados.IBQryAlunoTurma.Post;
finally
FreeAndNil(Qry); { libera o objeto da memória}
end;
end;
PcAluno.ActivePageIndex := 0;
end;
GOSTEI 0
Osmar
30/09/2010
Eriley,
Olha só funcionou descomentado conforme sua orientação, só que ao selecionar o rbManual ele trocou o numero 1, e o campo do numero do aluno que estava sendo inserido conforme seleção manual ele não conseguiu numerar.
procedure TFrmCadTurDisc.BtnSalvarAlunoClick(Sender: TObject);
var
I : Integer;
Qry : TIBQuery; begin
(*só irá cadastrar a Turma quando for inserção *)
If TForm(self).tag = 0 then
DmDados.IBQryAlunoTurmaESCOLA.AsString := sEscola; (* verifica se o edit Ano está vazio *)
If dbEdtMatricula.Text = '' then
begin
(* exibe uma mensagem de alerta para o usuário *)
ShowMessage('A Matrícula do Aluno deve ser Pesquisada!');
(* sai do bloco em execução ou seja pula os comandos abaixo *)
Exit;
end; DmDados.IBQryAlunoTurmaCODIGO_TURMA.Value := DmDados.IBQryTurmaCODIGO.Value;
DmDados.IBQryAlunoTurmaNOME_ALUNO.AsString := DmDados.IBQryAlunoNOME.AsString;
DmDados.IBQryAlunoTurmaMATRICULA_ALUNO.Value := DmDados.IBQryAlunoMATRICULA.Value; DmDados.IBQryAlunoTurma.Post; //Vamos ver se só o refresh resolve, caso contrario tem que abrir e fechar a query novamente
DmDados.IBQryAlunoTurma.Refresh;
//Se não funcionar descomente o código abaixo
DmDados.IBQryAlunoTurma.Close;
DmDados.IBQryAlunoTurma.Open;
if rbAutomatica.Checked then
begin
I := 1;
DmDados.IBQryAlunoTurma.First;
while not DmDados.IBQryAlunoTurma.Eof do
begin
DmDados.IBQryAlunoTurma.Edit;
DmDados.IBQryAlunoTurma.FieldByName('numero').AsInteger := I;
Dmdados.IBQryAlunoTurma.Post;
DmDados.IBQryAlunoTurma.Next;
Inc(I);
end;
end
else if rbManual.Checked then
begin
Qry := TIBQuery.Create(nil); {: cria uma instância do objeto}
try
Qry.Database := DmDados.IBDatabase;
Qry.SQL.Add('SELECT MAX(numero)+1 FROM ALUNOTURMA WHERE ESCOLA = :ESCOLA and codigo_turma=:turma');
Qry.Params[0].AsString := DmDados.IBQryAlunoTurmaESCOLA.AsString; // que Guarda a escola
Qry.Params[1].AsInteger := DmDados.IBQryAlunoTurmaCODIGO_TURMA.AsInteger; // que Guarda o codigo da turma;
Qry.Open;
DmDados.IBQryAlunoTurma.Edit;
DmDados.IBQryAlunoTurma.FieldByName('numero').AsInteger := Qry.Fields[0].AsInteger;
Dmdados.IBQryAlunoTurma.Post;
finally
FreeAndNil(Qry); { libera o objeto da memória}
end;
end; BtnNovoAluno.Enabled := not BtnNovoAluno.Enabled;
BtnSalvarAluno.Enabled := not BtnSalvarAluno.Enabled;
BtnCancelarAluno.Enabled := not BtnCancelarAluno.Enabled;
BtnExcluirAluno.Enabled := not BtnExcluirAluno.Enabled;
Panel10.Enabled := false;
Panel12.Enabled := false;
dbgAluno.Enabled := true;
dbEdtMatricula.Enabled := true;
dbEdtAluno.Enabled := true; dbEdtMatricula.Clear;
dbEdtAluno.Clear; (* fecha a Query - após gravaçao o DBGRID fica atualizado*)
DmDados.IBQryAlunoTurma.Close;
(* Reabre a Query - após gravaçao o DBGRID fica atualizado*)
DmDados.IBQryAlunoTurma.Open; PcAluno.ActivePageIndex := 0; end;
var
I : Integer;
Qry : TIBQuery; begin
(*só irá cadastrar a Turma quando for inserção *)
If TForm(self).tag = 0 then
DmDados.IBQryAlunoTurmaESCOLA.AsString := sEscola; (* verifica se o edit Ano está vazio *)
If dbEdtMatricula.Text = '' then
begin
(* exibe uma mensagem de alerta para o usuário *)
ShowMessage('A Matrícula do Aluno deve ser Pesquisada!');
(* sai do bloco em execução ou seja pula os comandos abaixo *)
Exit;
end; DmDados.IBQryAlunoTurmaCODIGO_TURMA.Value := DmDados.IBQryTurmaCODIGO.Value;
DmDados.IBQryAlunoTurmaNOME_ALUNO.AsString := DmDados.IBQryAlunoNOME.AsString;
DmDados.IBQryAlunoTurmaMATRICULA_ALUNO.Value := DmDados.IBQryAlunoMATRICULA.Value; DmDados.IBQryAlunoTurma.Post; //Vamos ver se só o refresh resolve, caso contrario tem que abrir e fechar a query novamente
DmDados.IBQryAlunoTurma.Refresh;
//Se não funcionar descomente o código abaixo
DmDados.IBQryAlunoTurma.Close;
DmDados.IBQryAlunoTurma.Open;
if rbAutomatica.Checked then
begin
I := 1;
DmDados.IBQryAlunoTurma.First;
while not DmDados.IBQryAlunoTurma.Eof do
begin
DmDados.IBQryAlunoTurma.Edit;
DmDados.IBQryAlunoTurma.FieldByName('numero').AsInteger := I;
Dmdados.IBQryAlunoTurma.Post;
DmDados.IBQryAlunoTurma.Next;
Inc(I);
end;
end
else if rbManual.Checked then
begin
Qry := TIBQuery.Create(nil); {: cria uma instância do objeto}
try
Qry.Database := DmDados.IBDatabase;
Qry.SQL.Add('SELECT MAX(numero)+1 FROM ALUNOTURMA WHERE ESCOLA = :ESCOLA and codigo_turma=:turma');
Qry.Params[0].AsString := DmDados.IBQryAlunoTurmaESCOLA.AsString; // que Guarda a escola
Qry.Params[1].AsInteger := DmDados.IBQryAlunoTurmaCODIGO_TURMA.AsInteger; // que Guarda o codigo da turma;
Qry.Open;
DmDados.IBQryAlunoTurma.Edit;
DmDados.IBQryAlunoTurma.FieldByName('numero').AsInteger := Qry.Fields[0].AsInteger;
Dmdados.IBQryAlunoTurma.Post;
finally
FreeAndNil(Qry); { libera o objeto da memória}
end;
end; BtnNovoAluno.Enabled := not BtnNovoAluno.Enabled;
BtnSalvarAluno.Enabled := not BtnSalvarAluno.Enabled;
BtnCancelarAluno.Enabled := not BtnCancelarAluno.Enabled;
BtnExcluirAluno.Enabled := not BtnExcluirAluno.Enabled;
Panel10.Enabled := false;
Panel12.Enabled := false;
dbgAluno.Enabled := true;
dbEdtMatricula.Enabled := true;
dbEdtAluno.Enabled := true; dbEdtMatricula.Clear;
dbEdtAluno.Clear; (* fecha a Query - após gravaçao o DBGRID fica atualizado*)
DmDados.IBQryAlunoTurma.Close;
(* Reabre a Query - após gravaçao o DBGRID fica atualizado*)
DmDados.IBQryAlunoTurma.Open; PcAluno.ActivePageIndex := 0; end;
GOSTEI 0
Eriley Barbosa
30/09/2010
Conforme seu código:
else
if rbManual.Checked then
begin
Qry := TIBQuery.Create(nil); {: cria uma instância do objeto}
try
Qry.Database := DmDados.IBDatabase;
Qry.SQL.Add('SELECT MAX(numero)+1 FROM ALUNOTURMA WHERE ESCOLA = :ESCOLA and codigo_turma=:turma');
Qry.Params[0].AsString := DmDados.IBQryAlunoTurmaESCOLA.AsString; // que Guarda a escola
Qry.Params[1].AsInteger := DmDados.IBQryAlunoTurmaCODIGO_TURMA.AsInteger; // que Guarda o codigo da turma;
Qry.Open;
DmDados.IBQryAlunoTurma.Edit;
DmDados.IBQryAlunoTurma.FieldByName('numero').AsInteger := Qry.Fields[0].AsInteger;
Dmdados.IBQryAlunoTurma.Post;
finally
FreeAndNil(Qry); { libera o objeto da memória}
end; Quando a inserção é manual ele edita o aluno que esta na tela: DmDados.IBQryAlunoTurma.Edit;
Atribui a nova numeração: DmDados.IBQryAlunoTurma.FieldByName('numero').AsInteger := Qry.Fields[0].AsInteger;
E salva: Dmdados.IBQryAlunoTurma.Post;
Para que retorne 1 no campo número o select abaixo tem que estar vindo vazio: Qry := TIBQuery.Create(nil); {: cria uma instância do objeto}
try
Qry.Database := DmDados.IBDatabase;
Qry.SQL.Add('SELECT MAX(numero)+1 FROM ALUNOTURMA WHERE ESCOLA = :ESCOLA and codigo_turma=:turma');
Qry.Params[0].AsString := DmDados.IBQryAlunoTurmaESCOLA.AsString; // que Guarda a escola
Qry.Params[1].AsInteger := DmDados.IBQryAlunoTurmaCODIGO_TURMA.AsInteger; // que Guarda o codigo da turma;
Qry.Open;
Se vem vazio e ele soma mais 1, logo numero vai ser igual a 1. Lembrando que o código apenas edita o aluno que esta na tela ele não insere um aluno novo, o aluno tem que estar inserido previamente, para ter o campo numero atribuido um novo valor, portanto o código está correto, você precisa rever sua lógica.
begin
Qry := TIBQuery.Create(nil); {: cria uma instância do objeto}
try
Qry.Database := DmDados.IBDatabase;
Qry.SQL.Add('SELECT MAX(numero)+1 FROM ALUNOTURMA WHERE ESCOLA = :ESCOLA and codigo_turma=:turma');
Qry.Params[0].AsString := DmDados.IBQryAlunoTurmaESCOLA.AsString; // que Guarda a escola
Qry.Params[1].AsInteger := DmDados.IBQryAlunoTurmaCODIGO_TURMA.AsInteger; // que Guarda o codigo da turma;
Qry.Open;
DmDados.IBQryAlunoTurma.Edit;
DmDados.IBQryAlunoTurma.FieldByName('numero').AsInteger := Qry.Fields[0].AsInteger;
Dmdados.IBQryAlunoTurma.Post;
finally
FreeAndNil(Qry); { libera o objeto da memória}
end; Quando a inserção é manual ele edita o aluno que esta na tela: DmDados.IBQryAlunoTurma.Edit;
Atribui a nova numeração: DmDados.IBQryAlunoTurma.FieldByName('numero').AsInteger := Qry.Fields[0].AsInteger;
E salva: Dmdados.IBQryAlunoTurma.Post;
Para que retorne 1 no campo número o select abaixo tem que estar vindo vazio: Qry := TIBQuery.Create(nil); {: cria uma instância do objeto}
try
Qry.Database := DmDados.IBDatabase;
Qry.SQL.Add('SELECT MAX(numero)+1 FROM ALUNOTURMA WHERE ESCOLA = :ESCOLA and codigo_turma=:turma');
Qry.Params[0].AsString := DmDados.IBQryAlunoTurmaESCOLA.AsString; // que Guarda a escola
Qry.Params[1].AsInteger := DmDados.IBQryAlunoTurmaCODIGO_TURMA.AsInteger; // que Guarda o codigo da turma;
Qry.Open;
Se vem vazio e ele soma mais 1, logo numero vai ser igual a 1. Lembrando que o código apenas edita o aluno que esta na tela ele não insere um aluno novo, o aluno tem que estar inserido previamente, para ter o campo numero atribuido um novo valor, portanto o código está correto, você precisa rever sua lógica.
GOSTEI 0
Osmar
30/09/2010
Eriley,
Agora está FUNCIONADO PERFEITAMENTE, quero mais uma vez agradecer a você e todos os outros que ajudaram, veja abaixo como ficou:
procedure TFrmCadTurDisc.BtnSalvarAlunoClick(Sender: TObject);
var
I : Integer;
Qry : TIBQuery;
matricula_aluno : string; begin
(*só irá cadastrar a Turma quando for inserção *)
If TForm(self).tag = 0 then
DmDados.IBQryAlunoTurmaESCOLA.AsString := sEscola; (* verifica se o edit Ano está vazio *)
If dbEdtMatricula.Text = '' then
begin
(* exibe uma mensagem de alerta para o usuário *)
ShowMessage('A Matrícula do Aluno deve ser Pesquisada!');
(* sai do bloco em execução ou seja pula os comandos abaixo *)
Exit;
end; DmDados.IBQryAlunoTurmaCODIGO_TURMA.Value := DmDados.IBQryTurmaCODIGO.Value;
DmDados.IBQryAlunoTurmaNOME_ALUNO.AsString := DmDados.IBQryAlunoNOME.AsString;
DmDados.IBQryAlunoTurmaMATRICULA_ALUNO.Value := DmDados.IBQryAlunoMATRICULA.Value; DmDados.IBQryAlunoTurma.Post; Matricula_Aluno := DmDados.IBQryAlunoTurmaMATRICULA_ALUNO.AsString; DmDados.IBQryAlunoTurma.Refresh;
DmDados.IBQryAlunoTurma.Close;
DmDados.IBQryAlunoTurma.Open; if rbAutomatica.Checked then
begin
I := 1;
DmDados.IBQryAlunoTurma.First;
while not DmDados.IBQryAlunoTurma.Eof do
begin
DmDados.IBQryAlunoTurma.Edit;
DmDados.IBQryAlunoTurma.FieldByName('numero').AsInteger := I;
Dmdados.IBQryAlunoTurma.Post;
DmDados.IBQryAlunoTurma.Next;
Inc(I);
end;
end
else if rbManual.Checked then
begin
DmDados.IBQryAlunoTurma.Locate('MATRICULA_ALUNO',Matricula_Aluno,[loPartialKey]);
Qry := TIBQuery.Create(nil);
try
Qry.Database := DmDados.IBDatabase;
Qry.SQL.Add('SELECT MAX(numero)+1 as numero FROM ALUNOTURMA WHERE ESCOLA = :ESCOLA and codigo_turma=:turma');
Qry.ParamByname('ESCOLA').AsInteger := DmDados.IBQryAlunoTurmaESCOLA.AsInteger;
Qry.ParamByName('turma').AsInteger := DmDados.IBQryAlunoTurmaCODIGO_TURMA.AsInteger;
Qry.Open;
DmDados.IBQryAlunoTurma.Edit;
DmDados.IBQryAlunoTurma.FieldByName('numero').AsInteger := Qry.FieldByname('numero').AsInteger;
Dmdados.IBQryAlunoTurma.Post;
finally
FreeAndNil(Qry);
end;
end; DmDados.IBQryAlunoTurma.Close;
DmDados.IBQryAlunoTurma.Open; PcAluno.ActivePageIndex := 0; end;
var
I : Integer;
Qry : TIBQuery;
matricula_aluno : string; begin
(*só irá cadastrar a Turma quando for inserção *)
If TForm(self).tag = 0 then
DmDados.IBQryAlunoTurmaESCOLA.AsString := sEscola; (* verifica se o edit Ano está vazio *)
If dbEdtMatricula.Text = '' then
begin
(* exibe uma mensagem de alerta para o usuário *)
ShowMessage('A Matrícula do Aluno deve ser Pesquisada!');
(* sai do bloco em execução ou seja pula os comandos abaixo *)
Exit;
end; DmDados.IBQryAlunoTurmaCODIGO_TURMA.Value := DmDados.IBQryTurmaCODIGO.Value;
DmDados.IBQryAlunoTurmaNOME_ALUNO.AsString := DmDados.IBQryAlunoNOME.AsString;
DmDados.IBQryAlunoTurmaMATRICULA_ALUNO.Value := DmDados.IBQryAlunoMATRICULA.Value; DmDados.IBQryAlunoTurma.Post; Matricula_Aluno := DmDados.IBQryAlunoTurmaMATRICULA_ALUNO.AsString; DmDados.IBQryAlunoTurma.Refresh;
DmDados.IBQryAlunoTurma.Close;
DmDados.IBQryAlunoTurma.Open; if rbAutomatica.Checked then
begin
I := 1;
DmDados.IBQryAlunoTurma.First;
while not DmDados.IBQryAlunoTurma.Eof do
begin
DmDados.IBQryAlunoTurma.Edit;
DmDados.IBQryAlunoTurma.FieldByName('numero').AsInteger := I;
Dmdados.IBQryAlunoTurma.Post;
DmDados.IBQryAlunoTurma.Next;
Inc(I);
end;
end
else if rbManual.Checked then
begin
DmDados.IBQryAlunoTurma.Locate('MATRICULA_ALUNO',Matricula_Aluno,[loPartialKey]);
Qry := TIBQuery.Create(nil);
try
Qry.Database := DmDados.IBDatabase;
Qry.SQL.Add('SELECT MAX(numero)+1 as numero FROM ALUNOTURMA WHERE ESCOLA = :ESCOLA and codigo_turma=:turma');
Qry.ParamByname('ESCOLA').AsInteger := DmDados.IBQryAlunoTurmaESCOLA.AsInteger;
Qry.ParamByName('turma').AsInteger := DmDados.IBQryAlunoTurmaCODIGO_TURMA.AsInteger;
Qry.Open;
DmDados.IBQryAlunoTurma.Edit;
DmDados.IBQryAlunoTurma.FieldByName('numero').AsInteger := Qry.FieldByname('numero').AsInteger;
Dmdados.IBQryAlunoTurma.Post;
finally
FreeAndNil(Qry);
end;
end; DmDados.IBQryAlunoTurma.Close;
DmDados.IBQryAlunoTurma.Open; PcAluno.ActivePageIndex := 0; end;
GOSTEI 0
Eriley Barbosa
30/09/2010
A linha abaixo é desnecessaria:
DmDados.IBQryAlunoTurma.Refresh;
Pois, se faz close e open não precisa refresh:
DmDados.IBQryAlunoTurma.Close;
DmDados.IBQryAlunoTurma.Open; Logo seu código pode ficar assim: procedure TFrmCadTurDisc.BtnSalvarAlunoClick(Sender: TObject);
var
I : Integer;
Qry : TIBQuery;
matricula_aluno : string; begin
(*só irá cadastrar a Turma quando for inserção *)
If TForm(self).tag = 0 then
DmDados.IBQryAlunoTurmaESCOLA.AsString := sEscola; (* verifica se o edit Ano está vazio *)
If dbEdtMatricula.Text = '' then
begin
(* exibe uma mensagem de alerta para o usuário *)
ShowMessage('A Matrícula do Aluno deve ser Pesquisada!');
(* sai do bloco em execução ou seja pula os comandos abaixo *)
Exit;
end; DmDados.IBQryAlunoTurmaCODIGO_TURMA.Value := DmDados.IBQryTurmaCODIGO.Value;
DmDados.IBQryAlunoTurmaNOME_ALUNO.AsString := DmDados.IBQryAlunoNOME.AsString;
DmDados.IBQryAlunoTurmaMATRICULA_ALUNO.Value := DmDados.IBQryAlunoMATRICULA.Value; DmDados.IBQryAlunoTurma.Post; Matricula_Aluno := DmDados.IBQryAlunoTurmaMATRICULA_ALUNO.AsString; DmDados.IBQryAlunoTurma.Close;
DmDados.IBQryAlunoTurma.Open; if rbAutomatica.Checked then
begin
I := 1;
DmDados.IBQryAlunoTurma.First;
while not DmDados.IBQryAlunoTurma.Eof do
begin
DmDados.IBQryAlunoTurma.Edit;
DmDados.IBQryAlunoTurma.FieldByName('numero').AsInteger := I;
Dmdados.IBQryAlunoTurma.Post;
DmDados.IBQryAlunoTurma.Next;
Inc(I);
end;
end
else if rbManual.Checked then
begin
DmDados.IBQryAlunoTurma.Locate('MATRICULA_ALUNO',Matricula_Aluno,[loPartialKey]);
Qry := TIBQuery.Create(nil);
try
Qry.Database := DmDados.IBDatabase;
Qry.SQL.Add('SELECT MAX(numero)+1 as numero FROM ALUNOTURMA WHERE ESCOLA = :ESCOLA and codigo_turma=:turma');
Qry.ParamByname('ESCOLA').AsInteger := DmDados.IBQryAlunoTurmaESCOLA.AsInteger;
Qry.ParamByName('turma').AsInteger := DmDados.IBQryAlunoTurmaCODIGO_TURMA.AsInteger;
Qry.Open;
DmDados.IBQryAlunoTurma.Edit;
DmDados.IBQryAlunoTurma.FieldByName('numero').AsInteger := Qry.FieldByname('numero').AsInteger;
Dmdados.IBQryAlunoTurma.Post;
finally
FreeAndNil(Qry);
end;
end; DmDados.IBQryAlunoTurma.Close;
DmDados.IBQryAlunoTurma.Open; PcAluno.ActivePageIndex := 0; end;
DmDados.IBQryAlunoTurma.Open; Logo seu código pode ficar assim: procedure TFrmCadTurDisc.BtnSalvarAlunoClick(Sender: TObject);
var
I : Integer;
Qry : TIBQuery;
matricula_aluno : string; begin
(*só irá cadastrar a Turma quando for inserção *)
If TForm(self).tag = 0 then
DmDados.IBQryAlunoTurmaESCOLA.AsString := sEscola; (* verifica se o edit Ano está vazio *)
If dbEdtMatricula.Text = '' then
begin
(* exibe uma mensagem de alerta para o usuário *)
ShowMessage('A Matrícula do Aluno deve ser Pesquisada!');
(* sai do bloco em execução ou seja pula os comandos abaixo *)
Exit;
end; DmDados.IBQryAlunoTurmaCODIGO_TURMA.Value := DmDados.IBQryTurmaCODIGO.Value;
DmDados.IBQryAlunoTurmaNOME_ALUNO.AsString := DmDados.IBQryAlunoNOME.AsString;
DmDados.IBQryAlunoTurmaMATRICULA_ALUNO.Value := DmDados.IBQryAlunoMATRICULA.Value; DmDados.IBQryAlunoTurma.Post; Matricula_Aluno := DmDados.IBQryAlunoTurmaMATRICULA_ALUNO.AsString; DmDados.IBQryAlunoTurma.Close;
DmDados.IBQryAlunoTurma.Open; if rbAutomatica.Checked then
begin
I := 1;
DmDados.IBQryAlunoTurma.First;
while not DmDados.IBQryAlunoTurma.Eof do
begin
DmDados.IBQryAlunoTurma.Edit;
DmDados.IBQryAlunoTurma.FieldByName('numero').AsInteger := I;
Dmdados.IBQryAlunoTurma.Post;
DmDados.IBQryAlunoTurma.Next;
Inc(I);
end;
end
else if rbManual.Checked then
begin
DmDados.IBQryAlunoTurma.Locate('MATRICULA_ALUNO',Matricula_Aluno,[loPartialKey]);
Qry := TIBQuery.Create(nil);
try
Qry.Database := DmDados.IBDatabase;
Qry.SQL.Add('SELECT MAX(numero)+1 as numero FROM ALUNOTURMA WHERE ESCOLA = :ESCOLA and codigo_turma=:turma');
Qry.ParamByname('ESCOLA').AsInteger := DmDados.IBQryAlunoTurmaESCOLA.AsInteger;
Qry.ParamByName('turma').AsInteger := DmDados.IBQryAlunoTurmaCODIGO_TURMA.AsInteger;
Qry.Open;
DmDados.IBQryAlunoTurma.Edit;
DmDados.IBQryAlunoTurma.FieldByName('numero').AsInteger := Qry.FieldByname('numero').AsInteger;
Dmdados.IBQryAlunoTurma.Post;
finally
FreeAndNil(Qry);
end;
end; DmDados.IBQryAlunoTurma.Close;
DmDados.IBQryAlunoTurma.Open; PcAluno.ActivePageIndex := 0; end;
GOSTEI 0
Osmar
30/09/2010
Agradeço a todos o problema já foi resolvido.
Osmar.
GOSTEI 0