Boa tarde
Gostaria de instrução de como criar uma rotina no LPA para que o sistema copie os dados de uma tabela existente em um banco de dados, para uma tabela dentro de outro banco de dados.
Obrigado
Boa tarde
Gostaria de instrução de como criar uma rotina no LPA para que o sistema copie os dados de uma tabela existente em um banco de dados, para uma tabela dentro de outro banco de dados.
Obrigado
Olá @Thiago, tudo bem?
Para fazer a cópia dos dados, de um banco de dados para o outro usando o LPA, você precisa criar um Formulário que faça esse intercâmbio, e depois programar a chamada deste Formulário no Agendador de Tarefas.
O intercâmbio entre esses dados precisa ser feito usando um Código C# no evento Load do Formulário.
Imagine que existam duas conexões de banco de dados cadastradas na plataforma. Uma se chama Conexao-1 e a outra Conexão-2, e em ambas temos uma tabela chamada resumo_pedidos com as colunas a seguir:
Coluna | Tipo |
---|---|
idpedido | Int |
datapedido | Date |
idcliente | Int |
valortotal | Numeric(10,2) |
O código C# no evento Load do Formulário, ficaria assim:
using LATROMI.Extensions;
// Pega a "data inicial" de uma variável do Formulário
// chamada "v_data_inicial" para usar como filtro no SELECT
var dataInicial = (DateTime)Variables["v_data_inicial"].Value;
// Monta o comando SELECT usando "StringBuilder"
var sqlSelect = new StringBuilder()
.AppendLine("SELECT")
.AppendLine(" id")
.AppendLine(", datapedido")
.AppendLine(", idlciente")
.AppendLine(", valortotal")
.AppendLine("FROM resumo_pedidos")
.AppendLine("WHERE datapedido >= @datapedido");
// Monta o comando INSERT usando "StringBuilder"
var sqlInsert = new StringBuilder()
.AppendLine("INSERT INTO resumo_pedidos (")
.AppendLine(" id")
.AppendLine(", datapedido")
.AppendLine(", idlciente")
.AppendLine(", valortotal")
.AppendLine(") VALUES (")
.AppendLine(" @id")
.AppendLine(", @datapedido")
.AppendLine(", @idlciente")
.AppendLine(", @valortotal")
.AppendLine(");");
// Abre as duas conexões
using (var conexao1 = Database.CreateConnection("Conexao-1"))
using (var conexao2 = Database.CreateConnection("Conexao-2"))
{
// Abre as conexões
conexao1.Open();
conexao2.Open();
// Lista de chave/valor que será usada para preencher os parâmetros do SELECT
var parametrosSelect = new Dictionary<string, object>
{
{ "@datapedido", dataInicial }
};
// Busca os dados da "Conexao-1"
using (var dados = conexao1.ExecuteReader(sqlSelect.ToString(), parametrosSelect))
{
// Enquanto houver linhas, continuar percorrendo
while (dados.Read())
{
// Lista de chave/valor que será usada para preencher os parâmetros do INSERT
var parametrosInsert = new Dictionary<string, object>
{
{ "@id", dados["id"] },
{ "@datapedido", dados["datapedido"] },
{ "@idlciente", dados["idlciente"] },
{ "@valortotal", dados["valortotal"] }
};
// Executa comando Insert na "Conexao-2"
conexao2.ExecuteNonQuery(sqlInsert.ToString(), parametrosInsert);
}
}
}
Obviamente, este é um exemplo simples, onde a estrutura de dados entre os dois bancos é idêntica. Quando a estrutura for diferente, será necessário realizar a conversão entre os tipos de dados.
Se tiver alguma dificuldade para fazer a implementação, avise aqui neste tópico