Calendrier

Décembre 2009
L M M J V S D
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      
<< < > >>

Présentation

Recherche

W3C

  • Flux RSS des articles

Access

Créer des requêtes/vues Access
– 3 méthodes possibles – tour d’horizon
 
Je viens de m’apercevoir qu’il ne faut surtout pas donner le même nom à ses paramètres que celui des colonnes, bon il faut avouer qu’ils sont embettant avec leurs conventions qui changent  d’un SGBD à l’autre, aussi je fais un petit tour horizon des requetes/vues Access
Access permet de créer ses requêtes soit
Ø depuis une vue designer « Design View »
Ø soit depuis une vue « SQL View » le SQL est un peu ici à la « sauce Access » ce qui complique les choses
Ø sachez également qu’Il est tout à fait possible de créer ses requêtes avec du SQL  standard, exemple par l’intermédiaire d’ ADO.NET  depuis une application que vous vous feriez par vous-même vous pouvez très bien créer des requêtes/vues Access
vous pouvez utiliser une application que j’ai créée qui permet d’attaquer une base Access avec le SQL de la même manière qu’un SQL Server management studio
 c’est ce type de requete que je montrerai en premier
 
pour les exemples j’utilise une table plus que basique pour bien comprendre
nom de la table : Contact
champs : ID clé primaire auto int incrémentée
                ContactName texte not null
               ContactAge number null
 
access.jpg
I - requetes de mise à jour

1 - INSERT

en SQL standard
CREATE PROCEDURE INSERTContact(p1 char(255),p2 int)
AS
INSERT INTO [Contact]([ContactName],[ContactAge])
VALUES(p1,p2);
GO
 
Avec  la SQL  View
PARAMETERS p1 Text ( 255 ), p2 Long;
INSERT INTO Contact ( ContactName, ContactAge )
SELECT p1 AS Expr1, p2 AS Expr2;

Design View
  access1.jpg

2 - UPDATE
en SQL standard
CREATE PROCEDURE UPDATEContact(p1 char(255),p2 int, p3 int)
AS
UPDATE [Contact] SET [ContactName]=p1,[ContactAge]=p2
WHERE [ID]=p3
GO
 
Avec  la SQL  View  
PARAMETERS p1 Text ( 255 ), p2 Long, p3 Long;
UPDATE Contact SET Contact.ContactName = p1, Contact.ContactAge = p2
WHERE (((Contact.[ID])=[p3]));

Design View
access2.jpg  

3 - requete DELETE
en SQL standard
CREATE PROCEDURE DELETEContact(p1 int)
AS
DELETE FROM [Contact]
WHERE [ID]=p1
GO
 
Avec  la SQL  View
PARAMETERS p1 Long;
DELETE Contact.[ID]
FROM Contact
WHERE (((Contact.[ID])=[p1]));
 
Design View
access3.jpg



II Requetes selection

1 - selection de toutes les lignes
en SQL standard
CREATE PROCEDURE SELECTContacts
AS
SELECT [ID],[ContactName],[ContactAge]
FROM [Contact]
GO
 
Avec  la SQL  View
SELECT Contact.[ID], Contact.[ContactName], Contact.[ContactAge]
FROM Contact;
 
access4.jpg
2 - selection d'une ligne

en SQL standard
CREATE PROCEDURE SELECTContact(p1 int)
AS
SELECT [ID],[ContactName],[ContactAge]
FROM [Contact]
WHERE [ID]=p1
GO
 
Avec  la SQL  View
PARAMETERS p1 Long;
SELECT Contact.[ID], Contact.[ContactName], Contact.[ContactAge]
FROM Contact
WHERE (((Contact.[ID])=[p1]));

Design View
access5.jpg
Par Romagny13
Ecrire un commentaire - Voir les 1 commentaires - Recommander
Access – créer des requêtes en SQL
Requête simple
CREATE PROCEDURE GetContacts
as
SELECT [ContactID],[ContactName],[ContactTypeID]
FROM [Contact];
 
Avec paramètres
-          Ici j’emploie @ (ex :@ContactTypeID) mais j’aurais aussi bien pu utiliser nContactTypeID par exemple
CREATE PROCEDURE GetContactsOfContactType(@ContactTypeID int)
as
SELECT [ContactID],[ContactName],[ContactTypeID]
FROM [Contact]
WHERE [ContactTypeID]=@ContactTypeID

requetesqlaccess.JPG

