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)
==============================================