VB NET ACCES AUX DONNEES

Dimension: px
Commencer à balayer dès la page:

Download "VB NET ACCES AUX DONNEES"

Transcription

1 ACCES AUX DONNEES Réaliser Par : SGHIOUAR ABDELFATAH

2 Chapitre 1 : INTRODUCTION Mode connecté et mode déconnecté Le traitement des données repose traditionnellement sur un modèle à deux couches utilisant une connexion. Le traitement des données utilisant de plus en plus des architectures multicouches, les programmeurs s'orientent vers une approche déconnectée de façon à proposer une meilleure évolutivité pour leurs applications. XML et ADO.NET ADO.NET tire parti de la puissance de XML pour fournir un accès déconnecté aux données. ADO.NET a été conçu avec les classes XML du.net Framework ; les deux composants appartiennent à une même architecture. ADO.NET et les classes XML du.net Framework convergent dans l'objet DataSet. Le DataSet peut être rempli de données provenant d'une source XML, qu'il s'agisse d'un fichier ou d'un flux XML. Le DataSet peut être écrit en XML conforme au W3C (World Wide Web Consortium), y compris son schéma, en tant que schéma en langage XSD (XML Schema Definition), quelle que soit la source des données contenues dans le DataSet. Le format de sérialisation natif du DataSet étant XML, il constitue un excellent support pour le déplacement de données entre couches, faisant ainsi du DataSet le meilleur choix pour proposer un accès distant aux données et au contexte du schéma vers et à partir d'un service Web XML. Composants de ADO.NET Les composants de ADO.NET ont été conçus de façon à distinguer l'accès aux données de la manipulation de données. Cette distinction est rendue possible par deux composants centraux de ADO.NET : le DataSet et le fournisseur de données.net Framework, qui est un ensemble de composants comprenant les objets Connection, Command, DataReader et DataAdapter. Le DataSet ADO.NET est le composant principal de l'architecture déconnectée de ADO.NET. Le DataSet est explicitement conçu pour permettre un accès aux données indépendant de toute source de données. Il peut donc être utilisé avec plusieurs sources de données différentes, utilisé avec des données XML ou utilisé pour gérer des données locales de l'application. Le DataSet contient une collection d'un ou de plusieurs 2

3 objets DataTable constitués de lignes et de colonnes de données, ainsi que des informations concernant les contraintes de clé primaire, de clé étrangère et des informations relationnelles sur les données contenues dans les objets DataTable. L'autre élément principal de l'architecture ADO.NET est le fournisseur de données.net Framework dont les composants sont explicitement conçus pour la manipulation des données et un accès aux données rapide, avant uniquement (forward only) et en lecture seule. L'objet Connection assure la connectivité avec une source de données. L'objet Command permet l'accès aux commandes de base de données pour retourner des données, modifier des données, exécuter des procédures stockées et envoyer ou extraire des informations sur les paramètres. Le DataReader fournit un flux très performant de données en provenance de la source de données. Enfin, le DataAdapter établit une passerelle entre l'objet DataSet et la source de données. Le DataAdapter utilise les objets Command pour exécuter des commandes SQL au niveau de la source de données afin d'une part d'approvisionner le DataSet en données, et d'autre part de répercuter dans la source de données les modifications apportées aux données contenues dans le DataSet. Vous pouvez écrire des fournisseurs de données.net Framework pour n'importe quelle source de données. Le.NET Framework est livré avec deux fournisseurs de données.net Framework : le fournisseur de données.net Framework pour SQL Server et le fournisseur de données.net Framework pour OLE DB. Le schéma suivant représente les composants de l'architecture ADO.NET. Architecture ADO.NET Le code suivant montre comment inclure l'espace de noms System.Data dans vos applications pour que vous puissiez utiliser ADO.NET. 3

4 Imports System.Data Les classes ADO.NET se trouvent dans System.Data.dll et sont intégrées aux classes XML de System.Xml.dll. Lors de la compilation du code qui utilise l'espace de noms System.Data, il convient de référencer System.Data.dll ainsi que System.Xml.dll. Connexion à SQL Server à l'aide de ADO.NET L'exemple de code suivant illustre la création et l'ouverture d'une connexion à une base de données SQL Server (version 7.0 ou ultérieure). Dim nwindconn As SqlConnection = New SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind") nwindconn.open() Fermeture de la connexion Il est recommandé de toujours fermer l'objet Connection lorsque vous avez fini de l'utiliser. Pour cela, utilisez les méthodes Close ou Dispose de l'objet Connection. Connexion à une source de données OLE DB à l'aide de ADO.NET L'exemple de code suivant illustre la création et l'ouverture d'une connexion à une source de données OLE DB. Dim nwindconn As OleDbConnection = New OleDbConnection("Provider=SQLOLEDB;Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind") nwindconn.open() Connexion à une source de données ODBC à l'aide de ADO.NET L'exemple de code suivant illustre la création et l'ouverture d'une connexion à une source de données ODBC. Dim nwindconn As OdbcConnection = New OdbcConnection("Driver={SQL Server};Server=localhost; Trusted_Connection=yes;Database=northwind") nwindconn.open() 4

5 Connexion à une source de données Oracle à l'aide de ADO.NET L'exemple de code suivant illustre la création et l'ouverture d'une connexion à une source de données Oracle. Dim nwindconn As OracleConnection = New OracleConnection("Data Source=MyOracleServer;Integrated Security=yes;") nwindconn.open() Exécution d'une commande Après avoir établi une connexion à une source de données, vous pouvez exécuter des commandes et retourner les résultats de la source à l'aide d'un objet Command. SqlClient Dim catcmd As SqlCommand = New SqlCommand("SELECT CategoryID, CategoryName FROM Categories", nwindconn) OleDb Dim catcmd As OleDbCommand = New OleDbCommand("SELECT CategoryID, CategoryName FROM Categories", nwindconn) Obtention d'une valeur unique à partir d'une base de données Vous aurez peut-être besoin de retourner des informations de base de données qui sont simplement une valeur unique plutôt qu'une table ou un flux de données. Par exemple, vous souhaitez éventuellement retourner le résultat d'une fonction d'agrégation telle que Count(*), Sum(Price) ou Avg(Quantity). L'objet Command fournit la fonctionnalité permettant de retourner des valeurs uniques à l'aide de la méthode ExecuteScalar. La méthode ExecuteScalar retourne comme valeur scalaire la valeur de la première colonne de la première ligne du jeu de résultats. L'exemple de code suivant retourne le nombre d'enregistrements dans une table utilisant la fonction d'agrégation Count. Dim orderscmd As SqlCommand = New SqlCommand("SELECT Count(*) FROM Orders", nwindconn) Dim count As Int32 = CInt(ordersCMD.ExecuteScalar()) Exécution d'opérations de catalogue Pour exécuter une commande permettant de modifier une base de données ou un catalogue, comme l'instruction CREATE TABLE ou CREATE PROCEDURE, créez Command à l'aide de la ou des instructions Transact- 5

6 SQL appropriées et de Connection. Exécutez la commande avec la méthode ExecuteNonQuery de l'objet Command. L'exemple de code suivant crée une procédure stockée dans une base de données Microsoft SQL Server. Dim createstr As String = "CREATE PROCEDURE InsertCategory " & _ nchar(15), " & _ int OUT " & _ "AS " & _ "INSERT INTO Categories (CategoryName) " & _ "VALUES (@CategoryName) " & _ " & _ Dim createcmd As SqlCommand = New SqlCommand(createStr, nwindconn) createcmd.executenonquery() Modification de données dans une base de données Les instructions SQL qui modifient les données (comme INSERT, UPDATE ou DELETE) ne retournent pas de lignes. De même, de nombreuses procédures stockées effectuent une action mais ne retournent pas de lignes. Pour exécuter des commandes qui ne retournent pas de lignes, créez un objet Command avec la commande SQL appropriée et Connection (et les Parameters requis) puis utilisez la méthode ExecuteNonQuery de l'objet Command. La méthode ExecuteNonQuery retourne un entier qui représente le nombre de lignes affectées par l'instruction ou la procédure stockée exécutée. Si plusieurs instructions sont exécutées, la valeur retournée est la somme des enregistrements affectés par toutes ces instructions. L'exemple de code suivant exécute une instruction INSERT pour insérer un enregistrement dans une base de données à l'aide de ExecuteNonQuery. Dim nwindconn As SqlConnection = New SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind") nwindconn.open() Dim insertstr As String = "INSERT INTO Customers (CustomerID, CompanyName) Values('NWIND', 'Northwind Traders')" Dim insertcmd As SqlCommand = New SqlCommand(insertStr, nwindconn) Dim recordsaffected As Int32 = insertcmd.executenonquery() L'exemple de code suivant exécute la procédure stockée créée par l'exemple de code dans Exécution d'opérations de catalogue. Aucune ligne n'est retournée par la procédure stockée, la méthode ExecuteNonQuery est donc utilisée mais la procédure stockée reçoit un paramètre d'entrée et retourne un paramètre de sortie et une valeur de retour. Pour l'objet OleDbCommand, le paramètre ReturnValue doit être d'abord ajouté à la collection Parameters. Dim insertcatcmd As SqlCommand = New SqlCommand("InsertCategory", nwindconn) 6

7 insertcatcmd.commandtype = CommandType.StoredProcedure Dim workparm As SqlParameter workparm = insertcatcmd.parameters.add("@rowcount", SqlDbType.Int) workparm.direction = ParameterDirection.ReturnValue workparm = insertcatcmd.parameters.add("@categoryname", SqlDbType.NChar, 15) workparm = insertcatcmd.parameters.add("@identity", SqlDbType.Int) workparm.direction = ParameterDirection.Output insertcatcmd.parameters("@categoryname").value = "New Category" insertcatcmd.executenonquery() Dim catid As Int32 = CInt(insertCatCMD.Parameters("@Identity").Value) Dim rowcount As Int32 = CInt(insertCatCMD.Parameters("@RowCount").Value) 7

8 Chapitre 2 : UTILISATION DE DATAREADER Vous pouvez utiliser le DataReader ADO.NET pour extraire d'une base de données un flux de données en lecture seule et avant uniquement. Les résultats sont retournés pendant que la requête s'exécute et stockés dans la mémoire tampon de réseau sur le client jusqu'à ce que vous les demandiez au moyen de la méthode Read de DataReader. L'utilisation de DataReader peut augmenter les performances de l'application d'abord en extrayant les données dès qu'elles sont disponibles, plutôt que d'attendre que tous les résultats de la requête aient été retournés, et ensuite en ne stockant (par défaut) qu'une seule ligne à la fois dans la mémoire, ce qui réduit la charge du système. Après avoir créé une instance de l'objet Command, vous créez un DataReader en appelant Command.ExecuteReader pour extraire les lignes d'une source de données, comme le montre l'exemple suivant. Dim myreader As SqlDataReader = mycommand.executereader() Vous utilisez la méthode Read de l'objet DataReader pour obtenir une ligne des résultats de la requête. Vous pouvez accéder à chaque colonne de la ligne retournée en passant le nom ou la référence ordinale de la colonne au DataReader. Cependant, pour une meilleure performance, le DataReader fournit une série de méthodes qui vous permettent d'accéder aux valeurs de colonnes dans leurs types de données natifs (GetDateTime, GetDouble, GetGuid, GetInt32, etc.). Remarque La version 1.1 du.net Framework inclut une propriété supplémentaire pour le DataReader, HasRows, laquelle vous permet de déterminer si le DataReader a retourné des résultats avant de le lire. L'exemple de code suivant itère dans un objet DataReader et retourne une colonne à partir de chaque ligne. Module Module1 Sub Main() Dim cn As New OleDb.OleDbConnection() cn.connectionstring ="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\bd.mdb;" cn.open() Dim CMD As New OleDb.OleDbCommand("select * from Article", cn) Dim RDR As OleDb.OleDbDataReader = CMD.ExecuteReader() While (RDR.Read()) Console.WriteLine(RDR.GetString(1)) End While Console.ReadLine() RDR.Close() cn.close() End Sub End Module 8

9 Le DataReader fournit un flux de données non mis en tampon qui permet à la logique procédurale de traiter efficacement les résultats provenant d'une source de données de façon séquentielle. Le DataReader se révèle être un bon choix lors de l'extraction de grandes quantités de données car celles-ci ne sont pas mises en cache dans la mémoire. Fermeture du DataReader Vous devez toujours appeler la méthode Close lorsque vous avez fini d'utiliser l'objet DataReader. Si Command contient des paramètres de sortie ou des valeurs de retour, ils ne seront pas disponibles avant la fermeture du DataReader. Notez que pendant l'ouverture d'un DataReader, Connection est utilisé en mode exclusif par ce DataReader. Vous ne pourrez pas exécuter les commandes pour Connection, y compris la création d'un autre DataReader, jusqu'à la fermeture du DataReader d'origine. 9

10 Chapitre 3 : UTILISATION DES PROCEDURES STOCKEES AVEC UNE COMMANDE Exécution d une procédure stockée Les procédures stockées offrent de nombreux avantages dans les applications pilotées par des données. En utilisant les procédures stockées, les opérations de base de données peuvent être encapsulées dans une commande unique, optimisées pour une meilleure performance et améliorées grâce à une sécurité supplémentaire. Tandis qu'une procédure stockée peut être appelée en passant simplement son nom suivi des arguments de paramètre comme instruction SQL, l'utilisation de la collection Parameters de l'objet Command ADO.NET vous permet de définir plus explicitement les paramètres de procédure stockée et d'accéder aux paramètres de sortie et aux valeurs de retour. Pour appeler une procédure stockée, affectez StoredProcedure au CommandType de l'objet Command. Une fois StoredProcedure affecté à CommandType, vous pouvez utiliser la collection Parameters pour définir les paramètres, comme dans l'exemple suivant. Ce code appelle la procédure stockée «VentesParCatégorie» qui accepte un paramètre en entrée. Dim nwindconn As SqlConnection = New SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind") Dim salescmd As SqlCommand = New SqlCommand("VentesParCatégorie", nwindconn) salescmd.commandtype = CommandType.StoredProcedure Dim myparm As SqlParameter = salescmd.parameters.add("@categorie", SqlDbType.NVarChar, 15) myparm.value = "Condiments" nwindconn.open() Dim myreader As SqlDataReader = salescmd.executereader() Console.WriteLine(myReader.GetName(0), myreader.getname(1)) Do While myreader.read() Console.WriteLine(myReader.GetString(0), myreader.getdecimal(1)) Loop myreader.close() nwindconn.close() 10

11 Utilisation des paramètres Un objet Parameter peut être créé à l'aide du constructeur Parameter ou en appelant la méthode Add de la collection Parameters de Command. Parameters.Add prendra comme entrée les arguments de constructeur ou un objet Parameter existant. Lorsque vous affectez une référence null au Value d'un Parameter, utilisez DBNull.Value. Pour les paramètres autres que Input, vous devez définir la propriété ParameterDirection pour spécifier si le type de paramètre est InputOutput, Output ou ReturnValue. L'exemple suivant illustre la différence entre la création des paramètres Input, Output et ReturnValue. Dim samplecmd As SqlCommand = New SqlCommand("SampleProc", nwindconn) samplecmd.commandtype = CommandType.StoredProcedure Dim sampparm As SqlParameter = samplecmd.parameters.add("return_value", SqlDbType.Int) sampparm.direction = ParameterDirection.ReturnValue sampparm = samplecmd.parameters.add("@inputparm", SqlDbType.NVarChar, 12) sampparm.value = "Sample Value" sampparm = samplecmd.parameters.add("@outputparm", SqlDbType.NVarChar, 28) sampparm.direction = ParameterDirection.Output nwindconn.open() Dim sampreader As SqlDataReader = samplecmd.executereader() Console.WriteLine(sampReader.GetName(0), sampreader.getname(1)) Do While sampreader.read() Console.WriteLine(sampReader.GetInt32(0), sampreader.getstring(1)) Loop sampreader.close() nwindconn.close() ", samplecmd.parameters("@outputparm").value) Console.WriteLine("RETURN_VALUE: ", samplecmd.parameters("return_value").value) Utilisation des paramètres avec SqlCommand Lorsque des paramètres sont utilisés avec SqlCommand, les noms des paramètres ajoutés à SqlParameterCollection doivent correspondre à ceux des marqueurs de paramètre de votre procédure stockée. Le fournisseur de données.net Framework pour SQL Server traite les paramètres de la procédure stockée comme des paramètres nommés et recherche les marqueurs de paramètre correspondants. Le fournisseur de données.net Framework pour SQL Server ne prend pas en charge l'espace réservé de point d'interrogation (?) pour le passage des paramètres à une instruction SQL ou une procédure stockée. Dans ce cas, vous devez utiliser des paramètres nommés, comme dans l'exemple suivant. SELECT * FROM Customers WHERE CustomerID 11

12 Utilisation des paramètres avec OleDbCommand ou OdbcCommand Lorsque des paramètres sont utilisés avec OleDbCommand ou OdbcCommand, l'ordre des paramètres ajoutés à Parameters doit correspondre à celui des paramètres définis dans votre procédure stockée. Les fournisseurs de données.net Framework pour OLE DB et ODBC traitent les paramètres d'une procédure stockée comme des espaces réservés et applique des valeurs de paramètre par ordre. En outre, les paramètres des valeurs de retour doivent être les premiers ajoutés à la collection Parameters. Les fournisseurs de données.net Framework pour OLE DB et ODBC ne prennent pas en charge les paramètres nommés pour le passage des paramètres à une instruction SQL ou une procédure stockée. Dans ce cas, vous devez utiliser l'espace réservé de point d'interrogation (?), comme dans l'exemple suivant. SELECT * FROM Customers WHERE CustomerID =? En conséquence, l'ordre dans lequel les objets Parameter sont ajoutés à la collection Parameters doit directement correspondre à la position de l'espace réservé de point d'interrogation pour le paramètre. 12

