Fórum Paradox? Posso utilizar isso ainda? #349571

24/11/2007

0

Amigos, comecei a ´programar´ (hobby) com Delphi 3 e Paradox. Hoje tenho o Delphi 7. Tenho um sistema próprio de minha oficina (sou técnico em eletônica - tenho uma empresa - micro - de assistência técnica autorizada - linha de eletrônicos - tv, dvd, som etc). Comecei a desenvolver esse sistema em Delphi 3 com Paradox. Bem... ao longo do tempo o sistema ficou ´inchado´, já que foi ´adicionando´ cada vez mais funções... e, a cada nova função, como tinha um pouco mais conhecimento, ia incrementando como podia. Agora já não dá mais.... tá uma bagunça danada o sistema e resolvi reescrevê-lo em delphi 7. Até comecei a mexer com firebird, mas, encontrando algumas barreiras e, já tendo bastante conhecimento de utilização de Paradox em rede (´testado e aprovado´ por mais de 4 anos), fico pensando se, adotar um novo banco de dados nesse momento, não seria começar tuuuuudo de novo. Gostaria de algumas opiniões, por favor, fiquem à vontade.... Um abraço a todos. Gilson.


Gilson.pontes

Gilson.pontes

Responder

Posts

24/11/2007

Edilcimar

O único problema com o piradox são os índices, eles se corrompem fácil, apesar disto tenho programas rodando com ele em diversos locais sem nenhum problema. Passar para o firebird é melhor, e como você já está acostumado com ´tabelas´, use a paletra do interbase onde você tem IBTable, que é uma ´tabela´ que pode ser utilizada com o firebird da mesma forma que usa uma tabela com o piradox (a diferença é muito pouca), além disto se usa query, lá também tem IBQuery. O único problema que vai encontrar com o firebird é a inexistência de um campo autoincremento, mas ser olhar por aqui vai ver dezenas de exemplos de criação de uma campo ´autoincremento´


Responder

Gostei + 0

24/11/2007

Gilson.pontes

´PIRADOX´....... ah ah ah..... gostei. Cara, utilizo o paradox há mais de quatro anos em meu sistema e nunca ocorreu essa história de corromper índices..... estranho. Somente no início, qdo ainda estava pouco acostumado, é que andou acontecendo uns problemas qdo ocorria pico de luz e desligamento de máquina, p. exemplo. Mas aí, criei uma rotina p/ salvar fisicamente o registro sempre que havia inserção ou alteração... conforme abaixo:

no after post e no after delete...
//
var i: LongInt;
begin
with Table1 do
begin
i := Fields(0).AsInteger;
Close;
Open;
Locate(´Registro´, i, []);
end;
end;

Comecei a utilizar o Firebird, mas esbarrei, p. exemplo, na situação de duplo acesso.... No paradox, qdo vc coloca a tabela em ´edit´, o paradox não permite que outro usuário tb a coloque em ´edit´. No firebird, isso é permitido e aí...... (?) Também achei um tanto complexa a configuração para utilizá-lo em rede... Não achei muita coisa (que realmente explicasse direitinho) na internet sobre o assunto.

Bem..... vou continuar a pesquisar e fazer experiências com o firebird... pelo visto, terei que aprender esse negócio mesmo.... Tá todo mundo usando.....

Abraço..... e obrigado pela resposta.... té+


Responder

Gostei + 0

24/11/2007

Edilcimar

as respostas vc acha aqui mesmo no fórum, na parte interbase/firebird


Responder

Gostei + 0

24/11/2007

Jocelio

Olá GILSON.PONTES, tambem tenho um sistema em paradox, não entendi a sua rotina :

no after post e no after delete...
//
var i: LongInt;
begin
with Table1 do
begin
i := Fields(0).AsInteger;
Close;
Open;
Locate(´Registro´, i, []);
end;
end;

Poderia me explicar o porquê do Locate ?

Obrigado.

Jocelio


Responder

Gostei + 0

25/11/2007

Jcol_info

coloque no evento AfterPost e AfterDelete de cada tabela do seu sistema o comando a seguir:

DbiSaveChanges((DataSet as TTable).Handle);

dessa forma, todos os registros serão salvos em disco após um Post ou um Delete.

Inclua na sessão uses a unit BDE.

Eu uso Paradox desde 1998 e nunca tive corrupção de arquivos.


Responder

Gostei + 0

25/11/2007

Gilson.pontes

Ao amigo Jocelio...

o Locate é para que a tabela volte para o registro em que estava antes de ser fechada. Por isso capturo o Registro (ou código - como queira), salvo em uma variável inteira e depois utilizo o valor que está nessa variável para voltar ao registro. Se não fizer o locate, ao reabrir a tabela, ela simplesmente fica no primeiro registro.

Ao amigo Jco_info...

Não conhecia esse comando. Vou testá-lo. Como diz um progrmador com quem tenho contato de vez em quando, a rotina por mim criada nada mais é que um ´P.O.G.´ (programação orientada a gambiarras)..... uma alusão ao P.O.O. (programação orientada a objeto)...... eh eh eh.... aposto que não é mais ´pogado´ que o windows....

