Saisir ,modifier et supprimer des ereistrements ds datagrid
cs_lebienestrare
Messages postés96Date d'inscriptionsamedi 6 mai 2006StatutMembreDernière intervention23 mars 2008
-
9 sept. 2006 à 17:53
geobasic
Messages postés69Date d'inscriptionjeudi 6 novembre 2003StatutMembreDernière intervention 3 octobre 2006
-
15 sept. 2006 à 19:50
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
geobasic
Messages postés69Date d'inscriptionjeudi 6 novembre 2003StatutMembreDernière intervention 3 octobre 2006 10 sept. 2006 à 13:23
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 ?
cs_lebienestrare
Messages postés96Date d'inscriptionsamedi 6 mai 2006StatutMembreDernière intervention23 mars 2008 10 sept. 2006 à 15:55
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
geobasic
Messages postés69Date d'inscriptionjeudi 6 novembre 2003StatutMembreDernière intervention 3 octobre 2006 10 sept. 2006 à 16:10
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="".
geobasic
Messages postés69Date d'inscriptionjeudi 6 novembre 2003StatutMembreDernière intervention 3 octobre 2006 10 sept. 2006 à 19:47
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*').
cs_lebienestrare
Messages postés96Date d'inscriptionsamedi 6 mai 2006StatutMembreDernière intervention23 mars 2008 12 sept. 2006 à 18:24
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
geobasic
Messages postés69Date d'inscriptionjeudi 6 novembre 2003StatutMembreDernière intervention 3 octobre 2006 12 sept. 2006 à 19:16
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.
cs_lebienestrare
Messages postés96Date d'inscriptionsamedi 6 mai 2006StatutMembreDernière intervention23 mars 2008 12 sept. 2006 à 23:23
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
geobasic
Messages postés69Date d'inscriptionjeudi 6 novembre 2003StatutMembreDernière intervention 3 octobre 2006 13 sept. 2006 à 01:35
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.
cs_lebienestrare
Messages postés96Date d'inscriptionsamedi 6 mai 2006StatutMembreDernière intervention23 mars 2008 13 sept. 2006 à 04:26
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:
cs_lebienestrare
Messages postés96Date d'inscriptionsamedi 6 mai 2006StatutMembreDernière intervention23 mars 2008 13 sept. 2006 à 17:13
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
geobasic
Messages postés69Date d'inscriptionjeudi 6 novembre 2003StatutMembreDernière intervention 3 octobre 2006 13 sept. 2006 à 18:25
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:
cs_lebienestrare
Messages postés96Date d'inscriptionsamedi 6 mai 2006StatutMembreDernière intervention23 mars 2008 15 sept. 2006 à 18:04
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
geobasic
Messages postés69Date d'inscriptionjeudi 6 novembre 2003StatutMembreDernière intervention 3 octobre 2006 15 sept. 2006 à 19:50
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 ?