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