Andre

A funcao SqlGetResultSetCount é problematica pois ela depende que todo o
result set seja enviado do servidor para o cliente e somente depois de todos
os dados estarem na estacao cliente é que é feito a contagem.

Sugiro que vc esqueça esta funçao e faça o seguinte:

1 - Contar a quantidade de registros que atendam a clausula where

                SELECT COUNT(1)
                FROM    DI D,
                        IMPORTADORES E,
                        DI_TRANSPORTE T,
                        ADICOES A
                INTO    :tbl_Itens.df_Itens
                WHERE   D.COD_IMPORTADOR = E.ID_INFORMANTE      AND
                        D.PROCESSO_DI = T.PROCESSO_DI           AND
                        D.STATUS_DI = 'Registrada.'                     AND
                        D.PROCESSO_DI = A.PROCESSO_DI   (+) "
                 || w_ls_CondicaoStatus || w_s_Condicao || "

        Obs: a) Observe que apenas o SELECT que mudou em relaçao ao seu SELECT
original.
           b) o COUNT(1) é mais eficiente que se vc coloca-se COUNT(*)

2 - Verificar se existem dados e caso seja 0 (zero) dar a msg do usuario que
nao existem dados,

3 - Se existir dados executar o seu SELECT para trazer dados.

Se vc fizer como o acima, o resultado será muito mais rapido e vc nao terá
problemas independente do banco de dados que estiver utilizando.

Abraços

JC.Schmidt


-----Mensagem original-----
De: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]]Em
nome de Andre Justo
Enviada em: Sábado, 7 de Abril de 2001 11:54
Para: SQLWin (Correio eletrônico)
Assunto: [sqlwin] Problema com SQLSETRESULTSET


Caro Centurista,

Estou com um problema sério e não consigo eliminar aquele problema do
SQLSETRESULTSET Este problema me persegue há bastante tempo.
Ultimamente tinha mandado um email para este forum e não obtive muitas
respostas.

Entao resolvi tentar mais uma vez e explicar melhor :


- Na minha aplicacao, mesmo com SETRESULTSET como true, o problema de SET
RESULT ON
sempre ocorre em vez de quando. O momento ocorreu ao executar uma funcao do
Centura
que chama  SqlGetResultSetCount ( hSql, nCount ).

Olhe a logica no meu programa para popular uma tabela:

! Popula a Tabela
If not SqlPrepareAndExecute( w_hSql_Handle, "

                SELECT UPPER( D.PROCESSO_DI ),
                        E.RAZAO_SOCIAL,
                        SUM( VALOR )
                FROM    DI D,
                        IMPORTADORES E,
                        DI_TRANSPORTE T,
                        ADICOES A

                INTO    :tbl_Itens.col_CodProcesso,
                        :tbl_Itens.col_Importador,
                        :tbl_Itens.col_Referencia,
                        :tbl_Itens.col_Identificacao,
                        :tbl_Itens.col_CodImportador_Oculto,
                        :tbl_Itens.col_NumDI,
                        :tbl_Itens.col_status,
                        :w_s_Canal,
                        :tbl_Itens.col_ReferenciaDesp,
                        :tbl_Itens.col_DataLiberacao,
                        :tbl_Itens.col_II,
                        :tbl_Itens.col_IPI

                WHERE   D.COD_IMPORTADOR = E.ID_INFORMANTE      AND
                        D.PROCESSO_DI = T.PROCESSO_DI           AND
                        D.STATUS_DI = 'Registrada.'                     AND
                        D.PROCESSO_DI = A.PROCESSO_DI   (+) "

                 || w_ls_CondicaoStatus || w_s_Condicao || "

                GROUP BY        D.PROCESSO_DI, E.RAZAO_SOCIAL, D.REF_CLIENTE, 
T.IDENTIFICACAO,
E.ID_INFORMANTE, D.NUM_DI,
                                D.STATUS_DI, D.CANAL, D.REF_DESPACHANTE, 
D.DATA_DESEMBARACO

                "

                )
        Call SalMessageBox("Erro ao executar a consulta a base de dados.
                        Tente novamente, se o erro persistir contacte o administrador 
do sistema
!",
                         "Atenção !", MB_IconExclamation )
        ! ORDER BY      D.PROCESSO_DI DESC
