Jump to content
Fivewin Brasil

Ajuda c\ SELECT


Luiz Fernando

Recommended Posts

Amigos...

Como indexar um mesmo DBF por dos indices condicionais diferentes e varrer o DBF pegando um valor de uma condição procurando-o na outra condição.

Exemplo:


DBSELECTAREA('TEMP_BL0')

INDEX ON LEFT(TEMP_BL0->CAMPO06,2) TO TEMP_04 FOR TEMP_BL0->CAMPO01 == '0200'

INDEX ON LEFT(TEMP_BL0->CAMPO02,2) TO TEMP_05 FOR TEMP_BL0->CAMPO01 == '0190'

WHILE TEMP_BL0->(!EOF()) // USANDO O INDICE TEMP_05

IF TEMP_BL0->(!DBSEEK(LEFT(TEMP_BL0->CAMPO02,2))) // USANDO O INDICE TEMP_04

TEMP_BL0->(DBDELETE())

END

END

id=code>id=code>

Obrigado

logoforum.jpg

Link to comment
Share on other sites

Amigos...

Como indexar um mesmo DBF por dos indices condicionais diferentes e varrer o DBF pegando um valor de uma condição procurando-o na outra condição.

Exemplo:


DBSELECTAREA('TEMP_BL0')

INDEX ON LEFT(TEMP_BL0->CAMPO06,2) TO TEMP_04 FOR TEMP_BL0->CAMPO01 == '0200'

INDEX ON LEFT(TEMP_BL0->CAMPO02,2) TO TEMP_05 FOR TEMP_BL0->CAMPO01 == '0190'

WHILE TEMP_BL0->(!EOF()) // USANDO O INDICE TEMP_05

IF TEMP_BL0->(!DBSEEK(LEFT(TEMP_BL0->CAMPO02,2))) // USANDO O INDICE TEMP_04

TEMP_BL0->(DBDELETE())

END

END

id=code>id=code>

Obrigado

logoforum.jpg

Link to comment
Share on other sites

FOR ( TEMP_BL0->CAMPO01 == '0200' .Or. TEMP_BL0->CAMPO01 == '0190' )

Será que funcionaria assim?

Você adicionaria o valor dese CAMPO01 no indice assim ficaria "filtrado" pelo FOR e organizado pelo CAMPO01 + seu indice podendo no seu loop verificar o CAMPO01 para definir se é válido.

sambomb.jpg

RCA Sistemas - Itaocara - RJ

Link to comment
Share on other sites

Ola Cristiano

Eu faria assim:

DBSELECTAREA('TEMP_BL0')

INDEX ON Temp_Bl0->Campo1+LEFT(TEMP_BL0->CAMPO06,2) TO TEMP_04

INDEX ON Temp_Bl0->Campo1+LEFT(TEMP_BL0->CAMPO02,2) TO TEMP_05


