2009-06-27 6 views
2

J'ai 2 tables qui sont liées, les deux ont des colonnes d'identité pour les clés primaires et j'utilise un formulaire vb pour insérer des données, Mon problème est que je ne peux pas obtenir la table enfant la clé primaire de la table parent et l'utiliser comme clé étrangère dans ma base de données. les données sont insérées bien mais aucune contrainte de clé étrangère n'est faite. Je me demande si un déclencheur le fera et si oui comment. Tout mon insertion de données se fait en vb.copier une colonne d'identité dans une autre table

L'utilisateur n'introduira aucune clé. ce sont toutes des colonnes d'identité générées automatiquement. Si un déclencheur est mon moyen de sortir s'il vous plaît illustrer avec un exemple.

S'il y a une autre façon que je peux le faire en VB alors lui-même s'il vous plaît conseiller et un exemple sera grandement appréciée

Merci à l'avance

+0

Plus d'infos est nécessaire, quelle est la structure exacte de la table en question, pouvez-vous rendre cela un peu plus concret? –

Répondre

1

Deux voies sont venus à l'esprit (assumera SQL Server):

  1. Insérez dans la première table (parent), puis récupérez la clé d'identité générée avec @@ IDENTITY, puis insérez l'enregistrement dans la table enfant avec la valeur récupérée.
  2. Écrivez une procédure stockée qui insère les deux enregistrements et utilise le @@ IDENTITY en interne.
1

Je voudrais vérifier votre base de données-conception: « Mon problème est que je ne peux pas obtenir la table des enfants pour obtenir la clé primaire de la table parent » Sur la table des enfants, vous pouvez définir une colonne d'identité, mais pas en tant que clé étrangère. Veuillez créer une nouvelle colonne de type de données int en tant que clé étrangère.

create table parent (id int identity(1,1) not null, data varchar(100)...) 
create table child (id int identity(1,1) not null, parent_id int not null, data varchar(100)...) 

Pour récupérer les informations stockées dans la base de données, utilisez une requête comme:

select parent.id, parent.data, child.data 
from parent, child 
where parent.id = child.parent_id 

Pour insérer des données dans les deux tables, vous devez utiliser deux étapes:

insert parent(data) values('This is a test for parent-record') 
insert child(parent_id, data) values(@@IDENTITY, 'This is testdata for the child record') 

Be Attention à la valeur @@ IDENTITY car s'il y a des triggers qui se déclenchent à l'insertion derrière la table parent, vous n'aurez probablement pas la dernière valeur d'identité de la table parente qui dépend du travail effectué par le déclencheur.

Questions connexes