1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Indices de Tabelas em VB.NET

Discussão em 'Programação' iniciada por trikton, 1 de Dezembro de 2006. (Respostas: 4; Visualizações: 1471)

  1. trikton

    trikton Power Member

    Boas ppl,

    Tenho o seguinte problema:

    - Tenho uma base de dados composta por 2 tabelas relacionadas. Ambas têm 1 identificador autoincrementavel do tipo inteiro (PK) e a tabela child tem um campo inteiro que a relaciona com a tabela Pai (FK).
    - Carrego uma base de dados em memória (num dataset).
    - Faço toda a lógica em cima dos dados, adiciono novos elementos, etc..
    - Qnd vou fazer o update da base de dados fisica, aparece-me um erro de "FK constraint", isto pq ao fazer o insert de novos dados na base de dados fisica, esta altera o identificador que eu lhe dei no dataset (visto que foram definidas com autoincrement) e logo a FK perde a validade, pk fica a apontar pra PK's q já não existem...

    Alguem sabe como obter o estado dos indices das tabelas , a knd de as carregar no dataset? De forma a eu saber qual seria o próximo auto identificador?

    Ou será que vou ter de remover o autoincrement das tabelas? e fazer tudo á la pate no meu programa?


    Cumprimentos [] ;)
     
  2. HecKel

    HecKel The WORM

    Experimenta fazeres o insert sem considerar o campo de autoincrementação

    Basta-te especificares quais as colunas onde queres inserir que em principio não tens problemas.

    Isto pode ajudar ;) http://www.w3schools.com/sql/sql_insert.asp

    abraços, HecKel
     
  3. trikton

    trikton Power Member

    Eh pah... mas assim, cada vez que carrego o dataset, tenho percorrer as tabelas todas para saber qual o prox identificador de cada uma.. e eu tou a trabalhar cm uma base de dados algo grandita..
     
  4. JGAlmeida

    JGAlmeida Folding Colaborator

    Mas estás a inserir registos na tabela pai, na filho ou em ambos?

    se tiveres:

    TAB.PAI | FILHO
    ID(PK) | ID(PK)
    Campo1 | IDPAI(FK)
    Campo2 | Campo1

    e queres inserir nos dois tens que:

    1º inserir o registo na tabela pai sem o campo ID
    2º Ver qual foi o ID que ele lhe deu (por exemplo usando "select max(ID) " )
    3º inserir os registos na tabela filho com esse valor no IDPAI

    Ou então se calhar percebi mal a tua dúvida e não é nada disso. :)

    Cumps.
     
  5. trikton

    trikton Power Member


    Oix, é isso mesmo que estou a fazer, e funciona tudo muito bem enkuanto trabalho em memória. O problema é ao gravar as alterações, pois começo por gravar a tabela Pai e ai ao gravar na base de dados fisica, os ids do Pai sao alterados pois a semente , ou id base usado na base de dados fisica é diferente da usada em memória. Como os id's do Pai se alteram, os Filhos perdem a ligação a este....


    Imagina k tens uma tabela com autoincremento vazia. Adicionas um elemento, apagas e voltas a adicionar. Apesar de teres apenas um elemento, o id esta a 2.

    Carregas esta tabela em memoria, o id vem a 1, acrescentas mais um elemento ficas cm id a 2, knd gravas as alterações , o id passa a 3... e é este o problema.

    Eu resolvi-o fazendo á martelada, mas n acho bonito..

    Obrigado ;) Cumps
     

Partilhar esta Página