13 Chapitre 4 : REMPLISSAGE D'UN DATASET A PARTIR D'UN DATAADAPTER Le DataSet Le DataSet ADO.NET est une représentation de données résident en mémoire qui propose un modèle de programmation relationnel cohérent indépendant de la source de données. Le DataSet représente un jeu de données complet, comprenant des tables, des contraintes et des relations entre les tables. Étant donné que le DataSet est indépendant de la source de données, il peut inclure des données locales par rapport à l'application ainsi que des données provenant de plusieurs sources. L'interaction avec les sources de données existantes est contrôlée par le DataAdapter. Le DataAdapter Chaque fournisseur de données.net Framework fourni avec le.net Framework dispose d'un objet DataAdapter : le fournisseur de données.net Framework pour OLE DB inclut un objet OleDbDataAdapter, le fournisseur de données.net Framework pour SQL Server inclut un objet SqlDataAdapter et le fournisseur de données.net Framework pour ODBC inclut un objet OdbcDataAdapter. Un DataAdapter est utilisé pour extraire les données d'une source de données et remplir les tables dans un DataSet. Le DataAdapter répercute aussi les modifications apportées au DataSet dans la source de données. Le DataAdapter utilise l'objet Connection du fournisseur de données.net Framework pour se connecter à une source de données et les objets Command pour extraire les données de la source et y répercuter les modifications. Les objets Command La propriété SelectCommand du DataAdapter est un objet Command qui extrait les données de la source de données. Les propriétés InsertCommand, UpdateCommand et DeleteCommand du DataAdapter sont des objets Command qui gèrent les mises à jour dans la source de données conformément aux modifications faites dans le DataSet. La méthode Fill du DataAdapter est utilisée pour remplir un DataSet avec les résultats de SelectCommand du DataAdapter. Fill prend comme arguments un DataSet à remplir et un objet DataTable ou le nom du DataTable à remplir avec les lignes retournées par SelectCommand. 13

14 L'exemple de code suivant crée une instance d'un DataAdapter qui utilise un Connection à la base de données Northwind Microsoft SQL Server et remplit un DataTable dans un DataSet avec la liste des clients. L'instruction SQL et les arguments Connection passés au constructeur DataAdapter sont utilisés pour créer la propriété SelectCommand du DataAdapter. Dim nwindconn As SqlConnection = New SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind") Dim selectcmd As SqlCommand = New SqlCommand("SELECT CustomerID, CompanyName FROM Customers", nwindconn) selectcmd.commandtimeout = 30 Dim custda As SqlDataAdapter = New SqlDataAdapter custda.selectcommand = selectcmd nwindconn.open() Dim custds As DataSet = New DataSet custda.fill(custds, "Customers") nwindconn.close() Notez que le code n'ouvre pas et ne ferme pas la Connection de manière explicite. La méthode Fill ouvre implicitement la Connection que le DataAdapter utilise si la connexion n'est pas déjà ouverte. Si Fill a ouvert la connexion, il la fermera aussi lorsque Fill est terminé. Ceci peut simplifier votre code lorsque vous ne traitez qu'une seule opération telle que Fill ou Update. Cependant, si vous effectuez plusieurs opérations qui nécessitent une connexion ouverte, vous pouvez améliorer la performance de votre application en appelant de manière explicite la méthode Open de Connection, en effectuant les opérations sur la source de données puis en appelant la méthode Close de Connection. Vous devez chercher à réduire le temps d'ouverture des connexions à la source de données afin de libérer la ressource utilisée par les autres applications clientes. 14

15 Chapitre 5 : MISE A JOUR DE LA BASE DE DONNEES AVEC DATAADAPTER ET DATASET La méthode Update La méthode Update du DataAdapter est appelée pour répercuter les modifications provenant d'un DataSet dans la source de données. Lorsque vous appelez la méthode Update, le DataAdapter analyse les modifications apportées et exécute la commande appropriée (INSERT, UPDATE ou DELETE). Lorsque le DataAdapter trouve une modification dans un DataRow, il utilise InsertCommand, UpdateCommand ou DeleteCommand pour traiter la modification. Pour gérer les exceptions qui peuvent se produire pendant un Update, utilisez l'événement RowUpdated pour répondre aux erreurs de mise à jour des lignes. Vous pouvez aussi affecter true à DataAdapter.ContinueUpdateOnError avant d'appeler Update et répondre aux informations d'erreur stockées dans la propriété RowError d'une ligne particulière lorsque Update est terminé. Les exemples suivants illustrent l'exécution des mises à jour des lignes modifiées en définissant de manière explicite le UpdateCommand du DataAdapter. Notez que le paramètre spécifié dans la clause WHERE de l'instruction UPDATE est défini pour utiliser la valeur Original de SourceColumn. Ceci est important, car la valeur Current peut avoir été modifiée et ne pas correspondre à la valeur dans la source de données. La valeur Original est la valeur qui a été utilisée pour remplir le DataTable à partir de la source de données. Dim catda As SqlDataAdapter = New SqlDataAdapter("SELECT CategoryID, CategoryName FROM Categories", nwindconn) catda.updatecommand = New SqlCommand("UPDATE Categories SET CategoryName " & _ "WHERE CategoryID nwindconn) catda.updatecommand.parameters.add("@categoryname", SqlDbType.NVarChar, 15, "CategoryName") Dim workparm As SqlParameter = catda.updatecommand.parameters.add("@categoryid", SqlDbType.Int) workparm.sourcecolumn = "CategoryID" workparm.sourceversion = DataRowVersion.Original Dim catds As DataSet = New DataSet catda.fill(catds, "Categories") Dim crow As DataRow = catds.tables("categories").rows(0) crow("categoryname") = "New Category" catda.update(catds) 15

16 Ordre des insertions, mises à jour et suppressions Dans de nombreuses circonstances, l'ordre dans lequel les modifications faites dans le DataSet sont transmises à la source de données est important. Par exemple, si une valeur de clé primaire d'une ligne existante est mise à jour et qu'une nouvelle ligne est ajoutée avec la nouvelle valeur de clé primaire, il est important de traiter la mise à jour avant l'insertion. Vous pouvez utiliser la méthode Select du DataTable pour retourner un tableau DataRow qui fait uniquement référence à des lignes avec un RowState particulier. Vous pouvez alors passer le tableau DataRow retourné à la méthode Update du DataAdapter pour traiter les lignes modifiées. En spécifiant un sous-ensemble des lignes à mettre à jour, vous pouvez contrôler l'ordre dans lequel les insertions, mises à jour et suppressions sont traitées. Le code suivant garantit, par exemple, que seront d'abord traitées les lignes supprimées de la table puis les lignes mises à jour et enfin les lignes insérées. Dim updtable As DataTable = custds.tables("customers") ' First process deletes. custda.update(updtable.select(nothing, Nothing, DataViewRowState.Deleted)) ' Next process updates. custda.update(updtable.select(nothing, Nothing, DataViewRowState.ModifiedCurrent)) ' Finally, process inserts. custda.update(updtable.select(nothing, Nothing, DataViewRowState.Added)) 16

17 Chapitre 6 : LIAISON DES DONNEES AVEC WINDOWS FORMS Création d'un formulaire Windows simple dépendant L'utilisation la plus simple de la liaison de données dans l'environnement.net sert à afficher le contenu d'une table dans une grille. Pour l'exemple ci-dessous, suivez les étapes ci-après : 1. Créez un formulaire Windows. 2. Créer et configurer le groupe de données auquel vous voulez lier le formulaire. 3. Ajoutez un contrôle de grille de données au formulaire et liez-le aux données. Création de l'exemple de formulaire Vous trouverez ci-dessous les étapes détaillées de la création d'un exemple de formulaire. 1. Cliquez sur Fichier, Nouveau, puis Projet. La boîte de dialogue Nouveau projet s'affiche. 17

18 2. Sélectionnez le Type de projet dans l'arborescence située à gauche de la boîte de dialogue. Dans cet exemple, sélectionnez Projets Visual Basic. 3. Sélectionnez Application Windows dans la liste des modèles située à droite de la boîte de dialogue. 4. Indiquez le nom et l'emplacement du projet que vous voulez créer. Cliquez sur OK pour créer le projet. 5. Appuyez sur F4 pour afficher les propriétés du formulaire. Changez la propriété Name du formulaire pour frmclients. 6. Changez la propriété Text pour Informations Clients. Création d une nouvelle connexion Dans l explorateur de serveurs, cliquez avec le bouton droit de la souris sur «Connexions de données», sélectionnez ensuite l option ajouter une nouvelle connexion 1. la boite de dialogue Propriétés des liaisons de données s'affiche. 18

19 2. Changez le nom du serveur pour qu'il pointe vers celui de votre serveur SQL. 3. Changez le nom et le mot de passe de l'utilisateur nécessaire pour se connecter à ce serveur SQL. 4. Sélectionnez la base de données Northwind qui sera utilisée dans l'exemple. Création d un adaptateur de données 1. Dans la boîte à outils, dans l'onglet Données, sélectionnez un SQLDataAdapter. Faites-le glisser et déposez-le sur le formulaire. 19

20 2. L'Assistant Configuration d'adaptateur de données s'affiche. Cliquez sur Suivant. 3. L'assistant vous permet de désigner le type de requête. Sélectionnez Utiliser des instructions SQL et cliquez sur Suivant. Tapez une instruction SQL et cliquez sur Générateur de requête pour que l'assistant crée l'instruction SQL à votre place. Dans cet exemple, tapez l'instruction SQL suivante : SELECT CustomerID, CompanyName, ContactName, ContactTitle, Country FROM Customers 20

21 4. Cliquez sur Suivant puis sur Terminer pour effectuer le processus. Notez qu'un objet SQLConnection nommé SQLConnection1 et qu'un objet SQLDataAdapter nommé SQLDataAdapter1 apparaissent dans la barre d'état du formulaire. L'objet SQLConnection1 contient des informations concernant l'accès à la base de données sélectionnée. L'objet SQLDataAdapter1 contient une requête définissant les tables et les colonnes de la base de données à laquelle vous voulez accéder. Remarque Dans notre exemple, le SQLDataAdapter est sélectionné depuis la boîte à outils car vous utilisez un serveur SQL. Cet objet ne vous permet de vous connecter qu'à des bases de données du serveur SQL. Si vous souhaitez vous connecter à d'autres types de données OLEDB, sélectionnez l'oledbdataadapter plus générique. Création de la classe de groupe de données L'étape suivante consiste à créer une classe de groupe de données basée sur la requête sélectionnée lors de la création de l'adaptateur de données. Pour créer la classe de groupe de données : 1. Cliquez avec le bouton droit sur l'objet SQLDataAdapter1, puis sur Générer le groupe de données. La boîte de dialogue Générer le groupe de données s'affiche. 21

22 2. Entrez dsnorthwind comme nom du nouveau groupe de données que vous créez. Assurez-vous d'avoir activé la case à cocher Ajouter ce groupe de données au concepteur. Cliquez sur OK. Ceci crée le groupe de données. Lorsque cette étape est terminée, vous voyez un nouveau contrôle, dsnorthwind1, dans la barre d'état de ce formulaire. Ce nouveau contrôle est une référence au fichier dsnorthwind.xsd qui a également été ajouté à votre fenêtre Explorateur de solutions. dsnorthwind.xsd est une définition de schéma XML de l'instruction SQL que vous avez tapée précédemment. Il existe une classe derrière ce fichier XSD que vous ne pouvez voir sauf si vous cliquez sur Projet, puis sur Afficher tous les fichiers dans le menu. Vous pouvez ensuite cliquer sur le signe plus qui s'affiche derrière le fichier dsnorthwind.xsd pour voir le fichier dsnorthwind.vb. La classe dsnorthwind.vb a des propriétés qui correspondent au groupe de données courant et des propriétés qui correspondent à chaque colonne spécifiée dans votre instruction SQL. Bien que cette classe ne vous soit d'aucune utilité, vous devez savoir qu'elle se trouve là. Ajout d'un contrôle de grille de données pour afficher les données À présent, vous êtes prêt à créer un formulaire pour afficher les données contenues dans le groupe de données. Dans cet exemple, vous ajouterez un contrôle de grille de données unique au formulaire. Le contrôle de grille de données affichera les données contenues dans le groupe de données. Voici ce que vous devez faire : 1. En haut de la fenêtre, cliquez sur l'onglet pour afficher le formulaire frmcustomers. 2. Dans l'onglet Windows Forms de la boîte de dialogue, faites glisser un contrôle de grille de données sur le formulaire. Dimensionnez le contrôle selon vos besoins. 3. Appuyez sur F4 pour afficher les propriétés du contrôle. 4. Pour la propriété DataSource, sélectionnez dsnorthwind1. 5. Pour la propriété DataMember, sélectionnez Customers. Les étapes que vous venez de terminer ont lié le groupe de données au contrôle de grille de données. Il suffit d'une étape supplémentaire pour voir les données s'afficher dans le contrôle de grille de données. Remplissage du contrôle de grille de données avec des données Bien que le contrôle de grille de données soit lié au groupe de données, ce dernier n'est pas rempli. Nous allons ajouter un boutons de commande qui permettra de remplir la grille. 22

23 Faites glisser un bouton de commande su le formulaire Pour la propriété name, tapez cmdcharger Pour la propriété text, tapez Charger Double cliquez sur le bouton et tapez le code suivant SqlDataAdapter1.Fill(dsNorthwind1, "Customers") À présent, vous êtes prêt à voir les données de la table Customers affichées dans le contrôle de grille de données. Il reste une étape avant que vous ne puissiez exécuter ce formulaire. Du fait que vous avez modifié le nom du formulaire, vous devez indiquer au projet quel sera le formulaire de démarrage. 1. Dans la fenêtre Explorateur de solutions, cliquez sur le nom de votre projet. 2. Cliquez sur le projet avec le bouton droit et choisissez Propriétés dans le menu contextuel. 3. Cliquez sur la liste modifiable Objet de démarrage et choisissez frmcustomers dans la liste. 4. Cliquez sur OK. 5. Appuyez sur F5 pour exécuter ce projet et, si vous avez effectué toutes les opérations correctement, vous devez à présent voir s'afficher les données des clients dans le contrôle de grille de données après click sur le bouton Chager. Utilisation des listes modifiables et des zones de listes L'exemple que vous venez de créer convient bien pour les petits groupes de données, mais sera peu efficace si la table customers contient des milliers d'enregistrements. Le problème est qu'il récupère tous les clients de la table Customers et les affiche dans le contrôle de grille de données. Bien que cette technique soit très bonne lorsqu'il s'agit d'une démonstration, elle se révèle inadaptée à une application de production. Un serveur de base de données est optimisé pour traiter des volumes importants de données, mais il est souhaitable de ne récupérer que des ensembles de résultats de petite taille. L'exemple de la section précédente serait plus efficace si l'utilisateur commençait par limiter les données en sélectionnant un pays particulier dans la liste modifiable, puis n'affiche que les clients de ce pays. Cette section vous montre comment créer la liste modifiable dépendante. La section suivante vous montre comment 23

24 utiliser la liste modifiable pour limiter les données affichées dans le contrôle de grille de données. Cet exemple nécessite les étapes de base suivantes : 1. Ajout d'un second adaptateur de données au formulaire. 2. Création d'un second groupe de données. 3. Ajout d'une liste modifiable au formulaire. 4. Liaison de la liste modifiable au second adaptateur de données. 5. Remplissage de la liste modifiable avec les données du second adaptateur de données. Ajout d'un second adaptateur de données au formulaire Avant d'ajouter une liste modifiable au formulaire, commencez par ajouter un second adaptateur de données au formulaire. Vous utiliserez cet adaptateur de données pour créer un groupe de données contenant une liste unique de pays à partir de la table Customers. Pour ajouter le second adaptateur de données : 1. Dans la boîte à outils, sous l'onglet Données, sélectionnez un SQLDataAdapter. Faites-le glisser et déposez-le sur le formulaire. L'Assistant Configuration d'adaptateur de données s'affiche. Cliquez sur Suivant. 2. Sélectionnez la connexion à la base de données Northwind que vous avez créée dans l'exemple précédent. Cliquez sur Suivant. 3. Sélectionnez Utiliser des instructions SQL et cliquez sur Suivant. 4. Entrez l'instruction SQL suivante : SELECT DISTINCT Country FROM Customers 5. Cliquez sur le bouton Options avancées de cette boîte de dialogue. 6. N'activez pas la case à cocher Générer des instructions Insert, Update et Delete comme dans la figure 6. Ces instructions ne sont pas nécessaires pour un groupe de données utilisé uniquement pour remplir une liste modifiable. Cliquez sur OK pour fermer cette boîte de dialogue. 7. Cliquez sur Terminer pour générer le SQLDataAdapter. Un objet nommé SQLDataAdapter2 sera désormais ajouté à la barre d'état de votre formulaire. 24

