Jump to content
Fivewin Brasil

MYSQL ajuda (Resolvido)


oribeiro

Recommended Posts

Pessoal, 

Como posso fazer essa rotina usando comandos nativos do MYSQL.

Desse jeito está dando erro na linha do REPLACE.

Estou usando SQLRDD.

   oSql:=SQLCon(cTipo,cHost,cBase,cUser,cPass)
   DbUseArea(.T.,"SQLRDD",cSql, cAlias, (lExclusive=.F.)) // USE (cSql) NEW SHARED ALIAS (cAlias)
   Select(cAlias)
   (cAlias)->(DbGoTop())
   Do While !(cAlias)->(Eof())
      xNome := LimpaNome((cAlias)->Nome)
      if     !" "$xNome
         // DELETE //
         MSGWAIT("DELETADO: "+xNome, (cAlias)->Nome, 0.1)
         (cAlias)->(DbDelete())
      elseif xNome<>Alltrim((cAlias)->Nome)
         // MODIFICA //
         MSGWAIT(xNome, (cAlias)->Nome, 0.1)
         Replace (cAlias)->Nome With xNome
      endif
      (cAlias)->(DbSkip())
      SySRefresh()
   EndDo

 

Link to comment
Share on other sites

Se vc usa as versões mais recentes do FWH da pra fazer assim:
oQry := oBD:Query("SELECT * FROM suatabela")

Do While .NOT. oQry:Eof()
      xNome := LimpaNome(oQry:Nome)
      if !" "$xNome
         MSGWAIT("DELETADO: "+xNome, oQry:Nome, 0.1)
         oQry:Delete()
      elseif xNome<>Alltrim(oQry:Nome)
         MSGWAIT(xNome, (cAlias)->Nome, 0.1)
         oQry:Nome := xNome
oQry:Save()

      endif

      oQry:Skip()
      SySRefresh()
   EndDo

Link to comment
Share on other sites

Oscar. Te diria o seguinte.
Não olhei os exemplos que o Vilian sugeriu acima mas caso vc venha utilizar sql te oriento a utilizar os comandos nativos como insert, update, delete.  A curva de aprendizado é pequena sendo que o ganho depois é muito bom.

Link to comment
Share on other sites

Marca,

Por favor, quando você tiver um tempinho, coloque aqui um exemplo de como fazer um looping passando por todos os registros de uma tabela no Banco SQL e alterando a informação de um campo usando somente comandos nativos.

Vou testar das duas formas.

Obrigado.

Link to comment
Share on other sites

 

Marca,

Por favor, quando você tiver um tempinho, coloque aqui um exemplo de como fazer um looping passando por todos os registros de uma tabela no Banco SQL e alterando a informação de um campo usando somente comandos nativos.

Vou testar das duas formas.

Obrigado.

É bem simples

No meu caso aqui utilizo a Sqlib sendo que nas novas versões do five já tem isso nativo basta ver qual a sintax para buscar os dados em relação aos comandos não irá mudar nadas

FUNCTION ManipulaClientes( lAppend )

LOCAL caDadosCli
LOCAL aDadosCli
LOCAL nDadosCli ,;
      nTotDadosCli


IF lAppend   // Em caso de INSERÇÕES

   caDadosCli := "INSERT INTO clientes (codigo,nome) VALUES (1,'ciente1')"
   SqlExecute( CDadosCli )

ELSE         // Em caso de alterações

 

   Utilizando em array
  

// Em caso de alterações de todo o banco
   aDadosCli    := SqlArray( "SELECT codigo,nome FROM clientes ")


   // Caso queira alterar um unico registro
   aDadosCli    := SqlArray( "SELECT codigo,nome FROM clientes WHERE codigo = " + Str(codigo desejado) ) // Em caso de alterações de todo o banco


   nTotDadosCli := Len( aDadosCli  )

   FOR nDadosCli := 1 TO  nTotDadosCli
 
      CDadosCli := "UPDATE clientes SET nome = 'cliente' " + Alltrim(Str(nDadosCli)) + " WHERE codigo = " + Str( aDadosCli[nDadosCli,1] )

      SqlExecute( CDadosCli )

   NEXT


   // Da pra fazer a mesma coisa com arquivos

    Use SQL ( CDadosCli ) Alias ( Lower(_Nome_Do_Alias) ) NEW VIA [MYSQL] INTO NumeroDaconexao
    _Nome_Do_Alias->(DbGoTop())

    DO WHILE !_Nome_Do_Alias ->(Eof())

      CDadosCli := "UPDATE clientes SET nome = 'cliente'" + Alltrim(Str(_Nome_Do_Alias->Codigo)) + " WHERE codigo = " + Str( _Nome_Do_Alias->Codigo )
      SqlExecute( CDadosCli )
     _Nome_Do_Alias->(DbSkip())

    ENDDO
    Close _Nome_Do_Alias

ENDIF

 

PARA DELETAR

   //  Geral
   caDadosCli := "DELETE FROM cliente "

   // Um unico registro
   caDadosCli := "DELETE FROM clientes WHERE codigo = " + Str( codigo desejado )
   SqlExecute( CDadosCli )


Oscar. Ressaltando que isso é um exemplo bem tosco somente para ilustrar que no meu entendimento mesmo que use um rdd entendo que o melhor
é ir ajustando para os comandos reais.Aproveite o rdd somente para entender como funciona mas vá ajustando da maneira correta.

 

  Espero que ajude

 

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...