Else
        !
        ! Utilizar gv_c_Login.TemDireito caso seja necessário
        !
        !
        Call gf_SetResultSet_On( w_hSql_Handle )
        Call SqlGetResultSetCount( w_hSql_Handle, df_Itens )
        If df_Itens = 0
                Call SalMessageBox( 'Nenhum item foi encontrado!', 'Atenção!', MB_Ok |
MB_IconExclamation )
                Call gf_SetPermissao_Exclui( SalParentWindow( hWndForm ), FALSE )
                Call gf_SetPermissao_Altera( SalParentWindow( hWndForm ), FALSE )
                Call gf_SetPermissao_Consulta( SalParentWindow( hWndForm ), FALSE )
                Set w_b_TableResetada = TRUE
        Else
                Set w_n_BuscaLinha = 0
                While w_n_BuscaLinha < df_Itens
                        Call SalTblInsertRow( tbl_Itens, TBL_MaxRow )
                        !
                        ! Setando os canais conforme sua sigla e colocando sua 
respectiva cor
                        !
                        !
                        Call SqlFetchNext( w_hSql_Handle, w_n_Status )
                        If w_s_Canal = 'V'
                                Set tbl_Itens.col_Canal = 'Verde'
                                Call SalTblSetCellTextColor( tbl_Itens.col_Canal, 
COLOR_Green, TRUE )
                        Else
                                If w_s_Canal = 'A'
                                        Set tbl_Itens.col_Canal = 'Amarelo'
                                        Call SalTblSetCellTextColor( 
tbl_Itens.col_Canal, COLOR_Yellow, TRUE )
                                Else
                                        If w_s_Canal = 'E'
                                                Set tbl_Itens.col_Canal = 'Vermelho'
                                                Call SalTblSetCellTextColor( 
tbl_Itens.col_Canal, COLOR_Red, TRUE )
                                        Else
                                                If w_s_Canal = 'C'
                                                        Set tbl_Itens.col_Canal = 
'Cinza'
                                                        Call SalTblSetCellTextColor( 
tbl_Itens.col_Canal, COLOR_Gray, TRUE )
                        Set w_n_BuscaLinha = w_n_BuscaLinha + 1
                Call SalTblSetFlagsAnyRows( tbl_Itens, ROW_New, FALSE, 0, 0 )
                !
                Call gf_SetPermissao_Exclui( SalParentWindow( hWndForm ),
gv_c_Login.TemDireito( DIR_DI, OP_Exclusao ) )
                Call gf_SetPermissao_Altera( SalParentWindow( hWndForm ),
gv_c_Login.TemDireito( DIR_DI, OP_Alteracao ))
                Call gf_SetPermissao_Consulta( SalParentWindow( hWndForm ),
gv_c_Login.TemDireito( DIR_DI, OP_Consulta ))
                Call SalSendMsgToChildren( SalParentWindow( hWndForm ), 
PAM_HabilitaCampo,
0, 0 )
                Set w_b_TableResetada = FALSE



- Existe alguma regra especial para utilizar a funcao SQLSETRESULTSET para
Lista de Centura SQLWindows
Administrador : [EMAIL PROTECTED]
[ http://www.centuraexplorer.com ]
Para sair desta lista mande mensagem para:
[EMAIL PROTECTED] sem nada no Subject e
com o comando a seguir no corpo da msg:
"unsubscribe sqlwin" (sem as aspas)

==============================================
Lista de Centura SQLWindows
Administrador : [EMAIL PROTECTED]
[ http://www.centuraexplorer.com ]
Para sair desta lista mande mensagem para:
[EMAIL PROTECTED] sem nada no Subject e
com o comando a seguir no corpo da msg:
"unsubscribe sqlwin" (sem as aspas)
==============================================

Responder a