2 componentes sql connection
algum problema em conectar dois componentes em dois bancos diferente
[#VIDEO-193#]
[#VIDEO-193#]
Carlos Faria
Curtidas 0
Respostas
Wesley Yamazack
06/07/2010
Olá Carlos
Dois SQLCOnnections, não interferem no seu sistema, desde que você tenha cuidado com eles na hora de gravar os dados e tudo mais, certo ?
Eu canso de fazer isso, pegar um banco e exportar pro outro através de dois SQLConnections diferentes, este erro é por que o componente do cara, ele trava o registro deadlock, é travamente do registro ou seja "ninguem altera enquanto eu leio ou altero".
Veja este componente de terceiro ,pois 2 sqlconnections trabalham e muito bem juntos na aplicação até por que um não interfere no outro. ok ?
Att,
Wesley Y
Dois SQLCOnnections, não interferem no seu sistema, desde que você tenha cuidado com eles na hora de gravar os dados e tudo mais, certo ?
Eu canso de fazer isso, pegar um banco e exportar pro outro através de dois SQLConnections diferentes, este erro é por que o componente do cara, ele trava o registro deadlock, é travamente do registro ou seja "ninguem altera enquanto eu leio ou altero".
Veja este componente de terceiro ,pois 2 sqlconnections trabalham e muito bem juntos na aplicação até por que um não interfere no outro. ok ?
Att,
Wesley Y
GOSTEI 0
Carlos Faria
06/07/2010
Wesley nao tem componente de 3º aqui , eu to acessando a base de dados dele , quando o plug in do cara pega o numero do telefone ,ele insere no banco firebid ,la tem uma tabelinha simples , nao tem trigre nem proceudure nada nada , o que estou fazendo e buscar la nesse banco firebird , a o numero inserido e tranferindo ele para a minha aplicacao. os componentes de conecao aos bancos sql e firebird ambos sao da paleta delphi sqlconnection !!
GOSTEI 0
Carlos Faria
06/07/2010
GOSTEI 0
Carlos Faria
06/07/2010
Na foto abaixo demostro o que acontece, como te disse um sqlconnection ligado o sqlserver e outro ao firebird, onde busco o numero na tabela de ligaçoes para jogar no meu sistema aparece esse erro !
Como resolve-lo ? Ai e com tigo wesley
GOSTEI 0
Wesley Yamazack
06/07/2010
Carlos,
Infelizmente não sei como o plugin do cara funciona, mas o que esta acontecendo que é que sua conexão esta ocupada, tente fechar a conexão assim que você pegar o telefone, e depois abra ela novamente.
Seria interessante você fazer um form de exemplo, e me mandar, faz com o Firebird mesmo, pois é mais prático, SQL Server é mais complicado, teria como ?
Att,
Wesley Y
Infelizmente não sei como o plugin do cara funciona, mas o que esta acontecendo que é que sua conexão esta ocupada, tente fechar a conexão assim que você pegar o telefone, e depois abra ela novamente.
Seria interessante você fazer um form de exemplo, e me mandar, faz com o Firebird mesmo, pois é mais prático, SQL Server é mais complicado, teria como ?
Att,
Wesley Y
GOSTEI 0
Carlos Faria
06/07/2010
Vou te dar uma maozinha nesse chamado ,fiz uma descoberta interessante e nova para mim
procedure Tdm.DataSetProviderBeforeExecute(Sender: TObject;
var OwnerData: OleVariant);
begin
SQLConnection.CloseDataSets ;
end; end. Isso aqui resolveu meu problema, apos executar o datasetprovider fecha todos os datasets e o aplicativo ganha uma velocidade alucinante. experimenta ai para voce ver . o que falta agora e criar uma rotina para colocar isso no datamodule pois escrever em cada datasetprovider e meio contra mao. Fica faltando isso para fechar! ai e com voce ok !
var OwnerData: OleVariant);
begin
SQLConnection.CloseDataSets ;
end; end. Isso aqui resolveu meu problema, apos executar o datasetprovider fecha todos os datasets e o aplicativo ganha uma velocidade alucinante. experimenta ai para voce ver . o que falta agora e criar uma rotina para colocar isso no datamodule pois escrever em cada datasetprovider e meio contra mao. Fica faltando isso para fechar! ai e com voce ok !
GOSTEI 0
Wesley Yamazack
06/07/2010
Carlos,
Vamos lá então :
procedure TDM.Limpar(Sender: TObject;
var OwnerData: OleVariant)
begin
SQLConnection.CloseDataSets ;
end;
procedure TDM.DataModuleCreate(Sender: TObject);
var
I: Integer;
begin
for I := 0 to ComponentCount - 1 do
if Components[I] is TDataSetProvider then
TDataSetProvider (Components[I]).BeforeExecute := executa;
end;
Veja se isso irá lhe ajudar.
Veja que criei um método comum chamado Limpa, e todos os DatasetProviders da tua aplicação agora no evento BeforeExecute, passaram a se comportar como o Limpar, não mais tendo necessidade de programar um por um.
Atenção agora se você programa algo nos eventos BeforeExecute dos seus DataSetProviders não ira mais funcionar, pois agora oque vale é o que esta no Limpar, ok ?
Att,
Wesley Y
GOSTEI 0
Carlos Faria
06/07/2010
Wesley voce criou uma ou duas procedures ?
Meus datamodules sao autocreate ?
GOSTEI 0
Carlos Faria
06/07/2010
Outra duvida ,
Nao seria melhor pegar a assinatura no envento do datasetpriver ?
procedure TdmAtendimento.dsp_clienteBeforeApplyUpdates(Sender: TObject;
var OwnerData: OleVariant);
begin
DM.SQLConnection.CloseDataSets;
end;
var OwnerData: OleVariant);
begin
DM.SQLConnection.CloseDataSets;
end;
GOSTEI 0
Wesley Yamazack
06/07/2010
Carlos,
Eu criei apenas uma procedure, e sua assinatura é igual a do datasetprovider, confere ae para você ver.
Na hora que seu datamodule for criado, as assinaturas dos datasetproviders, passaram a ser iguais ao evento que criamos, entendeu ?
Att,
Wesley Y
Eu criei apenas uma procedure, e sua assinatura é igual a do datasetprovider, confere ae para você ver.
Na hora que seu datamodule for criado, as assinaturas dos datasetproviders, passaram a ser iguais ao evento que criamos, entendeu ?
Att,
Wesley Y
GOSTEI 0
Carlos Faria
06/07/2010
Ola Wesley
Chamado chato Esse aqui.Falta assim Uma Coisa fechar Pará;
Deu Tudo Certo , porém eu tentar atualizar da UM dado Esse Erro Aqui
GOSTEI 0
Wesley Yamazack
06/07/2010
Carlos, nunca vi este erro.
Faça o seguinte, no lugar onde você da o teu applyupdates, logo embaixo, execute o comando do closedaset, e veja se isso irá resolver.
Att,
Wesley Y
Faça o seguinte, no lugar onde você da o teu applyupdates, logo embaixo, execute o comando do closedaset, e veja se isso irá resolver.
Att,
Wesley Y
GOSTEI 0
Carlos Faria
06/07/2010
Nao funciona
GOSTEI 0
Wesley Yamazack
06/07/2010
Carlos,
O erro acontece na nossa procedure ? onde ocorre ?
Att,
Wesley Y
O erro acontece na nossa procedure ? onde ocorre ?
Att,
Wesley Y
GOSTEI 0
Carlos Faria
06/07/2010
eu procurei em todas as procedures nao erro aqui , o que acontece e que duas pessoas estao tentanto alter o mesmo registro ao mesmo tempo , coisa que nao era para acontecer e mesmo que se acontecesse coloquei dentro de um bloco
Sqlconnection.starConnection desc
esse e o problema
GOSTEI 0
Wesley Yamazack
06/07/2010
Carlos,
É como eu falei no outro chamado, o registro esta travado, tem que ser destravado, pois não se pode acessar um registro travado no banco de dados, veja se este componente trava o registro no seu banco de dados, o problema esta no banco que tem o deadlock.
Att.
Wesley Y
É como eu falei no outro chamado, o registro esta travado, tem que ser destravado, pois não se pode acessar um registro travado no banco de dados, veja se este componente trava o registro no seu banco de dados, o problema esta no banco que tem o deadlock.
Att.
Wesley Y
GOSTEI 0
Carlos Faria
06/07/2010
Estou analizando aqui e ja respondo
GOSTEI 0
Wesley Yamazack
06/07/2010
Blz.
Att,
Wesley Y
Att,
Wesley Y
GOSTEI 0
Wesley Yamazack
06/07/2010
Carlos, como estamos com este chamado ?
Att,
Wesley Y
Att,
Wesley Y
GOSTEI 0
Carlos Faria
06/07/2010
Deixa eu fazer mais algumas analizes aqui , depois que adicionei a conecao ao firebird pintou varios erros
GOSTEI 0
Wesley Yamazack
06/07/2010
Blz. to no aguardo.
Att,
Wesley Y
Att,
Wesley Y
GOSTEI 0