25 Génération du groupe de données 1. Cliquez avec le bouton droit sur objet nommé SQLDataAdapter2, puis sur Générer le groupe de données. La boîte de dialogue Générer le groupe de données s'affiche. 2. Cliquez sur Nouveau et entrez le nom dscountries. Assurezvous d'avoir activé la case à cocher Ajouter ce groupe de données au concepteur. Cliquez sur OK. Ceci crée le groupe de données. Vous avez ajouté un nouvel objet nommé dscountries1 à la barre d'état et un nouveau fichier XSD nommé dscountries.xsd à l'explorateur de solutions. Ces deux éléments créent ensemble la classe de groupe de données et servent à effectuer la liaison de données sur la liste modifiable que vous allez créer. Ajout d'une liste modifiable au formulaire À présent, vous êtes prêt à ajouter la liste modifiable au formulaire. Vous devez agrandir le formulaire et déplacer le contrôle de grille de données vers le bas pour faire de la place à cette nouvelle liste modifiable. Après cela, dans la boîte à outils, vous pouvez faire glisser et déposer une liste modifiable sur le formulaire à partir de l'onglet Windows Forms. Placezla au-dessus du contrôle de grille de donnée. Liaison de la liste modifiable à l'adaptateur de données La liste modifiable que vous avez ajoutée n'est liée à aucune donnée. Pour lier la liste modifiable au groupe de données dscountries : 1. Sélectionnez la liste modifiable. 2. Changez le nom pour cbocountry. 3. Définissez la propriété DataSource sur dscountries1. Ceci spécifie la source de données à partir de laquelle ce contrôle de grille de données sera rempli. 4. Changez la propriété DropDownStyle pour DropDownList. 5. Définissez la propriété DisplayMember sur Customers.Country. Vous devez cliquer sur la liste déroulante de la propriété DisplayMember, puis développer Customers pour afficher la liste des colonnes que vous pouvez utiliser. Cette étape désigne la colonne de la source de données utilisée pour remplir le contrôle de grille de données. 25

26 6. Définissez la propriété ValueMember du contrôle de grille de données sur Customers.Country. La propriété ValueMember sert à désigner la valeur courante lorsqu'un élément est sélectionné. Remplissage de la liste modifiable avec des données Comme pour le contrôle de grille de données, vous devez écrire le code permettant de remplir la liste modifiable de données. Ce code est ajouté à la procédure d'événement Load. Private Sub frmcustomers_load SqlDataAdapter2.Fill(DsCountries1, "Customers") End Sub Affichage des données en fonction d'une requête paramétrée À présent que la liste modifiable est chargée avec les pays, il est temps d'utiliser le pays sélectionné dans la liste modifiable pour sélectionner les clients à charger dans le contrôle de grille de données. Les étapes principales sont les suivantes : 1. Modifiez la propriété SelectCommand de l'objet SqlDataAdapter1 pour qu'il accepte un paramètre du pays pour lequel vous voulez afficher des données. 2. Ajoutez le code qui s'exécute lorsque l'utilisateur sélectionne un élément dans la liste modifiable. Modifiez la propriété SelectCommand L'étape suivante consiste à modifier la propriété SelectCommand de l'adaptateur de données de manière à ce qu'il soit basé sur la requête paramétrée. Les étapes sont les suivantes : 1. Dans la barre d'état du formulaire, cliquez sur l'objet SqlDataAdapter1. 2. Appuyez sur F4 pour ouvrir la fenêtre Propriétés. 3. À côté de la propriété SelectCommand, cliquez sur le signe plus pour développer la liste des sous-propriétés. 4. Cliquez sur la propriété CommandText. Cliquez sur Générer (...) pour afficher la boîte de dialogue Générateur de requête. 5. Ajoutez une clause WHERE afin que l'instruction SQL ressemble à ceci : SELECT CustomerID, CompanyName, ContactName, Country 26

27 FROM Customers WHERE Country 6. Cliquez sur OK pour accepter cette modification. 7. Cliquez sur l'objet SQLDataAdapter1. 8. Cliquez sur Données, sur Générer le groupe de données, puis sur OK pour régénérer le groupe de données existant. Ajoutez le code qui s'exécute lorsque l'utilisateur sélectionne un élément dans la liste modifiable La partie finale de code remplit le contrôle de grille de données lorsqu'un pays est sélectionné dans la liste modifiable cbocountry. Les étapes principales sont les suivantes : 1. Répondez à l'événement SelectedIndexChanged. 2. Définissez le paramètre dans le groupe de données avec les données récupérées à partir de l'élément sélectionné dans la liste modifiable. 3. Remplissez le groupe de données à l'aide de ce paramètre. Suivez ces étapes pour ajouter le code et permettre que cela fonctionne. 1. Ouvrez le formulaire en mode création. 2. Double-cliquez sur la liste modifiable cbocountry pour afficher la procédure d'événement SelectedIndexChanged. Il s'agit de l'événement déclenché lorsque vous choisissez un nouvel élément dans la liste modifiable. 3. Écrivez le code suivant dans cette procédure. Private Sub cbocountry_selectedindexchanged ' Obtention de l'objet Parameter et définition de sa valeur SqlDataAdapter1.SelectCommand.Parameters.Item("@CountryParam").Value = _ cbocountry.selectedvalue ' Suppression du groupe de données DsNorthwind1.customers.rows.Clear() ' Chargement du groupe de données en utilisant la valeur du paramètre SqlDataAdapter1.Fill(DsNorthwind1, "Cutomers") End Sub Vous devez utiliser l'objet SelectCommand de l'adaptateur de données pour récupérer l'objet Parameter spécifié. Vous pouvez ensuite définir la propriété Value de ce paramètre sur la propriété SelectedValue de la liste modifiable. La propriété SelectedValue est remplie avec le nom du pays car vous avez défini la propriété ValueMember de la liste modifiable pour qu'elle utilise le champ Country du groupe de données. Après avoir rempli cette valeur, vous pouvez remplir le groupe de données du client et 27

28 le contrôle de grille de données sera rempli automatiquement par les seuls clients du pays sélectionné. Formulaire de mise à jour d une table Les exemples précédents ont tous affiché les données dans un contrôle de grille de données. Lorsque vous créez des applications, il est également nécessaire d'afficher des colonnes individuelles dans des zones de texte d'un formulaire pour les éditer. Bien que le propos de ce document ne soit pas de vous faire apprendre l'édition des données, vous allez apprendre à afficher des données dans les zones de texte. Les étapes principales sont les suivantes : 1. Créer un formulaire Windows. 2. Créer et configurer le groupe de données auquel vous voulez lier le formulaire. 3. Ajouter des contrôles au formulaire et liez-les au groupe de données. 4. Ajouter des boutons de commande permettant à l'utilisateur de naviguer d'une ligne à l'autre. Ajout de contrôles au formulaire et liaison de ces contrôles au groupe de données Ajoutez des contrôles au formulaire et définissez leurs propriétés comme dans le tableau 1. 28

29 Tableau des contrôles utilisés pour créer le formulaire Type de contrôle Propriété Valeur Label Name Label1 Text Code TextBox Name txtcustomerid Label Name Label2 Text Nom TextBox Name txtcompanyname Label Name Label3 Text Contact TextBox Name txtcontactname CommandButton Name cmdpremier Text << CommandButton Name cmdprecedent Text < CommandButton Name cmdsuivant Text > CommandButton Name cmddernier Text >> CommandButton Name cmdcharger Text Charger CommandButton Name cmdajouter Text Ajouter CommandButton Name cmdsupprimer Text Supprimer CommandButton Name cmdmaj Text Mettre à jour Vous devez à présent lier chaque zone de texte à une colonne du groupe de données. Pour ce faire : 1. Sélectionnez la zone de texte que vous voulez lier. 2. Appuyez sur F4 pour afficher la fenêtre Propriétés. 3. Cliquez pour développer les propriétés DataBindings. 4. Sous DataBindings, sélectionnez la propriété Text. 5. Ouvrez la liste modifiable et liez chaque zone de texte au champ approprié. Par exemple, pour lier la zone de texte txtcustomerid au champ CustomerID, cliquez sur le signe plus de 29

30 DsCustomers1, sur le signe plus de Customers, et sélectionnez le champ CustomerID. Ecrivez le code permettant de remplir le formulaire de données. Pour cela double cliquez sur le bouton charger puis tapez le code : DsNorthwind1.customers.Clear() SqlDataAdapter1.Fill(DsCustomers1, "Clients") End Sub L'objet CurrencyManager Assure un suivi de la position et supervise les liaisons à une source de données. Il existe, dans le formulaire, un objet CurrencyManager pour chaque source de données discrète à laquelle vous vous liez. Si les contrôles du formulaire sont tous liés à la même source (par exemple, si plusieurs contrôles TextBox sont liés à la même table de données), ils partagent alors le même CurrencyManager Ajout de boutons de commande permettant à l'utilisateur de naviguer d'une ligne à l'autre Commençons par déclarer une donnée membre de type CurrencyManager dans notre formulaire que nous appellerons cmcustomers. Private cmcustomers as CurrencyManager Nous devons ensuite récupérer le CurrencyManager au chargement du formulaire à partir de la collection BindingContext. Private Sub Form1_Load cmcustomers = BindingContext(dsNorthwind1, Customers ) End Sub Code des boutons de navigation Private Sub cmdprecedent_click cmcustomers Position -= 1 End Sub Private Sub cmdpremier_click cmcustomers.position = 0 End Sub Private Sub cmddernier_click cmcustomers.position = dsnorthwind1.customers.rows.count - 1 End Sub Ajout de boutons de commande de mise à jour 30

31 Le code suivant permet l ajout d un nouvel enregistrement, la suppression d un enregistrement existant et enfin la mise à jour de la base de données Private Sub cmdajouter_click cmcustomers.addnew() End Sub Private Sub cmdsupprimer_click cmcustomers.removeat(cmcustomers.position) End Sub Private Sub cmdmaj_click dacustomers.update(dsnorthwind1) End Sub 31

32 Chapitre 7 : Quelques contrôles dépendants Zone de texte, Label Pour lier une zone de texte à une source de données : En mode design, utiliser la propriété text du DataBinding. Dans l exemple ci-dessus, la zone de texte TextBox1 est liée a champs OrderID de la table Orders du dataset DsNorthwind1. Cette liaison peut être effectuée au cours de l exécution comme suit : TextBox1.DataBindings.Add(New System.Windows.Forms.Binding("Text", DsNorthwind1, "Orders.OrderID")) Un label peut être lié de la même manière qu une zone de texte, seulement il ne peut être utilisé que pour afficher des données. DateTimePeacker 32

33 Ce contrôle est utilisé pour permettre à l'utilisateur de sélectionner une date et/ou une heure, et pour afficher cette valeur date et heure au format spécifié. Vous pouvez restreindre la fourchette de dates et d'heures qu'il sera possible de sélectionner en définissant les propriétés MinDate et MaxDate. La propriété Format détermine le format du contrôle qui peut être Long, Short, Time ou Custom. Si la propriété Format a pour valeur Custom, vous pouvez créer votre propre style de format en définissant la propriété CustomFormat. Afin d'utiliser un contrôle de style up-down pour sélectionner la valeur de date-heure, affectez à la propriété ShowUpDown la valeur true. Lors de sa sélection, le contrôle Calendar ne se déroulera pas. La date et l'heure peuvent être réglées par la sélection de chaque élément individuellement et par l'utilisation des boutons haut et bas pour en modifier la valeur. Pour lier ce contrôle : En mode création, utilisez la propriété Value du DataBinding. 33

34 Cet exemple permet de lier le contrôle DateTimePeaker1 au champ OrderDate de la table Orders. Au cours de l exécution, tapez le code suivant : DateTimePicker1.DataBindings.Add(New System.Windows.Forms.Binding("Value", DsNorthwind1, "Orders.OrderDate")) ComboBox, ListBox Un ComboBox affiche un champ d'édition associé à un ListBox, permettant à l'utilisateur de sélectionner dans la liste ou d'entrer un nouveau texte. La propriété DropDownStyle détermine le style de la zone de liste déroulante à afficher. Pour afficher toujours une liste que l'utilisateur ne peut pas modifier, utilisez un contrôle ListBox. En plus de l'affichage et de la fonctionnalité de sélection, le ComboBox comprend également des fonctionnalités qui vous permettent d'ajouter efficacement des éléments au ComboBox et de rechercher du texte dans les éléments de la liste. Les méthodes BeginUpdate et EndUpdate vous permettent d'ajouter un grand nombre d'éléments au ComboBox sans repeindre le contrôle chaque fois qu'un élément est ajouté à la liste. Les méthodes FindString et FindStringExact vous permettent de rechercher un élément dans la liste qui contient une chaîne recherchée spécifique. La propriété Text spécifie la chaîne affichée dans le champ d'édition. La propriété SelectedIndex renvoie ou définit l'élément en cours. Pour lier ce contrôle à une source de données : En mode création utilisez les propriétés suivantes 34

35 DataSource : indique la source qui sera utilisée pour ajouter des objets au contrôle. DisplayMember : spécifie le champ qui sera affiché dans le ComboBox. ValueMember : Nom de champ qui sera utilisé comme valeur retenue après le choix de l utilisateur. SelectedValue du DataBinding : Champ de la table liée au contrôle. Text du DataBinding : Champ qui sera affiché dans la zone de texte. Au cours de l exécution, la liaison peut être faite avec le code suivant : ComboBox1.DataBindings.Add(New System.Windows.Forms.Binding("SelectedValue", DsNorthwind1, "Orders.CustomerID")) ComboBox1.DataBindings.Add(New System.Windows.Forms.Binding("Text", DsNorthwind1, "Customers.CompanyName")) ComboBox1.DataSource = DsNorthwind1.Customers ComboBox1.DisplayMember = "CompanyName" ComboBox1.ValueMember = "CustomerID" 35

36 Chapitre 8 : Création et utilisation de DataViews Un DataView vous permet de créer différentes vues des données stockées dans un DataTable, possibilité qui est souvent utilisée dans les applications de liaison de données. En utilisant un DataView, vous pouvez présenter les données d'une table en appliquant différents ordres de tri et filtrer les données en fonction d'un état de ligne ou d'une expression de filtre. Création d'un DataView Création d un dataview en mode conception : 1. Commencez par créer un dataadapter et un dataset 2. A partir de la boite à outils, glissez un dataview sur votre formulaire et renseignez sa propriété Table. 3. Liez ensuite la grille de données au dataview que vous venez de créer Création d un dataview au cours de l exécution : Vous pouvez utiliser le constructeur de DataView ou créer une référence à la propriété DefaultView du DataTable. L'exemple de code suivant crée un DataView lié à la table Customers avec un filtre sur les clients des USA et un tri sur le champ contactname. Dim dvcustomers As DataView = New DataView(DsNorthwind1.Customers, _ "Country = 'USA'", _ 36

37 "ContactName", _ DataViewRowState.CurrentRows) L'exemple de code suivant montre comment obtenir une référence au DataView par défaut d'un DataTable à l'aide de la propriété DefaultView de la table. Dim dvproduits As DataView = dsnorthwind1.customers.defaultview Filtrage par état de ligne À l'aide de la propriété RowStateFilter, vous pouvez spécifier les versions de lignes à afficher. Par exemple, si la propriété RowStateFilter est définie à DataViewRowState.Deleted, le DataView expose la version d'origine de toutes les lignes supprimées, car ces lignes n'ont plus de version actuelle. Vous pouvez déterminer quelle version d'une ligne est exposée à l'aide de la propriété RowVersion du DataRowView. 37

38 Le tableau suivant présente les options de DataViewRowState. DataViewRowState Description CurrentRows Version actuelle de toutes les lignes inchangées, ajoutées et modifiées. Il s'agit de la valeur par défaut. Added Version actuelle de toutes les lignes ajoutées. Deleted Version d'origine de toutes les lignes supprimées. ModifiedCurrent Version actuelle de toutes les lignes modifiées. ModifiedOriginal Version d'origine de toutes les lignes modifiées. None Aucune ligne. OriginalRows Version d'origine de toutes les lignes inchangées, modifiées et supprimées. Unchanged Version actuelle de toutes les lignes inchangées. Tri et filtrage de données à l'aide d'un DataView Le DataView offre différentes possibilités pour le tri et le filtrage des données d'un DataTable : En utilisant la propriété Sort, vous pouvez spécifier un ordre de tri en fonction d'une ou de plusieurs colonnes et inclure des paramètres ASC (ordre croissant) et DESC (ordre décroissant). Vous pouvez utiliser la propriété ApplyDefaultSort pour créer automatiquement un ordre de tri, croissant, basé sur la ou les colonnes clés primaires de la table. ApplyDefaultSort est applicable uniquement lorsque la propriété Sort est une référence null ou une chaîne vide et lorsqu'une clé primaire est définie dans la table. En utilisant la propriété RowFilter, vous pouvez spécifier des sous-ensembles de lignes en fonction des valeurs de leurs colonnes. L'exemple de code suivant crée une vue faisant apparaître tous les produits pour lesquels la quantité en stock est inférieure ou égale au niveau de passage d'une nouvelle commande, triés d'abord par ID de fournisseur, puis par nom de produit. Dim prodview As DataView = New DataView(prodDS.Tables("Products"), _ "UnitsInStock <= ReorderLevel", _ "SupplierID, ProductName", _ DataViewRowState.CurrentRows) Recherche de données dans un DataView À l'aide des méthodes Find et FindRows du DataView, vous pouvez rechercher des lignes en fonction des valeurs de leur clé de tri. Le respect ou le non-respect de la casse des valeurs de recherche des méthodes Find et FindRows est déterminé par la propriété CaseSensitive du 38

