Title:
Marcos,
Valeu pela dica, não solucionou o problema, mas percebi que o plano de execução do select melhorou.
Resolvi ir a campo para averiguação do problema (havia solicitado que o usuário fizesse o teste no Query Analyser) - na verdade os 4min são relamente uns 1min30seg aproximadamente (exagero do usuário).
Após diversas tentativas - recriar índices, reinstalar o ODBC, reescrever o código - resolvi fazer uma aplicação somente com a query em questão. Daí a surpresa - rodou como no Query Analyser. Diferença entre código ? Apenas a variável sMatrLogin, substituída por um valor real ('913', no caso). Resolvi, então, substituir a variável da query por uma concatenação
( = '" || sMatrLogin || "' ...). Feita essa alteração a query foi executada com a mesma velocidade do Query Analyser.
Vc ou alguém da lista saberia me informar o porquê dessa particularidade ?
 
 
Dúlio Mendes Soares
Analista de Sistemas
0 xx 61- 912-3175
[EMAIL PROTECTED]
-----Mensagem Original-----
Enviada em: Terça-feira, 15 de Fevereiro de 2000 16:50
Assunto: RES: [sqlwin] Query CTD x SQL SERVER

    Caro Dulio
 
        Tente abrir um parenteses após o segundo AND e fecha-lo no final dele (como alterado em sua mensagem).
       
 
 Marcos Carvalho de Campos

[EMAIL PROTECTED]

-----Mensagem original-----
De: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]]Em nome de Dulio
Enviada em: Terça-feira, 15 de Fevereiro de 2000 11:40
Para: [EMAIL PROTECTED]
Assunto: [sqlwin] Query CTD x SQL SERVER

Estou com um problema na recuperação de dados numa query executada a partir de uma aplicação em Centura.  A query abaixo roda no Query Analyser (sql 7.0) em menos de 3 segundos e leva aproximadamente uns 4 minutos na aplicação.
 
Alguem que trabalha com CTD e SQLSERVER poderia indicar-me algo a esse respeito ?
Já separei SqlPrepare e SqlExecute, mas em vão.
Detalhe, o problema começou qdo substituímos o SQLSERVER Beta pela Original.
 
If NOT SqlPrepareAndExecute( hSql,
  "SELECT distinct OS.nr_os, FASE.dt_hr_entrada_fase
    FROM TB_ORDEM_SERVICO OS, TB_FASE_OS FASE, TB_MECANICO_MAQUINA MEC
    WHERE FASE.nr_os = OS.nr_os
           AND  (FASE.cd_tipo_fase = '040' OR FASE.cd_tipo_fase = '060' OR FASE.cd_tipo_fase = '010' )
           AND  ( FASE.dt_hr_entrada_fase = (select max(dt_hr_entrada_fase) from TB_FASE_OS FASE1
                                                                        where FASE1.nr_os = OS.nr_os
                                                                             AND fase.cd_tipo_fase = fase1.cd_tipo_fase
                                                                             AND fase1.dt_hr_saida_fase is NULL ) 
           AND ( OS.cd_tecnico = :sMatrLogin
                      OR ( MEC.cd_funcionario = :sMatrLogin AND MEC.cd_item = OS.cd_item
                                AND OS.cd_tecnico is Null ) )
    ORDER BY OS.nr_os, FASE.dt_hr_entrada_fase
    INTO :nNrOS, :dDtFase")
 
Obrigado,
 
Dúlio Mendes Soares
Analista de Sistemas
0 xx 61- 912-3175
[EMAIL PROTECTED]

Responder a