Como fazer esse Update?

Delphi

07/09/2020

Bom dia, como proceder para fazer esse update:

Tenho 2 combobox: No primeiro combobox supondo que o usuário selecione (1º BIMESTRE') e no segundo Combobox selecione (Prova 1ª Nota), lembrando que no segundo combobox ele tem a opção de escolher até 10 campos. Quero da um update no CAMPO 1ª NOTA, inserindo 0 (zero) em todo campo.
begin
Close;
SQL.Clear;
SQL.ADD('Update Notas = WHERE ESCOLA = :ESCOLA and codigo_turma=:turma');
ParamByName('escola').AsInteger := IBQryAlunoTurmaESCOLA.AsInteger;
ParamByName('turma').AsInteger := IBQryAlunoTurmaCODIGO_TURMA.AsInteger;
ExecSQL;
DmDados.IBTransaction.CommitRetaining;
end;
Osmar

Osmar

Curtidas 0

Respostas

Emerson Nascimento

Emerson Nascimento

07/09/2020

sempre que possível, publique todas as informações referentes à dúvida: no caso, ao menos a estrutura da tabela.
faça algo assim:
var
	sInstrucaoSQL: string;
begin
//	'lembrando que no segundo combobox ele tem a opção de escolher até 10 campos'
//	escolher até 10 campos ou escolher 1 entre 10 campos ?

//	vou supor que a tabela tenha a seguinte estrutura:
//	escola  turma   aluno   bimestre  nota_1  nota_2  nota_3 ...

	sInstrucaoSQL := 'update NOTAS set nota_'+IntToStr(combobox_nota.ItemIndex+1)+' = 0 '+
					'where bimestre = :bimestre and escola = :escola and codigo_turma = :turma';
	Close;
	SQL.Text := sInstrucaoSQL;
	ParamByName('bimestre').AsInteger := combobox_bimestre.ItemIndex + 1;
	ParamByName('escola').AsInteger := IBQryAlunoTurmaESCOLA.AsInteger;
	ParamByName('turma').AsInteger := IBQryAlunoTurmaCODIGO_TURMA.AsInteger;
	ExecSQL;
	DmDados.IBTransaction.CommitRetaining;
end;
GOSTEI 0
Osmar

Osmar

07/09/2020

Emerson obrigado por responder, e desculpe-me por não ter sido mais claro, vou tentar ser mais claro porque dessa forma não funciona:

COMBOBOX CAMPO
Trabalho Individual 1ª Nota Trabalho_Individual_1
Trabalho Individual 2ª Nota Trabalho_Individual_2
Prova 1ª Nota Prova_1
Prova 2ª Nota Prova_2
Observação 1ª Nota Observacao_1
Observação 2ª Nota Observacao_2
Trabalho em Grupo 1ª Nota Trabalho_Grupo_1
Trabalho em Grupo 2ª Nota Trabalho_Grupo_2
Seminário 1ª Nota Seminario_1
Seminário 2ª Nota Seminario_2

O objetivo é o seguinte se o usuário selecionou no COMBOBOX a opção ( Prova 2ª Nota ), quero dar um update no campo Prova_2, inserindo zero em todos os alunos do campo. Espero que entenda.
GOSTEI 0
Osmar

Osmar

07/09/2020

Emerson obrigado por responder, e desculpe-me por não ter sido mais claro, vou tentar ser mais claro porque dessa forma não funciona:


COMBOBOX CAMPO
Trabalho Individual 1ª Nota Trabalho_Individual_1
Trabalho Individual 2ª Nota Trabalho_Individual_2
Prova 1ª Nota Prova_1
Prova 2ª Nota Prova_2
Observação 1ª Nota Observacao_1
Observação 2ª Nota Observacao_2
Trabalho em Grupo 1ª Nota Trabalho_Grupo_1
Trabalho em Grupo 2ª Nota Trabalho_Grupo_2
Seminário 1ª Nota Seminario_1
Seminário 2ª Nota Seminario_2


O objetivo é o seguinte se o usuário selecionou no COMBOBOX a opção ( Prova 2ª Nota ), quero dar um update no campo Prova_2, inserindo zero em todos os alunos do campo. Espero que entenda.
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

07/09/2020

seguindo o exemplo, seria assim:
var
    sInstrucaoSQL: string;
    sCampo: string;
begin
    case combobox_campo.ItemIndex of
        0: sCampo := 'Trabalho_Individual_1';
        1: sCampo := 'Trabalho_Individual_2';
        2: sCampo := 'Prova_1';
        3: sCampo := 'Prova_2';
        4: sCampo := 'Observacao_1';
        5: sCampo := 'Observacao_2';
        6: sCampo := 'Trabalho_Grupo_1';
        7: sCampo := 'Trabalho_Grupo_2';
        8: sCampo := 'Seminario_1';
    else
        sCampo := 'Seminario_2';
    end;

    sInstrucaoSQL := 'update NOTAS set '+sCampo+' = 0 '+
                    'where bimestre = :bimestre and escola = :escola and codigo_turma = :turma';
    with Dataset do
    begin
        Close;
        SQL.Text := sInstrucaoSQL;
        ParamByName('bimestre').AsInteger := combobox_bimestre.ItemIndex + 1; // aqui você precisa resolver como aponta para o bimestre correto
        ParamByName('escola').AsInteger := IBQryAlunoTurmaESCOLA.AsInteger;
        ParamByName('turma').AsInteger := IBQryAlunoTurmaCODIGO_TURMA.AsInteger;
        ExecSQL;
        DmDados.IBTransaction.CommitRetaining;
    end;
end;
GOSTEI 0
Osmar

Osmar

07/09/2020

Emersom muito obrigado pela dica, que Deus te abençoe e te proteja de todo mau, veja como ficou:

procedure TfrmCadNOTAS.btnDeleteRegClick(Sender: TObject);
var
sInstrucaoSQL, sCampo: string;
begin

case cmbInstrumento.ItemIndex of
0: sCampo := 'TRAB_INDIV_NOTA_1';
1: sCampo := 'TRAB_INDIV_NOTA_2';
2: sCampo := 'PROVA_NOTA_1';
3: sCampo := 'PROVA_NOTA_2';
4: sCampo := 'OBSERVACAO_NOTA_1';
5: sCampo := 'OBSERVACAO_NOTA_2';
6: sCampo := 'TRAB_GRUPO_NOTA_1';
7: sCampo := 'TRAB_GRUPO_NOTA_2';
8: sCampo := 'SEMINARIO_NOTA_1';
9: sCampo := 'SEMINARIO_NOTA_2';
10: sCampo := 'PAINEL_NOTA_1';
11: sCampo := 'PAINEL_NOTA_2';
12: sCampo := 'DEBATE_NOTA_1';
13: sCampo := 'DEBATE_NOTA_2';
14: sCampo := 'AUTOAVALIACA_NOTA_1';
15: sCampo := 'AUTOAVALIACA_NOTA_2';
16: sCampo := 'RECUPERACAO1';
17: sCampo := 'RECUPERACAO2';
18: sCampo := 'RECUPERACAO3';
19: sCampo := 'RECUPERACAO4';
20: sCampo := 'RECUPERACAO_FINAL';
21: sCampo := 'CHAMADA2_REGULAR'
else
sCampo := 'CHAMADA2_PERIODO';
end;

sInstrucaoSQL := ('update NOTAS set '+sCampo+' = 0 '+
'where codiemp = :pCODIEMP and CODIGO_TURMA_NOTAS = :pTURMA and ANO = :pANO and ' +
'DISCIPLINA_NOTAS = :pDISCIPLINA and bimestre = :pBIMESTRE');

with QryInsereNota do
begin
Close;
SQL.Text := sInstrucaoSQL;
QryInsereNota.Params.ParamByName('pCODIEMP').AsInteger := sqlSearchMaster.FieldByName('codiemp').AsInteger;
QryInsereNota.Params.ParamByName('pTURMA').AsInteger := QryALUNOTURMACODIGO_TURMA.asinteger;
QryInsereNota.Params.ParamByName('pANO').AsString := sqlSearchMaster.FieldByName('ano').ASString;
QryInsereNota.Params.ParamByName('pDISCIPLINA').AsInteger := sqlSearchMaster.FieldByName('codi_disciplina').AsInteger;
QryInsereNota.Params.ParamByName('pBIMESTRE').AsString := Bimestre;
ExecSQL;
end;

QryALUNOTURMA.Refresh;
end;
GOSTEI 0
POSTAR