Exécution d'une requête écrite dans Access 2007 dans VB 2008
mtb28
Messages postés3Date d'inscriptionvendredi 24 octobre 2014StatutMembreDernière intervention25 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.
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]
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
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)
' 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
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]
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
25 oct. 2014 à 09:50
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
27 oct. 2014 à 20:38
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
'
'===================================
'