39 DataTable sous-jacent. Pour qu'un résultat soit retourné, les valeurs de recherche doivent correspondre aux valeurs des clés de tri existantes dans leur intégralité. La méthode Find retourne un entier avec l'index du DataRowView qui correspond aux critères de recherche. Si plusieurs lignes correspondent aux critères de recherche, seul l'index du premier DataRowView correspondant est retourné. Si aucune correspondance n'est trouvée, Find retourne -1. Pour retourner des résultats de recherche qui correspondent à plusieurs lignes, vous pouvez utiliser la méthode FindRows. La méthode FindRows fonctionne de la même manière que Find, à cette exception qu'elle retourne un tableau DataRowView faisant référence à toutes les lignes du DataView qui présentent une correspondance. Si aucune correspondance n'est trouvée, le tableau DataRowView sera vide. Pour utiliser les méthodes Find ou FindRows, vous devez spécifier un ordre de tri soit en définissant ApplyDefaultSort à true, soit en utilisant la propriété Sort. Si aucun ordre de tri n'est spécifié, une exception est levée. L'exemple de code suivant illustre la méthode Find appelée sur un DataView avec un ordre de tri défini sur une seule colonne. Dim custview As DataView = New DataView(custDS.Tables("Customers"), "", _ "CompanyName", DataViewRowState.CurrentRows) Dim rowindex As Integer = custview.find("the Cracker Box") If rowindex = -1 Then Console.WriteLine("Non trouvé.") Else Console.WriteLine("{0}, {1}", _ custview(rowindex)("customerid").tostring(), _ custview(rowindex)("companyname").tostring()) End If Si votre propriété Sort spécifie plusieurs colonnes, vous devez passer un tableau d'objets avec les valeurs de recherche pour chaque colonne incluse dans l'ordre spécifié par la propriété Sort, comme dans l'exemple de code suivant. Dim custview As DataView = New DataView(custDS.Tables("Customers"), "", _ "CompanyName, ContactName", _ DataViewRowState.CurrentRows) Dim foundrows() As DataRowView = custview.findrows(new object() {"The Cracker Box", "Liu Wong"}) 39

40 If foundrows.length = 0 Then Console.WriteLine("Non trouvé.") Else Dim mydrv As DataRowView For Each mydrv In foundrows Console.WriteLine("{0}, {1}", mydrv("companyname").tostring(), mydrv("contactname").tostring()) Next End If Modification de données à l'aide d'un DataView Un DataView est, par défaut, une vue en lecture seule de données. Toutefois, vous pouvez utiliser le DataView pour ajouter, supprimer ou modifier des lignes de données dans la table sous-jacente en définissant l'une des trois propriétés de type Boolean du DataView. Ces propriétés sont AllowNew, AllowEdit et AllowDelete. Elles sont définies à true par défaut et vous permettent de spécifier si vous pouvez modifier les données du DataTable sous-jacent du DataView. L'exemple de code suivant désactive la possibilité de supprimer des lignes à l'aide du DataView et ajoute une nouvelle ligne à la table sous-jacente à l'aide du DataView. Dim custtable As DataTable = custds.tables("customers") Dim custview As DataView = custtable.defaultview custview.sort = "CompanyName" custview.allowdelete = False Dim newdrv As DataRowView = custview.addnew() newdrv("customerid") = "ABCDE" newdrv("companyname") = "ABC Products" newdrv.endedit() 40

41 Chapitre 9 : Création d'un contrôle utilisateur Les contrôles utilisateur offrent un moyen de créer et de réutiliser des interfaces graphiques personnalisées. Un contrôle utilisateur est pour l'essentiel un composant doté d'une représentation visuelle. Il peut être constitué d'un ou de plusieurs contrôles Windows Forms, de composants ou de blocs de code, lesquels peuvent développer des fonctionnalités en validant des entrées de l'utilisateur, en modifiant des propriétés d'affichage ou en effectuant d'autres tâches imposées par le créateur du contrôle. Les contrôles utilisateur peuvent être placés dans les Windows Forms de la même façon que les autres contrôles. Création du projet Pour créer la bibliothèque de contrôles ctlclocklib et le contrôle ctlclock 1. Dans le menu Fichier, pointez sur Nouveau, puis sélectionnez Projet pour afficher la boîte de dialogue Nouveau projet. 2. Sélectionnez le modèle de projet Bibliothèque de contrôles Windows dans la liste Projets Visual Basic, et tapez ctlclocklib dans la zone Nom. 3. Recherchez l'instruction Class, Public Class UserControl1, et remplacez UserControl1 par ctlclock pour changer le nom du composant. 4. Dans l'explorateur de solutions, cliquez sur UserControl1, puis dans la fenêtre Propriétés, remplacez la propriété FileName par ctlclock.vb. 5. Dans le menu Fichier, choisissez Enregistrer tout pour enregistrer le projet. Ajout de contrôles Windows et de composants à un contrôle utilisateur Pour ajouter un contrôle Label et un contrôle Timer à votre contrôle utilisateur 1. Dans la boîte à outils, cliquez sur l'onglet Windows Forms puis double-cliquez sur Label. 2. Dans le concepteur, cliquez sur Label1. Dans la fenêtre Propriétés, définissez les propriétés suivantes. Propriété Substitution Name lbldisplay Text (espace blanc) TextAlign MiddleCenter Font.Size Dans la boîte à outils, cliquez sur l'onglet Windows Forms puis double-cliquez sur Timer. 41

42 Une minuterie étant un composant, elle n'a pas de représentation visuelle au moment de l'exécution. Elle n'est donc pas affichée avec les contrôles dans le Concepteur de contrôles utilisateur, mais apparaît dans la barre d'état des composants. 4. Dans la barre d'état des composants, cliquez sur Timer1 et attribuez à la propriété Interval la valeur 1000 et à la propriété Enabled la valeur True. La propriété Interval détermine la fréquence des graduations du composant Timer. À chaque graduation, le composant Timer1 exécute le code de l'événement Timer1_Tick. L'intervalle représente le nombre de millisecondes entre deux graduations. 5. Dans la barre d'état des composants, double-cliquez sur Timer1 pour accéder à l'événement Timer1_Tick de ctlclock. 6. Modifiez le code pour qu'il ressemble à ceci : Protected Sub Timer1_Tick(ByVal sender As Object, ByVal e As _ System.EventArgs) ' Causes the label to display the current time lbldisplay.text = Format(Now, "hh:mm:ss") End Sub Ce code déclenche toujours l'affichage de l'heure actuelle dans lbldisplay. Comme l'intervalle de Timer1 a été fixé à 1 000, cet événement est déclenché toutes les mille millisecondes, mettant ainsi à jour l'heure actuelle toutes les secondes. 7. Modifiez la méthode de telle manière qu'elle puisse être substituée. Protected Overridable Sub Timer1_Tick(ByVal sender As Object, ByVal _ e As System.EventArgs) Handles Timer1.Tick 8. Dans le menu Fichier, choisissez Enregistrer ctlclock pour enregistrer le projet. Ajout de propriétés à un contrôle utilisateur Votre contrôle d'horloge contient désormais un contrôle Label et un composant Timer dotés chacun de leurs propres propriétés inhérentes. Les propriétés de ces contrôles ne seront pas disponibles individuellement aux futurs utilisateurs de votre contrôle ; toutefois, vous pouvez créer et exposer des propriétés personnalisées en écrivant pour ce faire les blocs de code appropriés. Pour ajouter une propriété à votre contrôle utilisateur 1. Dans l'explorateur de solutions, cliquez avec le bouton droit sur ctlclock.vb, puis sur Afficher le code dans le menu contextuel. 42

43 2. Recherchez l'instruction Inherits System.Windows.Forms.UserControl. Sous cette instruction, tapez : Private colfcolor as Color Private colbcolor as Color Ces instructions créent les variables privées que vous utiliserez pour stocker les valeurs des propriétés que vous êtes sur le point de créer. 3. Tapez le code suivant sous les déclarations de variable de l'étape 2 : ' Déclaration des propriétés Property ClockBackColor() as Color ' Renvoie la valeur de la propriété colbcolor. Get Return colbcolor End Get ' Modifie la valeur de la prpriété colbcolor Set(ByVal Value as Color) colbcolor = Value lbldisplay.backcolor = ColBColor End Set End Property Property ClockForeColor() as Color Get Return colfcolor End Get Set(ByVal Value as Color) colfcolor = Value lbldisplay.forecolor = ColFColor End Set End Property Le code précédent met deux propriétés personnalisées, ClockForeColor et ClockBackColor, à la disposition des futurs utilisateurs du contrôle en appelant l'instruction Property. Les instructions Get et Set assurent le stockage et l'extraction de la valeur de propriété ainsi que du code permettant d'implémenter les fonctionnalités appropriées à la propriété. 4. Dans le menu Fichier, choisissez Enregistrer ctlclock.vb pour enregistrer le projet. 43

44 Test du contrôle Les contrôles ne sont pas des projets autonomes ; ils doivent êtes placés dans un conteneur. Pour tester votre contrôle, vous devez fournir un projet de test dans lequel il puisse s'exécuter. Pour générer le contrôle Dans le menu Générer, cliquez sur Générer ctlclocklib. Pour créer un projet de test 1. Dans le menu Fichier, pointez sur Ajouter un projet et cliquez sur Nouveau projet pour ouvrir la boîte de dialogue Ajouter un nouveau projet. 2. Cliquez sur Application Windows, puis tapez Test et cliquez sur OK dans la zone Nom. 3. Dans l'explorateur de solutions, cliquez avec le bouton droit sur le nœud Références de votre projet de test. Cliquez sur Ajouter une référence pour afficher la boîte de dialogue Ajouter une référence. 4. Cliquez sur l'onglet Projets. Votre projet est répertorié sous Nom du projet. 5. Double-cliquez sur votre projet. Une fois que vous avez ajouté votre référence, vous pouvez placer le contrôle dans votre formulaire. Pour tester le contrôle 1. Dans la boîte à outils, cliquez sur Windows Forms et faites défiler la fenêtre vers le bas jusqu'à ce que s'affiche l'icône représentant le contrôle ctlclock. 2. Double-cliquez sur l'icône ctlclock. 3. Sélectionnez l'icône et amenez la souris sur votre formulaire. 4. Maintenez le bouton gauche enfoncé pendant que vous déplacez la souris sur le formulaire. 5. Dans le concepteur, cliquez sur l'une des instances de ctlclock. 6. Dans la fenêtre Propriétés, recherchez la propriété ClockBackColor, puis sélectionnez-la pour afficher la palette de couleurs. 7. Choisissez une couleur en cliquant dessus. 8. Utilisez une séquence d'événements similaire pour vérifier que la propriété ClockForeColor fonctionne comme prévu. Héritage d'un contrôle utilisateur Votre contrôle utilisateur peut être employé comme base pour la construction d'autres contrôles. Le processus consistant à dériver une classe d'une classe de base est appelé héritage. Dans cette section, vous créerez un contrôle utilisateur appelé ctlalarmclock. Ce contrôle sera dérivé de son contrôle parent, ctlclock. Vous apprendrez à développer les fonctionnalités du contrôle ctlclock en substituant les méthodes parentes et en ajoutant de nouvelles méthodes et propriétés. 44

45 Création du contrôle hérité La première étape de la création d'un contrôle hérité consiste à le dériver de son parent. Cette opération crée un contrôle qui possède toutes les propriétés, méthodes et caractéristiques graphiques du contrôle parent, mais peut également servir de base pour l'ajout de fonctionnalités nouvelles ou modifiées. Pour créer le contrôle hérité 1. Dans l'explorateur de solutions, cliquez sur ctlclocklib. 2. Dans le menu Projet, choisissez Ajouter un contrôle hérité. 3. Dans la zone Nom, tapez ctlalarmclock.vb et cliquez sur Ouvrir. 4. Sous Nom du composant, double-cliquez sur ctlclock. 5. Dans l'explorateur de solutions, parcourez les projets en cours. Notez qu'un fichier appelé ctlalarmclock a été ajouté. Ajout de propriétés d'alarme Vous ajoutez des propriétés à un contrôle hérité comme vous le feriez pour un contrôle utilisateur. Vous allez maintenant utiliser la syntaxe de déclaration de propriété pour ajouter deux propriétés à votre contrôle : AlarmTime, qui stocke la valeur de date et d'heure à laquelle l'alarme se déclenche et AlarmSet qui indique si l'alarme est activée ou non. Pour ajouter des propriétés à votre contrôle utilisateur 1. Dans l'explorateur de solutions, cliquez avec le bouton droit sur ctlalarmclock et sélectionnez Afficher le code dans le menu contextuel. 2. Recherchez l'instruction Inherits. Notez que votre contrôle hérite de ctlclocklib.ctlclock. Sous l'instruction Inherits, tapez le code suivant : Private dtealarmtime As Date Private blnalarmset As Boolean Public Property AlarmTime() As Date Get Return dtealarmtime End Get Set(ByVal Value as Date) dtealarmtime = Value End Set End Property Public Property AlarmSet() As Boolean Get Return blnalarmset 45

46 End Get Set(ByVal Value as Boolean) blnalarmset = Value End Set End Property Ajout à l'interface graphique de votre contrôle Votre contrôle hérité possède une interface visuelle identique à celle du contrôle dont il a hérité. Il possède les mêmes contrôles constitutifs que son contrôle parent, mais leurs propriétés ne sont pas disponibles tant qu'elles ne sont pas spécifiquement exposées. Vous pouvez faire des ajouts à une interface graphique comme vous le feriez pour n'importe quel contrôle utilisateur. Pour enrichir l'interface visuelle de votre réveil, vous allez ajouter un contrôle qui clignotera lorsque l'alarme sonnera. Pour ajouter le contrôle Label 1. Dans l'explorateur de solutions, cliquez avec le bouton droit sur ctlalarmclock et sélectionnez Afficher le concepteur dans le menu contextuel. 2. Cliquez sur la partie affichage du contrôle et observez ce qui se passe dans la fenêtre Propriétés. 3. Ajoutez un contrôle Label à votre contrôle utilisateur. 4. À l'aide de la souris, placez le contrôle Label immédiatement sous la zone d'affichage. Dans la fenêtre Propriétés, définissez les propriétés suivantes : Propriété Name Text TextAlign Visible Valeur lblalarm Alarm Is Sounding! Middle Center false Ajout de fonctionnalités d'alarme Vous allez ajouter du code pour comparer l'heure actuelle avec celle de l'alarme et, si les heures sont identiques, déclencher une alarme à la fois sonore et clignotante. En substituant la méthode Timer1_Tick de ctlclock et en lui ajoutant du code supplémentaire, vous développez les fonctionnalités de ctlalarmclock tout en conservant les fonctionnalités inhérentes de ctlclock. Pour substituer la méthode Timer1_Tick de ctlclock 1. Dans l'éditeur de code, recherchez l'instruction Private blnalarmset As Boolean. Immédiatement sous cette instruction, tapez l'instruction suivante : Dim blncolorticker as Boolean 46

47 2. Dans l'éditeur de code, recherchez l'instruction End Class. Elle se trouve au bas de la page. 3. Juste avant l'instruction End Class, ajoutez le code suivant : Protected Overrides Sub Timer1_Tick(ByVal sender As Object, ByVal e _ As System.EventArgs) ' Appelle la méthode Timer1_Tick de ctlclock. MyBase.Timer1_Tick(sender, e) ' Vérifie si l alarme est activée. If AlarmSet = False Then Exit Sub End If ' si date et heure = date et heure de l alarme If AlarmTime.Date = Now.Date And AlarmTime.Hour = Now.Hour And _ Else AlarmTime.Minute = Now.Minute Then Beep() lblalarm.visible = True If blncolorticker = False Then Else lblalarm.backcolor = Color.PeachPuff blncolorticker = True lblalarm.backcolor = Color.Plum blncolorticker = False End If lblalarm.visible = False End If End Sub Votre contrôle de réveil est presque terminé. Il ne reste plus qu'à implémenter un moyen de le désactiver. Pour ce faire, vous ajoutez du code à la méthode lblalarm_click. Pour implémenter la méthode de désactivation 1. Dans l'explorateur de solutions, cliquez avec le bouton droit sur ctlalarmclock.vb, puis cliquez sur Concepteur de vues. 2. Dans le concepteur, double-cliquez sur lblalarm. L'éditeur de code s'ouvre à la ligne Protected Sub lblalarm_click. 47

