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

Grid Ta Dando Erro Ao Clicar Célula


Rafael GAGA

Pergunta

Olá pessoal, eu to criando um cad pedido e nele tem um dbgrid onde se digita os itens do pedido, eu digito a ref e já cai o valor do produto, caract. etc em seus campos, so que quando clico em uma outra linha já digitada da erro dizendo que a tabela que ta ligada no grid não esta em modo de inserção ou edição.

Deve ser coisa simples mas não consigo achar o erro.

Eu uso bd Mysql e conexão zeos (zquery).

Obrigado...

Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0

Eu estava colocando os teste nos oncolexit do grid, so que estava executando em qualquer coluna, eu resolvi restringindo o teste a coluna de referencia, e executando os calculos somente quando a tabela estava em modo de ediçao ou inclusao. Esta funcionando tudo certo agora, se tiver alguma dúvida entre em contato rafael_gaga@hotmail.com, eu não sei muito, mas talvez posso ajudar.

Valeu,

Ah, da proxima eu posto a solução galera, é que eu me esqueci tongue.gif

Link para o comentário
Compartilhar em outros sites

  • 0

eu coloquei os testes para executarem somente quando a tabela estivesse em modo edit ou insert

procedure Tfrm_pedido.dbgItensColExit(Sender: TObject);
var verifVazio: string;
begin
// teste para ver qual coluna q esta saindo
If DBgItens.Selectedfield.FieldName='referencia_produto' then
begin
  // mensagem coluna atual
   showmessage('ativo');
   // coloca tabela grade na posicao da referencia escolhida
      with qgrade do
         begin
            Close;
            SQL.Clear;
            SQL.Add('SELECT * FROM grade WHERE descricao='+quotedstr(qproduto.FieldByName('grade').AsString));          Open;
         end;
   // teste modo tabela
      IF (qitens_pedido.State=dsEdit) OR (qitens_pedido.State=dsINSERT) THEN
      BEGIN
         verifVazio:= dbgItens.Fields[0].Text;
           if verifVazio='' then
            begin
               showmessage('Você deve preencher o campo Referência!');
               DBgItens.SelectedIndex:=0;
               abort;
            end;

         SHOWMESSAGE('SEGUNDO TESTE PASSOU');

      // atualizando campo preço total
         Qitens_pedido.FieldByName('valor_linha').Value:= QItens_pedidoP_total.Value;

      // teste tipo de pagamento
         if dbcCondicao.Text = 'A VISTA' THEN
           begin
              dbgitens.Fields[19].Text:=qproduto.fieldbyname('prcVista').Value;
              preco_unitario:=qproduto.fieldbyname('prcVista').Value;
              showmessage('vista');
           end;
         if dbcCondicao.Text = '30 DIAS' THEN
           begin
              dbgitens.Fields[19].Text:=qproduto.fieldbyname('prc30').Value;
              preco_unitario:=qproduto.fieldbyname('prc30').Value;
              showmessage('30');
             end;
         if dbcCondicao.Text = '60 DIAS' THEN
           begin
             dbgitens.Fields[19].Text:=qproduto.fieldbyname('prc60').Value;
             preco_unitario:=qproduto.fieldbyname('prc60').Value;
              showmessage('60');
             end;
      //habilitando grade
        if qgrade.FieldByName('n1').AsString= '0' then
           begin
              dbgitens.Fields[1].ReadOnly:= true;
              dbgitens.Fields[1].Text:='';
           end
        else
           begin
              dbgitens.Fields[1].ReadOnly:= false;
              dbgitens.Fields[1].Text:='';
           end;

        if qgrade.FieldByName('n2').AsString= '0'then
            begin
              dbgitens.Fields[2].ReadOnly:= true;
              dbgitens.Fields[2].Text:='';
           end
        else
           begin
              dbgitens.Fields[2].ReadOnly:= false;
              dbgitens.Fields[2].Text:='';
           end;

        if qgrade.FieldByName('n3').AsString= '0'then
          begin
              dbgitens.Fields[3].ReadOnly:= true;
              dbgitens.Fields[3].Text:='';
           end
        else
           begin
              dbgitens.Fields[3].ReadOnly:= false;
              dbgitens.Fields[3].Text:='';
           end;

        if qgrade.FieldByName('n4').AsString= '0' then
           begin
              dbgitens.Fields[4].ReadOnly:= true;
              dbgitens.Fields[4].Text:='';
           end
        else
           begin
              dbgitens.Fields[4].ReadOnly:= false;
              dbgitens.Fields[4].Text:='';
           end;

        if qgrade.FieldByName('n5').AsString= '0' then
           begin
              dbgitens.Fields[5].ReadOnly:= true;
              dbgitens.Fields[5].Text:='';
           end
        else
           begin
              dbgitens.Fields[5].ReadOnly:= false;
              dbgitens.Fields[5].Text:='';
           end;

        if qgrade.FieldByName('n34').AsString= '0' then
           begin
              dbgitens.Fields[6].ReadOnly:= true;
              dbgitens.Fields[6].Text:='';
           end
        else
           begin
              dbgitens.Fields[6].ReadOnly:= false;
              dbgitens.Fields[6].Text:='';
           end;

        if qgrade.FieldByName('n36').AsString= '0' then
            begin
              dbgitens.Fields[7].ReadOnly:= true;
              dbgitens.Fields[7].Text:='';
           end
        else
           begin
              dbgitens.Fields[7].ReadOnly:= false;
              dbgitens.Fields[7].Text:='';
           end;

        if qgrade.FieldByName('n38').AsString= '0' then
           begin
              dbgitens.Fields[8].ReadOnly:= true;
              dbgitens.Fields[8].Text:='';
           end
        else
           begin
              dbgitens.Fields[8].ReadOnly:= false;
              dbgitens.Fields[8].Text:='';
           end;

        if qgrade.FieldByName('n40').AsString= '0' then
           begin
              dbgitens.Fields[9].ReadOnly:= true;
              dbgitens.Fields[9].Text:='';
           end
        else
           begin
              dbgitens.Fields[9].ReadOnly:= false;
              dbgitens.Fields[9].Text:='';
           end;

        if qgrade.FieldByName('n42').AsString= '0' then
          begin
              dbgitens.Fields[10].ReadOnly:= true;
              dbgitens.Fields[10].Text:='';
           end
        else
           begin
              dbgitens.Fields[10].ReadOnly:= false;
              dbgitens.Fields[10].Text:='';
           end;

        if qgrade.FieldByName('n44').AsString= '0' then
           begin
              dbgitens.Fields[11].ReadOnly:= true;
              dbgitens.Fields[11].Text:='';
           end
        else
           begin
              dbgitens.Fields[11].ReadOnly:= false;
              dbgitens.Fields[11].Text:='';
           end;

        if qgrade.FieldByName('n46').AsString= '0' then
           begin
              dbgitens.Fields[12].ReadOnly:= true;
              dbgitens.Fields[12].Text:='';
           end
        else
           begin
              dbgitens.Fields[12].ReadOnly:= false;
              dbgitens.Fields[12].Text:='';
           end;

        if qgrade.FieldByName('n48').AsString= '0' then
           begin
              dbgitens.Fields[13].ReadOnly:= true;
              dbgitens.Fields[13].Text:='';
           end
        else
           begin
              dbgitens.Fields[13].ReadOnly:= false;
              dbgitens.Fields[13].Text:='';
           end;

        if qgrade.FieldByName('n50').AsString= '0' then
          begin
              dbgitens.Fields[14].ReadOnly:= true;
              dbgitens.Fields[14].Text:='';
           end
        else
           begin
              dbgitens.Fields[14].ReadOnly:= false;
              dbgitens.Fields[14].Text:='';
           end;

        if qgrade.FieldByName('np').AsString= '0' then
           begin
              dbgitens.Fields[15].ReadOnly:= true;
              dbgitens.Fields[15].Text:='';
           end
        else
           begin
              dbgitens.Fields[15].ReadOnly:= false;
              dbgitens.Fields[15].Text:='';
           end;

        if qgrade.FieldByName('nm').AsString= '0' then
           begin
              dbgitens.Fields[16].ReadOnly:= true;
              dbgitens.Fields[16].Text:='';
           end
        else
           begin
              dbgitens.Fields[16].ReadOnly:= false;
              dbgitens.Fields[16].Text:='';
           end;

        if qgrade.FieldByName('ng').AsString= '0' then
           begin
              dbgitens.Fields[17].ReadOnly:= true;
              dbgitens.Fields[17].Text:='';
           end
        else
           begin
              dbgitens.Fields[17].ReadOnly:= false;
              dbgitens.Fields[17].Text:='';
           end;

        if qgrade.FieldByName('ngg').AsString= '0' then
           begin
              dbgitens.Fields[18].ReadOnly:= true;
              dbgitens.Fields[18].Text:='';
           end
        else
           begin
              dbgitens.Fields[18].ReadOnly:= false;
              dbgitens.Fields[18].Text:='';
           end;
      end;
   END;
end;

alguma duvida ou sugestao fala ai rolleyes.gif

Link para o comentário
Compartilhar em outros sites

  • 0

Já que falou em sugestão...

Eu costumo utilizar a seguinte sintax para a linha abaixo:

IF (qitens_pedido.State=dsEdit) OR (qitens_pedido.State=dsINSERT) THEN
IF qitens_pedido.State in [dsEdit, dsInsert] THEN
Observei também que o fragmento de seu código, abaixo, repete-se várias vezes, variando apenas dois parâmetros (índices).
if qgrade.FieldByName('n1').AsString= '0' then
begin
  dbgitens.Fields [1].ReadOnly:= true;
  dbgitens.Fields[1].Text:='';
end
else
begin
  dbgitens.Fields[1].ReadOnly:= false;
  dbgitens.Fields[1].Text:='';
end;
Nesta situação eu costumo fazer da seguinte maneira:
procedure Tfrm_pedido.dbgItensColExit(Sender: TObject);
var verifVazio: string;
  procedure AjustaReadOnlyItem(IdxGrade: string; IdxItens: Integer);
  begin
   // Text fica vazio em ambos os casos, logo fica fora do if
    dbgitens.Fields[IdxItens].Text:='';  
   // a comparação já resulta em um valor booleano, logo, basta atribuir à propriedade
    dbgitens.Fields[IdxItens].ReadOnly:= qgrade.FieldByName(IdxGrade).AsString = '0';
  end;
