Firebir na Rede - Autalizar em tempo real
Ola amigos !!
É o seguinte... eu tenho um sistema rodando em Firebird 2.0 com componentes de acesso da palheta Interbase... há 3 máquinas acessando o banco de dados ao mesmo tempo... todas conseguem visualizar e alterar dados... porém... as alterações que qualquer máquina faça só vai ser vista pela outra quando o usuário fechar o sistema e abri-lo novamente... o que é muito chato ! Como eu faço para que as alterações que qualquer terminal faça seja refletido automaticamente para os demais ? Sou inicante neste ramo de programação Cliente-Servidor, então se por gentileza alguem me puder ajudar passo a passo agradeço muito...
Grato pela atenção de todos...
É o seguinte... eu tenho um sistema rodando em Firebird 2.0 com componentes de acesso da palheta Interbase... há 3 máquinas acessando o banco de dados ao mesmo tempo... todas conseguem visualizar e alterar dados... porém... as alterações que qualquer máquina faça só vai ser vista pela outra quando o usuário fechar o sistema e abri-lo novamente... o que é muito chato ! Como eu faço para que as alterações que qualquer terminal faça seja refletido automaticamente para os demais ? Sou inicante neste ramo de programação Cliente-Servidor, então se por gentileza alguem me puder ajudar passo a passo agradeço muito...
Grato pela atenção de todos...
Tiagojmilam
Curtidas 0
Respostas
Techsoft
21/12/2007
Como está fazendo para gravar os dados? qual o comando usado?
Eu usei interbase já tem um tempo, mas você pode usar transações, uma vez que faça o commit da transação, os dados garantidamente serão visíveis aos demais usuários do sistema.
Eu usei interbase já tem um tempo, mas você pode usar transações, uma vez que faça o commit da transação, os dados garantidamente serão visíveis aos demais usuários do sistema.
GOSTEI 0
Tiagojmilam
21/12/2007
Olá amigo !
Eu estou dando um commitretaming no transaction que está ligado a base de dados... mas mesmo assim... não atualiza nas outras estações...
Valew !
Eu estou dando um commitretaming no transaction que está ligado a base de dados... mas mesmo assim... não atualiza nas outras estações...
Valew !
GOSTEI 0
Aasn
21/12/2007
Vc só vai conseguir atualizar os terminais de duas formas:
1) através de um timer, a cada intervalo dá um refresh nos dados;
ou
2) capturando os eventos do BD através do IBEvent, que é bem mais complicado.
caso contrário, nada feito!
[]´s
AASN
1) através de um timer, a cada intervalo dá um refresh nos dados;
ou
2) capturando os eventos do BD através do IBEvent, que é bem mais complicado.
caso contrário, nada feito!
[]´s
AASN
GOSTEI 0
Tiagojmilam
21/12/2007
Cheguei a pensar em colocar sim um Timer ! mas naum sabia o que fazer neste Timer... abrir e fechar a tabela que não era senão ia dar xabu... nem xeguei a pensar em um Refresh...
O que eu devo colocar de código nees timer ? e vai ser um timer só pra todo o aplicativo .. ou tem que ser um pra cada Query ?
Valew !!!
O que eu devo colocar de código nees timer ? e vai ser um timer só pra todo o aplicativo .. ou tem que ser um pra cada Query ?
Valew !!!
GOSTEI 0
Luciano.badoe
21/12/2007
[b:6e90c25949]TiagoJmilam[/b:6e90c25949]
Eu faço da seguinte forma utilizando 3 procedures do Luciano Pimenta:
Para iniciar a transação:
Auxiliar de Start
Para comitar transação pendente
Para cancelar a transação pendente
Eu uso a START antes de um bloco try/except com Store Procedure para
persistir os dados no DB e em seguida uso a COMMIT para comitar a transação.
Caso ocorra algum problema, no except uso o ROLLBACK.
É pratico e funciona 100¬.
Abraço.
Eu faço da seguinte forma utilizando 3 procedures do Luciano Pimenta:
Para iniciar a transação:
procedure TDM.Start;
begin
Transc.IsolationLevel := xilREADCOMMITTED;
Transc.TransactionID := StrToInt(IDTransaction);
SQLConnection1.StartTransaction(Transc);
end;
Auxiliar de Start
function IDTransaction: string;
var
i: integer;
const
str = ´0123456789´;
begin
for i := 1 to 2 do
begin
Randomize;
Result := Result + str[Random(Length(str))+1];
end;
end;
Para comitar transação pendente
procedure TDM.Comit;
begin
SQLConnection1.Commit(Transc);
end;
Para cancelar a transação pendente
procedure TDM.Rollback; begin SQLConnection1.Rollback(Transc); raise Exception.Create(MSG_ERRO); end;
Eu uso a START antes de um bloco try/except com Store Procedure para
persistir os dados no DB e em seguida uso a COMMIT para comitar a transação.
Caso ocorra algum problema, no except uso o ROLLBACK.
É pratico e funciona 100¬.
Abraço.
GOSTEI 0
Micheus
21/12/2007
porém... as alterações que qualquer máquina faça só vai ser vista pela outra quando o usuário fechar o sistema e abri-lo novamente... o que é muito chato ! Como eu faço para que as alterações que qualquer terminal faça seja refletido automaticamente para os demais ? Sou inicante neste ramo de programação Cliente-Servidor, então se por gentileza alguem me puder ajudar passo a passo agradeço muito...
Isto está relacionado às configurações da sua transação.Dê um duplo click no seu componente TIBTransaction e veja como está sua configuração.
Por ex., se você configurar como Snapshot, os dataset ligados a esta transação ´irão tirar uma foto´ no momento de sua abertura (open ou active) não ´enxergando´ alterações de qualquer outra transação.
Se vc nunca mexeu nele, na tela que aparece, não deve haver um tipo de transação setada.
Vou sugerir uma opção que utilizo (customizada), assim, não se preocupe me selecionar qualquer umas das disponíveis. Coloque na caixa de texto [i:73250798ad]Settings[/i:73250798ad] os seguintes parâmetros (é só copiar e colar):
[i:73250798ad]read,
write,
read_committed,
rec_version,
nowait[/i:73250798ad]
Tem um artigo sobre o assunto que pode ser interessante ler: ´Entendendo os tipos e configurações das transações´ (Autor: Claudio Valderrama; Tradução/Adaptação : Carlos Henrique Cantu - FireBase)
É necessário registrar-se no site [url=http://www.firebase.com.br/fb/]FireBase[/url] para acessá-lo, vou deixar uma versão em PDF neste [url=http://www.4shared.com/file/24569384/88e77aca/Entendendo_os_tipos_e_configuracao_de_transacoes.html]link[/url]
GOSTEI 0
Tiagojmilam
21/12/2007
Olá micheus !
Eu dei dois cliques no Transaction e realmente das opções que há lá não estão nenhuma delas selecionadas .. e há um campo para digitação, lá eu coloquei estas instruções que me passou e não selecionei nenhuma opção !
read,
write,
read_committed,
rec_version,
nowait
Porém quando eu dou um RUN no projeto ele dá o seguinte erro :
TPB Constant () is unknown
Porque será que deu esse erro ?
Valew pela ajuda !!!
Eu dei dois cliques no Transaction e realmente das opções que há lá não estão nenhuma delas selecionadas .. e há um campo para digitação, lá eu coloquei estas instruções que me passou e não selecionei nenhuma opção !
read,
write,
read_committed,
rec_version,
nowait
Porém quando eu dou um RUN no projeto ele dá o seguinte erro :
TPB Constant () is unknown
Porque será que deu esse erro ?
Valew pela ajuda !!!
GOSTEI 0
Micheus
21/12/2007
Eu dei dois cliques no Transaction e realmente das opções que há lá não estão nenhuma delas selecionadas .. e há um campo para digitação, lá eu coloquei estas instruções que me passou e não selecionei nenhuma opção !
read,
write,
read_committed,
rec_version,
nowait
Porém quando eu dou um RUN no projeto ele dá o seguinte erro :
TPB Constant () is unknown
Porque será que deu esse erro ?
significa que uma destas constantes não foi reconhecida pela rotina que inicializa a sua transação.Pelo que andei investigando, muito provavelmente seria [i:fcc14add68]rec_version[/i:fcc14add68]. Aparentemente o componente da paleta IBX não o reconhece desta forma (é que eu utilizo os componentes MDO, e neste caso não há problemas), então escreva ele assim: [i:fcc14add68]record_version[/i:fcc14add68]
e tente novamente.
Este texto, será depois convertido para um número (constante a ser utilizada na inicialização da transação). Dá para ver [url=http://www.koders.com/noncode/fid4E63A32C796CA2049C3F42D1F6413049E28102F4.aspx]nesta[/url] codificação que este texto será trocado pela constante [i:fcc14add68]isc_tpb_rec_version[/i:fcc14add68].
Um artigo que fala um pouco sobre estes níveis de isolamento: [url=http://www.guiadodelphi.com.br/ler.php?codigo=1103]O que é uma transação?[/url] (ref. Guia do Delphi)
Abraços
GOSTEI 0
Pestana_
21/12/2007
Ola [b:8dc55a6b6f]Micheus[/b:8dc55a6b6f], é muito importante o que você postou. Para atualizar registro em uma outra máquina não basta somente (fazer um refresh ou abrir e fechar) o dataset é preciso utilizar as configurações da transação. Acredito que este assunto gera muita dúvida.
Aproveitando o tópico eu agradeceria muito se você me respondesse uma dúvida minha, já procurei na web, mas eu não consegui entender as configurações (read e write) qual o efeito em relação aplicação?
estou utilizando um Transaction na aplicação.
Obrigado,
Pestana.
Aproveitando o tópico eu agradeceria muito se você me respondesse uma dúvida minha, já procurei na web, mas eu não consegui entender as configurações (read e write) qual o efeito em relação aplicação?
estou utilizando um Transaction na aplicação.
Obrigado,
Pestana.
GOSTEI 0
Micheus
21/12/2007
Acho que este artigo lhe ajudará: [url=http://www.comunidade-firebird.org/cflp/downloads/CFLP_O026.PDF]Trabalhando com Transaction Parameter Buffer[/url] (ref. Comunidade Firebird de Lingua Portuguesa).
Além dos links que postei anteriormente, há mais este artigo, [url=http://www.comunidade-firebird.org/cflp/downloads/CFLP_T032.PDF]Como travar um registro em Interbase/Firebird[/url] (ref. Comunidade Firebird), bastante interessante e de onde tiro o trecho abaixo, visto que envolve parte das configurações que sugeri:
[color=blue:4019ebf16d][i:4019ebf16d](...) Você poderia usar o nível de isolamento read_commited rec_version junto
com o modo de espera (wait), mas não é bom usar esse recurso dessa forma. Em tese, o
read_commited / rec_version / wait garantem 100¬ que você vai obter os resultados necessários.
Mas este modo de travamento requer mais atenção durante o projeto de acesso aos dados. (...)[/i:4019ebf16d][/color:4019ebf16d]
Além dos links que postei anteriormente, há mais este artigo, [url=http://www.comunidade-firebird.org/cflp/downloads/CFLP_T032.PDF]Como travar um registro em Interbase/Firebird[/url] (ref. Comunidade Firebird), bastante interessante e de onde tiro o trecho abaixo, visto que envolve parte das configurações que sugeri:
[color=blue:4019ebf16d][i:4019ebf16d](...) Você poderia usar o nível de isolamento read_commited rec_version junto
com o modo de espera (wait), mas não é bom usar esse recurso dessa forma. Em tese, o
read_commited / rec_version / wait garantem 100¬ que você vai obter os resultados necessários.
Mas este modo de travamento requer mais atenção durante o projeto de acesso aos dados. (...)[/i:4019ebf16d][/color:4019ebf16d]
GOSTEI 0
Pestana_
21/12/2007
[b:9532820582]Micheus[/b:9532820582] não estou querendo abusar de você é que estou meio confuso e não estou conseguindo entender.
Eu estava olhando alguns artigos ´inclusive a que você sugeriu´ e não estou conseguindo entender o porque da existência de mais de uma transação (p. ex.: uma transação para escrita (inserir, atualizar e deletar registros) e outra somente leitura (select)).
Neste [url=http://scriptbrasil.com.br/forum/index.php?showtopic=81370]tópico[/url] você citou que utiliza duas transações uma para (Read) e outra para (Update). Porque você utiliza este método, qual o objetivo?
estou tentando montar uma configuração de transação que seja mais adequada para meu sistema.
no sistema, tenho dbgrid e edits:
1- os dados são apresentados no dbgrid como somente leitura.
2- utilizo edits para incluir, alterar e excluir registros (não utilizo componentes dataware exceto o dbgrid).
Eu estava olhando alguns artigos ´inclusive a que você sugeriu´ e não estou conseguindo entender o porque da existência de mais de uma transação (p. ex.: uma transação para escrita (inserir, atualizar e deletar registros) e outra somente leitura (select)).
Neste [url=http://scriptbrasil.com.br/forum/index.php?showtopic=81370]tópico[/url] você citou que utiliza duas transações uma para (Read) e outra para (Update). Porque você utiliza este método, qual o objetivo?
estou tentando montar uma configuração de transação que seja mais adequada para meu sistema.
no sistema, tenho dbgrid e edits:
1- os dados são apresentados no dbgrid como somente leitura.
2- utilizo edits para incluir, alterar e excluir registros (não utilizo componentes dataware exceto o dbgrid).
GOSTEI 0
Khundalini
21/12/2007
Pra resolver isso daí, o SGBD teria que ficar ser inteligente pra identificar quando os dados consultados por uma estação fossem alterados por outra estação. E isso, acredito eu, nenhum SGBD faz isso.
O que teria que fazer é um refresh periodico nos dados. O problema se agrava ainda mais se usarmos ClientDataSet, uma vez que os dados são consultados uma única vez ao servidor, e a conexão é fechada (isso se estiver usando dbExpress com a propriedade KeepConnection = False, para garantir mais performance).
Sds.,
Rubem Rocha
Manaus, AM
O que teria que fazer é um refresh periodico nos dados. O problema se agrava ainda mais se usarmos ClientDataSet, uma vez que os dados são consultados uma única vez ao servidor, e a conexão é fechada (isso se estiver usando dbExpress com a propriedade KeepConnection = False, para garantir mais performance).
Sds.,
Rubem Rocha
Manaus, AM
GOSTEI 0
Pestana_
21/12/2007
Pra resolver isso daí, o SGBD teria que ficar ser inteligente pra identificar quando os dados consultados por uma estação fossem alterados por outra estação. E isso, acredito eu, nenhum SGBD faz isso.
O que teria que fazer é um refresh periodico nos dados. O problema se agrava ainda mais se usarmos ClientDataSet, uma vez que os dados são consultados uma única vez ao servidor, e a conexão é fechada (isso se estiver usando dbExpress com a propriedade KeepConnection = False, para garantir mais performance).
Sds.,
Rubem Rocha
Manaus, AM
não sei se entendi, mas estou querendo que a Transação faça esse trabalho, depois eu atualizo o DataSet (abrir e fechar ou refresh) atravês de Eventos do FB, com isso acho que não precisava atualizar periodicamente o DataSet.
se eu estiver errado alguem por favor me corrija.
GOSTEI 0
Khundalini
21/12/2007
Abrir e fechar ou efetuar um refresh depois de incluir/alterar/excluir um registro é válido. Agora, e se um outro usuário tiver feito uma dessas operações, e outra pessoa não tiver feito nada, e esta outra pessoa necessitar ´enxergar´ os mesmos dados atualizados?
Saiba vc que o método Refresh(), nas classes descendentes de TDataSet (ex.: TClientDataSet) funcionam de maneiras diferentes.
Sds.,
Rubem Rocha
Manaus, AM
Saiba vc que o método Refresh(), nas classes descendentes de TDataSet (ex.: TClientDataSet) funcionam de maneiras diferentes.
Sds.,
Rubem Rocha
Manaus, AM
GOSTEI 0
Pestana_
21/12/2007
[b:8038f89542]Micheus[/b:8038f89542] não estou querendo abusar de você é que estou meio confuso e não estou conseguindo entender.
Eu estava olhando alguns artigos ´inclusive a que você sugeriu´ e não estou conseguindo entender o porque da existência de mais de uma transação (p. ex.: uma transação para escrita (inserir, atualizar e deletar registros) e outra somente leitura (select)).
Neste [url=http://scriptbrasil.com.br/forum/index.php?showtopic=81370]tópico[/url] você citou que utiliza duas transações uma para (Read) e outra para (Update). Porque você utiliza este método, qual o objetivo?
estou tentando montar uma configuração de transação que seja mais adequada para meu sistema.
no sistema, tenho dbgrid e edits:
1- os dados são apresentados no dbgrid como somente leitura.
2- utilizo edits para incluir, alterar e excluir registros (não utilizo componentes dataware exceto o dbgrid).
[b:8038f89542]Micheus[/b:8038f89542] andei estudando os tópicos que você sugeriu e acho que as configurações para o IBTransaction seria essas: está correto?
[i:8038f89542]read_committed,
rec_version,
nowait[/i:8038f89542]
estou querendo montar as configurações de acordo com está citação acima.
me ajude a salvar está semana hshshshs
agradeço antecipadamente,
Pestana.
GOSTEI 0
Francisco.riva1
21/12/2007
Olá amigos,
Uma idéia seria deixar um botão ´Refresh´ no form, daí o próprio usuário caso queira verificar se alguma coisa mudou depois de seu acesso ao banco, ele mesmo dá o comando !
Abraços,
Francisco.
Uma idéia seria deixar um botão ´Refresh´ no form, daí o próprio usuário caso queira verificar se alguma coisa mudou depois de seu acesso ao banco, ele mesmo dá o comando !
Abraços,
Francisco.
GOSTEI 0
Pestana_
21/12/2007
Olá amigos,
Uma idéia seria deixar um botão ´Refresh´ no form, daí o próprio usuário caso queira verificar se alguma coisa mudou depois de seu acesso ao banco, ele mesmo dá o comando !
Abraços,
Francisco.
seria uma boa ideia que não poderia ser descartado, mas eu queria algo que o sistema atualizasse automaticamente.
GOSTEI 0
Pestana_
21/12/2007
de uma olhada neste penúltimo poste em um outro forum, é isso o que está pegando.
http://www.activedelphi.com.br/forum/viewtopic.php?t=37285
http://www.activedelphi.com.br/forum/viewtopic.php?t=37285
GOSTEI 0
Pestana_
21/12/2007
sobe
.
.
GOSTEI 0
Micheus
21/12/2007
Eu estava olhando alguns artigos ´inclusive a que você sugeriu´ e não estou conseguindo entender o porque da existência de mais de uma transação (p. ex.: uma transação para escrita (inserir, atualizar e deletar registros) e outra somente leitura (select)).
Neste [url=http://scriptbrasil.com.br/forum/index.php?showtopic=81370]tópico[/url] você citou que utiliza duas transações uma para (Read) e outra para (Update). Porque você utiliza este método, qual o objetivo?
Implementei assim porque achei que pelas características da aplicação que montei (tela de consulta/browse e de cadastro/edição), por ter um bom servidor, por ter poucos usuários e principalmente por [b:0a821ca8d8]apenas[/b:0a821ca8d8] um usuário poder alterar uma informação de cliente de cada vez.
Entretanto, as consultas são permitidas sem restrição. Então, uso esta transação de Update para os datasets em que faço a edição/update, sendo que faço um ´lock´ explícito ao selecionar os dados do ´cliente´ para edição - impedindo que qualquer outro usuário acesse esta tela de cadastro:
select COD_PESSOA, COD_TITULAR, IND_TIPO_PESSOA, ...
from PESSOA
where COD_PESSOA = :COD_PESSOA [b:0a821ca8d8]with lock[/b:0a821ca8d8]
Para as demais consultas, eu utilizo a outra transação apenas para leitura.
Para o meu caso, este procedimento funciona bem. De acordo com a necessidade.
Abraços
GOSTEI 0
Crash
21/12/2007
Revivendo o tópico (poderá ajudar alguem)...
Nesse caso eu imagino que você trabalhe com o firebird como se fosse um banco de dados desktop e não um Client/Server. Bancos de dados SQL trabalham com consultas ao servidor. Então é errado você pensar em abrir uma tabela e manter esta aberta o tempo inteiro. O correto seria você sempre que precisar realizar uma consulta.
Exemplo:
Errado:
Uma tela de pesquisa de clientes você abre todos registros e usa o comando Locate do dataset para realizar uma pesquisa incremental.
Certo:
Abre-se uma janela onde o usuário informa os primeiros caracteres e clica em procurar. O sistema gera uma consulta e abre todos clietnes com a condição espeficicada. Assim diminuindo a carga da rede e filtrando os resultados.
Pensando assim, não está errado você fechar e abrir as queries toda vez que desejar atualzar os dados, mesmo porque, o comando refresh no IBX não funciona da mesma forma que na classe TDataSet. O comando refresh utiliza a propriedade do IBUpdateSQL, RefreshSQL, para realizar uma renovação dos dados (que também só acontece no registro selecionado baseando no indice). Fechando e abrindo a query, vc só está realizando uma nova consulta.
O transaction deve ser levado em conta também... o correto para esse tipo de sistema é que use read_committed, rec_version, nowait. Ele buscará nas consultas somente os dados que já foram aceitos e comitados. Outra coisa: Você deve configurar o DefaultAction do transaction para TARollbackRetaining. Caso venha ocorrer algum erro no sistema durante a efetivacao da transacao, ele nao ira gravar fisicametne os dados.
Esperto ter ajudado!
Nesse caso eu imagino que você trabalhe com o firebird como se fosse um banco de dados desktop e não um Client/Server. Bancos de dados SQL trabalham com consultas ao servidor. Então é errado você pensar em abrir uma tabela e manter esta aberta o tempo inteiro. O correto seria você sempre que precisar realizar uma consulta.
Exemplo:
Errado:
Uma tela de pesquisa de clientes você abre todos registros e usa o comando Locate do dataset para realizar uma pesquisa incremental.
Certo:
Abre-se uma janela onde o usuário informa os primeiros caracteres e clica em procurar. O sistema gera uma consulta e abre todos clietnes com a condição espeficicada. Assim diminuindo a carga da rede e filtrando os resultados.
Pensando assim, não está errado você fechar e abrir as queries toda vez que desejar atualzar os dados, mesmo porque, o comando refresh no IBX não funciona da mesma forma que na classe TDataSet. O comando refresh utiliza a propriedade do IBUpdateSQL, RefreshSQL, para realizar uma renovação dos dados (que também só acontece no registro selecionado baseando no indice). Fechando e abrindo a query, vc só está realizando uma nova consulta.
O transaction deve ser levado em conta também... o correto para esse tipo de sistema é que use read_committed, rec_version, nowait. Ele buscará nas consultas somente os dados que já foram aceitos e comitados. Outra coisa: Você deve configurar o DefaultAction do transaction para TARollbackRetaining. Caso venha ocorrer algum erro no sistema durante a efetivacao da transacao, ele nao ira gravar fisicametne os dados.
Esperto ter ajudado!
GOSTEI 0
Rodolpho123
21/12/2007
Ola amigos !!
É o seguinte... eu tenho um sistema rodando em Firebird 2.0 com componentes de acesso da palheta Interbase... há 3 máquinas acessando o banco de dados ao mesmo tempo... todas conseguem visualizar e alterar dados... porém... as alterações que qualquer máquina faça só vai ser vista pela outra quando o usuário fechar o sistema e abri-lo novamente... o que é muito chato ! Como eu faço para que as alterações que qualquer terminal faça seja refletido automaticamente para os demais ? Sou inicante neste ramo de programação Cliente-Servidor, então se por gentileza alguem me puder ajudar passo a passo agradeço muito...
Grato pela atenção de todos...
Tiago,
Esse componente é todo bugado. Já tive este mesmo problema e a solução foi trocar de componente de acesso. E olha que foi a segunda vez que eu tive problemas com os componentes IBX. É bom ressaltar também que ele não foi feito para o FB....
Atualmente eu uso o MDO e funciona perfeitamente....vem até com os fontes...
GOSTEI 0
Crash
21/12/2007
[quote:ddcadb33dc=´TiagoJmilam´]Ola amigos !!
É o seguinte... eu tenho um sistema rodando em Firebird 2.0 com componentes de acesso da palheta Interbase... há 3 máquinas acessando o banco de dados ao mesmo tempo... todas conseguem visualizar e alterar dados... porém... as alterações que qualquer máquina faça só vai ser vista pela outra quando o usuário fechar o sistema e abri-lo novamente... o que é muito chato ! Como eu faço para que as alterações que qualquer terminal faça seja refletido automaticamente para os demais ? Sou inicante neste ramo de programação Cliente-Servidor, então se por gentileza alguem me puder ajudar passo a passo agradeço muito...
Grato pela atenção de todos...
Tiago,
Esse componente é todo bugado. Já tive este mesmo problema e a solução foi trocar de componente de acesso. E olha que foi a segunda vez que eu tive problemas com os componentes IBX. É bom ressaltar também que ele não foi feito para o FB....
Atualmente eu uso o MDO e funciona perfeitamente....vem até com os fontes...[/quote:ddcadb33dc]
Eu uso IBX em meus sistemas desde o Delphi 5, e nunca tive nenhum problema com performace ou erros do sistema. Mais também vale ressaltar que o ideal é sempre usar as bibliotecas mais atuais, então atualize o IBX. Todos os erros que vc encontrou provavelmetne serão corrigidos.
GOSTEI 0
Paullsoftware
21/12/2007
Seria muito ironia, mais não ví ninguém mensionar nada a respeito, nem o autor do tópico publicou códigos de como estão sendo realizadas as suas transações, neste caso você está aplicando os dados no seu componente DataWare? tipo usando o ApplyUpdates?
como está sua rotina do botão salvar por exemplo? mostre-nos talvez possamos te ajudar ainda mais!!!
como está sua rotina do botão salvar por exemplo? mostre-nos talvez possamos te ajudar ainda mais!!!
GOSTEI 0
Crash
21/12/2007
Seria muito ironia, mais não ví ninguém mensionar nada a respeito, nem o autor do tópico publicou códigos de como estão sendo realizadas as suas transações, neste caso você está aplicando os dados no seu componente DataWare? tipo usando o ApplyUpdates?
como está sua rotina do botão salvar por exemplo? mostre-nos talvez possamos te ajudar ainda mais!!!
Desculpa se estou sendo rude, mais... pra quem foi essa pergunta?
GOSTEI 0
Paullsoftware
21/12/2007
[quote:2d86e08e87=´paullsoftware´]
como está sua rotina do botão salvar por exemplo? mostre-nos talvez possamos te ajudar ainda mais!!!
Desculpa se estou sendo rude, mais... pra quem foi essa pergunta?[/quote:2d86e08e87]Nada pow relaxa... apenas mensionei que: não perguntado como exatamente ele tá aplicando seus dados no banco!!!
Muitas vezes vendo o código fica mais fácil de ajudar e entender exatamente o que está se passando rsrs
Obviamente a pergunta foi feita para o autor do tópico [b:2d86e08e87]TiagoJmilam[/b:2d86e08e87] mais valeu para todos que estão participando da discussão, pois, todos estamos tentando ajudar a sanar um problema!!! :roll:
GOSTEI 0
Crash
21/12/2007
[quote:f034ae043c=´CrasH´][quote:f034ae043c=´paullsoftware´]
como está sua rotina do botão salvar por exemplo? mostre-nos talvez possamos te ajudar ainda mais!!!
Desculpa se estou sendo rude, mais... pra quem foi essa pergunta?[/quote:f034ae043c]Nada pow relaxa... apenas mensionei que: não perguntado como exatamente ele tá aplicando seus dados no banco!!!
Muitas vezes vendo o código fica mais fácil de ajudar e entender exatamente o que está se passando rsrs
Obviamente a pergunta foi feita para o autor do tópico [b:f034ae043c]TiagoJmilam[/b:f034ae043c] mais valeu para todos que estão participando da discussão, pois, todos estamos tentando ajudar a sanar um problema!!! :roll:[/quote:f034ae043c]
Eu perguntei justamente porque o tópico é muito velho, e eu só reabri ele pra solucionar para outros membros que utilizam a ferramenta de pesquisa.
GOSTEI 0
Paullsoftware
21/12/2007
Eu perguntei justamente porque o tópico é muito velho, e eu só reabri ele pra solucionar para outros membros que utilizam a ferramenta de pesquisa.
Tranquilo!!!GOSTEI 0
Mahdak
21/12/2007
cara, é o seguinte, diz pro seu amigo mudar pra DBExpress.
A solução pra esse tópico é simples, faz tempo que tive esse problema e resolvi ele da seguinte forma:
no Evento OnAfterApplyUpdates do seu DataSet
if not SeuDataSet.StartTransaction then
SeuDataSet.StartTransaction
end;
Obs: faz um zilhão de anos que nao uso os componentes Interbase, então nao lembro se é Exatamente isso que postei acima, mas o caminho é por ai...
abraços!
A solução pra esse tópico é simples, faz tempo que tive esse problema e resolvi ele da seguinte forma:
no Evento OnAfterApplyUpdates do seu DataSet
if not SeuDataSet.StartTransaction then
SeuDataSet.StartTransaction
end;
Obs: faz um zilhão de anos que nao uso os componentes Interbase, então nao lembro se é Exatamente isso que postei acima, mas o caminho é por ai...
abraços!
GOSTEI 0