Saisir ,modifier et supprimer des ereistrements ds datagrid

Signaler
Messages postés
96
Date d'inscription
samedi 6 mai 2006
Statut
Membre
Dernière intervention
23 mars 2008
-
Messages postés
69
Date d'inscription
jeudi 6 novembre 2003
Statut
Membre
Dernière intervention
3 octobre 2006
-
Bonjour,comment je peux editer,modifier ou meme supprimer des enregistrements dans un data grid,sachant que je travaille sous vb6 en connexion ado avec sql server 2000,
en fait j'ai mis à la valeur True les propriétés:allowaddnew,allowupdate et allowdelete,mais ça ne marche toujours pas,
j'espère entendre des reponses dans le plus proche possible
Merci d'avance

17 réponses

Messages postés
69
Date d'inscription
jeudi 6 novembre 2003
Statut
Membre
Dernière intervention
3 octobre 2006

Salut,

Je peux peut être t'aider mais j'ai besoin d'un peu plus de présision sur ton problème. Est-ce que au moins tu arrive à charger des données dans ton datagrid ?  Y as t'il des messages d'erreur ?
Messages postés
96
Date d'inscription
samedi 6 mai 2006
Statut
Membre
Dernière intervention
23 mars 2008

Bonjour,merci d'abord geobasic,ça a marché,il suffisait d'utiliser adodc,(avant j'utilisait dataenvironment) c'est pour cela que ça ne marchait pas,Merci encore


Une autre question svp, si quelqu'un connait une code source ou un projet vb6 (ado bien sur) ou un lien qui fait une recherche d'enregistrements dans tous les champs,pour le moment j'utilise find ,et je ne cherche que dans le code,je veux savoir comment je peux chercher dans le code,nom,prenom,.....


Merci encore,et je serai tellement reconnaissant si vous me repondiez
Messages postés
69
Date d'inscription
jeudi 6 novembre 2003
Statut
Membre
Dernière intervention
3 octobre 2006

Connais-tu la propriété Filter du RecordSet ? elle te permet de filtrer ton recordset sur plusieurs critères. Par exemples:

    MonRecordSet.Filter = "code=1 and nom='Martin' and prenom='Jean' "

Lorsque tu renseigne Filter, le recordset est réduit avec uniquement les records correspondant au critères. si la propriété EOF est vrai c'est qu'il n'y a aucun record correspondant aux critères. Pour revenir au recordset initiale il faut faire Filter="".
Messages postés
96
Date d'inscription
samedi 6 mai 2006
Statut
Membre
Dernière intervention
23 mars 2008

Bonjour,peux-tu me désigner un site ou code source qui explique bien son utilisation?
Merci
Messages postés
69
Date d'inscription
jeudi 6 novembre 2003
Statut
Membre
Dernière intervention
3 octobre 2006

Ecoute c'est pas trés compliqué. Dans ton programme  tu utlise le control ADODC non ? Donc je suppose que tu as déclaré dans les propriétés la source à savoir le fichier Mdb à utiliser et la table à traiter. Si Ton control s'appelle Adodc1 ce simple code te permet de faire une recherche multi-critère:

Adodc1.Recordset.Filter = "code=1 and nom='Martin' and prenom='Jean' "

A toi de mettre les critères qui te conviennent dans la chaine de caractère, en insérant éventuellement des variables (sans oublier de mettre de simples côtes pour les chaînes). La syntaxe est presque identique à une clause Where d'une requète Sql (mise à part les fonctions qu'on ne peux pas utiliser). Dés que Filter est renseigné, tu peux lire en boucle le recordset pour traiter les lignes entrant dans les critères, par exemple:

while not Adodc1.Recordset.EOF
    Debug.Print Adodc1.Recorset("adresse")
    Adodc1.RecordSet.MoveNext
wend

Adodc1.RecordSet.Filter=""     ' A ne pas oublier à la fin du traitement

Dans cette exemple je ne fait qu'imprimer le champ "adresse" (en supposant que le champ existe dans la table) dans la fenêtre d'exécution immédiate. A toi là aussi à faire ce que tu veux.

Si tu veux en savoir plus sur la propriété Filter, voici un extrait de la doc MSDN:
"Cette chaîne de critère est composée de clauses sous forme FieldName-Operator-Value (par exemple, "LastName 'Smith'"). Vous pouvez créer des clauses composées en concaténant des clauses individuelles avec AND (par exemple, "LastName 'Smith' AND FirstName = 'John'") ou OR (par exemple, "LastName = 'Smith' OR LastName = 'Jones'"). Utilisez les consignes ci-dessous pour les chaînes de critère :

FieldName doit être un nom de champ valide du Recordset. Si le nom de champ comporte des espaces, il doit être indiqué entre crochets.

Operator est un des éléments suivants : <, >, <=, >=, <>, =, ou LIKE.

