trying to modify read-only field, pq ?

Delphi

01/06/2006

Oi pessoal antes de trocar o driver de acesso firebird com dbexpress de Interbase para UIB FireBird15 funcionava, eu tenho uma consulta que utiliza os componentes TSQLQuery, DataSetProvider, ClientDataset, Datasource, eu permito que somente uma coluna do grid seja modificada pela usuario, e detalhe esta coluna nem pertence a nenhuma tabela pois eu faço um select como podem ver abaixo unindo varias tabelas:

  DS.Enabled := False;
  with Q do begin
    Sql.Clear;
    //Vendas de Produtos
    Sql.Add(´SELECT ´´P´´ TIPO,´);
    Sql.Add(´       A.NOTNUM,´);
    Sql.Add(´       A.NOTSEQ,´);
    Sql.Add(´       B.ITENUM AS ITECOD,´);
    Sql.Add(´       A.NOTEMI,´);
    Sql.Add(´       B.ITEDES AS DES,´);
    Sql.Add(´       B.ITETOT AS TOT,´);
    Sql.Add(´       D.CLIRAZ,´);
    Sql.Add(´       D.CLICID,´);
    Sql.Add(´       A.CFOCOD,´);
    Sql.Add(´       (COALESCE((CASE(COALESCE((SELECT X.ITEPER´);
    Sql.Add(´                                   FROM COMISSAO X´);
    Sql.Add(´                                  WHERE X.NOTNUM = A.NOTNUM´);
    Sql.Add(´                                    AND X.NOTSEQ = A.NOTSEQ´);
    Sql.Add(´                                    AND X.ITETIP = ´´P´´´);
    Sql.Add(´                                    AND X.ITECOD = B.ITENUM),0))´);
    Sql.Add(´                  WHEN 0 THEN (SELECT W.PROCOM FROM PRODUTOS W WHERE B.PROCOD = W.PROCOD)´);
    Sql.Add(´                    ELSE´);
    Sql.Add(´                     (COALESCE((SELECT X.ITEPER´);
    Sql.Add(´                                  FROM COMISSAO X´);
    Sql.Add(´                                 WHERE X.NOTNUM = A.NOTNUM´);
    Sql.Add(´                                   AND X.NOTSEQ = A.NOTSEQ´);
    Sql.Add(´                                   AND X.ITETIP = ´´P´´´);
    Sql.Add(´                                   AND X.ITECOD = B.ITENUM),0))´);
    Sql.Add(´                 END),0)) ITEPER´);
    Sql.Add(´  FROM NOTA A INNER JOIN NOTITE B ON A.NOTNUM = B.NOTNUM AND A.NOTSEQ = B.NOTSEQ´);
    Sql.Add(´              INNER JOIN CLIENTES D ON D.CLICOD = A.CLICOD´);
    Sql.Add(´ WHERE A.VENCOD = :P1´);
    Sql.Add(´   AND NOTSTA <> ´´Cancelada´´´);
    Sql.Add(´   AND A.CFOCOD IN (SELECT W.CFOCOD FROM CFOP W WHERE W.CFOCOM = ´´S´´)´);
    Parambyname(´P1´).asInteger := ECod.asInteger;
    if (EIni.text <> ´  /  /    ´) then begin
       Sql.Add(´AND A.NOTEMI >= :P2´);
       Parambyname(´P2´).asDate := StrToDate(EIni.text);
    end;
    if (EFim.text <> ´  /  /    ´) then begin
       Sql.Add(´AND A.NOTEMI <= :P3´);
       Parambyname(´P3´).asDate := StrToDate(EFim.text);
    end;
    //Itens informados manualmente na tabela de comissao
    if (EIni.text <> ´  /  /    ´) and (EFim.text <> ´  /  /    ´) then begin
        Sql.Add(´UNION´);
        Sql.Add(´SELECT ´´D´´ TIPO,´);
        Sql.Add(´       NOTNUM,´);
        Sql.Add(´       NOTSEQ,´);
        Sql.Add(´       ITECOD,´);
        Sql.Add(´       ITEDIN AS NOTEMI,´);
        Sql.Add(´       ITEDES AS DES,´);
        Sql.Add(´       CAST(0 AS DOUBLE PRECISION) AS TOT,´);
        Sql.Add(´       CLIRAZ,´);
        Sql.Add(´       CAST(´´ ´´ AS VARCHAR(30)) AS CLICID,´);
        Sql.Add(´       CAST(´´ ´´ AS VARCHAR(10)) AS CFOCOD,´);
        Sql.Add(´       ITEPER´);
        Sql.Add(´  FROM COMISSAO´);
        Sql.Add(´ WHERE VENCOD = :P1´);
        Parambyname(´P1´).asInteger := ECod.asInteger;
        if (EIni.text <> ´  /  /    ´) then begin
           Sql.Add(´AND ITEDIN >= :P4´);
           Parambyname(´P4´).asDate := StrToDate(EIni.text);
        end;
        if (EFim.text <> ´  /  /    ´) then begin
           Sql.Add(´AND ITEFIN <= :P5´);
           Parambyname(´P5´).asDate := StrToDate(EFim.text);
        end;
    end;
    //Vendas de Serviços
    Sql.Add(´UNION´);
    Sql.Add(´SELECT ´´S´´ TIPO,´);
    Sql.Add(´       A.NOTNUM,´);
    Sql.Add(´       A.NOTSEQ,´);
    Sql.Add(´       C.SERITE AS ITECOD,´);
    Sql.Add(´       A.NOTEMI,´);
    Sql.Add(´       C.SERDES AS DES,´);
    Sql.Add(´       C.SERTOT AS TOT,´);
    Sql.Add(´       D.CLIRAZ,´);
    Sql.Add(´       D.CLICID,´);
    Sql.Add(´       A.CFOCOD,´);
    Sql.Add(´       COALESCE((SELECT X.ITEPER´);
    Sql.Add(´                   FROM COMISSAO X´);
    Sql.Add(´                  WHERE X.NOTNUM = A.NOTNUM´);
    Sql.Add(´                    AND X.NOTSEQ = A.NOTSEQ´);
    Sql.Add(´                    AND X.ITETIP = ´´S´´´);
    Sql.Add(´                    AND X.ITECOD = C.SERITE),0) AS ITEPER´);
    Sql.Add(´  FROM NOTA A INNER JOIN NOTSER C ON C.NOTNUM = A.NOTNUM´);
    Sql.Add(´              INNER JOIN CLIENTES D ON D.CLICOD = A.CLICOD´);
    Sql.Add(´ WHERE A.VENCOD = :P1´);
    Sql.Add(´   AND NOTSTA <> ´´Cancelada´´´);
    Sql.Add(´   AND A.CFOCOD IN (SELECT W.CFOCOD FROM CFOP W WHERE W.CFOCOM = ´´S´´)´);
    Parambyname(´P1´).asInteger := ECod.asInteger;
    if (EIni.text <> ´  /  /    ´) then begin
       Sql.Add(´AND A.NOTEMI >= :P4´);
       Parambyname(´P4´).asDate := StrToDate(EIni.text);
    end;
    if (EFim.text <> ´  /  /    ´) then begin
       Sql.Add(´AND A.NOTEMI <= :P5´);
       Parambyname(´P5´).asDate := StrToDate(EFim.text);
    end;
    Sql.Add(´ ORDER BY 2´);
  end;
  try
    Screen.cursor := crSqlWait;
    CQ.Close;
    CQ.Open;
  finally
    Screen.cursor := crDefault;
  end;
  DS.Enabled := True;
  Grid.Setfocus;


Alguma sugestão, os fields estão readonly = false, a opção do grid dgEditing = true, o que poderá ser ?

César


Cesarpir

Cesarpir

Curtidas 0
POSTAR