No artigo de hoje, vamos demonstrar em como inserir vários dados de uma vez em uma tabela com FWTemporaryTable.
Recentemente me perguntaram se havia alguma forma de inserir vários registros de uma vez em uma tabela temporária criada com FWTemporaryTable.
A questão aqui é não usar While ou outras formas manuais como RecLock na temporária. Então aqui irei descrever duas formas possíveis.
Forma 1 – Usando INSERT INTO
//Monta a query que busca os dados de uma tabela cQuery := " SELECT " + CRLF cQuery += " BM_GRUPO, BM_DESC " + CRLF cQuery += " FROM " + CRLF cQuery += " " + RetSqlName("SBM") + " SBM " + CRLF cQuery += " WHERE D_E_L_E_T_ = ''" + CRLF //Cria a temporária oTempTable := FWTemporaryTable():New("TMPSBM") aFields := {} //Ou se quiser todos os campos de uma tabela, você poderia usar SBM->(DbStruct()) aAdd(aFields, {"BM_GRUPO", "C", TamSX3("BM_GRUPO")[1], 0}) aAdd(aFields, {"BM_DESC", "C", TamSX3("BM_DESC")[1], 0}) oTempTable:SetFields( aFields ) oTempTable:Create() //Insere os dados de uma query cQryIns := "INSERT INTO " + oTempTable:GetRealName() + " (BM_GRUPO, BM_DESC) " + cQuery + "" TCSQLExec(cQryIns) /* Realiza aqui os seus comandos */ //Deleta a temporária oTempTable:Delete()
Forma 2 – Usando Append From
//Abre uma tabela padrão DbSelectArea("SBM") //Cria a temporaria oTempTable := FWTemporaryTable():New("TMPSBM") aFields := {} //Ou se quiser todos os campos de uma tabela, você poderia usar SBM->(DbStruct()) aAdd(aFields, {"BM_GRUPO", "C", TamSX3("BM_GRUPO")[1], 0}) aAdd(aFields, {"BM_DESC", "C", TamSX3("BM_DESC")[1], 0}) oTempTable:SetFields( aFields ) oTempTable:Create() //Jogando os dados de uma tabela padrão para a temporária Append From &("SBM") /* Realiza aqui os seus comandos */ //Deleta a temporária oTempTable:Delete()
Bom pessoal, por hoje é só.
Abraços e até a próxima.