select parcialmente com erro.

Delphi

13/11/2010

Amigos,           O codigo abaixo esta funcionando parcialmente, ou seja, salvo normalmente a disciplina na turma, mas ao tentar salvar a mesma disciplina em outra turma acontece o erro, vem a mensagem informando que a disciplina já está cadastrada:   with DmDados.IBQrylivre2 do
    begin
      Close;
      SQL.Clear;
      SQL.ADD('SELECT CODIGO From DISCIPLINA Where Nome_disciplina = :Dados');
      ParamByName('dados').asString:= dbEdtDisciplina.Text;
      Open;
    if (not isempty) then
     begin
      if (FieldByName('CODIGO').AsString <> IBQryDisciplinaCODIGO.AsString) then
        begin
          Application.MessageBox('Disciplina já cadastrada! verifique e tente novamente', 'Atenção', mb_iconinformation + mb_ok);
            begin
              BtnCancelarDisciplina.Click;
              exit;
            end;
         end;
     end;
    end;    DmDados.IBQryDisciplina.Post; ----------------------------------------------------- estes são os campos da tabela disciplina: ID_CODIGO
NOME_DISCIPLINA
CODIGO_TURMA
ESCOLA (chave estrangeira)
Agradeço antecipadamente a atenção. Osmar.
 
Osmar

Osmar

Curtidas 0

Respostas

Flavia Santos

Flavia Santos

13/11/2010

Amigos,           O codigo abaixo esta funcionando parcialmente, ou seja, salvo normalmente a disciplina na turma, mas ao tentar salvar a mesma disciplina em outra turma acontece o erro, vem a mensagem informando que a disciplina já está cadastrada:   with DmDados.IBQrylivre2 do
    begin
      Close;
      SQL.Clear;
      SQL.ADD('SELECT CODIGO From DISCIPLINA Where Nome_disciplina = :Dados');
      ParamByName('dados').asString:= dbEdtDisciplina.Text;
      Open;
    if (not isempty) then
     begin
      if (FieldByName('CODIGO').AsString <> IBQryDisciplinaCODIGO.AsString) then
        begin
          Application.MessageBox('Disciplina já cadastrada! verifique e tente novamente', 'Atenção', mb_iconinformation + mb_ok);
            begin
              BtnCancelarDisciplina.Click;
              exit;
            end;
         end;
     end;
    end;    DmDados.IBQryDisciplina.Post; ----------------------------------------------------- estes são os campos da tabela disciplina: ID_CODIGO
NOME_DISCIPLINA
CODIGO_TURMA
ESCOLA (chave estrangeira)
Agradeço antecipadamente a atenção. Osmar.
 


Amigo,

Nesta linha SQL.ADD('SELECT CODIGO From DISCIPLINA Where Nome_disciplina = :Dados');
      ParamByName('dados').asString:= dbEdtDisciplina.Text; seu select está procurando a disciplina cadastrada independente da turma.

Acho que o select ficaria melhor assim:

SQL>ADD('Select CODIGO from DISCIPLINA  where Nome_Disciplina = :Dados and Turma = :Turma');
ParamByName('Dados').asString := dbEdtDisciplina.Text;
ParamByName('Turma').asString := dbEdtTurma.Text;


GOSTEI 0
Osmar

Osmar

13/11/2010

Flávia,          Agradeço pela dica, com mais algumas modificações consegui resolver o problema, veja como ficou:         with DmDados.IBQrylivre2 do
    begin
      Close;
      SQL.Clear;
      SQL.ADD('Select CODIGO from DISCIPLINA  where Nome_Disciplina = :Dados and codigo_Turma = :turma');
      ParamByName('dados').asString:= dbEdtDisciplina.Text;
      ParamByName('turma').AsInteger  := DmDados.IBQryDisciplinaCODIGO_TURMA.AsInteger;
      Open;
    if (not isempty) then
     begin
      if (FieldByName('CODIGO').AsString <> IBQryDisciplinaCODIGO.AsString) then
        begin
          Application.MessageBox('Disciplina já cadastrada! verifique e tente novamente', 'Atenção', mb_iconinformation + mb_ok);
            begin
              BtnCancelarDisciplina.Click;
              exit;
            end;
         end;
     end;
    end;    DmDados.IBQryDisciplina.Post;
      1 - (adapitei esta linha porque não tenho o edit turma no form)  ParamByName('turma').AsInteger  := DmDados.IBQryDisciplinaCODIGO_TURMA.AsInteger;
2 - (observe que mudei no final do select TURMA por NOME_DISCIPLINA  SQL.ADD('Select CODIGO from DISCIPLINA  where Nome_Disciplina = :Dados and codigo_Turma = :turma');
            Mais uma vez agradeço a atenção, pois mim ajutou bastante para resolver o problema.     Osmar.
GOSTEI 0
Osmar

Osmar

13/11/2010

Flávia,          Agradeço pela dica, com mais algumas modificações consegui resolver o problema, veja como ficou:         with DmDados.IBQrylivre2 do
    begin
      Close;
      SQL.Clear;
      SQL.ADD('Select CODIGO from DISCIPLINA  where Nome_Disciplina = :Dados and codigo_Turma = :turma');
      ParamByName('dados').asString:= dbEdtDisciplina.Text;
      ParamByName('turma').AsInteger  := DmDados.IBQryDisciplinaCODIGO_TURMA.AsInteger;
      Open;
    if (not isempty) then
     begin
      if (FieldByName('CODIGO').AsString <> IBQryDisciplinaCODIGO.AsString) then
        begin
          Application.MessageBox('Disciplina já cadastrada! verifique e tente novamente', 'Atenção', mb_iconinformation + mb_ok);
            begin
              BtnCancelarDisciplina.Click;
              exit;
            end;
         end;
     end;
    end;    DmDados.IBQryDisciplina.Post;
      1 - (adapitei esta linha porque não tenho o edit turma no form)  ParamByName('turma').AsInteger  := DmDados.IBQryDisciplinaCODIGO_TURMA.AsInteger;
2 - (observe que mudei no final do select TURMA por NOME_DISCIPLINA  SQL.ADD('Select CODIGO from DISCIPLINA  where Nome_Disciplina = :Dados and codigo_Turma = :turma');
            Mais uma vez agradeço a atenção, pois mim ajudou bastante a resolver o problema.     Osmar.
GOSTEI 0
POSTAR