begin
  ...
         if dbcCondicao.Text = '60 DIAS' THEN
          begin
            dbgitens.Fields[19].Text:=qproduto.fieldbyname('prc60').Value;
            preco_unitario:=qproduto.fieldbyname('prc60').Value;
             showmessage('60');
            end;
     //habilitando grade
      AjustaReadOnlyItem('n1', 1);
      AjustaReadOnlyItem('n2', 2);
      AjustaReadOnlyItem('n3', 3);
      ...
      AjustaReadOnlyItem('ngg', 18);
  ...
end;

Ok?! smile.gif

Link para o comentário
Compartilhar em outros sites

  • 0

Micheus, muito obrigado pela dica, vai me economizar muito trabalho biggrin.gif , sou iniciante e as vezes se quebra muito a cabeça com coisas assim,

agora já abusando um pouco você ou alguém poderia me explicar a lógica da procedure AjustaReadOnlyItem onde você coloca na linha:

dbgitens.Fields[IdxItens].ReadOnly:= qgrade.FieldByName(IdxGrade).AsString = '0'

a propriedade readonly não deveria receber true ou false? huh.gif

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Observe que quando você utiliza um teste do tipo x = y implica no fato de que esta avaliação deva ter um resultado verdadeiro ou falso. Sendo assim, na situação apresentada, nada mais lógico do que atribuir o "teste" (o qual resultará em verdadeiro ou falso) diretamente a variável booleana. wink.gif

Ficou mais claro?

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

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