Value est la valeur avec laquelle vous comparerez les valeurs de champ (par exemple, 'Smith', #8/24/95#, 12.345 ou $50.00). Utilisez les guillemets simples pour les chaînes et le symbole dièse (#) pour les dates. Avec les nombres, vous pouvez utiliser la virgule décimale, le symbole dollar ($) et les notations scientifiques. Si l'opérateur LIKE est utilisé, Value admet des caractères joker ; seuls l'astérisque (*) et le symbole du pourcentage (%) peuvent être utilisés. Ils doivent être le dernier caractère de la chaîne. La valeur Null n'est pas acceptée

Il n'y a pas de priorité avec AND ou OR. Les clauses peuvent être regroupées entre parenthèses. Mais vous ne pouvez pas regrouper des clauses reliées par OR puis adjoindre ce groupe à une autre clause avec l'opérateur AND, de la manière suivante : (LastName 'Smith' OR LastName 'Jones') AND FirstName = 'John'

Ce filtre devra être écrit comme suit : (LastName 'Smith' AND FirstName 'John') OR (LastName = 'Jones' AND FirstName = 'John')

Dans une clause LIKE, vous pouvez utiliser un caractère joker au début et à la fin de la chaîne (par exemple LastName Like '*mit*'), ou uniquement à la fin de la chaîne (par exemple LastName Like 'Smit*').

" fin de citation.

Voilà en espérant que ceci puisse t'aider...
Messages postés
96
Date d'inscription
samedi 6 mai 2006
Statut
Membre
Dernière intervention
23 mars 2008

Bonjour,je suis de retour, voilà mon code:
Code = InputBox("veuillez saisir le moyen à rechercher", RECHERCHE)
     rs.Filter = "Nom like '%" & Code & "%' "
     DataGrid1.ClearFields
     If rs.RecordCount > 0 Then
     Set DataGrid1.DataSource = rs
     DataGrid1.Refresh
     affichage
     FillDataFields
     Else
     MsgBox "Les enregistrements que vous cherchez n'existent pas !", vbInformation
     rs.Filter = ""
     Set datarid1.DataSource = rs
     DataGrid1.Refresh
ça marche très bien pr la 1ere partie,mais pour le else,j'ai pas su comment rafraichir mon datagrid
Merci
Messages postés
69
Date d'inscription
jeudi 6 novembre 2003
Statut
Membre
Dernière intervention
3 octobre 2006

Faute de frappe: "Set datarid1.DataSource = rs"  à remplacer par "Set DataGrid1.DataSource = rs"
Messages postés
96
Date d'inscription
samedi 6 mai 2006
Statut
Membre
Dernière intervention
23 mars 2008

Merciiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii geobasic t'es super
Messages postés
69
Date d'inscription
jeudi 6 novembre 2003
Statut
Membre
Dernière intervention
3 octobre 2006

Si je peut me permettre tu peux simplifier ton code en mettant "Set
Datagrid1.DataSource = rs" dans l'évènement "Form_Load" de ta form. En
effet tu n'est pas obligé de renseigner systématiquement ton
DataSource, une fois ça suffit.
Messages postés
96
Date d'inscription
samedi 6 mai 2006
Statut
Membre
Dernière intervention
23 mars 2008

Good idea
et si je peux me permettre,une question de plus,si la valeur recherchée est une date,et bien sur la variable Code déja citée désigne une date,alors la declaration précédante se fait comment?
Merci bcp
Messages postés
69
Date d'inscription
jeudi 6 novembre 2003
Statut
Membre
Dernière intervention
3 octobre 2006

Si code est un chaîne contenant une date, tu fais : rs.Filter "Date #" & Code & "#"

Si code est une variable déclarée en Date, tu fais:rs.Filter "Date #" & Cstr(Code) & "#"

La date doit être encadrée par des # dans la chaîne, c'est le caratère délimiteur pour un litéral date. Par contre si du veut utiliser l'opérateur LIKE là il faut que tu fasse des essais parce que j'ai jamais essayé. Et dans ce cas je pense que tu doit mettre les "%" à l'interieur:
rs.Filter "Date #%" & Code & "%#".

Mais je t'assure de rien du tout, normalement l'opérateur Like est utilisable sur les chaînes, mais sur les dates il faudrait voir.
Messages postés
96
Date d'inscription
samedi 6 mai 2006
Statut
Membre
Dernière intervention
23 mars 2008

Bonjour,le code marche hyper bien,
j'ai encore 2 ptite questions et je crois k il y aura pas de derangement de ma part encore;);)
1- comment puis je faire 2 recordsets chacun designe une table differente de l'autre,et les 2 sont ds la meme forme,c'est fait avec ADODC mais je preferes avec du code!!
2- voilà mon code dans un module:
On Error GoTo ErrHandler:

UserName = "***"
Password = "***"
ServerName = "***"
DBName = "***"

Set cn = New ADODB.Connection
With cn
.ConnectionTimeout = 25
.Provider = "sqloledb"
.Properties("Data Source").Value = ServerName
.Properties("Initial Catalog").Value = DBName
.Properties("Integrated Security").Value = "SSPI"
.Open
End With


'Screen.MousePointer = vbHourglass
Connexion = True
Exit Function

'Screen.MousePointer = vbDefault


ErrHandler:
Screen.MousePointer = vbDefault
MsgBox Err.Description, , "Error "
End


End Function

les "***" designent des données perso,;);)
lors de l'execution il me donne objet requis,c'est quoi l'histoire exactement,
Merci bcp
Messages postés
69
Date d'inscription
jeudi 6 novembre 2003
Statut
Membre
Dernière intervention
3 octobre 2006

