Scanner un dossier plein d'image et inserer le nom de l'image dans une bd access

Description

En fait g voulu créer ce code parce-que je voulais faire un diaporama d'image et pouvoir ajouter des commentaires sur l'image, du text, une date... En plus de ca vous pouvez ajouter un cathégorie pour l'image.

Source / Exemple :


<%@ Page Language="VB" Debug="True" %>
<%@ import Namespace="System" %>
<%@ import Namespace="System.IO" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.OleDb" %>

<script runat="server">

	Dim URLPhoto As String
	Dim Cat As String

	Dim connBD As OleDbConnection
	Dim commSQL As OleDbCommand
	Dim intNBEnregistrementsMod As Integer
	Dim drLecture As OleDbDataReader
	
	Dim i As Integer
	Dim Cpt As Integer
	Dim Tableau() As String
	Dim Flag As Integer = 1
	Dim NBPhoto As Integer
	
	Sub Page_Load(sender As Object, e As EventArgs)
	
		Cat = Request.QueryString("cat")
		reDim Tableau(1000)
		
		Try
			connBd = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("diapo.mdb"))
			connBD.Open()
			commSQL = new OleDbCommand("SELECT * FROM tblPhoto ORDER BY URL_Photo", connBD)
			drLecture = commSQL.ExecuteReader()
		Catch ex As Exception
			Response.Write(ex.toString)
			connBD.Close()
			Response.End()
		End Try
		
		While drLecture.Read()
			Tableau(Cpt) = drLecture("URL_Photo")
			Cpt = Cpt + 1
		End While
		i = 0
		connBD.Close()
	
        Try
			connBD = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("diapo.mdb")) ' Chemin de la BD
			connBD.Open() ' Nouvelle connexion sur la BD
						
            Dim dirs As String() = Directory.GetFiles("c:\inetpub\wwwroot\dario_vujica_3ein\e-diaporama\photos") ' Dossier des photos
		   	Dim dir As String ' Variable du chemein du fichier
						
            For Each dir In dirs			
                URLPhoto = Mid(dir, 57, Len(dir)) ' Sépare le nom de la photo du chemin complet de la photo
				For i=0 to Cpt
					If URLPhoto = Tableau(i)
						Flag = 0
					End If
				Next				
				If URLPhoto <> "Thumbs.db" ' Test si il y a un fichier system dans le répertoire
					If Flag = 1
						commSQL = new OleDbCommand("INSERT INTO tblPhoto (URL_Photo, num_tblCat, Date_Photo) VALUES('" & URLPhoto & "','" & Cat & "','" & now() & "')", connBD) ' REQ SQL qui ajoute le nom de la photo dans la table
						intNBEnregistrementsMod = commSQL.ExecuteNonQuery() ' Execution la REQ en dernière position
						NBPhoto = NBPhoto + 1
					End If
				End If
				Flag = 1			
            Next

			connBD.Close() ' Fermeture de la connexion			
      	Catch ex As Exception		
			Response.Write(ex.toString) ' Retourne l'erreur si erreur
			connBD.Close() ' Fermeture de la connexion
			Response.End()       
		End Try
		
    End Sub
</script>

<!-- J'en ai eu marre d'attendre les mail alors voilà la source fini avec le traitement des dimension !! -->

<!-- 
	Cette page récupère la cahtégorie voulut
	Se connect à une BD et ajoute les valeurs de la table de celle-ci dans un tableau
	Scan un dossier remplit de photos
	Vérifie si la photo scané est déjà présente dans la table
	Si elle n'y est pas alors elle ajoute la photo dans la table
-->
<%@ Page Language="VB" Debug="True" %>
<%@ import Namespace="System" %>
<%@ import Namespace="System.IO" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.OleDb" %>
<%@ Import Namespace="System.Drawing.Drawing2D" %>
<%@ Import Namespace="System.Drawing" %>

