Fórum Sistema da erro nos indices da tabela #428198
07/11/2012
0
Alguem pode me ajudar a resolver isso?
Carlos Magno
Curtir tópico
+ 0Posts
07/11/2012
Robson Alves
Isso é facilmente resolvido com auto-identity.
Gostei + 0
07/11/2012
Wilton Júnior
O sistema principal geralmente fica no servidor, então na hora de gerar a conexão do mesmo no componente eu coloco o ip do servidor e nas maquinas cliente eu coloco o mesmo executavel que já esta conectado ao servidor.
Isso eu tenho certeza que funciona pois é assim que o programa que criei para o suporta da empresa que trabalho funciona e funciona bem.
Espero ter ajudado
Deus o abençoe
Gostei + 0
07/11/2012
Carlos Magno
Gostei + 0
07/11/2012
Wilton Júnior
Da um olhada no DBE Administrato que fica no painel de controle e da uma olhada na forma da conexão que ele fez.
Gostei + 0
07/11/2012
Carlos Magno
Type: STANDARD
DEFAULT DRIVER: PARADOX
ENABLE BCD: FALSE
PATH: \\CAMINHO DO OUTRO PC\base de dados
Gostei + 0
07/11/2012
Carlos Magno
Como que faço isso?
Gostei + 0
07/11/2012
Tiago
Gostei + 0
07/11/2012
Carlos Magno
Gostei + 0
07/11/2012
Gilvanio Gonçalves
de estar gravando em um e no outro da erro quando dois usuarios estão fazendo
o cadastro é porque talvez estejam gravando o mesmo codigo na tabela.
sendo em rede seu aplicativo deve interagir com o usuario assim, usuario inicia
o cadastro sendo pra ele codigo 20, se o outro usuario for iniciar também
o cadstro ao iniciar o codigo dele será o 21, vc tem que olhar esta questào do codigo
e também se o aplicativo esta mesmo em rede, teste em um micro um cadastro
e veja se a tabela recebeu os dados,sendo este micro o servidor, onde o aplicativo foi
instalado, feche a plaicativo e vá no outro micro que o aplicativo esta em rede
cadastre um novo, verique se o codigo é o proximo ou esta diferente, sem estar seguindo
uma sequencia, se estiver, veja se gravou no banco.
caso não, seu aplicativo não esta em rede.
banco paradox, o aplicativo deve ser instalado somente em micro, como servidor
nos outros denominados estações devem conter somente o executavel,e no BDE das o caminho para o servidor.
não é index dierecionado na rede e sim a pasta do seu aplicativo
sendo um campo codigo autoimcremento, estando em rede vai funcionar normal.
apenas sempre no final do seu codigo de gravar coloque o codigo refresh.
paradox é muito simmples de manipular, tanto em rede como aplicativo.
faça os testes, se á algum erro de rede.
agora em minha humilde opnião não deixaria o codigo do cliente ser autoincremto.
o paradox da muito access violation, eu faria o codigo ser gerado por codificação.
espero que te ajude em algo
Gostei + 0
07/11/2012
Gilvanio Gonçalves
o que toda tabela tem que ter é um campo primary key.
pode ser no codigo ou outro campo da tabela, mas não pode deixar de ter um campo sendo
primary.
o erro comum do paradox como citei no post anterior é acces violation, gravando em duplicidade.
vamos a um mini tutorial do paradox em rede.
1) Todas as máquinas deverão ter o BDE instalado.
nas estações(Cliente) somente o executavel do seu aplicativo.
2) No servidor, configure o BDE da seguinte forma.
NET DIR - C: - Ou o drive onde o banco de dados está residindo. Este driver deverá ter
permissão para que todos possam escrevê-lo. Caso não tenha, coloque o NET DIR como C:BANCO_DE_DADOS
Onde BANCO_DE_DADOS é o diretório dos dados. Obviamente, este diretório será público para todos.
Obs: A propriedade Net Dir se encontra em Configuration, Drivers, Native, Paradox.
3) LOCAL SHARE - TRUE. A propriedade Local Share se encontra em Configuration, System, Init.
4) Nas máquinas clientes (Estações), configure o BDE da seguinte forma:
NET DIR - CAMINHO DO SERVIDOR, EQUIVALENTE AO NETDIR CONFIGURADO NO MESMO.
Ex: Se o Net Dir do servidor foi configurado como C:, o NET DIR da máquina cliente poderia ser
configurado como:
NOME_DO_SERVIDORC
Onde:
Nome_Do_Servidor - Nome da máquina servidor, na rede, onde foi instalado o aplicativo.
C - Nome do compartilhamento para o drive C do servidor.
Se o Net Dir do servidor estivesse apontado para o diretório de banco de dados, o cliente poderia
estar configurado como:
NOME_DO_SERVIDORCDIRETORIO_DO_BANCO
Em Configuration, System, Init
configure:
LOCAL SHARE - TRUE.
compartilhe a pasta do seu aplicativo.
assim não tem erro no paradox em rede, mesmo sendo seu codigo auto incremento.
Limitação:
enquanto o delphi era de proriedade da borland, o paradox suporta 20 micros em rede somente.
atualmente não sei quantos?.
Gostei + 0
08/11/2012
Carlos Magno
Então, indo ao seu penúltimo tópico:
Como poderei fazer isso?... por pelo visto, resolvendo isso eu iria resolver o problema desse outro tópico que ainda nao consegui solucionar:
[url]https://www.devmedia.com.br/forum/viewtopic.asp?id=421109[/url]
Agradeço a toda ajuda que vier
Gostei + 0
08/11/2012
Gilvanio Gonçalves
Então, indo ao seu penúltimo tópico:
Como poderei fazer isso?... por pelo visto, resolvendo isso eu iria resolver o problema desse outro tópico que ainda nao consegui solucionar:
[url]https://www.devmedia.com.br/forum/viewtopic.asp?id=421109[/url]
Agradeço a toda ajuda que vier
SCE25n20120ngnes31092012sce.
pelo que entendi o campo autoincremento é na sua tabela certo?
na tebela do outro programa (cliente) é alfphamerico, ou seja o programador
optou por esta opção, devido a ele mandar incrementar o proximo codigo, na
codificação.
na questão de quando manda cadastrar vc manda cadastrar no banco no outro
sistema eplo seu aplicativo é isto.
qual o tipo de banco que é usado neste sistema, dbf. paradox?
o sistema esta em um micro, o seu aplicativo que busca no banco dele também
esta no mesmo micro?
o erro só acontece quando um usuario esta inserindo dados na tebela ao
mesmo tempo com outro usuario, se gavra no micro onde esta o sistema e seu aplicativo
sendo um cadstro dá erro?
se da erro quando sendo dois cadastros feitos ao mesmo tempo, é porque esta gravando
na tabela do sistema dois registros com o mesmo valor (codigo) ou seja
o seu aplicativo não faz a tabela do sistema gerar um novo codigo, para um novo registro.
quando eu disse que não gosto de autoincremento é nos meus sistemas.
no seu caso teria qua ver o codigo que manda gravar na tabela do outro sistema,
pois vc terá que fazer seu aplicativo colocar a tabela em modo de inserção
mas sendo que o novo registro será gerado um novo codigo, ou seja eu estou cadstrando
no codigo 15, que esta livre para cadstro, e vc vai cadastara junto comigo
ao vc começar a inserir o codigo livre pra vc terá que ser o 16, mesmo que eu termine depois devc
ou desita do cadstro, ccodigo reservado.
isto é uma explicação apenas.
entre em detalhes sobre o outro sistema, se vc esta usando seu aplicativo somente
para inserir produto na tabela dele, qual o bco dele, me diga o que realmente vc precisa que vou resolver
junto com vc.
obs. seu problema não esta na rede, e sim no banco no sistema.
ok?
Gostei + 0
08/11/2012
Gilvanio Gonçalves
no BDE vc terá que apontar o caminho de gravação do seu aplicativo ao caminho da tabela do sistema, questão rede.
Gostei + 0
08/11/2012
Carlos Magno
O erro esta dando no meu sistema e em uma tabela paradox criada por eu mesmo. As tabelas estão em um PC junto com o sistema, e tem um notebook com o BDE configurado em rede para acessar as tabelas no PC. Quando dois usuarios vão cadastrar ao mesmo tempo em máquinas diferente, ao que parece, esta criando o mesmo código e somente um deles grava (claro, o que termina primeiro), e o outro dá erro...
No problema do link que passei, a tabela já é do outro sistema e queria adicionar campos e manipula-la pelo meu sistema...
Se precisar de mais informações, só falar...
Gostei + 0
08/11/2012
Alisson Santos
Eu particularmente não sei utilizar muito o generador do paradox, sendo assim não poderei informar certinho.
Mais no seu caso o que eu faria, era colocar um comando direto na query no AfterInsert.
Poderia criar uma rotina que pudesse ser utilizada em outros ou poderia duplicar o código.
Utiliza o comando abaixo para saber o valor do ultimo registro
with qryAux do
begin
Close;
SQL.Clear;
SQL.ADD('select max(Campo Tabela que é chave primaria) as "Nome Alias" from Tabela)';
"Variavel"autoincremento := parambyname("Nome Alias").AsInteger;
parambyname("Nome Alias").AsInteger := autoincremento + 1;
Open;
end;
Creio que o código acima resolver o seu problema.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)