Appel Procédure Stockée Access depuis WinForm VB .Net en OLEDB

Appel Procédure Stockée Access depuis WinForm VB .Net en OLEDB - VB/VBA/VBS - Programmation

Marsh Posté le 15-09-2005 à 10:22:16    

Bonjour,
 
Voilà mon problème (je simplifie pour rester clair):
 
J'ai une base access avec une requête qui utilise une fonction qui est dans un module :
 
Module :

Code :
  1. Public Function changeNullEnVide(champ)
  2.     If (IsNull(champ)) Then
  3.         changeNullEnVide = ""
  4.     Else
  5.         changeNullEnVide = champ
  6.     End If
  7. End Function


 
Requête "TEST" :

Code :
  1. INSERT INTO TABLE2 (CHAMP1, CHAMP2)
  2. SELECT CHAMP1, changeNullEnVide(CHAMP2) FROM TABLE1


 
Lorsque je lance la requete TEST depuis Access, tout va bien
Mais impossible de lancer cette requête (procédure stockée) depuis VB .Net avec OLEDB :
 

Code :
  1. ' on suppose que conn contient la connexion ouverte
  2. Dim cmd As OleDbCommand
  3. cmd = New OleDbCommand("TEST", conn)
  4. cmd.CommandType = CommandType.StoredProcedure
  5. cmd.ExecuteNonQuery()


 
Là, j'ai l'erreur :

Code :
  1. Fonction 'changeNullEnVide' non définie dans l'expression.


 
Qu'est-je oublié ???
 
Merci d'avance...

Reply

Marsh Posté le 15-09-2005 à 10:22:16   

Reply

Marsh Posté le 16-09-2005 à 08:15:52    

En attendant une solution qui fonctionne en OLEDB, j'utilise ca :
 

Citation :

Dim accApp As Access.Application
 
accApp = CreateObject("Access.application" )
accApp.OpenCurrentDatabase("base.mdb" )
accApp.DoCmd.OpenQuery("TEST)
accApp.Quit()
accApp = Nothing


 
Mais j'attends toujours vos propositions...

Reply

Marsh Posté le 16-09-2005 à 08:53:44    

Sauf qu'avec la dernière solution, il faut Access d'installé sur le poste, c'est pas top :(
 
Sinon, pour exécuter la fonction "changeNullEnVide", c'est un peu louche :( Je crois pas que c'est nécéssaire du côté de .NET. Ca doit être pris en charge avec les requêtes paramétrées...

Reply

Marsh Posté le 16-09-2005 à 09:02:49    

Bonjour !
 
Access n'a pas de procédure stockée.
Access a du code VBA, mais il n'est pas possible de le lancer et de le faire s'interpreter en OLE ni avec l'automation. Peut-être avec une future version d'Access.
 
Par ailleurs, l'instruction NZ() permet de donner une valeur à un champ nul, et la sélection peut se faire avec :

SELECT CHAMP1, NZ(CHAMP2,"" ) FROM TABLE1

:)

Reply

Marsh Posté le 16-09-2005 à 09:06:18    

olivthill a écrit :

Access n'a pas de procédure stockée.


Si, en quelques sortes.

Reply

Marsh Posté le 19-09-2005 à 08:45:34    

L'exemple changeNullEnVide n'est qu'un exemple.
Dans la réalité, c'est une fonction qui convertie une date issue de JD-Edwards vers une date au format classique...
 
Merci de vos réponses, mais ca ne résoud donc pas mon problème, de comment executer ma requete contenant une fonction à moi dedans...

Reply

Marsh Posté le 21-09-2005 à 14:42:16    

Up pour une solution !!!

Reply

Marsh Posté le 12-02-2009 à 22:06:12    

Floppy_AD a écrit :

Up pour une solution !!!


 
Bonjour, je suis nouveau sur ce forum. En fait je me suis inscrit aujourd'hui même (Jeudi 12 Février 2009).
J'ai une solution pour votre problème.
Il suffit d'utiliser la fonction IIF qui prend 3 parametres.
Syntaxe : IIF(Condition,valeur_de_retour_si_condition_vraie,valeur_de_retour_si_condition_fausse)
 
Faites comme suit:
SELECT CHAMP1, IIF(CHAMP2 IS NULL,'',CHAMP2) AS Alias_de_votre_choix FROM TABLE1.
Remarque : L'alias n'est obligatoire.
 
La fonction IIF teste la condition CHAMP2 IS NULL. Si celle-ci vrai, la fonction retourne '', sinon elle retourne la valeur de CHAMP2
 
J'espère que cette réponse vous aidera.
Salut !!
 
PS: Au fait, il y a toute une panoplie de fonction VB qui peuvent être utilisée dans les requêtes.
J'en donne quelques unes:
LEN(nom_du_champ) --> donne la longueur de la chaine de caractères
MID(nom_du_champ,index_départ,longueur_chaine) --> extrait la sous-chaine qui commence à la position index_départ et qui a pour longueur longueur_chaine
etc.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed