Exécution d'une requête écrite dans Access 2007 dans VB 2008

mtb28
Messages postés
3
Date d'inscription
vendredi 24 octobre 2014
Statut
Membre
Dernière intervention
25 octobre 2014
- 24 oct. 2014 à 21:20
 mtb28 - 27 oct. 2014 à 20:38
Bonsoir

SVP et Au secours

Je suis en train d'ecrire un programme en VB 2008. Une base Access 2007 y est associée. Cerra base contient déjà plus d'une vingtaine de requêtes, principalement des requêtes de supression , d'ajout , de mise à jour ....

Après de longues et surtout VAINES recherches sur le net, quelles sont les quelques ligne de codes VB 2008 qui permettent l'appel et l'exécution d'une requête présentes dans ACCESS sans à avoir à la réécrire dans le code VB 2008.

NB : Dans des temps jadis, il y avait une instruction : database.execute suivi du nom de la requête qui faisait cela, et de plus en une (1) seule ligne de code.

Au secours avec si possible un exemple

Merci d'avance

2 réponses

ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
25 oct. 2014 à 06:47
Bonjour,
je pense que cette lecture t'intéressera :
http://msdn.microsoft.com/fr-fr/library/bb469808.aspx
0
mtb28
Messages postés
3
Date d'inscription
vendredi 24 octobre 2014
Statut
Membre
Dernière intervention
25 octobre 2014

25 oct. 2014 à 09:50
De Mtb28 ,

MERCI pour cette reponse,


Quelques informations:

En préambule :
Imports System.Data
Imports System.Data.OleDb

MAIS .....

Voici le code d'une des procédures


=========

sub raz_tab_inter ()

Dim MyConnexion As OleDbConnection = New OleDbConnection(db_path)
Dim Mycommand As OleDbCommand = MyConnexion.CreateCommand()

Dim req_str As String

req_str ="DELETE tab_inter.* FROM tab_inter ;"

Mycommand.CommandText = req_str
MyConnexion.Close()
MyConnexion.Open()

Mycommand.ExecuteNonQuery()

MyConnexion.Close()
MyConnexion = Nothing

end sub

========


Pour info :

db_path = "Provider=Microsoft.Jet.OLEDB.4.0;Data source=" & db_repe & "\" & db_file

avec :

db_repe est le nom du répertoire complet où est située ma base access
db_file est le nom complet de ma base ( avec ".mdb")


******************************
* *
* Cela marche très bien. *
* *
******************************



Dans cette même base , quand la longueur de la chaine "req_str" dépasse les 1300 caractères, vive la syntaxe SQL ....

NB : Donc cette même requête est écrite dans la base access ( générée via l'utilsation du "mode création") [ c'est simple mais efficace et surout peu de risque de faute de syntaxe]

Elle me sert de test, vérification.

Dans le texte de : http://msdn.microsoft.com/fr-fr/library/bb469808.aspx

Peut-être ai-je rien compris ? Mais impossible de pouvoir adapter les différents exemples de cette aide à mon programme.

Comment :
1) Ne pas ecrire le code du texte de la requête dans req_str ....
2) mais lancer/éxecuter la requête présente et définie dans la base access depuis vb 2008

Merci pour l'aide et la réponse
0
Un seul mot : MERCI pour ton aide.

Fort de cette clé, j'ai continué à chercher.
Éventuellement si cela peut aider quelqu'un :

'
' Info complémentaire
'
' Langage : VB 2008
'
' Imports System.Data
' Imports System.Data.OleDb
'
'
'
' db_path = "Provider=Microsoft.Jet.OLEDB.4.0;Data source=" & db_reper & "\" & db_file
'
' db_reper => chemin complet où est stockée la base de données ACCESS
' db_file => nom de la base de données
'
' str_req => nom de la requête contenue dans la base ACCESS
'

'
' A) Requête SANS retour de données
'
' 1) requête présente et écrite dans la base ACCESS
'
'

'
'===================================
'
Sub requete_dans_access(ByVal str_req As String)

