Oi Orlando,

Vc tem absoluta razão sobre o MS ACCESS ser precário, mas dependendo do
uso e do porte do seu problema pode ser uma solução rápida, de simples
manipulação e porque não dizer EFICAZ.

A sua sugestão de concatenar campos para a formação de chaves nem sempre
é possível. No meu exemplo não funcionaria porque nem todo BEI (Bem de
Informática) da minha tabela possui um IP Address associado ao mesmo, ou
seja, é um campo opcional.

Já resolvi este problema mantendo a Auto-Numeração, mas como???

Tenho 2 campos na tabela que registram o LOGON do operador e a DATA&HORA
da última atualização (Inclusão/Alteração). Aumentei a precisão do campo
DATA&HORA e, logo após o INSERT INTO, faço um SELECT baseado neste
campo, que aí sim, é do meu prévio conhecimento. Recupero a chave de
Auto-Numeração do MS ACCESS e fica tudo resolvido. Este problema só
ocorre na primeira gravação = Inclusão.

Aliás, aproveitando a oportunidade, acuso um problema que ocorre com o
TIME das datas geradas pelo Java. Sempre existe uma defasagem entre a
Hora/Minuto gerada pelo Java e a Hora/Minuto real que aparece no relógio
do Windows. Várias pessoas já colocaram esta dúvida para a LISTA sem
sucesso nas respostas.

[]'s

Carlos Campos