48 Modifiez la méthode pour qu'elle ressemble à ceci : Protected Sub lblalarm_click(byval sender As Object, ByVal e As _ System.EventArgs) Handles lblalarm.click ' Turns off the alarm. AlarmSet = False ' Hides the flashing label. lblalarm.visible = False End Sub 3. Dans le menu Fichier, choisissez Enregistrer ctlalarmclock.vb pour enregistrer le projet. Test du contrôle hérité Pour générer et ajouter votre contrôle à un formulaire de test 1. Dans l'explorateur de solutions, cliquez sur ctlclocklib. Dans le menu Générer, cliquez sur Générer ctlclocklib. 2. Ajoutez un nouveau projet Application Windows à la solution et nommez-le Test2. 3. Dans l'explorateur de solutions, cliquez avec le bouton droit sur le nœud Références de votre projet de test. Cliquez sur Ajouter une référence pour afficher la fenêtre Ajouter une référence. Cliquez sur l'onglet Projets. Le projet ctlclocklib est répertorié sous Nom du projet. Double-cliquez sur ctlclocklib ; il apparaît désormais dans la fenêtre Composants sélectionnés. 4. Dans la boîte à outils, cliquez sur Windows Forms. 5. Faites défiler la fenêtre vers le bas jusqu'à ce que l'icône de ctlalarmclock apparaisse. 6. Double-cliquez sur ctlalarmclock pour ajouter une copie de ctlalarmclock à votre formulaire. 7. Recherchez DateTimePicker et double-cliquez dessus pour ajouter un contrôle DateTimePicker à votre formulaire, puis ajoutez un contrôle Label en doublecliquant sur Étiquette. 8. À l'aide de la souris, placez les contrôles dans le formulaire à un endroit adéquat. 9. Définissez comme suit les propriétés de ces contrôles : Contrôle Propriété Value Label1 Text (laisser vide) Name lbltest DateTimePicker1 Name dtptest Format Time 10. Dans le concepteur, double-cliquez sur dtptest. L'Éditeur de code s'ouvre sur Protected Sub dtptest_valuechanged. 11. Modifiez le code pour qu'il ressemble à ceci : 48

49 Protected Sub dtptest_valuechanged(byval sender As Object, ByVal e As System.EventArgs) Handles dtptest.valuechanged ctlalarmclock1.alarmtime = dtptest.value ctlalarmclock1.alarmset = True lbltest.text = "Alarm Time is " & Format(ctlAlarmClock1.AlarmTime, End Sub "hh:mm") 12. Dans l'explorateur de solutions, cliquez avec le bouton droit sur Test2 puis sélectionnez Définir comme projet de démarrage dans le menu contextuel. 13. Dans le menu Déboguer, cliquez sur Démarrer. Le programme de test démarre. Notez que l'heure actuelle est mise à jour dans le contrôle ctlalarmclock et que l'heure de démarrage est affichée dans le contrôle DateTimePicker. 14. Cliquez sur le contrôle DateTimePicker dans lequel sont affichées les minutes de l'heure. 15. À l'aide du clavier, définissez pour les minutes une valeur supérieure d'une minute à l'heure actuelle affichée dans ctlalarmclock. L'heure de définition de l'alarme apparaît dans lbltest. 16. Attendez que l'heure affichée atteigne l'heure de définition de l'alarme. Lorsque l'heure affichée atteint celle à laquelle l'alarme est définie, le signal sonore se fait entendre et lblalarm se met à clignoter. Désactivez l'alarme en cliquant sur lblalarm. Vous pouvez maintenant réinitialiser l'alarme. 49

50 Chapitre 10 : Création d'états Crystal Reports Crystal Reports est l'outil de création d'états fourni avec Visual Studio.NET. Nous allons voir comment créer un état alimenté par des données extraites d'une application.net et comment afficher l'état généré dans une fenêtre Windows. Création du dataset typé Nous devons commencer par créer un dataset typé. Pour que notre état puisse consommer les données de notre dataset celui-ci doit être typé. En effet, lors de la création de l'état il faut bien que Crystal Reports puisse déterminer le nom et le type des champs pour les données qui lui serviront à générer le rapport. Création de l'état Tout d'abord il faut ajouter un état Crystal Reports au projet. 1. Dans l'explorateur de solutions Visual Studio.NET, cliquez avec le bouton droit de la souris sur votre projet pour afficher le menu contextuel. 2. Pointez sur Ajouter et cliquez sur Ajouter un nouvel élément. 3. Dans la boîte de dialogue Ajouter un nouvel élément, sélectionnez Etat Crystal Reports dans la zone Modèles. Cliquez sur Ouvrir. 4. Dans la Collection d'états Crystal Reports, sélectionnez une des options suivantes : Utilisation de l'expert Etat vous guide tout au long du processus de création d'état et ajoute vos choix au Crystal Report Designer. En tant qu'état vide ouvre le Crystal Report Designer. Dans un état existant crée un nouvel état avec la même conception qu'un autre état que vous spécifiez. 5. Cliquez sur OK. Nous allons ensuite utiliser l'expert d'état pour créer rapidement notre état. Dans l'onglet "Données" développer l'arbre ADO.NET, puis le dataset 50

51 Cliquez sur "Insérer la table" Ajoutez les champs de votre état 51

52 Passer directement à l'onglet "Diagramme". Les onglets "Groupe" "Total" et "Nsup" permettent de classer les données et d'afficher des totaux par colonne et par groupe. Nous allons réaliser un diagramme sectoriel sur la quantité de produits commandés. Choisir un diagramme de type "sectoriel", faire "suivant". Sélectionner "sur changement" puis ajouter le champ "Réf produit" Sélectionner le champ "Unités commandées" dans "Afficher des valeurs". Faire "Terminer". Voilà, notre état Crystal Reports est enfin créé. Voyons maintenant comment générer les rapports. Visualisation d'un état dans une application windowsform On doit commencer par créer une instance de notre état crystal report. Dim rpt As New CrystalReport1 Maintenant voyons comment passer les données du dataset à notre crystal report et comment le visualiser à l'aide du viewer. rpt.setdatasource(dsnorthwind1) CrystalReportViewer1.ReportSource = rpt CRviewer.Refresh() CrystalReportViewer1.Clear () 52

53 Chapitre 11 : Gestion d'une exception d'accès concurrentiel Vous allez créer une application Windows qui déclenche une erreur d'accès concurrentiel et illustre une stratégie de gestion de cette erreur. Vous allez simuler le travail de deux utilisateurs sur les mêmes données au même moment. Le Windows Form que vous allez créer vous permet de travailler en tant que l'un ou l'autre des deux utilisateurs depuis le même formulaire. 1. L'utilisateur 1 et l'utilisateur 2 remplissent leurs groupes de données avec les mêmes données. 2. L'utilisateur 2 modifie un enregistrement, met à jour le groupe de données et écrit les modifications dans la source de données. 3. L'utilisateur 1 modifie le même enregistrement, modifie le groupe de données et tente d'écrire les modifications dans la source de données. Ceci déclenche une erreur d'accès concurrentiel. Vous allez détecter cette erreur, puis afficher les différentes versions de l'enregistrement, afin de permettre à l'utilisateur de déterminer comment doivent être traitées les modifications en attente de l'utilisateur 1. Création d'un projet et d'une connexion de données Pour créer un projet 1. Dans le menu Fichier, pointez sur Nouveau, puis cliquez sur Projet pour afficher la boîte de dialogue Nouveau projet. 2. Nommez le projet acces_concurrentiel, puis cliquez sur OK. Pour créer une connexion de données 1. Dans l'explorateur de serveurs, créez une connexion à l'exemple de base de données Pubs. 2. Dans l'explorateur de serveurs, développez la connexion que vous avez créée lors de l'étape précédente. 3. Développez la zone Tables. 4. Faites glisser la table authors vers votre formulaire. Un objet Connection et un objet DataAdapter apparaissent dans la barre des composants située sous le formulaire. Création des groupes de données Vous allez créer deux groupes de données appelés DsAuthors1 et DsAuthors2. Ces groupes de données représenteront les données sur lesquelles les deux utilisateurs travaillent 53

54 simultanément. Vous ajouterez ensuite au formulaire deux contrôles DataGrid que vous allez lier aux groupes de données. Enfin, deux contrôles Button seront ajoutés au formulaire : un bouton Mettre à jour et un bouton Rétablir. Pour créer deux groupes de données 1. Sélectionnez l'objet DataAdapter. 2. Dans le menu Données, sélectionnez Générer un DataSet. 3. Sélectionnez Nouveau et attribuez au groupe de données le nom DsAuthors. 4. À partir de l'onglet Données de la Boîte à outils, faites glisser un DataSet jusqu'au formulaire. 5. Vérifiez que DataSet typé est sélectionné et que acces_concurrentiel.dsauthors apparaît dans la zone Nom. Une instance appelée DsAuthors2 apparaît dans la barre d'état des composants du concepteur. Liaison des données et ajout des boutons Pour ajouter deux DataGrids au formulaire 1. À partir de l'onglet Windows Forms de la Boîte à outils, faites glisser un objet DataGrid jusqu'au côté gauche de votre formulaire. 2. À partir de l'onglet Windows Forms de la Boîte à outils, faites glisser un objet DataGrid jusqu'au côté droit de votre formulaire. Pour lier les groupes de données aux contrôles DataGrid 1. Sélectionnez DataGrid1 et définissez les propriétés suivantes dans la fenêtre Propriétés : Propriété Valeur DataSource DsAuthors1 DataMember authors CaptionText DsAuthors1 2. Sélectionnez DataGrid2 et définissez les propriétés suivantes dans la fenêtre Propriétés : Propriété Valeur DataSource DsAuthors2 DataMember Authors CaptionText DsAuthors2 Pour ajouter les boutons Mettre à jour et Rétablir au formulaire 54

55 1. À partir de l'onglet Windows Forms de la Boîte à outils, faites glisser un contrôle Button jusqu'au formulaire et placez-le au-dessus de DataGrid1. 2. Sélectionnez le bouton. Dans la fenêtre Propriétés, nommez le bouton btnupdate et définissez sa propriété Text sur Mettre à jour. 3. À partir de l'onglet Windows Forms de la Boîte à outils, faites glisser un second objet Button jusqu'au formulaire et placez-le au-dessus de DataGrid2. 4. Sélectionnez le bouton. Dans la fenêtre Propriétés, nommez le bouton btnreset et définissez sa propriété Text sur Rétablir. Remplissage des groupes de données Cette étape consiste à remplir les deux groupes de données avec les mêmes données. Pour ajouter le code permettant de remplir les groupes de données à partir de la base de données Insérez le code suivant dans l'éditeur de code : Private Sub fillthedatasets() SqlDataAdapter1.Fill(DsAuthors1) SqlDataAdapter1.Fill(DsAuthors2) End Sub Simulation des modifications de l'utilisateur 2 Pour ajouter le code permettant de simuler les modifications de l'utilisateur 2 Insérez le code suivant dans l'éditeur de code : Private Sub user2changes() DsAuthors2.authors(0).au_fname = "User 2" SqlDataAdapter1.Update(DsAuthors2.GetChanges()) SqlDataAdapter1.Fill(DsAuthors2) End Sub Création du gestionnaire d'événements Form_Load Pour ajouter dans l'événement Form_Load le code permettant d'initialiser la procédure Double-cliquez sur une zone vide du formulaire pour créer automatiquement le gestionnaire d'événements Form_Load. Ajoutez du code pour que le gestionnaire d'événements ressemble à ceci : Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load fillthedatasets() user2changes() End Sub Enregistrez votre projet. 55

56 Exécution de l'application 1. Appuyez sur F5 pour exécuter l'application. Le formulaire apparaît avec deux datagrids remplis avec les données de la table authors de la base de données Pubs. Le champ au_fname du premier enregistrement de DsAuthors1 doit être John. Le champ au_fname du premier enregistrement de DsAuthors2 doit être User 2. Votre formulaire devrait ressembler à ceci : 2. Dans le menu Déboguer, cliquez sur Arrêter le débogage. Mise à jour du groupe de données et écriture des modifications dans la base de données Vous allez ensuite écrire le code qui va tenter de mettre à jour la base de données avec les modifications du groupe de données DsAuthors1. Pour mettre à jour la base de données 1. Appelez la méthode Update. 2. Créez un gestionnaire d'exceptions qui affiche un message. Votre code doit se présenter comme suit : Private Sub updatedatabase() Try SqlDataAdapter1.Update(DsAuthors1.GetChanges) DsAuthors1.AcceptChanges() 56

57 MessageBox.Show("Mise à jour effectuée avec succès!") Catch ex As Exception MessageBox.Show(ex.Message, ex.gettype.tostring) End Try End Sub Ensuite, vous allez ajouter le code qui modifie la colonne au_fname dans le groupe de données DsAuthors1. Le code appelle ensuite la procédure updatedatabase pour tenter d'écrire cette modification dans la base de données. Comme cette valeur a déjà été modifiée par l'utilisateur 2, une erreur d'accès concurrentiel est déclenchée. Pour mettre à jour le groupe de données DsAuthors1 1. Double-cliquez sur le bouton Mettre à jour. 2. Créez le gestionnaire d'événements btnupdate_click : Private Sub btnupdate_click(byval sender As System.Object, _ ByVal e As System.EventArgs) Handles btnupdate.click DsAuthors1.authors(0).au_fname = "User 1" updatedatabase() End Sub 3. Enregistrez votre projet. 4. Appuyez sur F5 pour exécuter l'application. 5. Cliquez sur le bouton Mettre à jour pour définir le champ au_fname du premier enregistrement sur User 1. L'erreur d'accès concurrentiel est déclenchée. Gestion des erreurs d'accès concurrentiel La façon dont vous gérez l'erreur dépend des règles spécifiques à votre entreprise, qui gèrent votre application. La stratégie de gestion d'erreur ci-dessous sera utilisée comme illustration. L'application présentera à l'utilisateur trois versions de l'enregistrement : L'enregistrement en cours dans la base de données L'enregistrement d'origine dans le groupe de données Les modifications proposées dans le groupe de données L'utilisateur aura alors la possibilité d'écrire les modifications proposées dans la base de données ou d'annuler la mise à jour et d'actualiser le groupe de données. Création d'un gestionnaire d'erreurs personnalisé Lorsque vous effectuez une mise à jour, il est souvent préférable d'utiliser un gestionnaire d'exceptions structuré qui vous permet de détecter les erreurs. Dans le code que vous avez utilisé plus haut, vous avez inclus un bloc try...catch qui détecte toutes les erreurs c'est-àdire une structure qui contient une instruction catch générique pour toutes les erreurs. 57

58 Vous pouvez également détecter des erreurs spécifiques de façon à réagir de manière appropriée. À titre d'illustration, cette procédure va ajouter un gestionnaire d'exceptions pour une erreur spécifique, à savoir une erreur d'accès concurrentiel que vous pouvez examiner en utilisant l'objet DbConcurrencyException. Vous allez gérer cette erreur par l'affichage d'informations à l'attention de l'utilisateur. Pour ajouter une gestion spécifique de l'erreur DBConcurrencyException 1. Si l'application est toujours en cours d'exécution, quittez le mode exécution pour revenir à l'éditeur de code. 2. Ajoutez une deuxième instruction catch au-dessus de l'instruction existante dans la méthode updatedatabase. 3. Passez l'objet DBConcurrencyException à la procédure createmessage que vous allez créer dans la prochaine section. Private Sub updatedatabase() Try SqlDataAdapter1.Update(DsAuthors1.GetChanges()) DsAuthors1.AcceptChanges() MessageBox.Show("Mise à jour effectuée avec succès!") Catch dbcx As DBConcurrencyException createmessage(dbcx) Catch ex As Exception MessageBox.Show(ex.Message, ex.gettype().tostring()) End Try End Sub Affichage des choix pour l'utilisateur Le code que vous venez de taper appelle la procédure createmessage qui va afficher les informations sur l'erreur pour l'utilisateur. Dans cette procédure, vous utiliserez une boîte de message pour afficher les différentes versions de l'enregistrement pour l'utilisateur et lui permettre de choisir entre le remplacement de l'enregistrement avec les modifications et l'annulation des modifications. Pour créer la procédure createmessage Créez le gestionnaire d'erreurs en ajoutant le code ci-dessous dans l'éditeur de code : Private Sub createmessage(byval dbcx As DBConcurrencyException) Dim strinds As String = "Enregistrement d origine dans DsAuthors1:" _ & ControlChars.CrLf Dim strindb As String = "Enregistrement Courant dans la base:" _ & ControlChars.CrLf Dim strproposed As String = "Modification proposée:" & ControlChars.CrLf Dim strprompttext As String = "Voulez vous remplacez l enregistrement courant?" & ControlChars.CrLf Dim strmessage As String Dim reponse As System.Windows.Forms.DialogResult 58

59 Dim rowindb As DataRow = _ DsAuthors2.authors.FindByau_id(CType(dbcx.Row("au_id"), String)) Dim i As Integer For i = 0 To dbcx.row.itemarray.length - 1 strinds &= dbcx.row(i, DataRowVersion.Original) & _ ControlChars.Tab strindb &= rowindb(i, DataRowVersion.Current) & ControlChars.Tab strproposed &= dbcx.row(i, DataRowVersion.Current) & _ ControlChars.Tab Next strmessage = strinds & ControlChars.CrLf strmessage &= strindb & ControlChars.CrLf strmessage &= strproposed & ControlChars.CrLf strmessage &= strprompttext reponse = MessageBox.Show(strMessage, dbcx.message, _ MessageBoxButtons.YesNo) processresponse(reponse) End Sub Traitement de la réponse de l'utilisateur Vous devrez également ajouter du code pour le traitement de la réponse de l'utilisateur au message. Il pourra choisir de remplacer ou non l'enregistrement actuel de la base de données par la modification proposée. Si l'utilisateur choisit d'effectuer le remplacement, la méthode Merge de DsAuthors1 est appelée avec l'argument preservechanges défini sur true. Les versions d'origine des lignes de données de DsAuthors2 sont alors fusionnées avec les versions actuelles des lignes de données de DsAuthors1. La mise à jour fonctionnera alors correctement car la version d'origine de l'enregistrement correspond désormais à la base de données. Pour traiter la réponse de l'utilisateur au message Ajoutez le code suivant dans l'éditeur de code : Private Sub processresponse(byval response As _ System.Windows.Forms.DialogResult) Select Case reponse Case System.Windows.Forms.DialogResult.Yes DsAuthors1.Merge(DsAuthors2, True) SqlDataAdapter1.Update(DsAuthors1) DsAuthors1.AcceptChanges() Case System.Windows.Forms.DialogResult.No DsAuthors1.Merge(DsAuthors2) End Select End Sub 59