<script runat="server">

	Dim URLPhoto As String
	Dim URLDossier As String
	Dim Cat As String

	Dim connBD As OleDbConnection
	Dim commSQL As OleDbCommand
	Dim intNBEnregistrementsMod As Integer
	Dim drLecture As OleDbDataReader
	
	Dim i As Integer
	Dim Cpt As Integer
	Dim Tableau() As String
	Dim Flag As Integer = 1
	Dim NBPhoto As Integer
	
	Dim NewImage As System.Drawing.Image
	Dim ImageHaut As Integer
	Dim ImageLarg As Integer
	
	Sub Page_Load(sender As Object, e As EventArgs)
	
		Cat = Request.QueryString("cat") ' Récupère la cathégorie
		reDim Tableau(1000000) ' Redimensionne le tableau é 1000
		
		' Connexion à la base de donnée
		Try
			connBd = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("diapo.mdb"))
			connBD.Open()
			commSQL = new OleDbCommand("SELECT * FROM tblPhoto ORDER BY URL_Photo", connBD)
			drLecture = commSQL.ExecuteReader()
		Catch ex As Exception
			Response.Write(ex.toString)
			connBD.Close()
			Response.End()
		End Try
		
		' Boucle qui ajoute les photos déjé présente dans la table dans un tableau
		While drLecture.Read()
			Tableau(Cpt) = drLecture("URL_Photo")
			Cpt = Cpt + 1
		End While
		i = 0 ' Remet i à 0 pour prochaine utilisateion
		connBD.Close()
	
        ' Connexion à la base de donnée
		Try
			connBD = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("diapo.mdb")) ' Chemin de la BD
			connBD.Open() ' Nouvelle connexion sur la BD
						
            Dim dirs As String() = Directory.GetFiles("c:\inetpub\wwwroot\dario_vujica_3ein\e-diaporama\photos") ' Dossier des photos
		   	Dim dir As String ' Variable du chemein du fichier
						
            For Each dir In dirs
                URLPhoto = Replace(Mid(dir, 57, Len(dir)),"'","''") ' Sépare le nom de la photo du chemin complet de la photo
				For i=0 to Cpt ' Boucle de 0 au nombre de photos dans le tableau
					If URLPhoto = Tableau(i) ' Test si la photo récupéré dans le dossier et dj présente
						Flag = 0 ' Si oui on mais le flag à 0
					End If
				Next				
				If URLPhoto <> "Thumbs.db" ' Test si il y a un fichier system dans le répertoire
					If Flag = 1 ' Test si le flag est à 1
					
						NewImage  = system.Drawing.Image.FromFile(dir) ' Défini la varialble NewImage avec le chamin de l'image
						
						ImageHaut = NewImage.Height ' Récupère la hauteur de l'image
						ImageLarg = NewImage.Width ' Récupère la largeur de l'image
						
						If ImageHaut > 480 OR ImageLarg > 640 ' Test si l'image est rtop grande par rapport
							ImageHaut = ImageHaut / 2 ' Si oui on divise les tailles par 2
							ImageLarg = ImageLarg / 2
							If ImageHaut > 480 OR ImageLarg > 640
								ImageHaut = ImageHaut / 2 ' Si oui on divise les tailles par 2
								ImageLarg = ImageLarg / 2
							End If
						End If

						commSQL = new OleDbCommand("INSERT INTO tblPhoto (URL_Photo, num_tblCat, Date_Photo, Larg_Photo, Haut_Photo) VALUES('" & URLPhoto & "','" & Cat & "','" & now() & "','" & ImageLarg & "','" & ImageHaut & "')", connBD) ' REQ SQL qui ajoute le nom de la photo dans la table
						intNBEnregistrementsMod = commSQL.ExecuteNonQuery() ' Execution la REQ en dernière position
						NBPhoto = NBPhoto + 1 ' On incrémente le nombre de photos
					
					End If
				End If
				Flag = 1 ' On remet le Flag à 1 pour une prochaine utilisation			
            Next
			Response.Redirect("admin.aspx" & "?etat=ajout" & "&nbimg=" & NBPhoto) ' Redirection avec l'etat ajout et le NB de photos ajoutées
			connBD.Close() ' Fermeture de la connexion			
      	Catch ex As Exception		
			Response.Write(ex.toString) ' Retourne l'erreur si erreur
			connBD.Close() ' Fermeture de la connexion
			Response.End()       
		End Try
		
    End Sub
</script>

Conclusion :


Tout d'abord le code récupère le nom de la cathégorie
Ensuite il redimensionne le tableau à 1000 max de photos

On déclare le type de connexion et de BD
on ouvre la connexion
On execute une REG SQL qui récupère les valeur de la base de données access

Ensuite dans la boucle While on lit les donnée récupéré puis on les stock dans un tableau

Ensuite on se reconect sur la BD

------------------
On scan le dossier, on récupère juste le nom du fichier grave à la fonction Mid
Ensuite on test si le nom existe déjà dans la BD pour tous les valeur
Si oui on met le flag à 0

On test si le nom vaut Thumbs.db ( c'est un fichiers system ki viens se mettre auto si on fait pas ce test )
Ensuite si le flag est à 1 ca veut dire que l'image et pas encore dans la BD donc on la met

Ensuite on remet le flag à 1 très important parce-que sinon ca va plus ajouter d'image

Et voilà c tout con

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.