> ----- Mensagem original -----
> De:           Orlando Dias [SMTP:[EMAIL PROTECTED]]
> Enviada em:           Quinta-feira, 16 de Dezembro de 1999 06:56
> Para:         [EMAIL PROTECTED]
> Cc:           'Lista Java BR'
> Assunto:              Re: [SouJava-J] INSERT INTO do SQL
> 
> Carlos,
> 
> Acredito que o problema aqui não é a utilização de banco de dados de
> verdade
> (já que o MS-Access não o é).
> 
> O problema é a utilização de um dado externo, artificial a sua
> entidade ou
> objeto, que é o caso da auto-numeração do MS-Access.
> 
> O ideal no modelo relacional é que você tenha uma chave que seja
> formada por
> dados já existentes na sua entidade (que tal a concatenação o IP + o
> Local),
> que o mundo externo a aplicação conheça, facilitando assim as
> consultas.
> 
> Sei que muita gente utiliza a auto-numeração para resolver problemas
> de
> chaves-primárias, principalmente, quando estas tabelas não tem um
> atributo
> conveniente  (tabela de bairro, por exemplo, qual a diferença de se
> criar um
> código de bairro  e uma auto-numeração - os dois são artificiais!), ou
> quando a concatenação gera uma chave muito longa (criando áreas de
> índices
> muito volumosas).
> 
> Existem muitas discuções a este respeito: pessoas que acham que a
> auto-numeração é muito legal, que facilita a vida, que diminui espaço
> no BD
> e outras que olham para os relacionamentos e não entendem nada porque
> são
> montados sobre dados inexistentes no mundo real.
> 
> A auto-numeração é uma solução excelente para logs (em substituição ao
> Time-stamp) e para tabelas (objetos) descritivos (bairros, cidades,
> status
> etc). Normalmente estas tabelas teriam uma chave primária formada por
> um só
> atributo e este seria artificial.
> 
> Agora para tabelas ou objetos dependentes (subclasses) utilize a
> concatenação. A menos que a sua tabela seja imensa e o espaço
> consumido pelo
> indíce vá lhe causar problemas (estouro do espaço).
> 
> Na sua aplicação, como você conhece os atributos (vc está
> gravando-os), você
> conheceria a chave primária, que poderia ser passada sem precisar de
> uma
> nova consulta para descobri-la.
> 
> Desculpe-me se chovi no molhado.
> 
> Sds,
> 
> Orlando Dias
> -----Mensagem original-----
> De: Carlos Campos <[EMAIL PROTECTED]>
> Para: '[EMAIL PROTECTED]' <[EMAIL PROTECTED]>
> Cc: 'Lista Java BR' <[EMAIL PROTECTED]>
> Data: Quarta-feira, 15 de Dezembro de 1999 19:30
> Assunto: RES: [SouJava-J] INSERT INTO do SQL
> 
> 
> >Oi Bruno,
> >
> >Claro que vc ajudou muito. Só pelo fato de tentar responder já é um
> fato
> >a agradecer.
> >
> >Eu sei que o MS ACCESS deixa muito a desejar. Quando usava MS ACCESS
> com
> >Visual Basic, tentei usar transação e era uma desgraça. As operações
> no
> >Banco travavam e gerava um delay ridículo.
> >
> >Enquanto não substituo o Banco de Dados e, tentando evitar qualquer
> >problema de colisão com o múltiplo acesso dos usuários, uma opção
> seria
> >utilizar uma Tabela-Contador e não utilizar a Auto-Numeração do MS
> >ACCESS.
> >
> >Muito Obrigado pela ajuda,
> >
> >[]'s
> >
> >Carlos Campos
> >
> >> ----- Mensagem original -----
> >> De: Bruno Diniz de Paula [SMTP:[EMAIL PROTECTED]]
> >> Enviada em: Quarta-feira, 15 de Dezembro de 1999 17:44
> >> Para: 'Lista SouJava'
> >> Cc: 'Lista Java BR'
> >> Assunto: Re: [SouJava-J] INSERT INTO do SQL
> >>
> >>
> >> Oi Carlos,
> >>
> >> nunca vi nada parecido com o retorno do ultimo registro inserido
> >> no banco. Logo, essa alternativa e' furada.
> >> Utilizando Access fica dificil de trabalhar porque ele nao
> >> possui
> >> o conceito de transacao e isolamento. Uma alternativa seria voce
> fazer
> >> a
> >> insercao e logo depois uma consulta ao "max(ChavePrimaria)" para
> >> retornar
> >> o valor de chave inserido, tudo isso dentro de uma transacao. Em
> >> bancos
> >> de dados maiores como Oracle, Informix isso funcionaria no seu
> caso,
> >> mas
> >> com multiplos usuarios acessando o Access acredito que nao sirva.
> Mas
> >> de
> >> qualquer forma, eis um pequeno exemplo do codigo necessario:
> >>
> >> Connection con = ...
> >> Statement st = con.createStatement();
> >> ResultSet rs = null;
> >>
> >> con.setAutoCommit(false);
> >> st.executeUpdate("insert ...
> >>
> >> rs = st.executeQuery("select max(cp) from ...
> >> int codigo = -1;
> >> if(rs.next())
> >>     codigo = rs.getInt(1);
> >> rs.close();
> >> con.commit();
> >> con.setAutoCommit(true);
> >> st.close();
> >>
> >> Espero ter ajudado em alguma coisa!
> >>
> >> Abracos
> >>
> >> Bruno.
> >>
> >> On Wed, 15 Dec 1999, Carlos Campos wrote:
> >>
> >> > Prezados Javaneses,
> >> >
> >> > Criei um servlet que insere um registro num Banco de Dados MS
> ACCESS
> >> > conforme código abaixo. Gostaria de, após inserir o registro na
> >> tabela,
> >> > redirecionar o fluxo para um outro servlet passando como
> argumento a
> >> > Chave Primária.
> >> >
> >> > Ocorre que, neste caso específico, a chave primária é um campo de
> >> > AUTO-NUMERAÇÃO, onde eu não tenho conhecimento prévio do seu
> >> conteúdo
> >> > até a inserção do registro.
> >> >
> >> > Pergunta(s):
> >> >
> >> > Como fazer, qual comando utilizar, para recuperar o campo criado
> >> pelo
> >> > Statement???
> >> >
> >> > Terei que fazer um novo Select num Resultset??? E como garantir a
> >> > recuperação do registro correto tendo em vista que o ODBC possui
> um
> >> > delay na atualização do Banco de Dados e se trata de uma
> INTRANET???
> >> >
> >> > Existe algum recurso que me permita recuperar o último registro
> >> gravado
> >> > logo após o INSERT???
> >> >
> >> > Agradeço a todos,
> >> >
> >> > String query = new String();
> >> > if(ope.equalsIgnoreCase("I")) {
> >> > query =  "insert into Bei
> >> >
> >>
> Bei_Descricao,Bei_Responsavel,Bei_Local,Bei_IP,Bei_Ponto,Bei_Codpat,Be
> >> i_
> >> > Nserie,Bei_Categoria,Bei_Tipo,Bei_Dua,Bei_Lua,Bei_Status)";
> >> > query += " values
> >> >
> >>
> ('"+des+"','"+resp+"','"+local+"','"+ip+"','"+ponto+"','"+pat+"','"+se
> >> ri
> >> > e+"','"+cat+"','"+tipo+"','"+dua+"','"+lua+"',"+istatus+")";
> >> >
> >> > stmt.executeUpdate(query);
> >> >
> >> > []'s
> >> >
> >> > Carlos Campos
> >> > [EMAIL PROTECTED]
> >> > Analista de Sistemas / Bolsista PCI
> >> > MCT/CNPq  - CETEM - Centro de Tecnologia Mineral
> >> > Fone: 0xx21 5607222 - Ext. 358
> >> >
> >> >     --------------------------- LISTA SOUJAVA
> >> ---------------------------
> >> >     http://www.soujava.org.br  -  Sociedade de Usuários Java da
> >> Sucesu-SP
> >> >     [para sair da lista:
> >> http://www.soujava.org.br/forum/cadastrados.htm]
> >> >
> >>
> ---------------------------------------------------------------------
> >> >
> >>
> >>
> >> ______________________________________________________________
> >> Bruno Diniz de Paula
> >> [EMAIL PROTECTED] - UFMG
> >> [EMAIL PROTECTED] - Telemig Celular
> >>
> >> "Coracoes ao alto e pes no chao."
> >>
> >> "A verdadeira experiencia com Deus nao nos faz
> >>  fugir da realidade, mas nos da forcas para
> >>  enfrenta-la e transforma-la."
> >>
> >> Pe. Zeca
> >>
> >>     --------------------------- LISTA SOUJAVA
> >> ---------------------------
> >>     http://www.soujava.org.br  -  Sociedade de Usuários Java da
> >> Sucesu-SP
> >>     [para sair da lista:
> >> http://www.soujava.org.br/forum/cadastrados.htm]
> >>
> >>
> ---------------------------------------------------------------------
> >
> >    --------------------------- LISTA SOUJAVA
> ---------------------------
> >    http://www.soujava.org.br  -  Sociedade de Usuários Java da
> Sucesu-SP
> >    [para sair da lista:
> http://www.soujava.org.br/forum/cadastrados.htm]
> >
> ---------------------------------------------------------------------
> >
> 
>     --------------------------- LISTA SOUJAVA
> ---------------------------
>     http://www.soujava.org.br  -  Sociedade de Usuários Java da
> Sucesu-SP
>     [para sair da lista:
> http://www.soujava.org.br/forum/cadastrados.htm]
>  
> ---------------------------------------------------------------------

    --------------------------- LISTA SOUJAVA ---------------------------
    http://www.soujava.org.br  -  Sociedade de Usuários Java da Sucesu-SP
    [para sair da lista: http://www.soujava.org.br/forum/cadastrados.htm]
    ---------------------------------------------------------------------

Responder a