Ir para conteúdo
Fórum Script Brasil
  • 0

Problemas Com Query (RESOLVIDO)


Alessandro

Pergunta

Tenho o seguinte problema :

Eu executo meu programa e consigo efetuar um INSERT no banco normalmente, mas se caso eu quiser inserir outro automaticamente aparece a seguinte mensagem:

QueryControle: CommandText does not return a result set.

Mas os dados são gravados no banco de dados....

Já tentei de tudo.....mas não obtive sucesso.....

Eu estou ativando a conexão no OnCreate do dataModule.

Será que alguém pode me ajudar ???

Este é o código:

Resunindo eu verifico se existe o usuário e logo em seguida verifico se ele está voltando ou indo almoçar.....trata-se de um controle de almoço......

procedure TfmPrincipal.btnokClick(Sender: TObject);
var v_chapa, v_senha : String;
var v_data, v_hora : TdateTime;
begin

 v_chapa := Edit1.Text;
 v_senha := Edit2.Text;
 v_data := strtodate(FormatDateTime('dd/mm/yyyy',Data));
 v_hora := strtotime(FormatDateTime('hh:mm:ss',Data));

 if ((Edit1.Text = '') or (Edit2.Text = '')) then
  begin
    Messagedlg('Digite a chapa e senha.'+#13#13+'>>Caso não esteja cadastrado consulte seu supervisor.',mtInformation,[mbOK],0);
    Edit2.setFocus;
    abort;
  end;

  if not (DM.QueryUsuario.Active = true) then
  begin
    DM.QueryUsuario.Active := true
  end;

  if not (DM.QueryControle.Active = true) then
  begin
    DM.QueryControle.Active := true;
  end;

  if DM.QueryUsuario.Locate('Chapa;Senha', VarArrayOf ([v_chapa, v_senha]), []) then
  begin
    if not DM.QueryControle.Locate('Data;Chapa', VarArrayof ([v_data, v_chapa]),[]) then
    begin

      Messagedlg('Você está saindo.Grava os dados em saída',mtInformation,[mbOK],0);
      DM.QueryControle.Close;
      DM.QueryControle.SQL.Clear;
      DM.QueryControle.SQL.Add('INSERT INTO Controle (Data, Chapa, HoraSaida) VALUES (:data,:chapa,:saida)');
      DM.QueryControle.Parameters.ParamByName('data').Value:= v_data;
      DM.QueryControle.Parameters.ParamByName('chapa').Value:= v_chapa;
      DM.QueryControle.Parameters.ParamByName('saida').Value:= v_hora;
      DM.QueryControle.ExecSQL;

      Edit1.Clear;
      Edit2.Clear;
      Edit1.SetFocus;

    end
    else begin
      if DM.QueryControleHoraVolta.IsNull then
      begin

        Messagedlg('Você está voltando. Grava os dados em Volta',mtInformation,[mbOK],0);
        DM.QueryControle.Close;
        DM.QueryControle.SQL.Clear;
        DM.QueryControle.SQL.Add('UPDATE Controle SET HoraVolta = :volta WHERE Data = :data AND Chapa = :chapa');
        DM.QueryControle.Parameters.ParamByName('data').Value:= v_data;
        DM.QueryControle.Parameters.ParamByName('chapa').Value:= v_chapa;
        DM.QueryControle.Parameters.ParamByName('volta').Value:= v_hora;
        DM.QueryControle.ExecSQL;

        Edit1.Clear;
        Edit2.Clear;
        Edit1.SetFocus;

      end
      else begin
        Messagedlg('Você já excedeu o número de batidas hoje.',mtInformation,[mbOK],0);
        abort;
      end;
    end;
  end
  else begin
    Messagedlg('O Chapa ou Senha inválido!',mtError,[mbOK],0);
    Edit2.Clear;
    Edit2.SetFocus;
    abort;
  end
end;

Obrigado..... smile.gif

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

Então cara....eu consigo efetuar um INSERT ou um UPDATE como está aí no código....mas eu não entendo o porque do erro....

Tente imaginar o seguinte : ( como se fosse um sistema de ponto)

>>Eu crio o executável e digito a chapa e senha para sair para o almoço por exemplo>>o sistema verifica no banco e efetua o procedimento sem dar nenhum erro jogando o horário de saida na coluna Hora Saida...

>>Se caso eu quiser digitar minha chapa e senha novamente para voltar do almoço sem fechar o executável, o sistema exibe a mensagem de erro mas salva o horário na coluna HoraVolta.....

Detalhe>>Ele não está entendendo que eu quero efetuar varios procedimentos no banco.......está sendo necessário efetuar um procedimento e fechar o executável>>depois abrir novamente e efetuar outro....aí sim ele não dá erro.....

O que eu quero dizer com automaticamente é efetuar varias vezes as saídas ou voltas sem precisar fechar o executável......mas isto não está sendo possível......dá este erro......

PS. Lembrando que ele salva os dados com sucesso no banco...... wink.gif

Link para o comentário
Compartilhar em outros sites

  • 0

Deixa eu ver se entendi.....

No Datamodule eu irei criar outra Query e na propriedades SQL dela irei colocar SELECT * FROM Controle

Daí no Locate iria ficar assim:

DM.ADOQuery1.Locate('Data;Chapa', VarArrayof ([v_data, v_chapa]),[])

Estou certo ???

O resto fica como está ???? wink.gif

Link para o comentário
Compartilhar em outros sites

  • 0
Deixa eu ver se entendi.....

No Datamodule eu irei criar outra Query e na propriedades SQL dela irei colocar SELECT * FROM Controle

Daí no Locate iria ficar assim:

DM.ADOQuery1.Locate('Data;Chapa', VarArrayof ([v_data, v_chapa]),[])

Estou certo ???

O resto fica como está ???? wink.gif

Certo!

faça o teste ae, depois posta aki, falou!!!

Abs. Progr'amador.

Link para o comentário
Compartilhar em outros sites

  • 0

Putz cara, antes de ficar atordoando você eu fui dar uma pesquisada na net....mas era isso mesmo, fiz uma outra query só para locate e usei a que já estava criada para Insert e/ou Update...

Tive que mudar um pouquinho a lógica, mais uma vez obrigado Programador.....farô cara.....

PS. O erro era porque a conexão ficava ativa..... biggrin.gif

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...