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

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [Access] Procedures stockées et parametres

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Access] Procedures stockées et parametres

n°1227609
axis
Posté le 20-10-2005 à 23:11:39  profilanswer
 


Bonjour !
 
Besoin d'un petit coup de pouce.. En passant par Ado.NET, je veux faire l'update de ma base de données Access.
 
- Je passe les détails tels que connection, dataset.. tous fonctionne correctement
 
- J'utilise un dataadapter, ou j'ai moi-même fais les COMMAND
(pour l'instant j'utilise SELECT et INSERT pour mes tests)
 
- J'ai crée des procedures stockées sous access, en SQL
 
- La procédure stockées pour l'INSERT recoit 2 parametres. (un integer, une string)
 
 
 
Le problème :
 
Lorsque je lance l'update à partir de mon application Vb.Net (donc dataadapter.update(dataset, datatable)), ça marche.
Par contre, ça ne marche toujours que pour un seul enregistrement. Le premier.
 
Après, l'update a un comportement très étrange.
 
Voyez le résultat :
 
supposons que dans mon dataset j'ai :
 
1 aaaaaa
2 bbbb
3 cccccccc
 
et bien l'update va enregistrer cela dans le fichier :
 
1 aaaaaa
1 bbbbaa
1 cccccc
 
 
 
Vraiment étrange.. non ?
 
- le premier champ (l'integer) reste sur celui donné en premier
- la longueur totale du deuxieme champ (la chaine) sera toujours égale a la longueure de la premiere string donnée
- quand la string est plus petite, elle est quand même allongé avec des valeures de la premiere string
 
 
 
 
 
Si quelqu'un a déjà eu un comportement semblable merci de m'aider ! Je ne trouve pas :(
Mon code a pourtant l'air correct. J'ai l'impression que c'est autre chose.
 
 
 
Voici le code de la procedures stockees sous access (INSERT), au cas ou :
 
INSERT INTO tbl_Personne ( personne_Id, Nom )
VALUES (int_id, chn_nom);
 
j'ai aussi essayé :
 
PARAMETERS [int_id] Short, [chn_nom] Text ( 80 );
INSERT INTO tbl_Personne ( personne_Id, Nom )
SELECT [int_id] AS Expr1, [chn_nom] AS Expr2;
 
Pour les deux, même résultats. A partir d'access directement, ça marche.
A partir de vb.net, ça marche (une fois)
dès qu'il y a plusieurs colonnes dans le dataset, ça plante :(
 
 
On dirait que la valeure passée en paramètre pour la premiere ligne est "gardé" par access.......
 
Merci d'avance
-Axis-

mood
Publicité
Posté le 20-10-2005 à 23:11:39  profilanswer
 

n°1227613
FlorentG
Unité de Masse
Posté le 20-10-2005 à 23:23:45  profilanswer
 

Tu utilises comment tes procédures stockées ? T'as des objets OleDbDataCommand ?

n°1227618
axis
Posté le 20-10-2005 à 23:44:42  profilanswer
 


Oui c'est ça. Voici mon code :
 
 
        Dim stp_commande_insert As New OleDbCommand("stp_insert", con_connection_bdd)
        stp_commande_insert.CommandType = CommandType.StoredProcedure
        stp_commande_insert.Parameters.Add("int_id", OleDbType.Integer, 4, "personne_Id" )
        stp_commande_insert.Parameters.Add("chn_nom", OleDbType.Char, 80, "Nom" )
 
        dataadapt.InsertCommand = stp_commande_insert
 
 
Je declare une commande Oledb, avec le nom de la procedure stockee et la connection;
J'ajoute les parametres, dans le bon ordre,
et j'associe cette command au dataadapter
 
Ca a l'air correct de ce côté je pense ..

n°1227667
FlorentG
Unité de Masse
Posté le 21-10-2005 à 07:57:25  profilanswer
 

Y'a un évènement sur le DataAdapter, RowUpdating, qui se lance juste avant de mettre à jour une Row dans la source de données. Dans les données de l'évènements, tu peux récupérer ta DbCommand, et regarder la gueule qu'elle tire, à ce moment-là les paramètres ont été logiquement remplacés par leur valeurs respectives...

n°1227670
axis
Posté le 21-10-2005 à 08:12:25  profilanswer
 

J'ai découvert quelque chose : j'ai décidé d'essayer sans le dataadapter.
Je lançais donc la procedure stockée de manière "manuelle". Ca me permettais de voir si les valeures étaient mise à jour.
 
Et bien elles l'étaient, mais même comme cela, le résultat dans le fichier *.mdb était le même.
 
J'ai donc modifier un peu le code et j'ai ajouter la création + déclaration des paramettres juste avant de lancer la procédure stockée... et j'ai mis un ...parameters.clear pour les effacer juste après.
 
Résultat : ça marche enfin.
 
Je ne comprend pas trop, et cela m'embête de ne pas pouvoir utiliser le dataadapter.. car il va falloir gérer les update manuellement :
si rowstate = added alors ...etc
idem pour les effacé et idem pour les modifiés.
 
Le dataadapter fait tout ça lui......
 
Donc, avant le dataadapter modifiait la valeur des parametres et ça plantait.
Moi, manuellement, faisais de même. Je modifiais la valeure en gardant toujours les mêmes parametres existants, ça plantait.
Finallement, en effacant les objets parametres et en les re-créant, ça marche..
 
mais alors, comment faire avec un dataadapter ??
peut-être avec une function as oledbcommand ? cette function donnerait la commande en string sql, la connection, les parametres.....ca voudrait dire qu'à chaque ligne, la function serait lancée ? Pas très 'optimisé'   :(
Mais c'est tout ce que je vois, car apparement il faut recréer les objets parametres a chaque fois...
 
Je ne comprends vraiment pas pourquoi le fait de modifier la valeur des parametres n'est pas suffisant...


Message édité par axis le 21-10-2005 à 08:16:32
n°1227868
FlorentG
Unité de Masse
Posté le 21-10-2005 à 11:49:50  profilanswer
 

Faut faire comme t'as fait au-dessus, sauf qu'il faut préciser la requête INSERT. Puis, à la place des noms de paramètres metter des points d'interrogation, puis ajouter les paramètres dans l'ordre d'apparition, comme tu l'as fait

n°1228943
axis
Posté le 23-10-2005 à 07:47:03  profilanswer
 

J'ai decidé de ne plus utiliser de dataadapter. Je fais tout manuellement maintenant.
Plus de code mais c'est mieux :)
Je recré les parametres a chaque fois et ca marche..
;)

n°1229016
FlorentG
Unité de Masse
Posté le 23-10-2005 à 14:42:45  profilanswer
 

Mouais, c'est pas super-top, sachant que les DataAdapter sont un peu la façon standard de faire tout ça :(


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

  [Access] Procedures stockées et parametres

 

Sujets relatifs
[SQL/Access] Problème de rafraichissement de zone de liste[Access] Choix connexion pour adp
Procédures stockées sous Access [C++.Net]DbGrid Delphi et base de donnée Access
[Access/SQL] Syntax error converting the varchar value...[ACCESS]remettre à zéro un champ de type NuméroAuto
Parametres de constructeur[REPLICATION] Gestion des réplicas d'une base Access 97
Plus de sujets relatifs à : [Access] Procedures stockées et parametres


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