Dim Ma_Connexion As OleDbConnection = New OleDbConnection(db_path)
Dim Ma_Command As OleDbCommand = New OleDbCommand(str_req, Ma_Connexion)

Ma_Command.CommandType = CommandType.StoredProcedure

Ma_Connexion.Close()
Ma_Connexion.Open()

Ma_Command.ExecuteNonQuery()

Ma_Connexion.Close()

Ma_Connexion = Nothing
Ma_Command = Nothing

End Sub

'
'===================================
'

' ATTENTION : Limitation concernant des requêtes concernant le mot sql : LIKE
' Dans ACCESS une requête contenant LIKE marche très bien sous ACCESS .
'
' MAIS
'
' Quand on veut l'exécuter par la procédure : requete_dans_access ( présentée ci-dessus)
'
' Pas de résultats.
'
' AU SECOURS pour une explication
' --------------------------------------------------
'

' 1) requête générée dans VB 2008
'
'

'
'===================================
'

Sub requete_dans_VB2008()


'
' Requête commençant par SELECT
'
Dim int_0 As Integer
Dim str_0 As String

Dim Ma_Connexion As OleDbConnection = New OleDbConnection(db_path)
Dim Ma_command As OleDbCommand = Ma_Connexion.CreateCommand()

Dim str_req As String

Dim int_0 as Integer ' numéro d'ordre dans l'instruction SELECT
Dim str_0 as string = "" ' Lecture de la valeur


str_req = ""
str_req = str_req & " SELECT "
str_req = str_req & A vous maintenant
'
'
'
Mycommand.CommandText = str_req
MyConnexion.Close()
MyConnexion.Open()

Dim myReader As OleDbDataReader = Mycommand.ExecuteReader()


Do While myReader.Read()

'
' ICI traitement de vos valeurs
'
' Par exemple si :
'

int_0 = 0

'

str_0 = myReader(int_0).ToString

'
' ........ A vous maintenant pour le traitement
'
Loop

myReader.Close()
MyConnexion.Close()

Mycommand = Nothing
MyConnexion = Nothing


End Sub

'
'===================================
'
0
mtb28
Messages postés
3
Date d'inscription
vendredi 24 octobre 2014
Statut
Membre
Dernière intervention
25 octobre 2014

25 oct. 2014 à 09:15
De Mtb28 ,

MERCI pour cette reponse,


Quelques informations:

En préambule :
Imports System.Data
Imports System.Data.OleDb

MAIS .....

Voici le code d'une des procédures


=========

sub raz_tab_inter ()

Dim MyConnexion As OleDbConnection = New OleDbConnection(db_path)
Dim Mycommand As OleDbCommand = MyConnexion.CreateCommand()

Dim req_str As String

req_str ="DELETE tab_inter.* FROM tab_inter ;"

Mycommand.CommandText = req_str
MyConnexion.Close()
MyConnexion.Open()

Mycommand.ExecuteNonQuery()

MyConnexion.Close()
MyConnexion = Nothing

end sub

========


Pour info :

db_path = "Provider=Microsoft.Jet.OLEDB.4.0;Data source=" & db_repe & "\" & db_file

avec :

db_repe est le nom du répertoire complet où est située ma base access
db_file est le nom complet de ma base ( avec ".mdb")


******************************
* *
* Cela marche très bien. *
* *
******************************



Dans cette même base , quand la longueur de la chaine "req_str" dépasse les 1300 caractères, vive la syntaxe SQL ....

NB : Donc cette même requête est écrite dans la base access ( générée via l'utilsation du "mode création") [ c'est simple mais efficace et surout peu de risque de faute de syntaxe]

Elle me sert de test, vérification.

Dans le texte de : http://msdn.microsoft.com/fr-fr/library/bb469808.aspx

Peut-être ai-je rien compris ? Mais impossible de pouvoir adapter les différents exemples de cette aide à mon programme.

Comment :
1) Ne pas ecrire le code du texte de la requête dans req_str ....
2) mais lancer/éxecuter la requête présente et définie dans la base access depuis vb 2008

Merci pour l'aide et la réponse
0