Avatar billede Laitings Nybegynder
09. november 2002 - 16:26 Der er 35 kommentarer og
1 løsning

indsæt navn fra billeder i AccessDB

Hejsa!

Jeg har en masse billeder (rigtig mange) på min computer fordelt i diverse biblioteker(kategorier).

Er det muligt at lave et ASP dokument som løber bibliotekerne igennem og indsætter navnene på billederne i en Access database. Den må meget gerne også oprette en kategori som er navnet på det bibliotek, billederne ligger i.

Håber på hjælp! Der er simpelthen for mange billeder til at jeg kan skrive dem ind manuelt! Hjælp!!

-Mescalito
Avatar billede eagleeye Praktikant
09. november 2002 - 16:45 #1
Spændene scritp.. det kan måske give problem med script time-out hvis den skal rode en hel HD igennem.

Hvad skal den tage som kategori/folder nav hvis man finder en fil i eksvis:
c:\temp\billeder\2002\bytur\2323.jpg
Skal det så være bytur som kategori?

Hvad skal så gemmen i DB'en ? navnet på filen eller hele stien?
Avatar billede Laitings Nybegynder
09. november 2002 - 16:53 #2
Vi snakker nu kun 2700 billeder, så time-out skulle ikke være noget problem.

Jeg beskriver lige filopsætningen:

Alle bibliotekerne ligger i samme bibliotek, fx

c:\billeder\familie\434.jpg
c:\billeder\bytur\drukmås.jpg
c:\billeder\skovtur\hjorteparrersig.jpg

Det scriptet skal gøre er at løbe bibliotekne igennem, oprette en kategori for hvert underbibliotek, familie, bytur og skovtur i en tabel. I en anden tabel skal den så skrive navnene på hvert billede, med et id-nummer for hvilken kategori det er. På den måde har man jo så også stien ikke sandt?
Avatar billede eagleeye Praktikant
09. november 2002 - 16:58 #3
Ok ja så han du stien..  ok bruger lige lave noget kode.
Avatar billede Laitings Nybegynder
09. november 2002 - 17:00 #4
Før du skriver alt for meget kunne du jo evtuelt kigge på noget kode jeg fandt for et års tid siden. Det skulle gøre netop det jeg gerne vil have, jeg kan bare ikke få skidtet til at virke! Jeg er nemlig ikke ASP haj!
Avatar billede eagleeye Praktikant
09. november 2002 - 17:01 #5
ok ja.
Avatar billede Laitings Nybegynder
09. november 2002 - 17:01 #6
øjeblik, pakker det lige
Avatar billede Laitings Nybegynder
09. november 2002 - 17:06 #7
så skulle den være der: www.lytting.adsl.dk/billededatabase.zip
Avatar billede eagleeye Praktikant
09. november 2002 - 17:42 #8
Hej igen... ja jeg bruger grund koden i addFiles.asp men jeg tror det hurtigere lige at rette koden til selv..
Avatar billede psyco01 Nybegynder
09. november 2002 - 17:42 #9
Så er jeg fæærdig ;)
<%
    Sub GetFiles( path )

        strSQL = "select * from billede where id=0"
        Set Conn = Server.CreateObject("ADODB.Connection")
        Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("database.mdb")
        Set rs = Server.CreateObject("ADODB.RecordSet")
        RS.Open strSQL, Conn, 1, 3

        Set FileSystem = CreateObject("Scripting.FileSystemObject")
        Set Folder = FileSystem.GetFolder( Server.MapPath( path ) )
        Set Files = Folder.Files
        Set Folders = Folder.subfolders

        For Each File in Files
            RS.AddNew
            RS("sti") = path & "/"
            RS("pic") = File.Name
            RS.Update
        Next

        For Each Folder In Folders
            GetFiles( path & "/" & folder.name )
        Next

        Set FileSystem = Nothing
        RS.Close
        Conn.Close
        Set RS = Nothing
        Set Conn = Nothing

    End Sub

    GetFiles "Billeder"
%>

Husk at ændre database navnet.
Table: billede
Felter:
id - autonumber
sti - text
pic - text

