locked
Create PK em Tabelas Vinculadas RRS feed

  • Pergunta

  •  Dia Galera!

    Preciso de um help de vcs:

    Trabalho com MSAccess2003 + SQL Server 2008 (tabelas vinculadas).

    O meu BD trabalha com dois bancos:
    Banco1- onde ficam minhas tabelas
    Banco2- onde ficam minhas views que apontam para o banco 1

    O Sistema em Access, aponta para o Banco2, simulando as tabelas com as Views, qdo faço alguma instrução (Delete, Insert..) na View, tenho triggers que cancelam o envio e realiza a instrução no Banco1 (tabelas).

    Até aqui, blz!
    Ao realizar as vinculações das Views, tenho que definir "na mão" quem são as Chaves das tabelas, nas views, para poder mandar as instruções (insert, delete) para as views.

    Ao (tentar) criar um procedimento para realizar a Reanexação das entidades automaticamente, me deparo em, via código, não conseguir definir quais são as Pk's das entidades - qdo faço manual, consigo definir quais são as Pk's.

    Alguem sabe me dizer se é possível realizar tal procedimento??

    Agradeço antecipadamente.


    Abraços!

    Douglas Moura | Cuiabá-MT

    Douglas Moura | Cuiabá-MT
    terça-feira, 17 de fevereiro de 2009 14:49

Respostas

  • Galera, esta dúvida foi sanada pelo nosso amigo Luiz Claudio no fórum do IT Lab (antigo ForumAccess).
    Segue abaixo a resposta:


    "Quando você vincula uma View manualmente, o Access abre uma janela para você selecionar qual o campo chave da tabela. É a única forma da tabela ser atualizável (mesmo no VBA, as tabelas anexadas precisam de chave para serem atualizáveis).

    Procurei em todas as tabelas de sistemas e tabelas ocultas do Access para tentar descobrir onde esta informação fica salva. Não encontrei. Depois, puxei as propriedades do TableDef e vi que esta chave fica salva como índice mesmo, na própria tabela vinculada (para mim, é uma novidade tabela vinculada ter definição de índices). Este índice se chama __uniqueindex.

    Nas rotinas de atualizar vínculos, ao executar o método RefreshLink, esta informação de índice é perdida e a tabela deixa de ser atualizável.

    Tentei então usar DAO para recriar o índice, mas o Access não aceitou, pois tabelas vinculadas (em tese) não permitem índices.

    Por fim, recorri a uma instrução DDL e o Access aceitou:

    db.Execute "CREATE UNIQUE INDEX __uniqueindex ON dbo_vw_MinhaView(CampoChave) WITH PRIMARY"
    "
    Douglas Moura | Cuiabá-MT
    • Marcado como Resposta Douglas Moura quarta-feira, 18 de fevereiro de 2009 18:34
    quarta-feira, 18 de fevereiro de 2009 18:34
  • Olá,

    obrigado por atualizar a resposta aqui.

    E, apenas paraconstar, o fórum é da IT Lab: http://comunidade.itlab.com.br/eve
    Luiz Cláudio Cosenza Vieira da Rocha - http://msmvps.com/blogs/officedev - IT Lab www.itlab.com.br
    quinta-feira, 19 de fevereiro de 2009 00:11
    Moderador

Todas as Respostas

  • Galera, esta dúvida foi sanada pelo nosso amigo Luiz Claudio no fórum do IT Lab (antigo ForumAccess).
    Segue abaixo a resposta:


    "Quando você vincula uma View manualmente, o Access abre uma janela para você selecionar qual o campo chave da tabela. É a única forma da tabela ser atualizável (mesmo no VBA, as tabelas anexadas precisam de chave para serem atualizáveis).

    Procurei em todas as tabelas de sistemas e tabelas ocultas do Access para tentar descobrir onde esta informação fica salva. Não encontrei. Depois, puxei as propriedades do TableDef e vi que esta chave fica salva como índice mesmo, na própria tabela vinculada (para mim, é uma novidade tabela vinculada ter definição de índices). Este índice se chama __uniqueindex.

    Nas rotinas de atualizar vínculos, ao executar o método RefreshLink, esta informação de índice é perdida e a tabela deixa de ser atualizável.

    Tentei então usar DAO para recriar o índice, mas o Access não aceitou, pois tabelas vinculadas (em tese) não permitem índices.

    Por fim, recorri a uma instrução DDL e o Access aceitou:

    db.Execute "CREATE UNIQUE INDEX __uniqueindex ON dbo_vw_MinhaView(CampoChave) WITH PRIMARY"
    "
    Douglas Moura | Cuiabá-MT
    • Marcado como Resposta Douglas Moura quarta-feira, 18 de fevereiro de 2009 18:34
    quarta-feira, 18 de fevereiro de 2009 18:34
  • Olá,

    obrigado por atualizar a resposta aqui.

    E, apenas paraconstar, o fórum é da IT Lab: http://comunidade.itlab.com.br/eve
    Luiz Cláudio Cosenza Vieira da Rocha - http://msmvps.com/blogs/officedev - IT Lab www.itlab.com.br
    quinta-feira, 19 de fevereiro de 2009 00:11
    Moderador
  • Opa..

    verdade Luiz.

    Equivoco...

    abracos!
    Douglas Moura | Cuiabá-MT
    sexta-feira, 20 de fevereiro de 2009 16:42