Abraço a todos.


Responder

Gostei + 0

27/11/2007

Jcol_info

Amigo Gilson,

eu também utilizava uma rotina parecida. Aprendi sobre este comando num santo forum desses por aí!


Responder

Gostei + 0

03/12/2007

Daykas

Prezado!
Quanto a poder usar, se quiser, pode usar até arquivos de texto, mas precisa ficar atento para as tecnologias que as atuais necessidades necessitam e, sendo assim, paradox já estaria ultrapassado demais para utilizá-lo.


Responder

Gostei + 0

04/12/2007

Jcol_info

Concordo em gênero, número e grau com o Daykas. Se vc tem um sistema em paradox e está funcionando ou tem que desenvolver um sistema simples e o paradox serve, td bem!!

Mas se vai desenvolver um sistema novo ou até se pretende melhorar um sistema já existente, estude novas tecnologias, vc terá mais recursos, com toda certeza, abandone o Paradox.

Abraços.


Responder

Gostei + 0

04/12/2007

Gilson.pontes

Muito obrigado a todos..... Já estou batalhando aki com Firebird....

Então... já q estou começando c/ o Firebird... vamos lá...

Criei alguns Trigger´s (opa.... vejam só, progredi, já estou até fazendo trigger... eh eh eh) de autoincremento de ´REGISTRO´ nas diversas tabelas. Até aí tudo bem.... Porém... ao chamar o evento Post, após a inclusão de um cliente, p. exemplo, esse ´REGISTRO´ não aparece, mesmo se, após o evendo post (afterpost) eu puser um CommitRetaining no TIBTransaction..... (a impressão q eu tenho, é que não está sendo gravado fisicamente no disco o registro inserido, por isso ele não está retornando o ´REGISTRO´ gerado pelo trigger).

Nesse caso, ao inserir um novo registro de telefone (que é tabela ´filha´ - detalhe), preciso iniciar (afterinsert) com a atribuição do ´REGISTRO´ da tabela clientes no ´REG_CLIENTE´ da tabela Telefones (p/ manter a integridade referencial)..... certo? Como ainda ´não existe´ o ´REGISTRO´ da tabela Clientes, o ´REG_CLIENTE´ da tabela telefones com valor 0 e dá erro se eu executar Post nela, dizendo que não existe referencia da chave estrangeira da tabela telefones na tabela clientes.

P/ eu começar c/ o pé direito nesse negócio, alguém pode me dar uma ´luz´....

Abraço a todos....


Responder

Gostei + 0

05/12/2007

Gandalf.nho

Que componentes de acesso você está usando?


Responder

Gostei + 0

06/12/2007

Gilson.pontes

Amigo, estou utilizando paleta InterBase (c/ delphi 7). Mas já resolvi o problema....

Há uma propriedade do IBDataSet chamada GeneratorField que ´traz´ o ´REGISTRO´ da tabela ´CLIENTE´ gerado no Genarator do firebird. Aliás, nem precisa fazer nenhuma trigger p/ gerar o ´REGISTRO´, basta essa propriedade estar configurada. Com relação ao ´REG_CLIENTE´ da tabela ´TELEFONES´, nesse caso teria duas opções:

1ª -> Colocar uma IBTable (p/ TELEFONES) que possuem as propriedades ´MasterSource´ e ´MasterField´ - portanto fazem essa dependência - e com isso, gera o ´REG_CLIENTE´ na tabela ´TELEFONES´ automaticamente, a partir do ´REGISTRO´ da tabela ´CLIENTES´.

2ª -> Utilizar o IBDataSet (IBDataSetTelefones), e, no seu evento afterpost, atribuir ao field ´REG_CLIENTE´, o field ´REGISTRO´ da tabela ´CLIENTES´.

De qualquer forma.... agradeço.... e, é claro, continuo aceitando sujestões... essas são SEMPRE bem vindas....


Responder

Gostei + 0

07/12/2007

Gilson.pontes

só encontrei agora um problema......

não consigo editar*, nem deletar*... ele altera/deleta após o post/delete, dou commit (ou commitretraing). Porém, ao abrir a tabela novamente, o registro está lá do mesmo jeito (como se não tivesse feito nada).

(*utilizando IBDataSet) - se eu utilizar o IBTable, consigo salvar edição e/ou deletar registro normalmente.

Viram.... continuo precisando de sujestões....... Eita Firebird..... mas eu não desisto....


Responder

Gostei + 0

07/12/2007

Gilson.pontes

errata................

2ª -> Utilizar o IBDataSet (IBDataSetTelefones), e, no seu evento AFTERINSERT (e não afterpost), atribuir ao field ´REG_CLIENTE´, o field ´REGISTRO´ da tabela ´CLIENTES´.

desculpem-me.....


Responder

Gostei + 0

07/12/2007

Gandalf.nho

Em vez de usar o AfterInsert, use OnNewRecord para atribuir o valor que serve para unir as tabelas.

Quanto ao problema de atualizar/excluir, dê uma conferida nas SQLs geradas para essas propriedades, para ver se estão corretas.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar