Executer une requete SQL avec ADO

cs_filou Messages postés 98 Date d'inscription mercredi 19 décembre 2001 Statut Membre Dernière intervention 15 janvier 2008 - 10 févr. 2006 à 15:28
Yuki59500 Messages postés 5 Date d'inscription mardi 15 janvier 2008 Statut Membre Dernière intervention 15 janvier 2008 - 15 janv. 2008 à 22:27
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

econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Modérateur Dernière intervention 23 décembre 2008 23
10 févr. 2006 à 16:40
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
0
cs_filou Messages postés 98 Date d'inscription mercredi 19 décembre 2001 Statut Membre Dernière intervention 15 janvier 2008
10 févr. 2006 à 17:07
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
0
econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Modérateur Dernière intervention 23 décembre 2008 23
10 févr. 2006 à 23:51
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
0
cs_filou Messages postés 98 Date d'inscription mercredi 19 décembre 2001 Statut Membre Dernière intervention 15 janvier 2008
11 févr. 2006 à 12:06
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Yuki59500 Messages postés 5 Date d'inscription mardi 15 janvier 2008 Statut Membre Dernière intervention 15 janvier 2008
15 janv. 2008 à 12:59
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
0
cs_filou Messages postés 98 Date d'inscription mercredi 19 décembre 2001 Statut Membre Dernière intervention 15 janvier 2008
15 janv. 2008 à 13:45
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
0
Yuki59500 Messages postés 5 Date d'inscription mardi 15 janvier 2008 Statut Membre Dernière intervention 15 janvier 2008
15 janv. 2008 à 22:27
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
0
Rejoignez-nous