[AJUDA] LOG NO SQL

BADJECO 20/11/2014 10:56:05
#442654
Olá Amigos!

Bom tenho umas rotinas para adicionar e editar dados em um banco SQL Firebird qué e a seguinte :
[Ô]Chame essa rotina de = ROTINA ANTIGA

[txt-color=#8A2BE2] ---------------------------------------------------------------------------------------------------------------------------------------------------------------- [/txt-color]
sql = [Ô]NULL,[ô][Ô] & VARIAVEL & [Ô][ô],[ô][Ô] & VARIAVEL & [Ô][ô],[ô][Ô] & VARIAVEL & [Ô][ô],[ô][Ô] & VARIAVEL & [Ô][ô][Ô]

con.BeginTrans
con.Execute [Ô]INSERT INTO TABELAX (ID,VARIAVEL,VARIAVEL,VARIAVEL,VARIAVEL) VALUES ([Ô] & sql & [Ô]);[Ô]
con.CommitTrans
[txt-color=#8A2BE2] ---------------------------------------------------------------------------------------------------------------------------------------------------------------- [/txt-color]


Mas agora tenho que logar em um outro banco oque a pessoa adiciona nesse banco, fiz uma outra tabela em outro banco com as mesmas caracteristicas da TABELAX
mas com alguns campos a mais , NOME , DATA e HORA

Minha ideia seria a seguinte pra logar essas alteraçoes

[txt-color=#8A2BE2] ---------------------------------------------------------------------------------------------------------------------------------------------------------------- [/txt-color]
[Ô]GLOBAL [txt-color=#e80000] LOG [/txt-color] AS STRING[Ô] - em um modulo
[Ô]GLOBAL [txt-color=#007100] INSERT [/txt-color] AS STRING[Ô] - em um modulo
[txt-color=#8A2BE2] ---------------------------------------------------------------------------------------------------------------------------------------------------------------- [/txt-color]

Alteraria a rotina para....
[Ô]Chame essa rotina de = ROTINA NOVA

[txt-color=#8A2BE2] ---------------------------------------------------------------------------------------------------------------------------------------------------------------- [/txt-color]
sql = [Ô]NULL,[ô][Ô] & VARIAVEL & [Ô][ô],[ô][Ô] & VARIAVEL & [Ô][ô],[ô][Ô] & VARIAVEL & [Ô][ô],[ô][Ô] & VARIAVEL & [Ô][ô][Ô]

con.BeginTrans
[txt-color=#e80000] LOG [/txt-color] = sql
[txt-color=#007100] INSERT [/txt-color] = [Ô]INSERT INTO TABELAX (ID,VARIAVEL,VARIAVEL,VARIAVEL,VARIAVEL) VALUES ([Ô] & sql & [Ô]);[Ô]
con.Execute [txt-color=#007100] INSERT [/txt-color]
con.CommitTrans
[txt-color=#8A2BE2] ---------------------------------------------------------------------------------------------------------------------------------------------------------------- [/txt-color]

e no modulo que adicionaria essas informações ela seria
[Ô]Chame essa rotina de = ROTINA DE LOG

[txt-color=#8A2BE2] ---------------------------------------------------------------------------------------------------------------------------------------------------------------- [/txt-color]
sql = [txt-color=#e80000] LOG [/txt-color]

con.BeginTrans
con.Execute [txt-color=#007100] INSERT [/txt-color]
con.CommitTrans

[txt-color=#8A2BE2] ---------------------------------------------------------------------------------------------------------------------------------------------------------------- [/txt-color]

Até ai tudo certo...
O [Ô]problema[Ô] é eu tenho MUITAS!! ROTINAS ANTIGAS e pra passar todas pra ROTINA NOVA vai custar muito tempo....nem tanto trabalho mas muito tempo mesmo...
Alguem ai tem alguma dica pra que eu possa continuar usando a ROTINA ANTINGA mas mesmo assim conseguir passar os dados e onde eles serao gravados pra ROTINA DE LOG ?
Digo os dados contidos no sql e os do INSERT.
TUNUSAT 20/11/2014 11:10:25
#442655
BADJECO,

Não sei se te ajuda, mas tem uma classe muito legal para gerenciar mais de um banco de dados ao mesmo tempo. Seu nome é [Ô]TransactionScope[Ô].
Você pode abrir dois bancos de dados bem distintos. Por exemplo: MS SQL Server e o SQL Firebird e gerenciá-los ao mesmo tempo dentro da mesma transação.

Dá uma olhada aqui:

---------------------------------------------------------------------------------------

Classe TransactionScope
http://msdn.microsoft.com/pt-br/library/system.transactions.transactionscope(v=vs.110).aspx

---------------------------------------------------------------------------------------

Implementing TransactionScope Using .NET 2.0
http://www.codeproject.com/Articles/19005/Implementing-TransactionScope-Using-Net

---------------------------------------------------------------------------------------

[][ô]s,
Tunusat.
BADJECO 20/11/2014 11:23:18
#442656
Achei muito bacana , mas se eu entendi bem , eu teria que alterar minhas chamadas de conexao com os bancos né?
Se for isso qu eu entendi me serviria muito bem se eu tivesse no começo do projeto , mas a m**** e que eu ja estou no fim dele.... entao se eu entedi bem ou o pouco que eu entedi que ao invez de alterar o corpo de todas minhas rotinas , mas eu estive pensando aqui cara... e nao vai ter jeito nao , vou ter que perder um tempo nessas alteraçoes.


Mas muito obrigado!
TUNUSAT 21/11/2014 11:44:29
#442680
BADJECO,

Não poderia colocar tudo dentro de um [Ô]Using[Ô] e continuar usando o que já tem?
Exemplo em C#:
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, options))
{
string strCmd = [Ô]SQL to Execute[Ô];
conn = new SqlClient.SqlConnection([Ô]Connection to DB1[Ô]);
conn.Open()
objCmd = new SqlClient.SqlCommand(strCmd, conn);
objCmd.ExecuteNonQuery();
string strCmd2 = [Ô]SQL to Execute[Ô];
conn2 = new SqlClient.SqlConnection([Ô]Connection to DB2[Ô]);
conn2.Open()
objCmd2 = new SqlClient.SqlCommand(strCmd2, conn2);
objCmd2.ExecuteNonQuery();
}


Traduzindo rapidamente (não testei) para VB.Net:
Using (scope As TransactionScope = New TransactionScope(TransactionScopeOption.Required, options)
conn = New SqlClient.SqlConnection([Ô]Connection to DB1[Ô])
conn.Open
objCmd = New SqlClient.SqlCommand(strCmd, conn)
objCmd.ExecuteNonQuery
Dim strCmd2 As String = [Ô]SQL to Execute[Ô]
conn2 = New SqlClient.SqlConnection([Ô]Connection to DB2[Ô])
conn2.Open
objCmd2 = New SqlClient.SqlCommand(strCmd2, conn2)
objCmd2.ExecuteNonQuery
End Using


[][ô]s,
Tunusat.
BADJECO 27/11/2014 09:51:39
#442824
TUNUSAT

Resolvi de uma forma muito simple cara!!!
No meu banco principal eu adicionei 4 campos: nome , hora ,data e id
Quando eu salvo algo nesse banco eu ja preencho esses campos com a variaveis ja alocadas no formulario.
assim quando eu salvar elas no banco principal eu uso o proprio insert para transportar os dados de tabela de das informaçoes para o BancoLOG
dessa forma uso so' :

conLog.BeginTrans
con.Execute INSERT
conLog.CommitTrans



ficou show e simples!
Faça seu login para responder