60 Chapitre 12 : Gestion des transactions A) Gestion des transactions au niveau SQL server 1) Les transactions locales BEGIN TRANSACTION Indique le début d'une transaction locale explicite. L'instruction BEGIN TRANSACTION incrémente de 1 la Syntaxe BEGIN TRAN [ SACTION ] [ [ WITH MARK [ 'description' ] ] ] Arguments transaction_name Nom attribué à la transaction. transaction_name doit respecter les règles applicables aux identificateurs, mais seuls les 32 premiers caractères de ce nom sont utilisés. Utilisez les noms de transaction seulement sur la paire la plus extérieure des instructions BEGIN...COMMIT ou BEGIN...ROLLBACK Nom d'une variable définie par l'utilisateur et contenant un nom de transaction valide. La variable doit être déclarée avec un type de données char, varchar, nchar ou nvarchar. WITH MARK ['description'] Indique que la transaction est marquée dans le journal. description est une chaîne qui décrit la marque. Si WITH MARK est utilisé, un nom de transaction doit être spécifié. WITH MARK permet de restaurer un journal de transactions par rapport à une marque nommée. Notes BEGIN TRANSACTION représente le point auquel les données référencées par une connexion sont logiquement et physiquement cohérentes. Si des erreurs sont détectées, toutes les modifications apportées aux données après l'exécution de l'instruction BEGIN TRANSACTION peuvent être annulées afin que les données reviennent à cet état connu de cohérence. Une transaction se poursuit jusqu'à ce qu'elle se termine sans erreur et que l'instruction COMMIT TRANSACTION soit émise pour que les modifications soient intégrées de façon permanente à la base de données ou bien jusqu'à ce que des erreurs soient 60

61 rencontrées, auquel cas les modifications sont effacées à l'aide de l'instruction ROLLBACK TRANSACTION. Transactions marquées L'option WITH MARK permet de placer le nom de la transaction dans le journal des transactions. Lors de la restauration d'une base de données dans un état antérieur, la transaction marquée peut être utilisée à la place d'une date et d'une heure. L'instruction BEGIN TRAN new_name WITH MARK peut être imbriquée dans une transaction existante non marquée. new_name devient alors le nom de marque de la transaction, malgré le nom éventuellement déjà affecté à la transaction. Dans l'exemple suivant, M2 est le nom de la marque. BEGIN TRAN T1 UPDATE table1... BEGIN TRAN M2 WITH MARK UPDATE table2... SELECT * from table1 COMMIT TRAN M2 UPDATE table3... COMMIT TRAN T1 Si vous essayez de marquer une transaction déjà marquée, vous obtenez un message d'avertissement (non d'erreur) : BEGIN TRAN T1 WITH MARK UPDATE table1... BEGIN TRAN M2 WITH MARK Server: Msg 3920, Level 16, State 1, Line 3 WITH MARK option only applies to the first BEGIN TRAN WITH MARK. The option is ignored. Autorisations L'autorisation d'exécuter l'instruction BEGIN TRANSACTION est attribuée par défaut à tout utilisateur reconnu. COMMIT TRANSACTION Marque la fin d'une transaction réussie. vaut 1, COMMIT TRANSACTION rend permanentes les modifications de données effectuées dans la base de 61

62 données depuis le début de la transaction, libère les ressources utilisées par la connexion et décrémente à 0. Si est supérieur à 1, COMMIT TRANSACTION décrémente seulement de 1. Syntaxe COMMIT [ TRAN [ SACTION ] [ ] ] Arguments transaction_name Argument ignoré par Microsoft SQL Server. Il est utilisé pour faciliter la lecture par des programmeurs en indiquant à quelle instruction BEGIN TRANSACTION imbriquée l'instruction COMMIT TRANSACTION est Nom d'une variable définie par l'utilisateur et contenant un nom de transaction valide. La variable doit être déclarée avec un type de données char, varchar, nchar ou nvarchar. Exemple A. Validation d'une transaction. L'exemple suivant augmente l'acompte versé à un auteur lorsque les ventes d'un livre pour l'année en cours sont supérieures à 8000 FF. BEGIN TRANSACTION USE pubs GO UPDATE titles SET advance = advance * 1.25 WHERE ytd_sales > 8000 GO COMMIT GO B. Validation d'une transaction imbriquée. L'exemple suivant crée une table, génère trois niveaux de transactions imbriquées, puis valide la transaction imbriquée. Bien que chaque instruction COMMIT TRANSACTION ait un paramètre transaction_name, il n'existe aucune relation entre les instructions COMMIT TRANSACTION et BEGIN TRANSACTION. Les paramètres transaction_name aident simplement le programmeur à s'assurer qu'un nombre suffisant de validations a été codé pour à 0, ce qui aura pour effet de valider la transaction externe. 62

63 CREATE TABLE TestTran (Cola INT PRIMARY KEY, Colb CHAR(3)) GO BEGIN TRANSACTION OuterTran -- set to 1. GO INSERT INTO TestTran VALUES (1, 'aaa') GO BEGIN TRANSACTION Inner1 -- set to 2. GO INSERT INTO TestTran VALUES (2, 'bbb') GO BEGIN TRANSACTION Inner2 -- set to 3. GO INSERT INTO TestTran VALUES (3, 'ccc') GO COMMIT TRANSACTION Inner2 -- Decrements to Nothing committed. GO COMMIT TRANSACTION Inner1 -- Decrements to Nothing committed. GO COMMIT TRANSACTION OuterTran -- Decrements to Commits outer transaction OuterTran. GO ROLLBACK TRANSACTION Annule une transaction implicite ou explicite jusqu'au début de la transaction ou jusqu'au dernier point d'enregistrement à l'intérieur de la transaction. 2) Les transactions distribuées Les transactions distribuées sont réparties sur plusieurs serveurs nommés gestionnaires de ressources. La gestion de la transaction est coordonnée entre les gestionnaires de ressources par un composant du serveur nommé gestionnaire de transactions Microsoft Distributed Transaction Coordinator (MS DTC). Une transaction exécutée sur un seul serveur SQL Server mais utilisant plusieurs bases de données est en réalité une transaction distribuée. SQL Server, toutefois, gère la transaction distribuée de manière interne ; elle apparaît comme une transaction locale pour l'utilisateur. 63

64 Dans une application, une transaction distribuée est gérée de manière comparable à une transaction locale. À la fin de la transaction, l'application requiert que la transaction soit validée ou annulée. La validation d'une transaction distribuée doit être gérée de façon particulière par le gestionnaire de transaction pour minimiser les risques qu'une défaillance du réseau entraîne la validation de la transaction par certains gestionnaires de ressources, alors qu'elle sera annulée par d'autres. Pour cela, le processus de validation est géré suivant deux phases (une phase de préparation et une phase de validation), et est connu sous le nom de validation à deux phases (2PC). Phase de préparation Lorsque le gestionnaire de transaction reçoit une requête de validation, il envoie une commande de préparation à tous les gestionnaires de ressources impliqués dans la transaction. Chaque gestionnaire de ressources effectue alors toutes les opérations nécessaires à l'enregistrement de la transaction, et tous les tampons contenant les images du journal de la transaction sont vidés sur le disque. Lorsque chaque gestionnaire de ressources a terminé la phase de préparation, il renvoie un message de succès ou d'échec au gestionnaire de transactions. Phase de validation Si le gestionnaire de transactions reçoit des messages de préparation réussie de tous les gestionnaires de ressources, il envoie une commande de validation à chacun d'entre eux. Les gestionnaires de ressources peuvent alors effectuer la validation. Si tous les gestionnaires de ressources indiquent le succès de la validation, le gestionnaire de transactions envoie alors une notification de succès à l'application. Si l'un des gestionnaires de ressources indique un échec de la préparation, le gestionnaire de transactions envoie une commande d'annulation à chaque gestionnaire de ressources et notifie l'échec de la validation à l'application. BEGIN DISTRIBUTED TRANSACTION Indique le début d'une transaction Transact-SQL distribuée gérée par MS DTC (Microsoft Distributed Transaction Coordinator). Syntaxe BEGIN DISTRIBUTED TRAN [ SACTION ] [ ] Le serveur exécutant l'instruction BEGIN DISTRIBUTED TRANSACTION est le créateur de la transaction et c'est aussi lui qui contrôle l'exécution jusqu'à son terme. Si une instruction COMMIT TRANSACTION ou ROLLBACK TRANSACTION est ensuite émise pour la connexion, le serveur de contrôle demande à MS DTC de gérer l'exécution de la transaction distribuée sur tous les serveurs concernés. Deux méthodes permettent d'inscrire des serveurs SQL distants dans une transaction distribuée : 64

65 Une connexion déjà inscrite dans la transaction distribuée effectue un appel de procédure distante faisant référence à un serveur distant. Une connexion déjà inscrite dans la transaction distribuée exécute une requête distribuée faisant référence à un serveur distant. Par exemple, si l'instruction BEGIN DISTRIBUTED TRANSACTION est émise sur un ServerA, la connexion appelle une procédure stockée sur un ServerB et une autre sur un ServerC, et la procédure stockée sur le ServerC exécute une requête distribuée sur un ServerD, à la suite de quoi les quatre serveurs SQL se retrouvent inscrits dans la transaction distribuée. ServerA est le serveur qui crée la transaction et contrôle son exécution. Les connexions intervenant dans les transactions Transact-SQL distribuées n'obtiennent pas d'objet de transaction qu'elles peuvent transmettre à une autre connexion pour que celle-ci soit explicitement inscrite dans la transaction distribuée. La seule façon pour un serveur distant de s'inscrire dans une transaction est d'être la cible d'un appel de procédure stockée distante ou d'une requête distribuée. Exemple Dans l'exemple suivant, le nom de l'auteur est mis à jour dans les bases de données locales et distantes. Ces bases vont soit valider soit annuler la transaction. Remarque Cet exemple provoque un message d'erreur, sauf si MS DTC est actuellement installé sur l'ordinateur exécutant SQL Server. Pour plus d'informations sur l'installation de MS DTC, voir la documentation Microsoft Distributed Transaction Coordinator. USE pubs GO BEGIN DISTRIBUTED TRANSACTION UPDATE authors SET au_lname = 'McDonald' WHERE au_id = ' ' EXECUTE remote.pubs.dbo.changeauth_lname ' ','McDonald' COMMIT TRAN GO Le service MS DTC Microsoft Distributed Transaction Coordinator (MS DTC) est un gestionnaire de transactions qui permet aux applications clientes d'inclure plusieurs sources de données différentes dans une seule transaction. MS DTC coordonne la validation de la transaction distribuée au travers de tous les serveurs inscrits dans la transaction. 65

66 Une installation Microsoft SQL Server peut participer à une transaction distribuée en : Appelant des procédures stockées sur des serveurs distants exécutant SQL Server. Transformant automatiquement ou explicitement la transaction locale en une transaction distribuée et en inscrivant les serveurs distants dans la transaction. Effectuant des mises à jour distribuées qui mettent à jour les données sur plusieurs sources de données OLE DB. Si ces sources de données OLE DB prennent en charge l'interface de transaction distribuée OLE DB, SQL Server peut également les inscrire dans une transaction distribuée. MS DTC est le service qui coordonne l'achèvement des transactions distribuées afin de s'assurer que toutes les mises à jour présentes sur tous les serveurs sont, soit permanentes, soit supprimées en cas d'erreurs. Les applications SQL Server peuvent également appeler MS DTC directement afin de démarrer explicitement une transaction distribuée. Un ou plusieurs serveurs exécutant SQL 66

67 Server peuvent ensuite être contraints à s'inscrire dans la transaction distribuée et coordonner l'achèvement de cette dernière avec MSDTC. B) Exécution d'une transaction à l'aide de ADO.NET Vous pouvez commencer, valider ou annuler une transaction en utilisant les objets Connection et Transaction. Appelez la méthode BeginTransaction de l'objet Connection pour marquer le début de la transaction. La méthode BeginTransaction retourne une référence à la transaction. Cette référence est affectée aux objets Command inscrits dans la transaction. Assignez l'objet Transaction à la propriété Transaction de la commande à exécuter. Si la commande est exécutée sur une connexion avec une transaction active et si l'objet Transaction n'a pas été assigné à la propriété Transaction de la commande, une exception est levée. Exécutez ensuite les commandes requises. Appelez la méthode Commit de l'objet Transaction pour terminer la transaction ou la méthode Rollback pour l'annuler. L'exemple de code suivant illustre la logique transactionnelle utilisant ADO.NET avec SQL Server. Dim cn As SqlConnection = New SqlConnection("Data Source=(LOCAL);Initial Catalog=Northwind;Integrated Security=SSPI;") cn.open() Debut de la tansaction Dim trs As SqlTransaction = cn.begintransaction() ' Ajout d une commande à une transaction. Dim cmd As SqlCommand = cn.createcommand() cmd.transaction = trs 67

68 Try cmd.commandtext = "Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')" cmd.executenonquery() cmd.commandtext = "Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')" cmd.executenonquery() cmd.commit() msgbox("les deux enregistrements ont été validés.") Catch e As Exception Try trs.rollback() Catch ex As SqlException If Not trs.connection Is Nothing Then msgbox("une exception de type " & ex.gettype().tostring() & _ " a été levée au cours de l annulation de la transaction.") End If End Try msgbox("une exception de type " & e.gettype().tostring() & _ " a été levée au cours de la validation de la transaction." & "Aucun enregsitrement n a été enregistré.") Finally cn.close() End Try Inscription dans une transaction distribuée L'objet Connection s'inscrit automatiquement dans une transaction distribuée existante s'il détermine qu'une transaction est active. L'inscription automatique dans une transaction se produit lorsque la connexion est ouverte. Vous pouvez désactiver l'inscription automatique dans des transactions existantes en spécifiant Enlist=false comme paramètre de chaîne de connexion pour un SqlConnection ou OLE DB Services=-7 pour un OleDbConnection. Si l'inscription automatique est désactivée, vous pouvez vous inscrire dans une transaction distribuée existante à l'aide de la méthode EnlistDistributedTransaction de l'objet Connection. L'inscription dans une transaction distribuée existante garantit que si la transaction vient à être annulée ou validée, les modifications apportées par le code dans la source de données seront elles aussi validées ou annulées. EnlistDistributedTransaction est particulièrement applicable lors du regroupement d'objets métier. Si un objet métier est regroupé avec une connexion ouverte, l'inscription automatique dans la transaction se produit lorsque cette connexion est ouverte et tirée du pool. Si plusieurs transactions sont effectuées à l'aide de l'objet métier regroupé, la connexion ouverte pour cet objet n'est pas automatiquement inscrite dans les nouvelles transactions lancées. Dans ce cas, vous pouvez désactiver l'inscription automatique dans la transaction pour Connection et l'inscrire dans les transactions à l'aide de EnlistDistributedTransaction. EnlistDistributedTransaction accepte un unique argument de type ITransaction qui est une référence à la transaction existante. Après avoir appelé Connection.EnlistDistributedTransaction, toutes les modifications apportées à la source de données à l'aide de Connection sont incluses dans la transaction. 68

69 Remarque Le Connection doit être ouvert avant l'appel à EnlistDistributedTransaction. ATTENTION EnlistDistributedTransaction retourne une Exception si le Connection a déjà commencé une transaction au moyen de BeginTransaction. Toutefois, si la transaction est une transaction locale démarrée dans la source de données (par exemple, l'exécution explicite de l'instruction BEGIN TRANSACTION à l'aide de SqlCommand), EnlistDistributedTransaction annule la transaction locale et s'inscrit dans la transaction distribuée existante requise. Vous ne recevez pas d'avis d'annulation de la transaction locale et devez gérer toutes les transactions locales qui n'ont pas été démarrées à l'aide de BeginTransaction. 69

1. Introduction... 2. 2. Création d'une macro autonome... 2. 3. Exécuter la macro pas à pas... 5. 4. Modifier une macro... 5

1. Introduction... 2. 2. Création d'une macro autonome... 2. 3. Exécuter la macro pas à pas... 5. 4. Modifier une macro... 5 1. Introduction... 2 2. Création d'une macro autonome... 2 3. Exécuter la macro pas à pas... 5 4. Modifier une macro... 5 5. Création d'une macro associée à un formulaire... 6 6. Exécuter des actions en

Plus en détail

Visual Basic et les Bases de Données

Visual Basic et les Bases de Données Visual Basic et les Bases de Données (Résumé) Le concept de «Base de Données» est largement utilisé dans tous les domaines qui impliquent l informatique. Visual Basic est, par excellence, un langage qui

Plus en détail

Introduction à ADO.NET

Introduction à ADO.NET Département d informatique 420 KED-LG, conception de bases de données Introduction à ADO.NET 1 Table des matières 1. Introduction... 3 2. Prés-requis :... 4 3. L objet OracleConnection... 6 4. L objet

Plus en détail