:)
Avatar billede eagleeye Praktikant
09. november 2002 - 17:43 #10
Jeg har det kode som løber folderne i gennem og finder filerne ...
Så mangler det som skal skive til DBen..
Avatar billede psyco01 Nybegynder
09. november 2002 - 17:46 #11
Har ikke mulighed for at teste den på mit C drev så jeg håber du har forstand nok på ASP til at rette den til... Kører den fra min website host nemlig...
Avatar billede eagleeye Praktikant
09. november 2002 - 17:55 #12
han ville gerna to tabelle en med kategori og en med billeder.
tabelle kategori:
ID navnkategori

tabewllen billeder
katID navnbiilede
Avatar billede psyco01 Nybegynder
09. november 2002 - 17:57 #13
ja, det er rigtigt... Det overså jeg helt. Æv :)
Avatar billede psyco01 Nybegynder
09. november 2002 - 18:00 #14
Anyways, hvis det med tabellen er underordnet er her en version der crawler C:\Billeder eller hvilket som helst andet directory på computeren:

<%
    Sub GetFiles( path )

        strSQL = "select * from billede where id=0"
        Set Conn = Server.CreateObject("ADODB.Connection")
        Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("database.mdb")
        Set rs = Server.CreateObject("ADODB.RecordSet")
        RS.Open strSQL, Conn, 1, 3

        Set FileSystem = CreateObject("Scripting.FileSystemObject")
        Set Folder = FileSystem.GetFolder( path )
        Set Files = Folder.Files
        Set Folders = Folder.subfolders

        For Each File in Files
            RS.AddNew
            RS("sti") = path & "\"
            RS("pic") = File.Name
            RS.Update
        Next

        For Each Folder In Folders
            Response.Write Server.MapPath(folder.Name) & "<br>"
        Next

        Set FileSystem = Nothing
        RS.Close
        Conn.Close
        Set RS = Nothing
        Set Conn = Nothing

    End Sub

    GetFiles "C:\Billeder" 'Directory der skal "crawles"
%>
Avatar billede eagleeye Praktikant
09. november 2002 - 18:01 #15
Jeg har dette... Filen skal ligge i den folder hvor billede folder også er
c:\billeder

Der er to tabeller:  kategori  og  billeder

tabellen: billeder  har disse kolonner:
id : autonummer
katID : tal
billedenavn : tekst


tabellen: kategori  har disse kolonner:
id : autonummer
kategorinavn : tekst




<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
<%
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& server.mappath("billeder.mdb")

Set fso = CreateObject("Scripting.FileSystemObject")

function lookinfolder (foldernavn)
  Set objFolder = fso.getFolder( foldernavn )
  'Response.Write objFolder.path & "<br>"
 
  call saveFiles (objFolder.Path)
 
  For each Folder in objFolder.SubFolders
    call lookinfolder (Folder.path)
  next
 
  Set objFolder = Nothing
end function

function saveFiles (foldernavn)
  Set objFolder = fso.getFolder( foldernavn )
  Set objFiles = objFolder.Files
  catID = ""
  for each file in objFiles
    if InStr(1,"gif,jpg,jpeg,bmp", LCase(fso.GetExtensionName(file.name))) > 0 then
      if catID = "" then catID = findCatID(objFolder.name)
      SQL = "INSERT INTO billeder (katID, billedenavn) VALUES (" & catID & ", '" & file.name & "')"
      Conn.Execute (SQL)
      'Response.Write " : Filnavn : " & file.name & " ... katID = " & catID     
    end if
  next
  Set objFolder = Nothing
  Set objFiles = Nothing
end function

function findCatID (foldernavn)
Set rs = Server.CreateObject("ADODB.RecordSet")
SQL = "SELECT ID, kategorinavn FROM kategori WHERE kategorinavn = '" & foldernavn & "'"
rs.Open SQL, Conn, 1, 3
if rs.EOF then
  rs.AddNew
  rs("kategorinavn") = foldernavn
  rs.Update
  findCatID = rs("id")
else
  findCatID = rs("id")
end if
rs.Close
end function

sti = "."
strPhysicalPath = Server.MapPath(sti)

lookinfolder (strPhysicalPath)

Response.Write "Sådan .... fædig"

