Executeur de requete sql (orienté oracle)

Description

Permet d'executer des requetes SQL, taper, coller ou via un fihcier *.sql contenant les requetes.
Affiche le resultat des requetes dans l'appli et peut telecharger le resultat sous fichier txt
Pour utiliser l'appli, il faut avoir d'installé les commandes :

- sqlplus
- tnsping

Source / Exemple :


' Developpé par Denpx
' Date: 01/12/2008

Public Partial Class MainForm
	
	Public Sub New()
		
		Me.InitializeComponent()
		
		' Renseigne cette note d'information dans le textbox
		
		textBox_result.Text = "Pour Utiliser << Executeur SQL >>, il faut installer sur son poste :" & vbCrLf & vbCrLf & _
		"- Sqlplus" &  vbCrLf & _
		"- TnsPing" & vbCrLf & vbCrLf & _
		"NB : Il faut selectionner un fichier de requete ou taper sa requete"
		
	End Sub
	
	' Declaration des variables public
	
	Public StreamAll As Object
	Public Path_Fichier As String
	Public user As String
	Public mdp As String
	Public dbname As String
	Public appconf As String = "Executeur SQL.exe.config"
	
	Sub Button_execClick(ByVal sender As Object, ByVal e As EventArgs)
		
		' Verifier que user, mdp et dbname sont renseignés
		
		If comboBox_user.Text = "" then
		
			Messagebox.show("Il faut renseigner le user","Alerte")
			Exit sub
		
		Else If comboBox_mdp.Text = "" Then
		
			Messagebox.show("Il faut renseigner le mdp","Alerte")
			Exit sub
		
		Else If comboBox_dbname.Text = "" Then
		
			Messagebox.show("Il faut renseigner la dbname","Alerte")
			Exit sub
		
		End If
		
		' Lance la fonction de ping de la BD
		
		Call Tns_Ping()
		
	End Sub
	
	Sub Button_quitterClick(ByVal sender As Object, ByVal e As EventArgs)
		
	' Quitte l'application
	
		End
		
	End Sub
	
	Sub TextBox_sqlTextChanged(ByVal sender As Object, ByVal e As EventArgs)
		
		' Active le bouton d'execution si du texte est renseigné dans le champ de la requete
		
		If textBox_sql.Text <> "" Then
			
			button_exec.Enabled = True
			
		End If
		
	End Sub
	
	Sub Button_selectClick(ByVal sender As Object, ByVal e As EventArgs)
		
		' Ouvre la fenetre de selection d'un fichier de requete
		
		openFileDialog_select.ShowDialog()
		
	End Sub
		
	Sub OpenFileDialog_selectFileOk(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs)
		
		' Renseigne le textbox avec le chemin du fichier selectionne pour information
		
		textBox_select.Text = openFileDialog_select.FileName
		
		' Lance la fonction pour afficher le fichier sql dans la fenetre
		
		Call FicRequete(textBox_select.Text)
		
	
	End Sub
	
	Sub FicRequete(Path_File As String)
		
		' Declaration des Variables
		
		Dim fs As Object
		Dim Read As Object
		Dim StreamAll As String = Nothing
		
		fs = CreateObject("Scripting.FileSystemObject")
		
		' Ouverture du fichier selectionne
		
		Read = fs.opentextfile(Path_File, 1, 0)
		
		' Renseigne le contenu du fichier dans une variable
		
		Do While Read.AtEndOfStream <> True

			StreamAll = Read.readall
			
		Loop
		
		' Ferme la lecture du fichier
		
		Read.close
		
		' Affiche le contenu du fichier de requete dans la fenetre
		
		textBox_sql.Text = StreamAll
				
		If StreamAll <> "" Then
			
			' active le bouton d'execution si le fichier n'est pas vide
			
			button_exec.Enabled = true
			
		Else
		
			textBox_sql.Text = "Le Fichier de requete est vide"
			Exit sub
			
		End If
		
	End Sub
	
	Sub Tns_Ping()
		
		' Declaration des variables
	
		Dim objShell As Object
		Dim objScriptExec as Object
		Dim strSqlResults As Object
		
		dbname = comboBox_dbname.Text
		
		
		objShell = CreateObject("WScript.Shell")
		objScriptExec = objShell.Exec("tnsping " & dbname)
		strSqlResults = LCase(objScriptExec.StdOut.ReadAll)
		
		If InStr(strSqlResults, "ok") Then
			
			Call Verif_Fic_File()
			
		Else
		
			textBox_result.Text = dbname & " : ne repond pas, verifier la syntaxe !"
			Exit Sub
			
		End If
		
	End Sub
	
	Sub Verif_Fic_File()
		
		' Fonction permettant de savoir si un fichier a ete selectionne ou si c'est un requete tapée
		
		If textBox_select.Text <> "" Then
			
			Call Verif_Exit(textBox_select.Text)
			Exit Sub
			
		Else If textBox_sql.Text <> "" Then 
		
			Call Exec_Requete()
			Exit Sub
			
		Else

			textBox_result.Text = "Il faut selectionner un fichier de requete ou taper sa requete"
			Exit Sub
			
		End If
		
	End Sub
	
	Sub Verif_Exit(Path_File As String)
	
		' Declaration des variables

		Dim fs As Object
		Dim Read As Object
		Dim StreamLine As String = Nothing
		Dim PosExit As String
		Dim Res1 As String = Nothing
		Dim Res2 As String = Nothing
		
		fs = CreateObject("Scripting.FileSystemObject")
		
		' Ouvre le fichier de requete
		
		Read = fs.opentextfile(Path_File, 1, 0)
		
		Do While Read.AtEndOfStream <> True

			StreamLine = Read.readLine

			' cherche le mot exit dans le texte 

			PosExit = InStr(1, StreamLine, "exit")
			
			If (posExit = 1) Then
    		
    			Res1 = "true"
    			
    		Else
    		
    			Res2 = "false"
        
    		End If
			
		Loop
		
		' Fermeture du fichier
		
		Read.close
		
		' Si le mot exit n'est pas trouve alors execution 
		
		If Res1 = "true" Then 
			
			Call Exec_Fic(Path_File)
			
		Else
		
			' Si le mot exit est trouve alors appel de la fonction pour l'ajouter 
			
			Call Add_Exit(Path_File)
		
		End If
	
	End Sub
	
	Sub Add_Exit(Path_File As String)
		
		' Declaration des variables
			
		Dim ObjetFichierW As StreamWriter
		Dim ex As String
		
		ex = vbCrLf & "exit;"
		
		' ouvre le fichier de requete
	
		ObjetFichierW = New StreamWriter(Path_File, True) 
		
		' Ajoute a la fin du fichier  : exit;
		
		ObjetFichierW.WriteLine(ex)
		ObjetFichierW.Flush()
		
		' Ferme le fichier de requete
		
		ObjetFichierW.Close()
		
		' Execution du fichier de requete
		
		Call Exec_Fic(Path_File)
		
	End Sub
	
	Sub Exec_Fic(Path_File As String)
		
		' Permet de ne pas planter si une erreur est rencontrée
		
		On Error Resume Next
		
		' Declaration des variables
		
		Dim objShell As Object
		Dim objScriptExec As Object
		Dim strSqlResults As Object
		Dim cmd As String
		Dim Er As Object
		
		' Renseignement des variables
		
		user = comboBox_user.Text
		mdp = comboBox_mdp.Text
		dbname = comboBox_dbname.Text
		
		cmd = "sqlplus -s" & " " & user & "/" & mdp & "@" & dbname
		
		objShell = CreateObject("WScript.Shell")
		objScriptExec = objShell.Exec(cmd & " " & "@" & Path_File)
			
		' Previent si erreur
			
		If Err.number <> 0 Then
			Messagebox.Show("Ereur", "Ereur")
			exit sub
		End If
			
		strSqlResults = LCase(objScriptExec.StdOut.ReadLine)
		Er = LCase(objScriptExec.stdEr.ReadALL)
		
		' Verifie si le mot error est present
		
		If InStr(strSqlResults, "error") Then
			
			objScriptExec = objShell.Exec("taskkill /F /IM sqlplus.exe")
			textBox_result.Text = "Le User ou le MDP n'est pas correct"
			Exit Sub
			
		End If
		
		strSqlResults = LCase(objScriptExec.StdOut.ReadAll)
		
		Er = LCase(objScriptExec.stdEr.ReadALL)
		
		' Renseigne le textbox_result avec le resultat de la commande
		
		textBox_result.Text = strSqlResults
		
		' Si le code retour n'est pas vide alors ou active le bouton de telechargement
		
		If strSqlResults <> "" Or Er <> "" Then
			
			button_result.Enabled = true
			
		End If
		
		' Activation du bouton de reinitialisation
		
		button_init.Enabled = true
		
	End Sub
	
	Sub Exec_Requete()
		
		' Permet de ne pas planter si une erreur est rencontrée
		
		On Error Resume Next
		
		' Declaration des variables
		
		Dim objShell As Object
		Dim strSqlResults As Object
		Dim objScriptExec as Object
		Dim ObjetFichierW As StreamWriter
		Dim Requete As String
		Dim cmd As String
		Dim Er As Object
		Dim fic As String
		Dim fso As Object
		
		' fichier temporaire pour l'executer la requete
		
		fic = "c:\temp.sql"
		
		ObjetFichierW = New StreamWriter(fic, False) 
		
		'True pour écrire à la fin et False pour tout effacer et réécrire au début
		
		Requete = textBox_sql.Text & vbCrLf & "commit ;" & vbCrLf & "exit ;"
		
		ObjetFichierW.WriteLine(Requete)
		ObjetFichierW.Flush()
		ObjetFichierW.Close()
		
		user = comboBox_user.Text
		mdp = comboBox_mdp.Text
		dbname = comboBox_dbname.Text
		
		cmd = "sqlplus -s" & " " & user & "/" & mdp & "@" & dbname
		
		objShell = CreateObject("WScript.Shell")
		objScriptExec = objShell.Exec(cmd & " " & "@" & fic)
			
		If Err.number <> 0 Then
			Messagebox.Show("Ereur", "Ereur")
			exit sub
		End If
			
		strSqlResults = LCase(objScriptExec.StdOut.ReadLine)
		Er = LCase(objScriptExec.stdEr.ReadALL)
		
		If InStr(strSqlResults, "error") Then
			
			objScriptExec = objShell.Exec("taskkill /F /IM sqlplus.exe")
			textBox_result.Text = "Le User ou le MDP n'est pas correct"
			Exit Sub
			
		End If
		
		
		strSqlResults = LCase(objScriptExec.StdOut.ReadAll)
		
		Er = LCase(objScriptExec.stderr.ReadALL)
		
		' Renseigne le textbox_result avec le resultat de la commande
		
		textBox_result.Text = strSqlResults
		
		' Si le code retour n'est pas vide alors ou active le bouton de telechargement
		
		If strSqlResults <> "" Or Er <> "" Then
			
			button_result.Enabled = true
			
		End If
		
		' Activation du bouton de reinitialisation
		
		button_init.Enabled = True
		
		' Supression du fichier Temp
		
		fso = CreateObject("Scripting.FileSystemObject")
		
		If fso.FileExists(fic) Then
			
			fso.DeleteFile(fic)
			
		End If
		
	End Sub

	Sub Button_resultClick(ByVal sender As Object, ByVal e As EventArgs)
		
		' Declaration des variables
		
		Dim path_log As String
		Dim fic_logs As String
		Dim hr_logs As String
		Dim da_logs As String
		Dim StreamLog As String
		
		' Date et Heure pour le nom du fichier de Logs
		
		hr_logs = System.DateTime.Now.Hour & System.DateTime.Now.Minute & System.DateTime.Now.Second
		da_logs = System.DateTime.Now.Day & System.DateTime.Now.Month & System.DateTime.Now.Year
		
		' Nom du fichier
		
		fic_logs = hr_logs & "_" & da_logs & "_Logs_SQL.txt"
		
		' Variable du contenu du fichier de log est egal au texte afficher dans le textbox_result
		
		StreamLog = textBox_result.Text
		
		' Si il n'y a pas de message dans la textbox alors pas de telechargement possible
		
		If StreamLog = "" Then

			Exit sub
						
		End If
		
		' Ouverture de la fenetre pour enregistrer le fichier de log
		
		folderBrowserDialog_dl.ShowDialog()
		
		' Renseignement de la variable du path du fichier de log avec celui selectionne
		
		path_log = folderBrowserDialog_dl.SelectedPath
		
		' Creation du fichier de log
		
		Dim ObjetFichierW As StreamWriter = New StreamWriter(path_log & "\" & fic_logs, False) 
		
		' True pour écrire à la fin et False pour tout effacer et réécrire au début.
		
		' ecriture dans le fichier de log
		
		ObjetFichierW.WriteLine(StreamLog)
		ObjetFichierW.Flush()
		
		' fermeture du fichier de log
		
		ObjetFichierW.Close()
		
	End Sub
		
	Sub Button_initClick(ByVal sender As Object, ByVal e As EventArgs)
		
		' Reinitialisation les données au cliquer sur le bouton reinitialisation
		
		textBox_result.Text = ""
		textBox_select.Text = ""
		textBox_sql.Text = ""
		button_exec.Enabled = False
		button_result.Enabled = False
		button_init.Enabled = False
		
	End Sub
		
	Sub MainFormLoad(ByVal sender As Object, ByVal e As EventArgs)
		
		' Permet de ne pas planter si une erreur est rencontrée
		
		On Error Resume Next
		
		' declaration des variables
		
		Dim fsgen As Object
		
		fsgen = CreateObject("Scripting.FileSystemObject")

		' Verifie si le fichier de propriete est present et que le parametre active est a true
		
		If fsgen.FileExists("./" & appconf) And ConfigurationManager.AppSettings("Active") = "true" Then
						
			' Appel des fonctions pour lire le fichier de parametre et ajoute user, mdp et dbname
			
			Call Add_User()
			Call Add_Mdp()
			Call Add_Dbname()

		End If 	
		
	End Sub
	
	Sub Add_Dbname()
		
		' Permet de ne pas planter si une erreur est rencontrée
		
		On Error Resume Next
		
		' Declaration des variables
		
		Dim i As Integer
		Dim x As Integer = 1
		
		i = ConfigurationManager.AppSettings("dbnum")
		
		if i < 1 Or i = Nothing Then
		
			Messagebox.Show("Ereur sur le champ dbnum (ne peut etre inferieur a 1) dans le fichier de configuration" & vbCrLf & vbCrLf & _
			"<< Corriger la syntaxe ou desactiver le fichier de configuration >>", "Ereur")
				
			Exit sub
		
		End If 
		
		Do While x <> i + 1
			
			comboBox_dbname.Items.Add(ConfigurationManager.AppSettings("dbname" & x))
			
			x = x + 1 
			
			If Err.number <> 0 Then
				
				Messagebox.Show("Ereur sur un des champs DBName dans le fichier de configuration" & vbCrLf & vbCrLf & _
				"<< Corriger la syntaxe ou desactiver le fichier de configuration >>", "Ereur")
				
				Exit Sub
				
			End If
			
		Loop
		
		' Selectionne la 1ere dbname ajoute
		
		comboBox_dbname.SelectedIndex = 0
		
	End Sub
	
	Sub Add_User()
		
		' Permet de ne pas planter si une erreur est rencontrée
		
		On Error Resume Next
		
		' Declaration des variables
		
		Dim i As Integer
		Dim x As Integer = 1
		
		i = ConfigurationManager.AppSettings("usernum")
		
		if i < 1 Or i = Nothing Then
		
			Messagebox.Show("Ereur sur le champ usernum (ne peut etre inferieur a 1) dans le fichier de configuration" & vbCrLf & vbCrLf & _
			"<< Corriger la syntaxe ou desactiver le fichier de configuration >>", "Ereur")
				
			Exit sub
		
		End If 
		
		Do While x <> i + 1
			
			comboBox_user.Items.Add(ConfigurationManager.AppSettings("user" & x))
			
			x = x + 1 
			
			If Err.number <> 0 Then
				
				Messagebox.Show("Ereur sur un des champs User dans le fichier de configuration" & vbCrLf & vbCrLf & _
				"<< Corriger la syntaxe ou desactiver le fichier de configuration >>", "Ereur")
				
				Exit Sub
				
			End If
			
		Loop
		
		' Selectionne le 1er user ajoute
		
		comboBox_user.SelectedIndex = 0
		
	End Sub
	
	Sub Add_Mdp()
		
		' Permet de ne pas planter si une erreur est rencontrée
		
		On Error Resume Next
		
		' Declaration des variables
		
		Dim i As Integer
		Dim x As Integer = 1
		
		i = ConfigurationManager.AppSettings("mdpnum")
		
		if i < 1 Or i = Nothing Then
		
			Messagebox.Show("Ereur sur le champ mdpnum (ne peut etre inferieur a 1) dans le fichier de configuration" & vbCrLf & vbCrLf & _
			"<< Corriger la syntaxe ou desactiver le fichier de configuration >>", "Ereur")
				
			Exit sub
		
		End If 
		
		Do While x <> i + 1
			
			comboBox_mdp.Items.Add(ConfigurationManager.AppSettings("mdp" & x))
			
			x = x + 1 
			
			If Err.number <> 0 Then
				
				Messagebox.Show("Ereur sur un des champs Mdp dans le fichier de configuration" & vbCrLf & vbCrLf & _
				"<< Corriger la syntaxe ou desactiver le fichier de configuration >>", "Ereur")
				
				Exit Sub
				
			End If
			
		Loop
		
		' Selectionne le 1er mdp ajoute
		
		comboBox_mdp.SelectedIndex = 0
		
	End Sub
	
	Sub QuitterToolStripMenuItemClick(ByVal sender As Object, ByVal e As EventArgs)
			
	' Quitte l'application
	
		End
		
	End Sub
	
	Sub AProposToolStripMenuItemClick(ByVal sender As Object, ByVal e As EventArgs)
		
		' Affiche la fenetre a propos de ...
		
		Form1.show
		
	End Sub
	
	Sub AideToolStripMenuItem1Click(ByVal sender As Object, ByVal e As EventArgs)
		
		' Affiche la fenetre de l'aide ...
		
		Form2.show
		
	End Sub
		
End Class

Voir le Zip

Conclusion :


Pour Excuter vos requetes, plus besoin de lancer toad, sqldeveloper, ..., plus besoin de taper la ligne de commande sqlplus dans cmd, putty, ou ... l'appli automatise tout ca avec une gestion des erreurs très poussé.

Pour ceux à qui cela pourrait etre utile.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.