Création d'un site dynamique en PHP avec Dreamweaver et MySQL

Création d'un site dynamique en PHP avec Dreamweaver et MySQL Création d'un site dynamique en PHP avec Dreamweaver et MySQL 1. Création et configuration du site 1.1. Configuration de Dreamweaver Avant de commencer, il est nécessaire de connaître l'emplacement du

Plus en détail

Procédures Stockées WAVESOFT... 12 ws_sp_getidtable... 12. Exemple :... 12. ws_sp_getnextsouche... 12. Exemple :... 12

Procédures Stockées WAVESOFT... 12 ws_sp_getidtable... 12. Exemple :... 12. ws_sp_getnextsouche... 12. Exemple :... 12 Table des matières Les Triggers... 2 Syntaxe... 2 Explications... 2 Les évènements déclencheurs des triggers... 3 Les modes de comportements des triggers... 4 Les pseudo tables... 5 Exemple... 6 Les procédures

Plus en détail

ADO.NET SUPINFO DOT NET TRAINING COURSE

ADO.NET SUPINFO DOT NET TRAINING COURSE http://www.labo-dotnet.com ADO.NET SUPINFO DOT NET TRAINING COURSE Auteur : Fidèle Tatefo-Wamba et Aleksandar Lukic Version 1.2 19 novembre 2004 Nombre de pages : 37 Ecole Supérieure d Informatique de

Plus en détail

Corrigé de l'atelier pratique du module 6 : Transfert de données

Corrigé de l'atelier pratique du module 6 : Transfert de données Corrigé de l'atelier pratique du module 6 : Transfert de données Table des matières Atelier pratique 6 : Transfert de données 1 Exercice 1 : Création d'un package SSIS 1 Exercice 2 : Déploiement d'un package

Plus en détail

Acronis Backup & Recovery 10 Advanced Server Virtual Edition. Guide de démarrage rapide

Acronis Backup & Recovery 10 Advanced Server Virtual Edition. Guide de démarrage rapide Acronis Backup & Recovery 10 Advanced Server Virtual Edition Guide de démarrage rapide Ce document explique comment installer et utiliser Acronis Backup & Recovery 10 Advanced Server Virtual Edition. Copyright

Plus en détail

PRODIGE V3. Manuel utilisateurs. Consultation des métadonnées

PRODIGE V3. Manuel utilisateurs. Consultation des métadonnées PRODIGE V3 Manuel utilisateurs Consultation des métadonnées Pour plus d'information sur le dispositif : à remplir par chaque site éventuellement 2 PRODIGE V3 : Consultation des métadonnées SOMMAIRE 1.

Plus en détail

LibreOffice Calc : introduction aux tableaux croisés dynamiques

LibreOffice Calc : introduction aux tableaux croisés dynamiques Fiche logiciel LibreOffice Calc 3.x Tableur Niveau LibreOffice Calc : introduction aux tableaux croisés dynamiques Un tableau croisé dynamique (appelé Pilote de données dans LibreOffice) est un tableau

Plus en détail

1. Introduction...2. 2. Création d'une requête...2

1. Introduction...2. 2. Création d'une requête...2 1. Introduction...2 2. Création d'une requête...2 3. Définition des critères de sélection...5 3.1 Opérateurs...5 3.2 Les Fonctions...6 3.3 Plusieurs critères portant sur des champs différents...7 3.4 Requête

Plus en détail

LES ACCES ODBC AVEC LE SYSTEME SAS

LES ACCES ODBC AVEC LE SYSTEME SAS LES ACCES ODBC AVEC LE SYSTEME SAS I. Présentation II. SAS/ACCESS to ODBC III. Driver ODBC SAS IV. Driver ODBC SAS Universel V. Version 8 VI. Références I. Présentation Introduction ODBC, qui signifie

Plus en détail

MEDIAplus elearning. version 6.6

MEDIAplus elearning. version 6.6 MEDIAplus elearning version 6.6 L'interface d administration MEDIAplus Sommaire 1. L'interface d administration MEDIAplus... 5 2. Principes de l administration MEDIAplus... 8 2.1. Organisations et administrateurs...

Plus en détail

Corrigé de l'atelier pratique du module 5 : Analyse de SQL Server

Corrigé de l'atelier pratique du module 5 : Analyse de SQL Server Corrigé de l'atelier pratique du module 5 : Analyse de SQL Server Table des matières Atelier pratique 5 : Analyse de SQL Server 1 Exercice 1 : Analyse des performances SQL Server 1 Exercice 2 : Suivi de

Plus en détail

Corrigé de l'atelier pratique du module 8 : Implémentation de la réplication

Corrigé de l'atelier pratique du module 8 : Implémentation de la réplication Corrigé de l'atelier pratique du module 8 : Implémentation de la réplication Table des matières Atelier pratique 8 : Implémentation de la réplication 1 Exercice 1 : Création d'une publication 1 Exercice

Plus en détail

MEGA ITSM Accelerator. Guide de Démarrage

MEGA ITSM Accelerator. Guide de Démarrage MEGA ITSM Accelerator Guide de Démarrage MEGA 2009 SP4 1ère édition (juin 2010) Les informations contenues dans ce document pourront faire l objet de modifications sans préavis et ne sauraient en aucune

Plus en détail

1/ Présentation de SQL Server :

1/ Présentation de SQL Server : Chapitre II I Vue d ensemble de Microsoft SQL Server Chapitre I : Vue d ensemble de Microsoft SQL Server Module: SQL server Semestre 3 Année: 2010/2011 Sommaire 1/ Présentation de SQL Server 2/ Architerture

Plus en détail

Construction d un EDD avec SQL 2008 R2. D. Ploix - M2 Miage - EDD - Création

Construction d un EDD avec SQL 2008 R2. D. Ploix - M2 Miage - EDD - Création Construction d un EDD avec SQL 2008 R2 Plan Analyse du DW construit Construction de la base DW dans SQL 2008 Construction des tables de faits et dimensions Injection des données Étapes de l injection des

Plus en détail

TABLEAU CROISE DYNAMIQUE

TABLEAU CROISE DYNAMIQUE EXCEL NIVEAU III Mireille DUCELLIER MARS 2003 BASE DE DONNEES RAPPEL Une base de données est une plage de cellules contiguës située sur une la feuille 1. Elle commence en A1. On parle alors de champs,

Plus en détail

TAGREROUT Seyf Allah TMRIM

TAGREROUT Seyf Allah TMRIM TAGREROUT Seyf Allah TMRIM Projet Isa server 2006 Installation et configuration d Isa d server 2006 : Installation d Isa Isa server 2006 Activation des Pings Ping NAT Redirection DNS Proxy (cache, visualisation

Plus en détail

Débuter avec OOo Base

Débuter avec OOo Base Open Office.org Cyril Beaussier Débuter avec OOo Base Version 1.0.7 Novembre 2005 COPYRIGHT ET DROIT DE REPRODUCTION Ce support est libre de droit pour une utilisation dans un cadre privé ou non commercial.

Plus en détail

À propos du Guide de l'utilisateur final de VMware Workspace Portal

À propos du Guide de l'utilisateur final de VMware Workspace Portal À propos du Guide de l'utilisateur final de VMware Workspace Portal Workspace Portal 2.1 Ce document prend en charge la version de chacun des produits répertoriés, ainsi que toutes les versions publiées

Plus en détail

Sage CRM. 7.2 Guide de Portail Client

Sage CRM. 7.2 Guide de Portail Client Sage CRM 7.2 Guide de Portail Client Copyright 2013 Sage Technologies Limited, éditeur de ce produit. Tous droits réservés. Il est interdit de copier, photocopier, reproduire, traduire, copier sur microfilm,

Plus en détail

Plan. Accès aux données dans le framework.net. ADO.NET Entity Framework LINQ ADO.NET ADO.NET. 1. ADO.NET Mode connecté Mode non connecté

Plan. Accès aux données dans le framework.net. ADO.NET Entity Framework LINQ ADO.NET ADO.NET. 1. ADO.NET Mode connecté Mode non connecté Plan Accès aux données dans le framework.net Lionel Seinturier 1. Mode connecté Mode non connecté 2. 3. Université Lille 1 [email protected] 27/3/14 1 Lionel Seinturier 2 Lionel Seinturier

Plus en détail

SOMMAIRE. Travailler avec les requêtes... 3

SOMMAIRE. Travailler avec les requêtes... 3 Access Les requêtes SOMMAIRE Travailler avec les requêtes... 3 A) Créer une requête sélection en mode QBE... 3 B) Exécuter une requête à partir du mode Modifier (QBE)... 3 C) Passer du mode Feuille de

Plus en détail

PRODIGE V3. Manuel utilisateurs. Consultation des métadonnées

PRODIGE V3. Manuel utilisateurs. Consultation des métadonnées PRODIGE V3 Manuel utilisateurs Consultation des métadonnées Pour plus d'information sur le dispositif : à remplir par chaque site éventuellement 2 PRODIGE V3 : Consultation des métadonnées SOMMAIRE 1.

Plus en détail

Créer une base de données

Créer une base de données Access Créer une base de données SOMMAIRE Généralités sur les bases de données... 3 Création de la base de données... 4 A) Lancement d'access... 4 B) Enregistrement de la base de données vide... 4 Création

Plus en détail

Corrigé de l'atelier pratique du module 3 : Récupération d'urgence

Corrigé de l'atelier pratique du module 3 : Récupération d'urgence Corrigé de l'atelier pratique du module 3 : Récupération d'urgence Table des matières Atelier pratique 3 : Récupération d'urgence 1 Exercice 1 : Implémentation d'une stratégie de sauvegarde 1 Exercice

Plus en détail

Edutab. gestion centralisée de tablettes Android

Edutab. gestion centralisée de tablettes Android Edutab gestion centralisée de tablettes Android Résumé Ce document présente le logiciel Edutab : utilisation en mode enseignant (applications, documents) utilisation en mode administrateur (configuration,

Plus en détail

Didacticiel PowerAMC 11.0 MPD

Didacticiel PowerAMC 11.0 MPD Didacticiel PowerAMC 11.0 MPD Pierre GERARD IUT de Villetaneuse Ce document est une retranscription du Tutoriel PowerAMC disponible en ligne à l'adresse : http://sybooks.sybase.com/onlinebooks/group-pd/amc1100f/

Plus en détail

MEGA ITSM Accelerator. Guide de démarrage

MEGA ITSM Accelerator. Guide de démarrage MEGA ITSM Accelerator Guide de démarrage MEGA 2013 1ère édition (janvier 2013) Les informations contenues dans ce document pourront faire l objet de modifications sans préavis et ne sauraient en aucune

Plus en détail

GUIDE DE DÉMARRAGE RAPIDE

GUIDE DE DÉMARRAGE RAPIDE GUIDE DE DÉMARRAGE RAPIDE Bienvenue dans SugarSync. Ce guide explique comment installer SugarSync sur votre ordinateur principal, configurer vos dossiers à synchroniser dans le cloud SugarSync. et utiliser

Plus en détail

Créer un rapport pour Reporting Services

Créer un rapport pour Reporting Services Créer un rapport pour Reporting Services Comment créer des rapports pour SSRS Maintenant que nous avons vu que la version de SQL Server 2005 Express Edition with Advanced Services intègre SQL Server Reporting

Plus en détail

Cours Access 1) INTRODUCTION AU SGBD...4 2) LES TABLES...4

Cours Access 1) INTRODUCTION AU SGBD...4 2) LES TABLES...4 COURS MS ACCESS 1) INTRODUCTION AU SGBD...4 A) DÉFINITION...4 B) ENREGISTREMENTS ET CHAMPS....4 C) LES GRANDES FONCTIONS D'ACCESS... 4 i) Les tables...4 ii) Les requêtes...4 iii) Les formulaires... 4 iv)

Plus en détail

Google Drive, le cloud de Google

Google Drive, le cloud de Google Google met à disposition des utilisateurs ayant un compte Google un espace de 15 Go. Il est possible d'en obtenir plus en payant. // Google Drive sur le web Se connecter au site Google Drive A partir de

Plus en détail

Didacticiel de mise à jour Web

Didacticiel de mise à jour Web Didacticiel de mise à jour Web Copyright 1995-2012 Esri All rights reserved. Table of Contents Didacticiel : Création d'une application de mise à jour Web.................. 0 Copyright 1995-2012 Esri.

Plus en détail

HP Data Protector Express Software - Tutoriel 3. Réalisation de votre première sauvegarde et restauration de disque

HP Data Protector Express Software - Tutoriel 3. Réalisation de votre première sauvegarde et restauration de disque HP Data Protector Express Software - Tutoriel 3 Réalisation de votre première sauvegarde et restauration de disque Que contient ce tutoriel? Après avoir lu ce tutoriel, vous pourrez : utiliser les fonctions

Plus en détail

FOXIT READER 6.0 Guide rapide. Table des matières... II Utilisation de Foxit Reader 6.0... 1. Lecture... 4. Travailler dans des documents PDF...

FOXIT READER 6.0 Guide rapide. Table des matières... II Utilisation de Foxit Reader 6.0... 1. Lecture... 4. Travailler dans des documents PDF... Table des matières Table des matières... II Utilisation de Foxit Reader 6.0... 1 Installer et désinstaller... 1 Ouvrir, Créer, Fermer, Enregistrer et Quitter... 1 Définir le style et l'apparence de l'interface...

Plus en détail

BIRT (Business Intelligence and Reporting Tools)

BIRT (Business Intelligence and Reporting Tools) BIRT (Business Intelligence and Reporting Tools) Introduction Cette publication a pour objectif de présenter l outil de reporting BIRT, dans le cadre de l unité de valeur «Data Warehouse et Outils Décisionnels»

Plus en détail

Sql Server 2005 Reporting Services

Sql Server 2005 Reporting Services Sql Server 2005 Reporting Services Un grand merci à Mr F. B. pour sa franchise, son sens de la relation humaine et son humilité. Sql Server 2005 Reporting Services - 2 / 30 - Sommaire Sommaire...2 Introduction...3

Plus en détail

Manuel d utilisation email NETexcom

Manuel d utilisation email NETexcom Manuel d utilisation email NETexcom Table des matières Vos emails avec NETexcom... 3 Présentation... 3 GroupWare... 3 WebMail emails sur internet... 4 Se connecter au Webmail... 4 Menu principal... 5 La

Plus en détail

Déploiement d'une application Visual Studio Lightswitch dans Windows Azure.

Déploiement d'une application Visual Studio Lightswitch dans Windows Azure. Déploiement d'une application Visual Studio Lightswitch dans Windows Azure. Utilisation de SQL Azure avec Lightswitch Article par Eric Vernié Microsoft France Division Plate-forme & Ecosystème SOMMAIRE

Plus en détail

CRÉER UNE BASE DE DONNÉES AVEC OPEN OFFICE BASE

CRÉER UNE BASE DE DONNÉES AVEC OPEN OFFICE BASE CRÉER UNE BASE DE DONNÉES AVEC OPEN OFFICE BASE 2 ème partie : REQUÊTES Sommaire 1. Les REQUÊTES...2 1.1 Créer une requête simple...2 1.1.1 Requête de création de listage ouvrages...2 1.1.2 Procédure de

Plus en détail

Business Intelligence avec SQL Server 2012

Business Intelligence avec SQL Server 2012 Editions ENI Business Intelligence avec SQL Server 2012 Maîtrisez les concepts et réalisez un système décisionnel Collection Solutions Informatiques Extrait Alimenter l'entrepôt de données avec SSIS Business

Plus en détail

Symantec Enterprise Vault

Symantec Enterprise Vault Symantec Enterprise Vault Manuel pour les utilisateurs de Microsoft Outlook 2010 9.0 Symantec Enterprise Vault: Manuel pour les utilisateurs de Microsoft Outlook 2010 Le logiciel décrit dans cette publication

Plus en détail

Les Utilisateurs dans SharePoint

Les Utilisateurs dans SharePoint Les Utilisateurs dans SharePoint La gestion des utilisateurs dans SharePoint SharePoint dont le cœur est l'outil collaboratif, Windows SharePoint Services. Chaque utilisateur (ou collaborateur) peut créer

Plus en détail

Guide de démarrage rapide Centre de copies et d'impression Bureau en Gros en ligne

Guide de démarrage rapide Centre de copies et d'impression Bureau en Gros en ligne Guide de démarrage rapide Centre de copies et d'impression Bureau en Gros en ligne Aperçu du Centre de copies et d'impression Bureau en Gros en ligne Pour accéder à «copies et impression Bureau en Gros

Plus en détail

1 Introduction. Business Intelligence avec SharePoint Server 2010

1 Introduction. Business Intelligence avec SharePoint Server 2010 Business Intelligence avec SharePoint Server 2010 1 Introduction Dans le chapitre précédent, nous avons créé une collection de sites et activé les fonctions de restitution décisionnelles du serveur SharePoint

Plus en détail

Comment Utiliser les Versions, les Modification, les Comparaisons, Dans les Documents

Comment Utiliser les Versions, les Modification, les Comparaisons, Dans les Documents Comment Utiliser les Versions, les Modification, les Comparaisons, Dans les Documents Diffusé par Le Projet Documentation OpenOffice.org Table des Matières 1. Les Versions...3 2. Les Modifications...5

Plus en détail

SQL Server Installation Center et SQL Server Management Studio