si vous cherchez un outil pour saisir vos requètes SQL pour Access 
vous pouvez télécharger celui-ci que j'ai posté sur CodeS-SourceS
http://www.csharpfr.com/codes/NET2CSSQL-OUTIL-MANAGEMENT-BASES-DONNEES-ACCESS-SQL-SERVER_39559.aspx
Par Romagny13
Ecrire un commentaire - Voir les commentaires - Recommander
Se connecter à une base de données Access 2007 (*.accdb)
La chaine de connexion est de la forme :
-          Provider=Microsoft.ACE.OLEDB.12.0
-          Data Source=chemin complet vers fichier de base de données Access 2007
private void button1_Click(object sender, EventArgs e)
        {
            System.Data.DataTable oDataTable = new DataTable();
            System.Data.OleDb.OleDbDataAdapter oOleDbDataAdapter = new System.Data.OleDb.OleDbDataAdapter();
            oOleDbDataAdapter.SelectCommand = new System.Data.OleDb.OleDbCommand();
            oOleDbDataAdapter.SelectCommand.Connection = new System.Data.OleDb.OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:/Documents and Settings/romagny/Mes documents/Access/Northwind 2007.accdb");
            oOleDbDataAdapter.SelectCommand.CommandType = CommandType.Text;
            oOleDbDataAdapter.SelectCommand.CommandText = "SELECT * FROM [Clients]";
 
            oOleDbDataAdapter.Fill(oDataTable);
 
            dataGridView1.DataSource = oDataTable;
        }

http://www.connectionstrings.com/?carrier=access2007
Par Romagny13
Ecrire un commentaire - Voir les commentaires - Recommander
Utiliser les requêtes Access (view) comme des procédures stockées avec ADO.NET
 
Exemple de code
 private void button3_Click(object sender, EventArgs e)
        {
            System.Data.DataTable oDataTable = new DataTable();
          
            System.Data.OleDb.OleDbDataAdapter oOleDbDataAdapter = new System.Data.OleDb.OleDbDataAdapter();
            oOleDbDataAdapter.SelectCommand = new System.Data.OleDb.OleDbCommand();
            oOleDbDataAdapter.SelectCommand.Connection = new System.Data.OleDb.OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:Documents and SettingsromagnyMes documentsAccessContactsDb.mdb;");
            oOleDbDataAdapter.SelectCommand.CommandType = CommandType.StoredProcedure;
            oOleDbDataAdapter.SelectCommand.CommandText = "ContactSelectRequest";
 
            oOleDbDataAdapter.Fill(oDataTable);
 
            dataGridView1.DataSource = oDataTable;
 
        }
 
Si Access n’est pas supporté actuellement par Linq To SQL on peut supposer malgré tout que l’on pourra glisser les view depuis l’explorateur de serveurs come on le fait pour les procédures stockées de SQL Server
Par Romagny13
Ecrire un commentaire - Voir les 1 commentaires - Recommander
 
 
Récupérer les relations(clés étrangères d'une table de base de données Access)
 
 
 
Exemple ici on filtre sur la table uniquement "CONTACT" (grâce aux restrictions)
 
 
oOleDbConnection = new System.Data.OleDb.OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:Documents and SettingsromagnyMes documentsbd3.mdb");
 
oOleDbConnection.Open();
string[] sRestrictions = { null, null, "CONTACT"};
 
DataTable oDataTable = oOleDbConnection.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Foreign_Keys, sRestrictions);
 
 
 
Le résultat : (sachant que la table contact a 2 clés etrangéres pointant sur la table "RELATION")

- PK_COLUMN_NAME : nom de la colonne clé primaire la table mère (ici "code_type" de la table TYPE)

- FK_TABLE_NAME : nom de la table mère (ici "CONTACT")

- FK_COLUMN_NAME : nom de la colonne  clé étrangère (ici "code_type" de la table "CONTACT")

- FK_NAME : nom de la relation

(- PK_NAME : nom de la contrainte clé primaire )

 

 le code C#

   public List<ForeignKey> RecupererForeignKeys(System.Data.OleDb.OleDbConnection oOleDbConnection)
        {
            List<ForeignKey> ListForeignKeys;
            ListForeignKeys = new List<ForeignKey>();
 
            string[] sRestrictions = { null, null, null };
            DataTable oDataTable = oOleDbConnection.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Foreign_Keys, sRestrictions);
 
            foreach (System.Data.DataRow oDataRowForeign in oDataTable.Rows)
            {
                ForeignKey oForeignKey;
                oForeignKey = new ForeignKey();
 
                oForeignKey.TABLEFILLE = oDataRowForeign["FK_TABLE_NAME"].ToString();
                oForeignKey.CLEFILLE = oDataRowForeign["FK_COLUMN_NAME"].ToString();
                oForeignKey.TABLEMERE = oDataRowForeign["PK_TABLE_NAME"].ToString();
                oForeignKey.CLEMERE = oDataRowForeign["PK_COLUMN_NAME"].ToString();
 
                ListForeignKeys.Add(oForeignKey);
            }
 
            return ListForeignKeys;
        }
 

 Les types de données (DATATYPE) :

Par Romagny13
- Voir les commentaires - Recommander
Créer un blog sur over-blog.com - Contact - C.G.U. - Rémunération en droits d'auteur - Signaler un abus