tenho dois programas idênticos compilados com Harbour MiniGUI Extended Edition 2.3.3 - 2014.03.20 um estou usando tabelas DBF outro MariaDB
quando abro a tela de cadastro de clientes em DBF o tempo para executar determinada rotina é de menos de 1 segundo ( 18:39:55 a 18:39:55 ), rapidinho ele me mostra os resultados que preciso, mas executando esta mesma rotina usando MariaDB o tempo passa para 23 segundos (18:39:13 a 18:39:36), poxa perece pouco mas comparado com um sistema feito em DBF é muito, tenho também o mesmo sistema com a mesma rotina feito em harbour e o tempo também é menos de 1 segundo.
eu não sei se é cansaço mas já revirei de tudo quanto foi jeito para achar o porque desta demora e não consegui, talvez seja até pelo fato de que eu ainda estou aprendendo a usar SQL, talvez!
vou colocar abaixo PRIMEIRO a rotina que esta funcionando em DBF depois a rotina feito em SQL, eu agradeço se alguém puder me ajudar.
ROTINA EM DBF
Código: Selecionar todos
TIMEINI := TIME()
f := MLCOUNT( ALLTRIM( FORMULARIOS->TB_FIELDS ), 250 )
FOR x := 1 TO f STEP 1
nOk := 0
cStr := RTRIM( MEMOLINE( FORMULARIOS->TB_FIELDS, 250, x ) )
IF cStr = "//" .OR. EMPTY( cStr )
LOOP
ENDIF
cField := RETSTR( cStr, "F:" )
cAlias := RETSTR( cStr, "A:" )
IF EMPTY( cAlias )
cAlias := SGC020101AFUNC[1]
ENDIF
IF cAlias <> "Calculada"
IF ( cAlias )->( FIELDPOS( cField ) ) = 0
nOk := 2
ELSE
nOk := CheckUser( ALLTRIM( cAlias ), ALLTRIM( cField ) )
ENDIF
ENDIF
IF nOk < 2 .OR. cAlias = "Calculada"
IF lAdmin .AND. nOk = 0 .AND. cAlias == SGC020101AFUNC[1]
CAMPOS->( DBEVAL( { || lEdit := CAMPOS->FD_CHANGE },{ || RTRIM( CAMPOS->FD_NAME ) == ;
cField .AND. RTRIM( CAMPOS->FD_FILE ) == cAlias } ) )
ENDIF
AADD( SGC020101AFUNC[14],;
{ cField ,; //01 CAMPO
RETVAL( cStr, "L:" ),; //02 TAMANHO DO CAMPO
RETSTR( cStr, "H:" ),; //03 NOME DO CABECALHO DA COLUNA
RETSTR( cStr, "P:" ),; //04 E A PICTURE
.F. ,; //05
cAlias ,; //06 ALIAS
RETSTR( cStr, "B:" ),; //07 CONDICAO PARA APLICAR CORES NA COLUNA
RETSTR( cStr, "C:" ),; //08 COR DA COLUNA X
lEdit ,; //09 SE É UMA COLUNA PARA EDIÇÃO SEMPRE SERA .F.
RETSTR( cStr, "T:" ),; //10 TIPO DA COLUNA NUMERICA CARACTERE LOGICO MEMO
RETSTR( cStr, "Y:" ),; //11 PRIMEIRA CONDICAO PARA COLUNA CALCULADA
RETSTR( cStr, "Z:" ),; //12 SEGUNDA CONDICAO PARA COLUNA CALCULADA
RETSTR( cStr, "D:" ),; //13 PRIMEIRA CONDICAO PARA CORES CONDICIONAIS
RETSTR( cStr, "E:" ),; //14 SEGUNDA CONDICAO PARA CORES C0NDICIONAIS
.F. ; //15 FLAG PARA VERIFICAR SE O CAMPOS ESTA SOMADO OU NAO
} )
ENDIF
NEXT x
MSGINFO( TIME() + QUEBRA + TIMEINI )Código: Selecionar todos
TIMEINI := TIME()
f := MLCOUNT( ALLTRIM( TBFIELDS ), 250 )
FOR x := 1 TO f STEP 1
nOk := 0
cStr := RTRIM( MEMOLINE( TBFIELDS, 250, x ) )
IF cStr = "//" .OR. EMPTY( cStr )
LOOP
ENDIF
cField := RETSTR( cStr, "F:" )
cAlias := RETSTR( cStr, "A:" )
IF EMPTY( cAlias )
cAlias := AFUNC[01]
ENDIF
IF cAlias <> "Calculada"
MSELE := "SELECT * FROM " + cAlias
SELE_ALIAS_QUERY := OSERVER:QUERY( MSELE )
IF SELE_ALIAS_QUERY:NETERR()
MSGSTOP( "Erro ao abrir tabela de " + cAlias + "!!!" + QUEBRA + SELE_ALIAS_QUERY:ERROR() + QUEBRA + ALLTRIM( PROCNAME(0) ) + "(" + STRZERO( PROCLINE(0),4) +")", MSIST )
ENDIF
IF SELE_ALIAS_QUERY:FIELDPOS( cField ) = 0
nOk := 2
ELSE
nOk := CheckUser( ALLTRIM( cAlias ), ALLTRIM( cField ) )
ENDIF
SELE_ALIAS_QUERY:DESTROY()
ENDIF
IF nOk < 2 .OR. cAlias = "Calculada"
IF lAdmin = "T" .AND. nOk = 0 .AND. cAlias == AFUNC[01]
SELE_CAMPOS_QUERY := OSERVER:QUERY("SELECT * FROM CAMPOS WHERE FD_FILE = '" + cAlias + "' AND FD_NAME = '" + cField + "'" )
IF SELE_CAMPOS_QUERY:NETERR() .OR. SELE_CAMPOS_QUERY:LASTREC() = 0
lEdit := .F.
ELSE
ROWS_CAMPOS_QUERY := SELE_CAMPOS_QUERY:GETROW( 1 )
lEdit := IIF( ROWS_CAMPOS_QUERY:FIELDGET("FD_CHANGE") = "T",.T.,.F. )
ENDIF
SELE_CAMPOS_QUERY:DESTROY()
ENDIF
AADD( AFUNC[14],;
{ cField ,; //01 CAMPO
RETVAL( cStr, "L:" ),; //02 TAMANHO DO CAMPO
RETSTR( cStr, "H:" ),; //03 NOME DO CABECALHO DA COLUNA
RETSTR( cStr, "P:" ),; //04 E A PICTURE
.F. ,; //05
cAlias ,; //06 ALIAS
RETSTR( cStr, "B:" ),; //07 CONDICAO PARA APLICAR CORES NA COLUNA
RETSTR( cStr, "C:" ),; //08 COR DA COLUNA X
lEdit ,; //09 SE É UMA COLUNA PARA EDIÇÃO SEMPRE SERA .F.
RETSTR( cStr, "T:" ),; //10 TIPO DA COLUNA NUMERICA CARACTERE LOGICO MEMO
RETSTR( cStr, "Y:" ),; //11 PRIMEIRA CONDICAO PARA COLUNA CALCULADA
RETSTR( cStr, "Z:" ),; //12 SEGUNDA CONDICAO PARA COLUNA CALCULADA
RETSTR( cStr, "D:" ),; //13 PRIMEIRA CONDICAO PARA CORES CONDICIONAIS
RETSTR( cStr, "E:" ),; //14 SEGUNDA CONDICAO PARA CORES C0NDICIONAIS
.F. ; //15 FLAG PARA VERIFICAR SE O CAMPOS ESTA SOMADO OU NAO
} )
ENDIF
NEXT x
MSGINFO( TIME() + QUEBRA + TIMEINI + QUEBRA + ALLTRIM( PROCNAME(0) ) + "(" + STRZERO( PROCLINE(0),4) +")", MSIST )

