Executer une requete SQL avec ADO

Signaler
Messages postés
98
Date d'inscription
mercredi 19 décembre 2001
Statut
Membre
Dernière intervention
15 janvier 2008
-
Messages postés
5
Date d'inscription
mardi 15 janvier 2008
Statut
Membre
Dernière intervention
15 janvier 2008
-
Bonjour,

J'aimerai pouvoir executer une requete SQL avec un recordset ADO.

J'ouvre ma base de cette facon :

Call OuvreBase(App.Path & "\STV.mdb", "SELECT * FROM Societe ORDER BY NomSociete")

Public Sub OuvreBase(sPath As String, sCmdSql As String)


Set adoConnect = New ADODB.Connection
adoConnect.Provider = "Microsoft.Jet.OLEDB.4.0"


adoConnect = New ADODB.Connection
adoConnect.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + sPath + ";Jet OLEDB:Database Password=pssst"


adoConnect.Open


adoCommandEve.ActiveConnection = adoConnect
adoCommandEve.CommandText = sCmdSql
adoRS.CursorLocation = adUseClient
adoRS.CursorType = adOpenStatic
adoRS.LockType = adLockPessimistic
adoRS.Open adoCommandEve


End Sub

Ce que j'amerai faire c'est : Modifier l'ordre de tri, ajouter des enregistrements sur une autre table ect. sans avoir besoin de refermer la table.

Merci

Filou

7 réponses

Messages postés
4030
Date d'inscription
mardi 13 mai 2003
Statut
Modérateur
Dernière intervention
23 décembre 2008
22
Une table ne s'ouvre pas, et ne se referme pas.

Une connexion peut s'ouvrir et se fermer.



Si tu déclares ton objet adoConnect en Public dans ton code, tu auras toujours ta connexion à la base de données ouverte.

(Ne pas oublier de la fermer sur fermeture de ton programme)



Tu pourras donc, à tout moment et n'importe où dans le code, faire une requête sur une table, ajouter un élément, ...



Pour modifier l'ordre de tri, il faut rajouter un "ORDER BY NomDuChamp" à la fin de ta requête SQL.



Pour ajouter un élément dans une table, il faut faire un "INSERT ... ". Mais là, çà devient un problème SQL, pas VB.


Manu
Messages postés
98
Date d'inscription
mercredi 19 décembre 2001
Statut
Membre
Dernière intervention
15 janvier 2008

salut,
Effectivement mon objet adoConnect est Public
Public adoConnect As New ADODB.Connection

Dixit Manu :
"" Tu pourras donc, à tout moment et n'importe où dans le code, faire une requête sur une table, ajouter un élément, ...""

Ce que je ne sais pas faire c'est appliquer une requete à une connexion ouverte.
.

Filou
Messages postés
4030
Date d'inscription
mardi 13 mai 2003
Statut
Modérateur
Dernière intervention
23 décembre 2008
22
Voici un exemple de requête envoyée à ta base de données :

adoConnect.Execute("SELECT * FROM maTable;")


avec maTable qui est le nom d'une table qui existe.


Manu
Messages postés
98
Date d'inscription
mercredi 19 décembre 2001
Statut
Membre
Dernière intervention
15 janvier 2008

Salut et merci Manu,

J'ai essayé adoConnect.Execute ("SELECT * FROM Tireurs;") cela ne marche pas.

Ma base est ouverte exactement comme décrit dans le 1er post.

Ma base contient 4 tables si j'ouvre de cet facon Call OuvreBase(App.Path & "\STV.mdb", "SELECT * FROM Societe, Tireurs ORDER BY NomSociete")
dans un combobox que je remplis à l'aide d'une boucle il m'effiche 3 fois le même enregistrement (ligne).

Si j'ouvre comme ca Call OuvreBase(App.Path & "\STV.mdb", "SELECT * FROM Societe ORDER BY NomSociete") pas de prob dans le combobox mais je ne peut rien faire sur la table Tireurs.

Autre question la facon dont j'initialise ma base (procedure OuvreBase) est elle correct

Fikou
Messages postés
5
Date d'inscription
mardi 15 janvier 2008
Statut
Membre
Dernière intervention
15 janvier 2008