Temp_Bl0->(DbSeek("0190")

WHILE TEMP_BL0->(!EOF()) .and. Temp_bl0-Campo1="0190" // USANDO O INDICE TEMP_05

nReco:=Temp_Bl0->(Recno())

Temp_Bl0->(DbSetindex("Temp_05"))

lAchou:=TEMP_BL0->(!DBSEEK("0200"+LEFT(TEMP_BL0->CAMPO02,2))) // USANDO O INDICE TEMP_04

Temp_Bl0->(DbSetIndex("Temp_04"))

Temp_Bl0->(DbGoto(nReco))

If !lAchou

Temp_Bl0->(DbDelete())

End

Temp_Bl0->(DbSkip())

End

id=code>id=code>

Se eu entendi bem, você precisa remover de Temp_Bl0, todos

os registros cujo campo01='0190' que não tenham um registro

correspondente com campo01='0200' , certo?

Alberto -SP

Link to comment
Share on other sites

citação:


DBSELECTAREA('TEMP_BL0')

INDEX ON LEFT(TEMP_BL0->CAMPO06,2) TO TEMP_04 FOR TEMP_BL0->CAMPO01 == '0200'

INDEX ON LEFT(TEMP_BL0->CAMPO02,2) TO TEMP_05 FOR TEMP_BL0->CAMPO01 == '0190'

Temp_Blo->(DbSetOrder(1))id=blue>

WHILE TEMP_BL0->(!EOF()) // USANDO O INDICE TEMP_05

IF TEMP_BL0->(!DBSEEK(LEFT(TEMP_BL0->CAMPO02,2))) // USANDO O INDICE TEMP_04

TEMP_BL0->(DBDELETE())

END

END

id=code>id=code>


id=quote>id=quote>

Vagner Wirts

bgprofilea.jpg

"Ele não sabendo que era impossível, foi lá e fez"

Link to comment
Share on other sites

  • 5 months later...

citação:

Luiz

Acredito que seria assim:

cSql+=" where DATE_ADD(vencto,INTERVAL 10 DAY) < "+Any2Sql(date())


id=quote>id=quote>

Joao obrigado pela resposta, mais não deu certo, sera que alguém teria mais alguma dica...

Obrigado

Luiz Fernando

http:\\img193.imageshack.us\img193\6434\foto3nr.jpg

msn: empresoft@globo.com

skype:empresoft

empresoft@globo.com

FWH 9.12,XHARBOUR 1.2,ADS 9.0

FWH1104,XHARBOUR 1.2 Rev.6717, MYSQL c\ SQLLIB FREE

Link to comment
Share on other sites

Luiz acho que assim funciona.

Fiz um IF() para testar o retorno.


SELECT data_teste,

DATE(now()),

DATE_ADD(data_teste, INTERVAL 10 DAY),

IF(DATE_ADD(data_teste,INTERVAL 10 DAY) < DATE(NOW()), 'Menor','Maior') AS Teste_Data

FROM cad_obras ;

id=code>id=code>

Geraldo B. Silva

Fwh1202 Fev/2012, xHarbour 2.0, Bcc582, Pelles, xDev, Sqllib, Tdolphin e MySql.

lucgera@terra.com.br

São Paulo - SP

Link to comment
Share on other sites

citação:

Colegas é possivel fazer algo do tipo abaixo...

cSql+=" where vencto+10 < "+Any2Sql(date())

o campo vencto é do tipo data

Obrigado

Luiz Fernando

http:\\img193.imageshack.us\img193\6434\foto3nr.jpg

msn: empresoft@globo.com

skype:empresoft

empresoft@globo.com

FWH 9.12,XHARBOUR 1.2,ADS 9.0

FWH1104,XHARBOUR 1.2 Rev.6717, MYSQL c\ SQLLIB FREE


id=quote>id=quote>

Luiz,

Não seria mais simples assim:

...where vencto < "+Any2Sql(Date()+10)

Abs

Alberto

Link to comment
Share on other sites

colegas desculpa pela demora do retorno, tive uns contratempo aqui, com a primeira resposta do joao, nao

estava dando certo pois estava fazendo assim...


cSql="SELECT pedido,duplicat,emissao,vencto,valor,'','',docu,'',''"

cSql+=" from parcela"

cSql+=" where cliente='"+cCliente+"'"

cSql+=" and pago= 0"

cSql+=" and date_add(vencto, interval 10 day) <"+Any2Sql(date())

id=code>id=code>

depois pela reposta do alexandre que percebi que estava colocando o comando no lugar errado, desta forma

funcionou certinho


cSql="SELECT pedido,duplicat,emissao,date_add(vencto, interval 10 day),valor,'','',docu,'',''"

cSql+=" from parcela"

cSql+=" where cliente='"+cCliente+"'"

cSql+=" and pago= 0"

cSql+=" and vencto <"+Any2Sql(date())

id=code>id=code>

Obs: Alberto estava tentando achar uma solução dentro do SELECT, e nem me passou na cabeça em fazer fora dele, realmente é muito mais pratico da sua forma...

Obrigado a todos

Luiz Fernando

http:\\img193.imageshack.us\img193\6434\foto3nr.jpg

msn: empresoft@globo.com

skype:empresoft

empresoft@globo.com

FWH 9.12,XHARBOUR 1.2,ADS 9.0

FWH1104,XHARBOUR 1.2 Rev.6717, MYSQL c\ SQLLIB FREE

Link to comment
Share on other sites

  • 2 months later...
amigos eu criei uma funcao para tratar os comandos SQL.
Não sei se foi a melhor opção, mas no meu caso resolveu o problema de esquecer de colocar aspas, etc.



quando vou gravar eu estou fazendo assim

            TRY    
               BEGIN TRANSACTION
                    cQuery_Mtabela  :=                         "INSERT INTO cfop ( "
                    cQuery_Mtabela     := cQuery_Mtabela + " CODIGO"
                    cQuery_Mtabela     := cQuery_Mtabela + " ,NOME"
                    cQuery_Mtabela     := cQuery_Mtabela + " ,MOVIMENTA_ESTOQUE"
                    cQuery_Mtabela     := cQuery_Mtabela +    " ) VALUES ( "
                    cQuery_Mtabela     := cQuery_Mtabela + TRANSFORMA_SQL(T_CODI_CFOP,"T",05,0)         + ","
                    cQuery_Mtabela     := cQuery_Mtabela + TRANSFORMA_SQL(T_NOME_CFOP,"T",65,0)         + ','                                        
                    cQuery_Mtabela     := cQuery_Mtabela + TRANSFORMA_SQL(IF(T_MOVIMENTA_ESTOQUE=(.T.),'S','N'),'T',01,0)                                                 
                    cQuery_Mtabela     := cQuery_Mtabela + " )"
                    COMITAR_DADOS_SQL(cQuery_Mtabela)
                END TRANSACTION
            CATCH
                ROLLBACK TRANSACTION
            End
 

 *-------------------------------------------------------------------------------

FUNCTION TRANSFORMA_SQL(VARIVEL_SQL,TIPO_VARIAVEL_SQL,TAMANHO_SQL,DECIMAIS_SQL)
    Cursor('SQL')
    RETORNO_SQL := "'"
    IF TIPO_VARIAVEL_SQL = "N"  && Numerica
        RETORNO_SQL := RETORNO_SQL + STR(VARIVEL_SQL,(TAMANHO_SQL),(DECIMAIS_SQL)) + "'"
    ENDIF
    IF TIPO_VARIAVEL_SQL = "D"  && Data
        IF VARIVEL_SQL = CTOD('')
            RETORNO_SQL := RETORNO_SQL + '00000000' + "'"
        ELSE
            RETORNO_SQL := RETORNO_SQL + DTOS(VARIVEL_SQL) + "'"
        ENDIF
    ENDIF
    IF TIPO_VARIAVEL_SQL = "T" .OR. TIPO_VARIAVEL_SQL = "C"  && Caracter,   && Texto
        IF TIPO_VARIAVEL_SQL != "C"
            VARIVEL_SQL := TiraAcento(VARIVEL_SQL)
        ENDIF
        RETORNO_SQL := RETORNO_SQL + PADR(ALLTRIM(VARIVEL_SQL),(TAMANHO_SQL)) + "'"
    ENDIF
    IF TIPO_VARIAVEL_SQL = "B"  && BLOB
        RETORNO_SQL := RETORNO_SQL + ANY2SQL( MemoRead( (VARIVEL_SQL) )) + "'"
    ENDIF
    IF TIPO_VARIAVEL_SQL = "L"  && Logico
        RETORNO_SQL := RETORNO_SQL + IF(VARIVEL_SQL=(.T.),"S","N") + "'"
    ENDIF
    IF TIPO_VARIAVEL_SQL = "C"  && Caracter, sem Acen
        VARIVEL_SQL := TiraAcento(VARIVEL_SQL)
        RETORNO_SQL := RETORNO_SQL + PADR(ALLTRIM(VARIVEL_SQL),(TAMANHO_SQL)) + "'"
    ENDIF
    
RETURN RETORNO_SQL
 
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...