Conn.Close
Set Conn = Nothing
Set fso = Nothing
%>
</BODY>
</HTML>
Avatar billede psyco01 Nybegynder
09. november 2002 - 18:04 #16
hehe, tror jeg skal til at tage mig tid til at se indlæggende ordenligt igennem :)
Gratz eagleeye... Selvom det roder lidt ;)
Avatar billede Laitings Nybegynder
09. november 2002 - 18:05 #17
Jeg tester og tester!
Avatar billede psyco01 Nybegynder
09. november 2002 - 18:17 #18
UARGH!
Fejl i version 2 af mit script:
        For Each Folder In Folders
            Response.Write Server.MapPath(folder.Name) & "<br>"
        Next
skal skiftes ud med:
        For Each Folder In Folders
            GetFiles( path & "/" & folder.name )
        Next

:/
Avatar billede eagleeye Praktikant
09. november 2002 - 18:18 #19
du kan ligge asp hvor som helst det skal bare rette disse 2 linier:

sti = "."
strPhysicalPath = Server.MapPath(sti)


Til:

sti = "."
strPhysicalPath = "c:\billeder"
Avatar billede psyco01 Nybegynder
09. november 2002 - 18:19 #20
og kan det blive værre?
Glem hvad der står ovenover og skriv:
        For Each Folder In Folders
            GetFiles( path & "\" & folder.name )
        Next
(det ændrer skråstregen til en backslash)
Avatar billede Laitings Nybegynder
09. november 2002 - 18:24 #21
Hmmm...jeg har bakset med dit script eagleeye, men når jeg loader siden, står den bare og tygger på det uden at der sker noget(heller ingen fejlmeddelelse)! Jeg har prøvet at flytte billederne så der kun er 10, bare så det ikke var fordi der var for mange.

Min connection kode er:

Set Conn = Server.CreateObject("ADODB.Connection")
myConn.Open "DSN=billedeDSN"

Jeg har så oprettet en system DSN der hedder "billedeDSN"

Hvad går der galt og hvorfor kommer der ingen fejlmeddelelse?
Avatar billede Laitings Nybegynder
09. november 2002 - 18:27 #22
Kan det være noget opsætning i IIS, eller Access?
Avatar billede Laitings Nybegynder
09. november 2002 - 18:28 #23
Jeg har rettet myconn til Conn! :-)
Avatar billede eagleeye Praktikant
09. november 2002 - 18:36 #24
Hvor ligger ASP filen`i forhold til billederne??
Avatar billede Laitings Nybegynder
09. november 2002 - 18:39 #25
i billedebiblioteket sammen med underbibliotekerne.

c:\billeder\test.asp
c:\billeder\skovtur\parring.jpg
c:\billeder\bytur\druk.jpg

Kan databasen være låst for at skrive i?
Avatar billede psyco01 Nybegynder
09. november 2002 - 18:41 #26
Må man spørge hvad grunden er til du vil have det i 2 forskellige tables?
Avatar billede eagleeye Praktikant
09. november 2002 - 18:41 #27
Det kan være den er skrive bestyttet eller der ikke er skriverettigheder til den folder database filen ligger i, men så ville jeg forvendte en fejl...

Det kunne måske være den loop'en forkert gennem folderne og ikke kommer vidre. Det forstår jeg så ikke for jeg køre det på en IIS.
Avatar billede eagleeye Praktikant
09. november 2002 - 18:43 #28
Prøv at rette disse linier:

function lookinfolder (foldernavn)
  Set objFolder = fso.getFolder( foldernavn )
  'Response.Write objFolder.path & "<br>"
 
 

Til:

function lookinfolder (foldernavn)
  Set objFolder = fso.getFolder( foldernavn )
  Response.Write objFolder.path & "<br>"
  Response.Flush


Så skulle den vise hvilken folder den er nået til hele tiden...
Avatar billede Laitings Nybegynder
09. november 2002 - 18:49 #29
Den skriver ingenting! Den står bare helt stille og tygger!

I biblioteket hvor databasen billeder.mdb ligger, dukker der et ikon op som hedder billeder.ldb Microsoft Access Record-Locking Information. Ikonet forestiller en Access tabel med en lille lås oppe i hjørnet!
Man kan ikke læse den, heller ikke fra Access, måske er det der fejlen ligger?
Avatar billede eagleeye Praktikant
09. november 2002 - 18:51 #30
Det er en temp fil som kommer når man åbner access filen, den kan ikke læses.
Avatar billede psyco01 Nybegynder
09. november 2002 - 18:52 #31
Du kan prøve min version og se om der sker det samme.
Avatar billede Laitings Nybegynder
09. november 2002 - 18:54 #32
Jeg skal på arbejde om et kvarter, så jeg kan ikke nå at prøve! Jeg må prøve videre imorgen! FUCKING ASP! :-) Tak for hjælpen indtil videre!
Avatar billede eagleeye Praktikant
09. november 2002 - 18:55 #33
psyco01 >> Grunden til at man dele det op i flere tabeller er for at nedsætte redundant data. Hvis man har en tabel:
billedenavn  kategorinavn
bla.jpg      hyttetur
bla1.jpg    hyttetur
bla3.jpg    hyttetur

Så har man hyttetur X antal gange + de andre kategorinavne man måtte havde.
for at spare plads og tid, så laver men en tabel med kategorinavne og laver en relation mellem dem.

tabel: kategori
ID  kategorinavn
1  hyttetur

tabel billeder
billedenavn  kategoriID
bla.jpg      1
bla1.jpg    1
bla3.jpg    1


Så har du kun navnet på kategorien et sted. Det gør det også lettere at liste kategorier på en side samt senere at opdater navnet..
Avatar billede Laitings Nybegynder
09. november 2002 - 18:56 #34
Lige præcis! :-)
Avatar billede psyco01 Nybegynder
09. november 2002 - 19:56 #35
Jeg har lavet en 'to table' version også.
Du skal lave en database med følgende tables:

Table: billeder
id: autonumber
kategoriID: number
pic: text

Table: kategorier
id: number  <-- NOTE: ikke autonumber!
kategori: text

Scriptet kan placeres hvor som helst på din server.
Du kan hente den database jeg brugte her: http://www.kredsen.dk/new/dk/database.mdb
Den skal placeres sammen med scriptet.

<%
    intKategori = 0
    Sub GetFiles( path )
        intKategori = intKategori + 1
            Set FileSystem = CreateObject("Scripting.FileSystemObject")
            Set Folder = FileSystem.GetFolder( path )
            Set Files = Folder.Files
            Set Folders = Folder.subfolders

        For Each File in Files
            AddFile File.Name, intKategori
            Response.Write path & "\" & File.Name & "<br>"
            Response.Flush
        Next

        For Each Folder In Folders
            GetFiles path & "\" & folder.name
            AddKategori folder.name
        Next
            Set FileSystem = Nothing
    End Sub

    Sub AddFile( fileName, intKategori )
        strSQL = "select * from billeder where id=0"
        Set Conn = Server.CreateObject("ADODB.Connection")
        Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("database.mdb")
        Set rs = Server.CreateObject("ADODB.RecordSet")
        RS.Open strSQL, Conn, 1, 3

        If RS.BOF or RS.EOF Then
            RS.AddNew
            RS("kategoriID") = intKategori
            RS("pic") = fileName
            RS.Update
        End If

        RS.Close
        Conn.Close
        Set RS = Nothing
        Set Conn = Nothing
    End Sub

    Sub AddKategori( name )
        strSQL = "select * from kategorier where id=0"
        Set Conn = Server.CreateObject("ADODB.Connection")
        Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("database.mdb")
        Set rs = Server.CreateObject("ADODB.RecordSet")
        RS.Open strSQL, Conn, 1, 3

        If RS.BOF or RS.EOF Then
            RS.AddNew
            RS("id") = intKategori
            RS("kategori") = name
            RS.Update
        End If

        Set FileSystem = Nothing
        RS.Close
        Conn.Close
        Set RS = Nothing
        Set Conn = Nothing
    End Sub


GetFiles "C:\Billeder" 'Denne kan ændres som du har lyst
%>

Håber det lykkes :)
Avatar billede Laitings Nybegynder
13. november 2002 - 15:48 #36
Nu funker det sgu' og ikke bare godt, men perfekt! 1000 tak skal du ha Eagleeye! Cool script! :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester