interbase transferencia de dados demorada
Olá Pessoal
Fiz a conversão de paradox para interbase, mas estou tendo algumas problemas
- quando faço atualização de tabela para tabela ou base para base leva mais tempo que a aplicação que tinha em paradox
estou usando os componentes:
IBDataBase, IBTransaction1, IBTable1, DataSource1
- em paradox usava DBISaveChanges(Table1.Handle) para não perder dados ao sair do form.
No interbase coloquei na propriedade do IBTransaction1 => TACommit mas só é salvo se navegar nos registros, o que devo fazer para que o programa vá salvando os dados parecido com DBISaveChanges(Table1.Handle)
- O que tenho notado tambem que a base de dados não diminui o tamanho mesmo excluindo todos os regitros
Fiz a conversão de paradox para interbase, mas estou tendo algumas problemas
- quando faço atualização de tabela para tabela ou base para base leva mais tempo que a aplicação que tinha em paradox
estou usando os componentes:
IBDataBase, IBTransaction1, IBTable1, DataSource1
- em paradox usava DBISaveChanges(Table1.Handle) para não perder dados ao sair do form.
No interbase coloquei na propriedade do IBTransaction1 => TACommit mas só é salvo se navegar nos registros, o que devo fazer para que o programa vá salvando os dados parecido com DBISaveChanges(Table1.Handle)
- O que tenho notado tambem que a base de dados não diminui o tamanho mesmo excluindo todos os regitros
Valdemar_d
Curtidas 0
Respostas
Afarias
16/03/2004
Bom Valdemar, primeiro tenha em mente q enquanto o Paradox é apenas um ´gerenciador de arquivos´ o Interbase é um SGBD completo e estes são *muito* diferentes entre si.
Em aplicações locais, mono-usuário, é mais recomendado o uso de gerenciadores de arquivos a SGBDs -- mas vamos as questões::
|- quando faço atualização de tabela para tabela ou base para base leva
|mais tempo que a aplicação que tinha em paradox
Bom, depende de como vc está fazendo o processo. Mas, simplesmente escrever ou ler (tudo) para/de um SGBD é sempre mais lento q para um arquivo simples (como no paradox) pois os SGBDs exigem vários ´processos´ -- SGBDs são *muito* mais rápidos q gerenciadores de arquivo quando se trata de aplicações q rodam em rede com muitos registros e usuários.
|em paradox usava DBISaveChanges(Table1.Handle) para não perder
|dados ao sair do form. No interbase coloquei na propriedade do
|IBTransaction1 => TACommit mas só é salvo se navegar nos registros,
Para que as operações sejam definitivamente efetuadas, vc deve ´commitar´ a transação::
Transaction1.Commit;
ou
IBDataSet1.Transaction.Commit;
Se vc não trabalha com servidores apropriados, recomendo q coloque seu banco em forced-writes:
gfix -write sync -user sysdba -pass senha_do_sysdba seu_banco.gdb
faça uma pesquisa no fórum por FORCED WRITES ou SYNC ou síncrona para saber mais sobre o assunto
|O que tenho notado tambem que a base de dados não diminui o
|tamanho mesmo excluindo todos os regitros
Correto! E isso é normal.
Alocar + espaço para o arquivo requer muito ´esforço´, então, por rezões de otimização o arquivo não é reduzido e o espaço existente será reaproveitado.
T+
Em aplicações locais, mono-usuário, é mais recomendado o uso de gerenciadores de arquivos a SGBDs -- mas vamos as questões::
|- quando faço atualização de tabela para tabela ou base para base leva
|mais tempo que a aplicação que tinha em paradox
Bom, depende de como vc está fazendo o processo. Mas, simplesmente escrever ou ler (tudo) para/de um SGBD é sempre mais lento q para um arquivo simples (como no paradox) pois os SGBDs exigem vários ´processos´ -- SGBDs são *muito* mais rápidos q gerenciadores de arquivo quando se trata de aplicações q rodam em rede com muitos registros e usuários.
|em paradox usava DBISaveChanges(Table1.Handle) para não perder
|dados ao sair do form. No interbase coloquei na propriedade do
|IBTransaction1 => TACommit mas só é salvo se navegar nos registros,
Para que as operações sejam definitivamente efetuadas, vc deve ´commitar´ a transação::
Transaction1.Commit;
ou
IBDataSet1.Transaction.Commit;
Se vc não trabalha com servidores apropriados, recomendo q coloque seu banco em forced-writes:
gfix -write sync -user sysdba -pass senha_do_sysdba seu_banco.gdb
faça uma pesquisa no fórum por FORCED WRITES ou SYNC ou síncrona para saber mais sobre o assunto
|O que tenho notado tambem que a base de dados não diminui o
|tamanho mesmo excluindo todos os regitros
Correto! E isso é normal.
Alocar + espaço para o arquivo requer muito ´esforço´, então, por rezões de otimização o arquivo não é reduzido e o espaço existente será reaproveitado.
T+
GOSTEI 0
Valdemar_d
16/03/2004
afarias
A aplicação que estou trabalhando é Local não está em rede
A maneira que estou usando para atualizar é o seguinte:
ModBanco.Tablexx1.open;
ModBanco.Tablexx1Nome.Asstring :=
ModBanco2.Tablexx1Nome.Asstring
...
ModBanco.Tablexx1.close;
Poderia informar alguma dica para que possa fazer a atualização de dados de banco.gdb para banco2.gdb que seja rápido?
A aplicação que estou trabalhando é Local não está em rede
A maneira que estou usando para atualizar é o seguinte:
ModBanco.Tablexx1.open;
ModBanco.Tablexx1Nome.Asstring :=
ModBanco2.Tablexx1Nome.Asstring
...
ModBanco.Tablexx1.close;
Poderia informar alguma dica para que possa fazer a atualização de dados de banco.gdb para banco2.gdb que seja rápido?
GOSTEI 0
Afarias
16/03/2004
|A aplicação que estou trabalhando é Local não está em rede
Se sua aplicação é local (e será sempre assim) recomendo q use um gerenciador de arquivos mesmo como Paradox, FlashFiler ou qualquer DBISAM de sua preferência...
|A maneira que estou usando para atualizar é o seguinte:
|ModBanco.Tablexx1.open;
Normalmente não é correto usar TABLES com SGBDs... mas neste caso até q não é um problema (desde q vc deseje sempre copiar TODA a tabela)...
|Poderia informar alguma dica para que possa fazer a atualização de
|dados de banco.gdb para banco2.gdb que seja rápido?
Por curiosidade, vc poderia informar pq está transferindo informações de um banco para outro?? Sei lá... isso não é muito normal... (a não ser por REPLICAÇÃO)
bom, um exemplo seria::
IBSQL1.Transaction.StartTransaction;
with IBTable1 do
begin
Open;
First;
while not Eof do
begin
for I := 0 to FieldCount-1 do
IBSQL1.ParamByName(Fields[I].FieldName).Value := Fields[I].Value;
ExecQuery;
Next;
end;
IBSQL1.Transaction.Commit;
Transaction.Commit;
end;
o IBSQL1 tem um INSERT com os parâmetros com nomes iguais aos campos (imaginando que vc esteja copiando tabelas idênticas) ..
T+
Se sua aplicação é local (e será sempre assim) recomendo q use um gerenciador de arquivos mesmo como Paradox, FlashFiler ou qualquer DBISAM de sua preferência...
|A maneira que estou usando para atualizar é o seguinte:
|ModBanco.Tablexx1.open;
Normalmente não é correto usar TABLES com SGBDs... mas neste caso até q não é um problema (desde q vc deseje sempre copiar TODA a tabela)...
|Poderia informar alguma dica para que possa fazer a atualização de
|dados de banco.gdb para banco2.gdb que seja rápido?
Por curiosidade, vc poderia informar pq está transferindo informações de um banco para outro?? Sei lá... isso não é muito normal... (a não ser por REPLICAÇÃO)
bom, um exemplo seria::
IBSQL1.Transaction.StartTransaction;
with IBTable1 do
begin
Open;
First;
while not Eof do
begin
for I := 0 to FieldCount-1 do
IBSQL1.ParamByName(Fields[I].FieldName).Value := Fields[I].Value;
ExecQuery;
Next;
end;
IBSQL1.Transaction.Commit;
Transaction.Commit;
end;
o IBSQL1 tem um INSERT com os parâmetros com nomes iguais aos campos (imaginando que vc esteja copiando tabelas idênticas) ..
T+
GOSTEI 0
Valdemar_d
16/03/2004
afarias
||Poderia informar alguma dica para que possa fazer a atualização de
||dados de banco.gdb para banco2.gdb que seja rápido?
|Por curiosidade, vc poderia informar pq está transferindo informações de |um banco para outro?? Sei lá... isso não é muito normal... (a não ser por |REPLICAÇÃO)
Na verdade o sistema irá rodar em localidades distantes e preciso inserir e atualizar essas informações numa central.
A versão antiga está em Paradox e funcionando essa atualização, só que o Paradox tem momentos que dá erros, por isso que passei para o interbase para eliminar o maximo de erros...
|Normalmente não é correto usar TABLES com SGBDs... mas neste caso |até q não é um problema (desde q vc deseje sempre copiar TODA a |tabela)...
|o IBSQL1 tem um INSERT com os parâmetros com nomes iguais aos |campos (imaginando que vc esteja copiando tabelas idênticas) ..
A copia e atualização será de todas tabelas que contem o arquivo banco.gdb e as tabelas são idênticas
||Poderia informar alguma dica para que possa fazer a atualização de
||dados de banco.gdb para banco2.gdb que seja rápido?
|Por curiosidade, vc poderia informar pq está transferindo informações de |um banco para outro?? Sei lá... isso não é muito normal... (a não ser por |REPLICAÇÃO)
Na verdade o sistema irá rodar em localidades distantes e preciso inserir e atualizar essas informações numa central.
A versão antiga está em Paradox e funcionando essa atualização, só que o Paradox tem momentos que dá erros, por isso que passei para o interbase para eliminar o maximo de erros...
|Normalmente não é correto usar TABLES com SGBDs... mas neste caso |até q não é um problema (desde q vc deseje sempre copiar TODA a |tabela)...
|o IBSQL1 tem um INSERT com os parâmetros com nomes iguais aos |campos (imaginando que vc esteja copiando tabelas idênticas) ..
A copia e atualização será de todas tabelas que contem o arquivo banco.gdb e as tabelas são idênticas
GOSTEI 0
Afarias
16/03/2004
Ok!
T+
T+
GOSTEI 0