SQL Server Installation Center et SQL Server Management Studio SQL Server Installation Center et SQL Server Management Studio Version 1.0 Grégory CASANOVA 2 SQL Server Installation Center et SQL Server Management Studio [03/07/09] Sommaire 1 Installation de SQL Server

Plus en détail

PARAMETRER LA MESSAGERIE SOUS THUNDERBIRD

PARAMETRER LA MESSAGERIE SOUS THUNDERBIRD PARAMETRER LA MESSAGERIE SOUS THUNDERBIRD Ref : FP. P763 V 5.0 Résumé Ce document vous indique comment paramétrer votre messagerie sous Thunderbird. Vous pourrez notamment, créer, modifier ou supprimer

Plus en détail

Gestion de stock pour un magasin

Gestion de stock pour un magasin Département d Informatique Université de Fribourg, Suisse http://diuf.unifr.ch Gestion de stock pour un magasin Stock online utilise ASP/MS-Access DO Thi Tra My No étudiant : 05-333-750 Travail de séminaire

Plus en détail

AFTEC SIO 2. Christophe BOUTHIER Page 1

AFTEC SIO 2. Christophe BOUTHIER Page 1 Christophe BOUTHIER Page 1 Nous allons traiter ici quelques exemples de stratégies de groupe courantes. Sommaire : Stratégie de groupe pour déploiement logiciel... 3 1. Introduction... 3 2. Création du

Plus en détail

La gestion des boîtes aux lettres partagées

La gestion des boîtes aux lettres partagées La gestion des boîtes aux lettres partagées La gestion des boîtes aux lettres partagées - page Présentation du module Partage de mail. Qu'est ce qu'une boîte aux lettres partagée? Il s'agit d'une boîte

Plus en détail

SUPPORT DE COURS ACCESS 2010

SUPPORT DE COURS ACCESS 2010 Qu est-ce qu Access? Access 2010 est un outil de déploiement et de conception d application de base de données que vous pouvez utiliser pour effectuer le suivi d informations importantes. Vous pouvez conserver

Plus en détail

I Pourquoi une messagerie?

I Pourquoi une messagerie? I Pourquoi une messagerie? Outlook express est un logiciel de messagerie de windows. Il est installé par défaut sur un grand nombre d ordinateurs de la planète, ceux tournant sous Windows, et proposé par

Plus en détail

Guide de déploiement

Guide de déploiement Guide de déploiement Installation du logiciel - Table des matières Présentation du déploiement du logiciel CommNet Server Windows Cluster Windows - Serveur virtuel CommNet Agent Windows Cluster Windows

Plus en détail

STATISTICA Version 12 : Instructions d'installation

STATISTICA Version 12 : Instructions d'installation STATISTICA Version 12 : Instructions d'installation STATISTICA Entreprise Server Remarques : 1. L'installation de STATISTICA Entreprise Server s'effectue en deux temps : a) l'installation du serveur et

Plus en détail

Paginer les données côté serveur, mettre en cache côté client

Paginer les données côté serveur, mettre en cache côté client Paginer les données côté serveur, mettre en cache côté client Vous voulez sélectionner des lignes dans une table, mais celle-ci comporte trop de lignes pour qu il soit réaliste de les ramener en une seule

Plus en détail

Créer le schéma relationnel d une base de données ACCESS

Créer le schéma relationnel d une base de données ACCESS Utilisation du SGBD ACCESS Polycopié réalisé par Chihab Hanachi et Jean-Marc Thévenin Créer le schéma relationnel d une base de données ACCESS GENERALITES SUR ACCESS... 1 A PROPOS DE L UTILISATION D ACCESS...

Plus en détail

But de cette présentation

But de cette présentation Réseaux poste à poste ou égal à égal (peer to peer) sous Windows But de cette présentation Vous permettre de configurer un petit réseau domestique (ou de tpe), sans serveur dédié, sous Windows (c est prévu

Plus en détail

FORMATION PcVue. Mise en œuvre de WEBVUE. Journées de formation au logiciel de supervision PcVue 8.1. Lieu : Lycée Pablo Neruda Saint Martin d hères

FORMATION PcVue. Mise en œuvre de WEBVUE. Journées de formation au logiciel de supervision PcVue 8.1. Lieu : Lycée Pablo Neruda Saint Martin d hères FORMATION PcVue Mise en œuvre de WEBVUE Journées de formation au logiciel de supervision PcVue 8.1 Lieu : Lycée Pablo Neruda Saint Martin d hères Centre ressource Génie Electrique Intervenant : Enseignant

Plus en détail

Whitepaper. Méthodologie de création de rapports personnalisés SQL Server Reporting Services

Whitepaper. Méthodologie de création de rapports personnalisés SQL Server Reporting Services Ce Whitepaper décrit la méthodologie de développement d un rapport personnalisé au format SQL Server Reporting Service (SSRS) appliqué à System Center Operations Manager (SCOM) Whitepaper Méthodologie

Plus en détail

TeamViewer 7 Manuel Manager

TeamViewer 7 Manuel Manager TeamViewer 7 Manuel Manager TeamViewer GmbH Kuhnbergstraße 16 D-73037 Göppingen teamviewer.com Présentation Sommaire Sommaire... 2 1 Présentation... 4 1.1 À propos de TeamViewer Manager... 4 1.2 À propos

Plus en détail

Tutoriaux : Faites vos premiers pas avec Microsoft Visio 2010

Tutoriaux : Faites vos premiers pas avec Microsoft Visio 2010 Tutoriaux : Faites vos premiers pas avec Microsoft Visio 2010 Les tutoriaux suivants vous guident dans l utilisation de Visio 2010. Certaines vidéos sont disponibles sur le site. Tutoriaux : Faites vos

Plus en détail

Assistance à distance sous Windows

Assistance à distance sous Windows Bureau à distance Assistance à distance sous Windows Le bureau à distance est la meilleure solution pour prendre le contrôle à distance de son PC à la maison depuis son PC au bureau, ou inversement. Mais

Plus en détail

Modélisation et Gestion des bases de données avec mysql workbench

Modélisation et Gestion des bases de données avec mysql workbench Modélisation et Gestion des bases de données avec mysql workbench par novembre 2011 Table des matières 1 Installation 3 1.1 Ecran de chargement 3 1.2 Page d accueil 3 2 Réalisation d une base de données

Plus en détail

Documentation utilisateur, manuel utilisateur MagicSafe Linux. Vous pouvez télécharger la dernière version de ce document à l adresse suivante :

Documentation utilisateur, manuel utilisateur MagicSafe Linux. Vous pouvez télécharger la dernière version de ce document à l adresse suivante : Documentation utilisateur, manuel utilisateur MagicSafe Linux. Vous pouvez télécharger la dernière version de ce document à l adresse suivante : http://www.hegerys.com/documentation/magicsafe-windows-doc.pdf

Plus en détail

DirXML License Auditing Tool version 1.1 - Guide de l'utilisateur

DirXML License Auditing Tool version 1.1 - Guide de l'utilisateur DirXML License Auditing Tool version 1.1 - Guide de l'utilisateur Présentation Installation DirXML License Auditing Tool (DLAT) vous permet de déterminer le nombre de licences DirXML utilisées dans une

Plus en détail

Netissime. [Sous-titre du document] Charles

Netissime. [Sous-titre du document] Charles [Sous-titre du document] Charles Sommaire I. Commandez votre sauvegarde en ligne 2 II. Installation 3-7 III. Utilisation du logiciel de sauvegarde en ligne 8-19 A. Fonctionnement de l application de protection

Plus en détail

Tous les autres noms de produits ou appellations sont des marques déposées ou des noms commerciaux appartenant à leurs propriétaires respectifs.

Tous les autres noms de produits ou appellations sont des marques déposées ou des noms commerciaux appartenant à leurs propriétaires respectifs. Connexion à 4D Server depuis une page ASP Par Noreddine MARGOUM, Technicien Contrôle Qualité, 4D S.A. Note technique 4D-200403-08-FR Version 1 Date 1 Mars 2004 Résumé Le propos de cette note technique

Plus en détail

Publipostage avec Calc

Publipostage avec Calc Auto-formation sur OpenOffice.org 2.0 par Cyril Beaussier Version 1.0.2 - Avril 2006 Publipostage avec Calc Sommaire Introduction... 2 Présentation... 3 Notions... 4 Les données... 5 Lettre type... 7 Création

Plus en détail

FileMaker 13. Guide ODBC et JDBC

FileMaker 13. Guide ODBC et JDBC FileMaker 13 Guide ODBC et JDBC 2004-2013 FileMaker, Inc. Tous droits réservés. FileMaker, Inc. 5201 Patrick Henry Drive Santa Clara, Californie 95054 FileMaker et Bento sont des marques commerciales de

Plus en détail

OSIRIS/ Valorisation des données PORTAIL BO MANUEL UTILISATEUR

OSIRIS/ Valorisation des données PORTAIL BO MANUEL UTILISATEUR OSIRIS/ Valorisation des données PORTAIL BO MANUEL UTILISATEUR HISTORIQUE DES VERSIONS Vers. Date Rédacteur Objet de la modification 1.00 Juillet 2007 GTBO_AGRI Création du document 1.01 Février 2009 SAMOA

Plus en détail

F O R M A T I O N S LOTUS NOTES. 8.5 Utilisateurs. 02 40 42 33 37 13 rue de la Bôle. E U R L. a u c a p i t a l d e 1 0 0 0

F O R M A T I O N S LOTUS NOTES. 8.5 Utilisateurs. 02 40 42 33 37 13 rue de la Bôle. E U R L. a u c a p i t a l d e 1 0 0 0 Bureautique - Internet - Développement ALTAIRE F O R M A T I O N S Logiciels - Audit - Marketing LOTUS NOTES 8.5 Utilisateurs 02 40 42 33 37 13 rue de la Bôle 44510 le Pouliguen altair.formation s@wan

Plus en détail

Utiliser une base de données

Utiliser une base de données Access Utiliser une base de données SOMMAIRE Généralités sur les SGBD... 3 Démarrage d'access 2002... 4 Ouverture d'un fichier Access... 4 Les objets dans Access... 5 Les tables... 6 A) Ouvrir une table

Plus en détail

ADO.NET. Ado.net propose deux modes d'accès, le mode connecté et le mode déconnecté.

ADO.NET. Ado.net propose deux modes d'accès, le mode connecté et le mode déconnecté. ADO.NET Ado.net est une technologie d'accès aux données qui fournit un ensemble des classes permettant d'accéder aux données relationnelles. Même si Microsoft a repris le nom d'ado, déjà présent en VB6,

Plus en détail

Asset Management Software Client Module. Manuel d utilisation

Asset Management Software Client Module. Manuel d utilisation Asset Management Software Client Module Manuel d utilisation Kodak Asset Management Software Client Module Etat et paramètres de l'actif... 1 Menu Asset Status (Etat de l'actif)... 2 Menu Asset settings

Plus en détail

Guide d'utilisation du Serveur USB

Guide d'utilisation du Serveur USB Guide d'utilisation du Serveur USB Copyright 20-1 - Informations de copyright Copyright 2010. Tous droits réservés. Avis de non responsabilité Incorporated ne peut être tenu responsable des erreurs techniques

Plus en détail

Créer et partager des fichiers

Créer et partager des fichiers Créer et partager des fichiers Le rôle Services de fichiers... 246 Les autorisations de fichiers NTFS... 255 Recherche de comptes d utilisateurs et d ordinateurs dans Active Directory... 262 Délégation

Plus en détail

McAfee Security-as-a-Service

McAfee Security-as-a-Service Guide Solutions de dépannage McAfee Security-as-a-Service Pour epolicy Orchestrator 4.6.0 Ce guide fournit des informations supplémentaires concernant l'installation et l'utilisation de l'extension McAfee

Plus en détail

Guide de démarrage Janvier 2012

Guide de démarrage Janvier 2012 Guide de démarrage Janvier 2012 2012 Logicim Inc. Tous droits réservés. Table des Matières Table des Matières i Guide de Démarrage 1 Introduction 1 Respecter l ordre de la formation 1 Ouvrir XLGL 1 Différentes

Plus en détail

Qu est ce qu une bibliothèque?

Qu est ce qu une bibliothèque? Qu est ce qu une bibliothèque? Les bibliothèques sont les endroits où vous allez pour gérer vos documents, votre musique, vos images et vos autres fichiers. Vous pouvez parcourir vos fichiers de la même

Plus en détail

FAQ Trouvez des solutions aux problématiques techniques.

FAQ Trouvez des solutions aux problématiques techniques. FAQ Trouvez des solutions aux problématiques techniques. 1. Au lieu des livres numériques dont je m'attendais, j'ai téléchargé un fichier qui s'intitule «urllink.acsm». Où est le livre numérique? 2. Comment

Plus en détail

Installation Client (licence réseau) de IBM SPSS Modeler 14.2

Installation Client (licence réseau) de IBM SPSS Modeler 14.2 Installation Client (licence réseau) de IBM SPSS Modeler 14.2 Les instructions suivantes permettent d installer IBM SPSS Modeler Client version 14.2 en utilisant un licence réseau. Ce présent document

Plus en détail

Utiliser Access ou Excel pour gérer vos données

Utiliser Access ou Excel pour gérer vos données Page 1 of 5 Microsoft Office Access Utiliser Access ou Excel pour gérer vos données S'applique à : Microsoft Office Access 2007 Masquer tout Les programmes de feuilles de calcul automatisées, tels que

Plus en détail

Sommaire. I.1 : Alimentation à partir d un fichier Access (.mdb)...2

Sommaire. I.1 : Alimentation à partir d un fichier Access (.mdb)...2 Sommaire I. SCENARII DE TRAITEMENTS...2 I.1 : Alimentation à partir d un fichier Access (.mdb)...2 I.1 : Vérification de l intégrité des traitements SQL sur la pyramide des ages...3 I.2 : Vérification

Plus en détail

PRESENTATION / FORMATION

PRESENTATION / FORMATION PRESENTATION / FORMATION Utilisation de l'outil «Open Office BASE» Présentation générale OpenOffice Base vous permet d'accéder à des données enregistrées dans divers formats de fichier de base de données.

Plus en détail

Computer Link Software

Computer Link Software Computer Link Software Informations importantes Sauf spécification contraire prévue dans la Licence fournie avec le programme, Texas Instruments n accorde aucune garantie expresse ou implicite, ce qui

Plus en détail

LES BIBLIOTHEQUES DE WINDOWS 7

LES BIBLIOTHEQUES DE WINDOWS 7 LES BIBLIOTHEQUES DE WINDOWS 7 1 PRINCIPE Elles permettent de mieux trier et de retrouver ses fichiers, sans tenir compte de leur emplacement réel sur le disque dur. Ainsi, une Bibliothèque est un dossier

Plus en détail

CRÉER UNE BASE DE DONNÉES AVEC OPEN OFFICE BASE

CRÉER UNE BASE DE DONNÉES AVEC OPEN OFFICE BASE CRÉER UNE BASE DE DONNÉES AVEC OPEN OFFICE BASE 3. ème partie : RAPPORTS MENU D'ACCUEIL - MIGRATION Table des matières 1. Les RAPPORTS...2 1.1 Création d'un rapport basé sur une Requête...3 1.2 Imprimer,

Plus en détail

Qlik Sense Cloud. Qlik Sense 2.0.2 Copyright 1993-2015 QlikTech International AB. Tous droits réservés.

Qlik Sense Cloud. Qlik Sense 2.0.2 Copyright 1993-2015 QlikTech International AB. Tous droits réservés. Qlik Sense Cloud Qlik Sense 2.0.2 Copyright 1993-2015 QlikTech International AB. Tous droits réservés. Copyright 1993-2015 QlikTech International AB. Tous droits réservés. Qlik, QlikTech, Qlik Sense, QlikView,

Plus en détail

:...2 I.6. :... 2 I.7. :... 2 I.8. :...3 I.9. :... 3 I.10. :... 3 II. 4 II.1.

:...2 I.6. :... 2 I.7. :... 2 I.8. :...3 I.9. :... 3 I.10. :... 3 II. 4 II.1. REPUBLIQUE ALGERIENNE DEMOCRATIQUE ET POPULAIRE MINISTERE DE LA FORMATION PROFESSIONNELLE INSTITUT DE LA FORMATION PROFESSIONNELLE DE BIRKHADEM Microsoft Outlook Mai 2004 IFP BIRKHADEM, Rue des trois frères

Plus en détail

Exploiter les statistiques d utilisation de SQL Server 2008 R2 Reporting Services

Exploiter les statistiques d utilisation de SQL Server 2008 R2 Reporting Services Exploiter les statistiques d utilisation de SQL Server 2008 R2 Reporting Services Nous verrons dans cet article comment exploiter simplement les données de Log de SQL Server 2008 R2 Reporting Services

Plus en détail

Alfresco Guide Utilisateur

Alfresco Guide Utilisateur Alfresco Guide Utilisateur ATELIER TECHNIQUE DES ESPACES NATURELS - 1 Table des matières Alfresco Guide Utilisateur...1 Accéder à la GED de l'aten...3 Via un client FTP...3 Onglet Général...3 Onglet Avancé...3

Plus en détail

Introduction à JDBC. Accès aux bases de données en Java

Introduction à JDBC. Accès aux bases de données en Java Introduction à JDBC Accès aux bases de données en Java Eric Cariou Université de Pau et des Pays de l'adour Département Informatique [email protected] 1 Introduction JDBC : Java Data Base Connectivity

Plus en détail