Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2718 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Modification sur les recordsets

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Modification sur les recordsets

n°1262354
FRED20000
Posté le 09-12-2005 à 10:15:35  profilanswer
 

Bonjour,
Après plusieurs recherche sur les recordsets, je n'ai pas tout compris.
 
1- Apres un ".OpenRecordset" à travers une connexion ODBC et une requête SQL("Select" ), j'aimerais savoir si le fait de bidouiller dans le recordset peut modifier la base de données.
(J'ai du mal a comprendre si le recordset est une seulement image ou si il garde les liens avec la base)
 
2- Comment puis-je effectuer des modifs dans le recordset ou dans un de ces clones en sachant que par défaut il est en READ-ONLY avec des connections ODBC.
 
Merci

mood
Publicité
Posté le 09-12-2005 à 10:15:35  profilanswer
 

n°1262563
pc75
Posté le 09-12-2005 à 14:02:26  profilanswer
 

Bonjour,
 
En ce qui me concerne, j'utilise un recordset uniquement pour lire des données. Pour des opérations de mises à jour, j'utilise la méthode Execute d'un object Connexion avec une requête UPDATE, INSERT ou DELETE.

n°1262641
FRED20000
Posté le 09-12-2005 à 15:04:03  profilanswer
 

Moi aussi j'utilise les recordsets uniquement pour lire, mais dans certain cas je dois les retravailler (".Addnew" ) pour les utiliser, et je voudrais être sur que ça ne modifiera pas la Bdd à distance.

n°1262716
pc75
Posté le 09-12-2005 à 15:36:25  profilanswer
 

Re,
 
A mon avis, si tu fais un .Addnew, il faut .Update pour que la mise à jour se fasse.
Fais le test et tu nous dis ?

n°1262782
FRED20000
Posté le 09-12-2005 à 15:58:54  profilanswer
 

Le probleme est que le recorset est en READ-ONLY, donc je ne peux pas faire de .addnew et je ne sais pas comment enlever le READ-ONLY.

n°1262813
pc75
Posté le 09-12-2005 à 16:18:57  profilanswer
 

Re,
 
C'est un peu long, mais avec un peu de lecture (MSDN)
 
OpenRecordset, méthode
               
 
Crée un objet Recordset et l'ajoute à la collection Recordsets.
 
Syntaxe
 
Dans le cas d'objets Connection et Database :
 
Set recordset = object.OpenRecordset (source, type, options, lockedits)
 
Dans le cas d'objets QueryDef, Recordset et TableDef :
 
Set recordset = object.OpenRecordset (type, options, lockedits)
 
La syntaxe de la méthode OpenRecordset comprend les éléments suivants :
 
Élément Description  
recordset Variable objet représentant l'objet Recordset à ouvrir.  
object Variable objet représentant un objet existant à partir duquel vous voulez créer l'objet Recordset.  
source Donnée de type String indiquant la source des enregistrements du nouvel objet Recordset. Il peut s'agir du nom d'une table, d'une requête ou d'une instruction SQL qui renvoie des enregistrements. Dans le cas d'objets Recordset de type Table figurant dans les bases de données Microsoft Jet, la source ne peut être qu'un nom de table.  
type Facultatif. Constante indiquant le type d'objet Recordset à ouvrir, comme indiqué dans la section Valeurs.  
options Facultatif. Combinaison de constantes indiquant les caractéristiques du nouvel objet Recordset, comme indiqué dans la section Valeurs.  
lockedits Facultatif. Constante définissant le verrouillage de l'objet Recordset, comme indiqué dans la section Valeurs.  
 
 
Valeurs  
 
Vous pouvez affecter l'une des constantes suivantes à l'argument type :
 
Constante Description  
dbOpenTable Ouvre un objet Recordset de type Table (espaces de travail Microsoft Jet uniquement).  
dbOpenDynamic Ouvre un objet Recordset de type Dynamique, identique à un curseur dynamique ODBC(espaces de travail ODBCDirect uniquement)  
dbOpenDynaset Ouvre un objet Recordset de type Feuille de réponses dynamique (Dynaset), identique à un curseur de jeu de valeurs clé ODBC.  
dbOpenSnapshot Ouvre un objet Recordset de type Instantané, identique à un curseur statique ODBC.  
dbOpenForwardOnly  Ouvre un objet Recordset de type En avant seulement.  
 
 
Note Si vous ouvrez un objet Recordset dans un espace de travail Microsoft Jet et si vous n'indiquez aucun type, OpenRecordset crée un objet Recordset de type Table si possible. Si vous indiquez une table liée ou une requête, la méthode OpenRecordset crée un objet Recordset de type Feuille de réponses dynamique (Dynaset). Dans le cas d'un espace de travail ODBCDirect, la valeur par défaut est dbOpenForwardOnly.
 
Vous pouvez affecter une combinaison des constantes suivantes à l'argument options.
 
Constante Description  
dbAppendOnly  Permet aux utilisateurs d'ajouter de nouveaux enregistrements à l'objet Recordset, tout en leur interdisant de modifier ou de supprimer les enregistrements existants (objet Recordset de type Feuille de réponses dynamique Microsoft Jet (Dynaset) uniquement).  
dbSQLPassThrough  Transmet une instruction SQL à une source de données ODBC connectée Microsoft Jet en vue de son traitement (objet Recordset de type Instantané Microsoft Jet (Snapshot) uniquement).  
dbSeeChanges Génère une erreur d'exécution si un utilisateur modifie les données en cours de modification par un autre utilisateur (objet Recordset de type Feuille de réponses dynamique Microsoft Jet (Dynaset) uniquement). Ce comportement peut s'avérer utile dans les applications dans lesquelles plusieurs utilisateurs bénéficient d'accès simultané en lecture/écriture aux mêmes données.  
dbDenyWrite  Interdit aux autres utilisateurs de modifier ou d'ajouter des enregistrements (objets Microsoft Jet Recordset uniquement).  
dbDenyRead  Interdit aux autres utilisateurs de lire les données d'une table (objet Recordset de type Table Microsoft Jet uniquement).  
dbForwardOnly  Crée un objet Recordset de type En avant seulement (objet Recordset de type Instantané Microsoft Jet uniquement). Cette option est fournie dans un souci de compatibilité avec les versions précédentes ; il est préférable d'adopter la constante dbOpenForwardOnly dans l'argument type.  
dbReadOnly  Interdit aux utilisateurs d'apporter des modifications à l'objet Recordset (Microsoft Jet uniquement). La constante dbReadOnly de l'argument lockedits remplace désormais cette option, qui n'est fournie qu'à des fins de compatibilité avec les versions précédentes.  
dbRunAsync Exécute une requête asynchrone (espaces de travail ODBCDirect uniquement).  
dbExecDirect  Exécute une requête en sautant SQLPrepare et en appelant directement SQLExecDirect (espaces de travail ODBCDirect uniquement). Utilisez cette option uniquement si vous n'ouvrez pas un objet Recordset basé sur une requête Paramètre. Pour plus d'informations, voir le "Manuel de référence du programmeur Microsoft ODBC 3.0".  
dbInconsistent  Autorise les mises à jour incohérentes (objets Recordset Microsoft Jet de type Feuille de réponses dynamique (Dynaset) et Instantané (Snapshot) uniquement).  
dbConsistent  Autorise uniquement les mises à jour cohérentes (objets Recordset Microsoft Jet de type Feuille de réponses dynamique (Dynaset) et Instantané (Snapshot) uniquement).  
 
 
Note Les constantes dbConsistent et dbInconsistent s'excluent mutuellement ; si vous les utilisez toutes deux en même temps, une erreur se produit. Si vous indiquez un argument lockedits lorsque l'argument options utilise la constante dbReadOnly, vous obtiendrez également une erreur.
 
Vous pouvez affecter l'une des constantes suivantes à l'argument lockedits.
 
Constante Description  
dbReadOnly Interdit aux utilisateurs d'apporter des modifications à l'objet Recordset (option par défaut pour les espaces de travail ODBCDirect). Vous pouvez utiliser l'objet dbReadOnly dans l'argument options ou lockedits, mais pas dans les deux. Si vous l'utilisez dans les deux arguments, une erreur d'exécution se produit.  
dbPessimistic  Utilise le verrouillage pessimiste afin de déterminer de quelle façon les modifications sont apportées à l'objet Recordset dans un environnement multi-utilisateur. La page contenant l'enregistrement que vous modifiez est verrouillée dès que vous utilisez la méthode Edit (option par défaut pour les espaces de travail Microsoft Jet).  
dbOptimistic  Utilise le verrouillage optimiste afin de déterminer de quelle façon les modifications sont apportées à l'objet Recordset dans un environnement multi-utilisateur. La page contenant l'enregistrement n'est pas verrouillée tant que l'exécution de la méthode Update n'est pas terminée.  
dbOptimisticValue  Utilise le contrôle concurrentiel optimiste à partir des valeurs des lignes (espaces de travail ODBCDirect uniquement).  
dbOptimisticBatch  Active la mise à jour par lot (espaces de travail ODBCDirect uniquement).  
 
 
Remarques
 
Dans le cas d'un espace de travail Microsoft Jet, si  object fait référence à un objet QueryDef ou à un objet Recordset de type Feuille de réponses dynamique (Dynaset) ou Instantané (Snapshot), ou bien si l'argument source fait référence à une instruction SQL ou à un objet TableDef représentant une table liée, vous ne pouvez pas affecter la constante dbOpenTable à l'argument type. En effet, cela entraînerait une erreur d'exécution. Si vous souhaitez lancer une requête directe SQL sur une table liée dans une source de données ODBC connectée Microsoft Jet, vous devez commencer par affecter à la propriété Connect de la base de données de la table liée une chaîne de connexion ODBC valide. Si vous avez uniquement besoin d'effectuer un seul passage sur un objet Recordset ouvert depuis une source de données ODBC connectée Microsoft Jet, vous pouvez améliorer les performances en affectant la constante dbOpenForwardOnly à l'argument type.  
 
Si  object fait référence à un objet Recordset de type Feuille de réponses dynamique (Dynaset) ou Instantané (Snapshot), le nouvel objet Recordset sera du même type object. Si l'argument object fait référence à un objet Recordset de type Table, le nouvel objet sera un objet Recordset de type Feuille de réponses dynamique (Dynaset). Vous ne pouvez pas ouvrir de nouveaux objets Recordset à partir d'objets Recordset ODBCDirect de type En avant seulement.
 
Dans le cas d'un espace de travail ODBCDirect, vous pouvez ouvrir un objet Recordset contenant plusieurs requêtes Sélection dans l'argument source. Exemple :
 
"SELECT LastName, FirstName FROM Authors  
WHERE LastName = 'Smith';
SELECT Title, ISBN FROM Titles  
WHERE ISBN Like '1-55615-*'"
 
L'objet Recordset renvoyé s'ouvrira avec les résultats de la première requête. Pour obtenir les jeux de résultats des enregistrements provenant de requêtes suivantes, utilisez la méthode NextRecordset.
 
Note Vous pouvez envoyer des requêtes DAO vers un certain nombre de serveurs de base de données différents avec ODBCDirect et différents serveurs reconnaîtront des dialectes SQL quelque peu différents. C'est pourquoi, l'aide contextuelle n'est plus fournie pour Microsoft Jet SQL, bien que l'aide en ligne pour Microsoft Jet SQL soit toujours accessible via le menu d'aide. Assurez-vous que vous consultez la documentation de référence appropriée pour le dialecte SQL de votre serveur de base de données lorsque vous utilisez des connexions ODBCDirect ou des requêtes directes dans des applications client/serveur connectées par Microsoft Jet.
 
Adoptez une constante dbSeeChanges dans un espace de travail Microsoft Jet si vous souhaitez récupérer les modifications lorsque plusieurs utilisateurs modifient ou suppriment le même enregistrement. Par exemple, si deux utilisateurs commencent à modifier le même enregistrement, le premier utilisateur qui exécute la méthode Update y parvient sans problème. En revanche, lorsque le deuxième utilisateur invoque la méthode Update, une erreur d'exécution se produit. De même, si le deuxième utilisateur tente de recourir à la méthode Delete pour supprimer l'enregistrement et que le premier utilisateur l'a déjà modifié, une erreur d'exécution se produit.
 
En général, si l'utilisateur reçoit cette erreur au cours d'une mise à jour, votre code doit mettre à jour le contenu des champs et extraire les valeurs nouvellement modifiées. Si l'erreur se produit au cours du processus de suppression, votre code peut présenter à l'utilisateur les nouvelles données de l'enregistrement et afficher un message indiquant que les données ont été modifiées récemment. À ce moment, votre code peut demander confirmation pour savoir si l'utilisateur souhaite toujours supprimer l'enregistrement.
 
Il est également recommandé d'utiliser la constante dbSeeChanges si vous ouvrez un objet Recordset dans un espace de travail ODBC connecté Microsoft Jet avec une table Microsoft SQL Server 6.0 (ou versions ultérieures) contenant une colonne IDENTITY ; sinon, une erreur risque de se produire.
 
Dans un espace de travail ODBCDirect, vous pouvez exécuter des requêtes asynchrones en définissant la constante dbRunAsync dans l'argument options. Cela permet à votre application de continuer de traiter d'autres instructions pendant que la requête s'exécute en arrière-plan. Vous ne pouvez toutefois pas accéder aux données de l'objet Recordset tant que la requête n'est pas terminée. Pour savoir si la requête est terminée, vérifiez la propriété StillExecuting du nouvel objet Recordset. Si la requête dure plus longtemps que vous ne l'escomptiez, vous pouvez y mettre fin à l'aide de la méthode Cancel.
 
L'ouverture de plusieurs objets Recordset sur une source de données ODBC risque d'échouer si la connexion est occupée par un appel OpenRecordset antérieur. Il est possible de contourner ce problème en utilisant un curseur côté serveur et ODBCDirect, si le serveur peut les prendre en charge. Il est également possible de remplir entièrement l'objet Recordset à l'aide de la méthode MoveLast, dès l'ouverture de l'objet Recordset.
 
Si vous ouvrez un objet Connection en affectant la constante dbUseClientBatchCursor à DefaultCursorDriver, vous pouvez ouvrir un objet Recordset afin de stocker en mémoire cache les modifications apportées aux données (ce procédé est appelé mise à jour par lot) dans un espace de travail ODBCDirect. Placez une constante dbOptimisticBatch dans l'argument lockedits afin d'activer le stockage des mises à jour en mémoire cache. Pour plus d'informations sur la façon d'écrire immédiatement les modifications sur disque ou sur la possibilité de les écrire en différé, voir la rubrique consacrée à la méthode Update.
 
La fermeture d'un objet Recordset à l'aide de la méthode Close le supprime automatiquement de la collection Recordsets.
 
Note Si l'argument source fait référence à une instruction SQL composée d'une chaîne concaténée avec une valeur non entière et si le séparateur décimal indiqué dans les paramètres système n'est pas le point (par exemple, strSQL = "PRICE > " & lngPrice, et lngPrice = 125,50), une erreur se produit à l'ouverture de l'objet Recordset. Lors de la concaténation, le nombre indiqué sera converti en chaîne en appliquant le caractère de séparation décimale par défaut de votre système, tandis que le langage SQL accepte uniquement le séparateur décimal américain (le point).

n°1262838
tegu
Posté le 09-12-2005 à 16:34:42  profilanswer
 

zou ! un petit exemple d'utilisation de recordset pour vous
On remplit la table "TableMachin" dont les champs sont : TypeDonnee, Libelle, flagCalcul
 


    Dim rs As Recordset
    Dim dbData As Database
 
    ' initit dbData
    .....
 
 
    Set rs = dbData.OpenRecordset("TableMachin", dbOpenTable)
    rs.Index = "PrimaryKey"
    If Not rs.BOF Then
        rs.Seek "=", "CLE1"
        If rs.NoMatch Then
            rs.AddNew
            rs!TypeDonnee = "ALPHA1"
            rs!Libelle = "Champs alpha de format 1"
            rs!flagCalcul = True
            rs.Update
        End If
    End If
    rs.Close
    Set rs = Nothing


Message édité par tegu le 09-12-2005 à 16:36:10
n°1262875
FRED20000
Posté le 09-12-2005 à 17:07:17  profilanswer
 

Ok pour "Set recordset = object.OpenRecordset (source, type, options, lockedits) "
Mais je ne vois pas quoi mettre à la place de "lockedits" pour ne plus avoir "READ ONLY"


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Modification sur les recordsets

 

Sujets relatifs
Modification d'un fichier vbscriptSite web perso et modification de freeware : SQL ok ? (PHP+SQL)
[Webservice/PHP] Modification d'une fonction soapVBScript - Modification d'un fichier par script
Protection en lecture/modification d'un module au sein d'un projet...Accès et modification d'un élément de ma page (DOM)
Modification Coppermine Photo GalleryModification dynamique tableau HTML
Formulaire de modification avec champ fileModification d'un fichier texte
Plus de sujets relatifs à : Modification sur les recordsets


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR