Pb intégrité clé primaire/etrangere

Signaler
Messages postés
11
Date d'inscription
samedi 22 novembre 2003
Statut
Membre
Dernière intervention
27 juillet 2006
-
Messages postés
79
Date d'inscription
mardi 29 juin 2004
Statut
Membre
Dernière intervention
18 décembre 2006
-
Bonjour.


J'ai un petit soucis pour l'insertion de données dans une base de données MS SQL Server provenant d'un formulaire.


Explications :


J'ai une table COMPANY :


COMPANY_CODE smallint identity (1, 1) ,


CONTRACT_TYPE_CODE smallint not null ,


COMPANY_NAME char(32) null ,


COMPANY_STREETNUMBER int null ,


COMPANY_STREETNAME char(32) null ,


COMPANY_FLOOR int null ,


COMPANY_COLONIA char(32) null ,


COMPANY_ZIPCODE int null ,


COMPANY_CITY char(32) null ,


COMPANY_COUNTRY char(32) null ,


COMPANY_CONTRACTDESCRIPTION text null ,


COMPANY_LOCALISATIONLINK varchar(255) null


,


constraint PK_COMPANY primary key (COMPANY_CODE)


Et j'ai une table CONTACT :


CONTACT_CODE smallint identity (1, 1) ,


COMPANY_CODE smallint not null ,


CONTACT_FIRSTNAME char(32) null ,


CONTACT_LASTNAME char(32) null ,


CONTACT_EMAIL varchar(128) null ,


CONTACT_PHONENUMBER char(32) null


,


constraint PK_CONTACT primary key (CONTACT_CODE)


On ne s'occupe pas des autres clés étrangères présentes dans chacune des deux tables.


L'utilisateur remplit un formulaire ou il entre le nom de son entreprise, adresse etc... puis son nom, prénom, mail etc...


Je peux insérer sans problèmes les infos du contact dans la table
CONTACT et les infos de l'entreprise dans la table COMPANY. Seulement,
le code de l'entreprise (COMPANY_Code) est un code autoincrémenté et je
ne sais pas comment l'insérer dans le COMPANY_Code de la table CONTACT.
Je pensais qu'il s'insérait de lui même comme dans la table COMPANY
mais apparemment il faut que je le rajoute a la main dans la table
CONTACT. Je ne sais pas comment faire.


Voici mon code d'insertion dans la table CONTACT :


oCommand = New System.Data.SqlClient.SqlCommand(sSQL, oConnection)


oDataReader = oCommand.ExecuteReader()


oDataReader.Close()


sSQL = "INSERT INTO [CONTACT](CONTACT_FirstName, COMPANY_CODE, CONTACT_LastName, CONTACT_Email, CONTACT_PhoneNumber)" _

& " VALUES('" & TB_ContactFirstName.Text & "','
@COMPANY_Code ','" & TB_ContactLastName.Text & "','" &
TB_ContactEMail.Text & "','" & TB_ContactPhoneNo.Text &
"')"


oCommand = New System.Data.SqlClient.SqlCommand(sSQL, oConnection)


oDataReader = oCommand.ExecuteReader()


oDataReader.Close()


oConnection.Close()


Evidemment ça ne marche pas (@COMPANY_Code était une tentative despesérée )


J'espere que qq1 pourra m'aider.


Merci d'avance

1 réponse

Messages postés
79
Date d'inscription
mardi 29 juin 2004
Statut
Membre
Dernière intervention
18 décembre 2006
3
Le truc c'est de recupérer en base de données l'id de ta compagnie (companyCode) avant de l'inserer dans la table contact.

Pour bien tu peux faire quelque chose de ce style:

Insertion de ta company dans ta table
INSERT INTO COMPANY
(CONTRACT_TYPE_CODE,COMPANY_NAME,...,Champn)
VALUES
(@CONTRACT_TYPE_CODE,@COMPANY_NAME,...@Champn);

Récupération de l'ID de ta compagnie:
declare @CodeCompany TypeDeDonne(int ou nvarchar);
set @CodeCompany =
(select COMPANY_CODE
FROM COMPAGNY
WHERE CONTRACT_TYPE_CODE= @CONTRACT_TYPE_CODE,
AND COMPANY_NAME=@COMPANY_NAME,
...,
AND Champn=@Champn);

Insertion des données dans ta table contact

INSERT INTO
CONTACT(CONTACT_FIRSTNAME, CONTACT_LASTNAME, COMPANY_CODE...)
VALUES
(@Nom, @Prenom, @CodeCompany....);

Du coup ta requete devrait avoir cette tête là:

Dim

strSQL_INSERTION_COMPANY
As
String

Dim strSQL_RECUPERATION_ID_COMPANY
As
String

Dim strSQL_INSERTION_CONTACT
As
String

Dim str_REQETE_FINALE
AsStringstrSQL_INSERTION_COMPANY "INSERT INTO COMPANY (CONTRACT_TYPE_CODE,COMPANY_NAME,...,Champn) VALUES(@CONTRACT_TYPE_CODE,@COMPANY_NAME,...@Champn);"strSQL_RECUPERATION_ID_COMPANY

"declare @CodeCompany TypeDeDonne(int ou nvarchar); set @CodeCompany =(select COMPANY_CODE FROM(COMPAGNY)WHERE CONTRACT_TYPE_CODE= @CONTRACT_TYPE_CODE,AND COMPANY_NAME=@COMPANY_NAME,...,AND Champn=@Champn);"strSQL_INSERTION_CONTACT=

"INSERT(INTO)CONTACT(CONTACT_FIRSTNAME, CONTACT_LASTNAME, COMPANY_CODE...)VALUES()(" & TB_ContactFirstName.Text &
"," & TB_ContactLastName.Text &
",@CodeCompany ....);"str_REQETE_FINALE = strSQL_INSERTION_COMPANY & strSQL_RECUPERATION_ID_COMPANY & strSQL_INSERTION_CONTACT

PS: je ne l'ai pas testé, c'est juste un ordre d'idée.

Les programmeurs sont rois....Ceux qui ne croient pas en nous sont des fous...