Salut,

J'ai besoin d'un peu plus de précision pour le 1. Tu veux utiliser deux recordset dans un seul DataGrid ?

En 2: Vérifie que ta variable cn soit bien décrite en ADODB.connection
Messages postés
96
Date d'inscription
samedi 6 mai 2006
Statut
Membre
Dernière intervention
23 mars 2008

Bonjour,le problème du module est résolu,j'avais un objet manquant dans ma forme, pour le 1er problème:j'ai une forme,qui contient deux datagrid,chaque datagrid fait référence à une table differente de la table de l'autre,alors j'ai fait la connexion pour le premier datagrid et tout marche bien,mais lorsque j'ai voulu remplir le deuxième datagrid,j'ai pas su comment lui associer un recordset different du premier!!avec le controle ADODC ça marche,mais je veux du code,car on dit qu'il n'y a pas plus fort que le code,
Merci bcp
Messages postés
69
Date d'inscription
jeudi 6 novembre 2003
Statut
Membre
Dernière intervention
3 octobre 2006

Excuse moi je ne comprend pas trop où est ton problème. Si tu as deux DataGrids, tu dois donc définir deux RecordSets et renseigner la propriété DataSource de chaque DataGrid avec le RecordSet qui lui correspond. Par exemple si tu a un premier RecordSet Rs1 associé à la table "Table1", le second Rs2 associé à la table "Table2". Tu n'a qu'à faire:

    DataGrid1.DataSource = Rs1
    DataGrid1.Refresh
    DataGrid2.DataSource = Rs2
    DataGrid2.Refresh

Et la ça doit marcher non ?
Messages postés
96
Date d'inscription
samedi 6 mai 2006
Statut
Membre
Dernière intervention
23 mars 2008

bonjour,je suis de retour,:)
j'ai utilisé le code suivant pour afficher le resultat d'une proc stockée ds un datagrid:
Set cmd = New ADODB.Command
Set param = New ADODB.Parameter
Set rs = New ADODB.Recordset
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "dem_arti"
Set cmd.ActiveConnection = cn
cmd.Parameters.Item("@dat_deb").Value = DTPicker1.Value
cmd.Parameters.Item("@dat_fin").Value = DTPicker2.Value
cmd.Execute
Debug.Print cmd.Parameters(2).Value
Set DataGrid1.DataSource = cmd.Execute
DataGrid1.Refresh
Do While Not cmd.Execute.EOF
DataGrid1.Columns(0).Value = cmd.Execute.Fields(0).Value
DataGrid1.Columns(1).Value = cmd.Execute.Fields(1).Value
cmd.Execute.MoveNext
Loop

Lors de l'exe,ça m'affiche un msg d'erreur :Le jeu d'enregistrements ne peut pas prendre en compte les signets!!
c koi les signets,et c koi le prob?
Merci d'avance
Messages postés
69
Date d'inscription
jeudi 6 novembre 2003
Statut
Membre
Dernière intervention
3 octobre 2006

Un signet est en fait un clé permettant d'accéder directement à un enregistrement dans le recordset. Ce mode d'accés est disponible si le recordset est ouvert avec un type de curseur "adOpenkeySet", ou si la propriété CursorLocation de la connection a pour valeur adUseClient. Je pense que si tu fait "cn.CursorLocation = adUseClient" aprés l'ouverture de la connection cela devrait résoudre ton problème.

Si je peux me permettre j'ai repéré des petites bizareries dans ton code. Apparement la variable "param" ne sert à rien. le 1er "cmd.execute" ne sert à rien non plus et rallonge inutillement le traitement (tu execute 2 fois la même chose). Et puis je comprend pas trés bien la boucle "Do ... Loop". D'abort la syntaxe "Do while not cmd.Execute.Eof" est erroné. "cmd.Execute"  revoie effectivement  un recordset,  mais tu ne peux pas utiliser les propriétés du recordset avec la méthode "Execute". Tu dois d'abord mémoriser le recordset dans un variable, puis utiliser les propriétés de cette variable. Le code correcte serait:

Set rs = cmd.Execute
Do While Not rs.Eof
    DataGrid1.Column(0).Value = rs.Fields(0).Value
    DataGrid1.Column(1).Value = rs.Fields(1).Value
    rs.MoveNext
Loop

Et puis en second pourquoi remplir manuellement le datagrid quand auparavant tu l'a remplie automatiquement en déclarant le DataSource et en exécutant la méthode Refresh ?