Pergunta

Agora que tenho visto esta pergunta em outro fórum , mas ele não tinha uma resposta aceitável.

Suponha que eu tenho duas tabelas, a tabela de grupos ea tabela de elementos. As mesas têm relações não definido. A tabela Elements tem um campo IdGroup que se refere ao campo IdGroup (PK) da tabela de Grupos.

Eu uso a seguinte consulta através de um conjunto de registros ADO para preencher os valores tabelas para um datagrid:

SELECT Elements.*, Groups.GroupName
FROM Elements
INNER JOIN Groups ON Elements.IdGroup = Groups.IdGroup

A partir desse grade eu quero pressione Delete para apagar um elemento. Aqui está o meu problema. Quando eu usei DAO, a função DAO Delete () excluído somente o registro no grupo Elements. Este foi o comportamento esperado.

Quando eu mudei para ADO, a função Delete () eliminou registros em ambas as tabelas, o registro elemento e do grupo ao qual o elemento pertencia!

Existe alguma maneira para reproduzir o comportamento DAO no ADO sem ter que definir relacionamentos nas tabelas?

Nota: Eu sei que existem alternativas (executando querys de DELETE poderia fazer o trabalho). Apenas mostre-me uma maneira de fazer isso no ADO, ou dizer que não pode ser feito.

Foi útil?

Solução

Reescreva você consulta para:

  • substituir junção interna com um WHERE consistindo de um EXISTE;
  • usar uma subconsulta na cláusula SELECT para retornar o valor de Groups.GroupName.

Exemplo:

SELECT Elements.*, 
       (
        SELECT Groups.GroupName
          FROM Groups 
         WHERE Elements.IdGroup = Groups.IdGroup
       )
  FROM Elements
 WHERE EXISTS (
               SELECT * 
                 FROM Groups 
                WHERE Elements.IdGroup = Groups.IdGroup
              );

Eu testei isso usando SQL Server 2008 com um conjunto ADO conjunto de registros como a propriedade DataSource de um OLEDB controle DataGrid Microsoft (MSDATGRD.OCX), em seguida, apagar a linha através do gird (eu suponho que você está fazendo algo similar) eo linha é efectivamente suprimida a partir de elementos de mesa só (ou seja, a linha em Grupos permanece undeleted).

Observe a consulta revisto pode ter um impacto negativo no desempenho quando buscar linhas.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top