oribeiro Posted May 20, 2020 Report Share Posted May 20, 2020 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 Quote Link to comment Share on other sites More sharing options...
vilian Posted May 21, 2020 Report Share Posted May 21, 2020 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 Quote Link to comment Share on other sites More sharing options...
oribeiro Posted May 21, 2020 Author Report Share Posted May 21, 2020 Meu amigo. Ficou excelente e muito rápido. Muito obrigado. Onde encontro manual e exemplos desses comandos internos do FW para acesso SQL? Quote Link to comment Share on other sites More sharing options...
vilian Posted May 21, 2020 Report Share Posted May 21, 2020 http://forums.fivetechsupport.com/viewtopic.php?f=3&t=33286 Quote Link to comment Share on other sites More sharing options...
Marca Posted May 23, 2020 Report Share Posted May 23, 2020 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. Quote Link to comment Share on other sites More sharing options...
oribeiro Posted May 24, 2020 Author Report Share Posted May 24, 2020 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. Quote Link to comment Share on other sites More sharing options...
Marca Posted May 26, 2020 Report Share Posted May 26, 2020 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 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.