Salut, si c'est du VB.Net, utilise la commande adoConnect.ExecuteNonQuery()
Sinon tu disposes d'autres types d'exécutions de requêtes, essaye-les ^^

Yuki vous souhaite d'être aussi chanceux qu'un Ecaflip, aussi fort qu'un Iop et aussi ponctuel qu'un Xelor
Messages postés
98
Date d'inscription
mercredi 19 décembre 2001
Statut
Membre
Dernière intervention
15 janvier 2008

Salut Yuki59500,
Merci pour ta réponse,
Quand j'ai posé ce post j'était en VB6 je suis en .net maintenant. C'est marrant j'ai repris le dévellopement d'une appli ce matin après 4 mois d'arrêt, c'est un peu galère.

Ce qui m'amène à une question, J'aimerai en VB.Net ouvrir des bases liée et pouvoir faire des ajout et de suppressions de lignes. J'ai essayé mais cela ne marche pas et j'avais lu sur un forum que cela n'était pas possible en vb.net !!!

En VB6 j'ai une requete de ce genre et cela fonctionne :
sSql = sSql & "SELECT " & T_Section25
sSql = sSql & "FROM  Tireurs T, CibleSection25 A, Societe S "sSql sSql & "WHERE T.T_IdSociete S.S_IdSociete AND T.T_IdTireur = A.SC_IdTireur "
sSql = sSql & "ORDER BY A.SC_Total DESC, A.SC_Cp1 DESC, A.SC_Cp2 DESC, A.SC_CP3 DESC, A.SC_Cp4 DESC, A.SC_Cp5 DESC, " & _
"SC_Cp6, SC_Cp7, SC_Cp8, SC_Cp9, SC_Cp10, T_Categorie ASC, T.T_DateNaiss ASC

J'ouvre mes base de cette façon en .net:

sSQL =

"SELECT * FROM " & tabConcours(NomTable) &
" ORDER BY I_Total DESC, I_Passe6 DESC, I_Passe5 DESC, I_Passe4 DESC, " & _

"I_Passe3 DESC, I_Passe2 DESC, I_Passe1 DESC, I_Nom;"OuvreBaseClassement(sSQL,

"Cl25m.mdb", tabConcours(NomTable))

Public

Sub OuvreBaseClassement(
ByVal sSQL
As
String,
ByVal sNomBase
As
String,
ByVal sNomTable
As
String)

''Ouverture base

'Initialisation de la chaîne de paramètres pour la connexionsConnect =

"Provider=Microsoft.Jet.OLEDB.4.0;" & _

"Data Source = " & Application.StartupPath &
"" & sNomBase &
";"

''Connection baseClassement_Connection =

New OleDbConnection

'Donner à la propriété ConnectionString les paramètres de connexionClassement_Connection.ConnectionString = sConnect

''Ouvrir la connectionClassement_Connection.Open()

''Instancier un objet commandeClassement_Command =

New OleDbCommand(sSQL)

''Instancier un objet AdapterClassement_DataAdapter =

New OleDbDataAdapter(Classement_Command)

''init objet commandClassement_Command.Connection = Classement_Connection

'Avec l'aide de la propriété Fill du DataAdapter charger le DataSetClassement_DataAdapter.Fill(Classement_DataSet,

CStr(sNomTable))

'Mettre dans un Objet DataTable une table du DataSetClassement_DataTable = Classement_DataSet.Tables(

CStr(sNomTable))Classement_Connection.Close()

''Premier enregistrementiNumLigne = 0

End
SubMerci d'avance
 FiloU
Messages postés
5
Date d'inscription
mardi 15 janvier 2008
Statut
Membre
Dernière intervention
15 janvier 2008

Dis toi que tout est possible et qu'il suffit de t'en donner les moyens...

Tu n'as qu'à créer 2 variables requêtes de type 'String' et ensuite tu en consacres une à l'insertion et une à la suppression.

Celà dit je ne vois pas comment ouvrir les bases liées, désolé de ne pouvoir répondre à ta question!

Yuki vous souhaite d'être aussi chanceux qu'un Ecaflip, aussi fort qu'un Iop et aussi ponctuel qu'un Xelor