Pagina 3 di 4 primaprima 1 2 3 4 ultimoultimo
Visualizzazione dei risultati da 21 a 30 su 33

Discussione: access e immagini

  1. #21
    Utente di HTML.it L'avatar di Vinniec
    Registrato dal
    Apr 2002
    Messaggi
    195
    [supersaibal]Originariamente inviato da xamira
    Mi spieghi come mai non funge?

    Option Compare Database
    Option Explicit
    Dim pathbase As String

    Private Sub Form_AfterUpdate()
    On Error Resume Next
    Me.Immagine.Picture = Me.path
    End Sub

    Private Sub Form_Current()
    On Error Resume Next
    Me.Immagine.Picture = Me.path
    End Sub

    Private Sub Form_Load()
    pathbase = CurDir
    End Sub

    [/supersaibal]
    semplicemente perchè Me.path si riferisce ad una variabile globale (come pathbase) che però non hai dichiarato. Almeno credo.. cmq sostituisci Me.path con Me.pathbase altrimenti non utilizzi in nessun modo il codice che ti ho dato...
    Sono curioso: Me.Immagine.Picture non dovrebbe essere scritto così:
    Me.Immagine.Picture = LoadPicture(pathbase & "\" & nomeimmagine)
    ?
    Tu prova a cambiare una cosa alla volta, se vedi che le immagini non vengono caricate anche se il codice gira senza errori di runtime allora cambia quanto sopra aggiungendo quindi LoadPicture.....
    __________________
    non darmi consigli se non te li chiedo!
    .: DUCATI FOR LIFE :.
    *Vinniec*
    __________________

  2. #22
    Utente di HTML.it L'avatar di Vinniec
    Registrato dal
    Apr 2002
    Messaggi
    195
    xamira ma path è un campo della maschera? Se si suppongo che visualizzi il percorso del file immagine con il suo nome.. pertanto dovrai scrivere Me.path=pathbase per aggiornare il campo path e in Picture potrai lasciare Picture=Me.path
    ma solo in questo caso.
    Cmq non ho capito di quale contatore parli.... non so a che ti potrebbe servire.
    __________________
    non darmi consigli se non te li chiedo!
    .: DUCATI FOR LIFE :.
    *Vinniec*
    __________________

  3. #23
    Utente di HTML.it L'avatar di Vinniec
    Registrato dal
    Apr 2002
    Messaggi
    195
    il pulsante di cui parli tu è una piccola grande impresa per chi non si sa muovere in VB.
    Il tutto funziona così:
    Il pulsante deve avviare una procedura che ha al suo interno diverse funzioni.. Focalizziamo i punti.
    1) Dovresti richiamare la finestra "Apri file" classica di win (e questo codice ce l'hai già)
    2)prenderne il risultato e, in caso di un risultato non nullo, avviare la funzione di scrittura sulla tabella
    3)copiare quindi (magari ti interessa solo copiare la locazione del file e non il file intero, dipende da te) il file nella cartella immagini del db
    4)scriverne il percorso sulla tabella

    Per fare tutto ciò ti servirebbe un minimo di dimestichezza nella connessione ad un db tramite l'oggetto ActivexDataObject e quindi nell'utilizzo dei Recordset...
    Spiegartelo significherebbe bloccarmi al pc per un ora ed in questo momento non posso. Cmq ti do una mano:
    Supponendo che la maschera si basi sulla tabella che ha come campo "path", cioè il percorso dell'immagine, devi creare una funzione privata che riceva come dato la path che hai tirato fuori tramite un'altra funzione che ti spiegherò la prox volta.

    Private Function writeToTable (ByRef pathToWrite As String)
    'se pathToWrite non è nullo
    if (isEmpty(pathToWrite)=false) Or Not pathToWrite="" then
    'apro il recordset, nello specifico una nuova riga
    ' ed inserisco nel campo path il contenuto di pathToWrite
    Dim objRS
    Set objRS=Me.Recordset '(in taluni casi è meglio scrivere
    'il nome della maschera completo: [form_Maschera xyz].Recordset
    objRS.AddNew
    objRS("path")=pathToWrite 'scrivo nel campo path
    objRS.Update
    Set objRS=Nothing
    'se, come in questo caso, la maschera xyz è stata costruita su
    'questa tabella allora aggiorno i dati
    Me.Requery 'meglio [form_Maschera xyz].Requery
    'vado all'ultimo record immesso
    DoCmd.GoToRecord acDataForm, "Maschera xyz", acLast
    'ora puoi aggiornare i controlli col nuovo valore immesso nel campo path
    else
    MsgBox "Percorso del file immagine non valido"
    end if
    End Function

    Praticamente questa funzione la dovrai chiamare dopo che l'utente sceglie il file tramite la finestra di dialogo "Apri file" (codice che hai già) e, nel richiamarla, dovrai passarle il percorso ricavato dal risultato della finestra, cioè

    Dim risFinestra As String
    risFinestra=cmdlg_file
    writeToTable risFinestra

    Non ho controllato bene il codice che hai tu ma credo sia corretto.
    Alla prossima
    __________________
    non darmi consigli se non te li chiedo!
    .: DUCATI FOR LIFE :.
    *Vinniec*
    __________________

  4. #24
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    171
    con questo codice mi dice variabile non definita (pesca.bmp)
    Me.Immagine.Picture = Me.path = LoadPicture(pathbase & "\" & pesca.bmp)

    con questo non mi da errori ma le immagini non cambiano
    Me.Immagine.Picture = Me.path = pathbase

    Cmq path è il campo dove c'è scritto il percorso al file.

    Poi proverò a far funzionare il pulsante

  5. #25
    Utente di HTML.it L'avatar di Vinniec
    Registrato dal
    Apr 2002
    Messaggi
    195
    allora intanto se usi una stringa in modo esplicito (come pesca..) devi racchiuderla tra virgolette altrimenti il compilatore pensa che si tratti di una variabile o di altro... e non è così. Quindi scriverai "pesca.bmp". Attenta quindi alle virgolette.
    Ora, siccome non ha senso tutto quanto abbiamo scritto sin ora se usi le stringhe scritte a mano, tentiamo di automatizzare il tutto, iniziando con eliminare la stringa pesca.bmp e sicuramente mettendo su due righe le assegnazioni.
    Non puoi scrivere gino=pasquale=giovanni tutto su di una riga. Devi dividere su + righe
    cioè gino=pasquale 'sintatticamente corretto
    gino=giovanni 'sintatticamente corretto
    Questa è la sintassi, ma la logica è un'altra cosa...
    Prima di andare avanti mi chiedo:
    pesca.bmp dovrebbe stare sul campo path giusto?
    quindi tu hai una tabella che, tra le altre cose, ha il campo path dove segni indirizzo+nome (es. C:\documenti\pesca.bmp) giusto?
    Perchè se non è così le cose cambiano abbastanza. Fammi sapere.
    Ricorda di compilare il codice altrimenti non saprai mai se ci sono errori sintattici (prima cosa da osservare prima di far partire il codice).
    __________________
    non darmi consigli se non te li chiedo!
    .: DUCATI FOR LIFE :.
    *Vinniec*
    __________________

  6. #26
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    171
    Infatti ho un campo "path" dove c'è il seguente C:\documenti\cover\pesca.bmp
    il mio problema è appunto eliminare quella parte e lasciare solo
    cover\pesca
    così quando sposto il file e la directory con le immagini al suo interno il database funziona anche su un pc che non ha la stessa struttura di directory

  7. #27
    Utente di HTML.it L'avatar di Vinniec
    Registrato dal
    Apr 2002
    Messaggi
    195
    ok, ma a quanto pare il percorso scritto sul campo path lo prendi dalla finestra di dialogo "Apri File" giusto? Selezioni il file e, quando pigi su OK il codice acchiappa il file con tutto il percorso e tu, con la mia funzione, lo spiattelli nel database. Ciò però funzionerà solo nel tuo pc. Per farsì che una cosa del genere funzioni anche in altri pc allora devi fare così:
    Nel campo path non puoi salvare alcuna path, bensì solo ed esclusivamente il nome del file e, nel caso in cui vuoi dividere le immagini dal percorso dove risiede il DB, la sottocartella adatta. Mi spiego meglio. Se il DB è su C:\documenti\miodb\database.mdb, per sistemare in modo + ordinato le cose dovresti stabilire come default una cartella per le immagini, supponiamo quindi C:\documenti\miodb\immagini
    Ora, come vedi, qualsiasi sia il pc e ovunque salveranno il database, tu creerai il codice per creare la cartella "immagini" qualora non ci fosse e salverai le immagini prese da OpenFile in pathbase & "\immagini\", cioè la path in cui si trova il db + la sottocartella immagini. Certo, tutto questo se usi la cartella immagini, altrimenti OpenFile lo salverai in pathbase e basta.
    Inutile allora andare a salvare su path l'intero percorso poichè, metti caso che lo stesso database uno lo sposta, ad esempio, sul portatile, dove magari il drive non è più C: ma X:, il database smette di funzionare poichè su path tu gli hai salvato tutto il percorso intero, partendo da C:\ quindi. Bensì, salvando su path SOLAMENTE il percorso dell'immagine (solo il nome del file tratto da OpenFile oppure, nell'altro caso, "immagini\" & ilnomedelfile) questo database sarà utilizzabile da tutti poichè su path risulterà questo: immagini\pesca.bmp
    che, unendolo a pathbase potrebbe essere in qualunque modo, X:\documents and settings\administrator\database\immagini\pesca.bmp
    oppure
    C:\docu....
    Mi segui? Spero di si.
    Andiamo al pratico. Dati gli elementi sopra descritti e preso come stato di fatto l'esempio per cui posizionerai su immagini le immagini che vuoi inserire sul database, costruiamo il seguente codice:

    riprendiamo dalla funzione cmdlg_file...(trova tu il punto)
    cmdlg_file = Left(OpenFile.lpstrFile, InStr(OpenFile.lpstrFile, Chr$(0)) - 1)

    Forms!Immagini!path = cmdlg_file -> questo lo elimini
    'richiamiamo la mia funzione

    writeToTable cmdlg_file

    funzione cmdlg_file terminata.

    poi vai su Form_Current:

    Private Sub Form_Current()
    On Error Resume Next
    Me.Immagine.Picture = LoadPicture(pathbase & "\immagini\" & Me.path)
    End Sub

    effettua questa modifica su Form_Load:

    Private Sub Form_Load()
    pathbase = CurDir
    Dim res
    res = Dir(pathbase & "\immagini", vbDirectory)
    If res = "" Then
    MkDir pathbase & "\immagini"
    End If
    end Sub

    questa modifica consente di creare la directory immagini nel percorso dove si trova il database qualora questa non dovesse esistere.

    effettua questa correzione alla mia funzione precedente:

    Private Function writeToTable(ByRef pathToWrite As String)
    'se pathToWrite non è nullo
    If Not pathToWrite = "" Then
    ' pulisco la stringa pathToWrite dal resto del percorso
    Dim pos As Long
    pos = InStrRev(pathToWrite, "\", -1, vbTextCompare)
    If pos <> 0 Or IsNull(pos) = False Then
    Dim img
    img = Right(pathToWrite, (Len(pathToWrite) - pos))
    pathToWrite = img
    End If
    'apro il recordset, nello specifico una nuova riga
    ' ed inserisco nel campo path il contenuto di pathToWrite
    Dim objRS
    Set objRS = Me.Recordset '(in taluni casi è meglio scrivere
    'il nome della maschera completo: [form_Maschera xyz].Recordset
    objRS.AddNew
    objRS("path") = pathToWrite 'scrivo nel campo path
    objRS.Update
    Set objRS = Nothing
    'se, come in questo caso, la maschera xyz è stata costruita su
    'questa tabella allora aggiorno i dati
    Me.Requery 'meglio [form_Maschera xyz].Requery
    'vado all'ultimo record immesso
    DoCmd.GoToRecord acDataForm, "Maschera xyz", acLast
    'ora puoi aggiornare i controlli col nuovo valore immesso nel campo path
    End If
    End Function

    il gioco è fatto. la correzzione alla mia funzione ti permette di salvare solo il nome dell'immagine per rendere funzionale il database. Non ti resta che provare il tutto e dirmi se riesci a farlo funzionare. Il codice è testato ed è ok.
    __________________
    non darmi consigli se non te li chiedo!
    .: DUCATI FOR LIFE :.
    *Vinniec*
    __________________

  8. #28
    Utente di HTML.it L'avatar di Vinniec
    Registrato dal
    Apr 2002
    Messaggi
    195
    e dopo questa kikka di programmazione in VBA, se ti capita di vendere quel database ke stai creando vedi ke voglio il 5% per averti suggerito la metodologia giusta ed un pò di buon codice!
    __________________
    non darmi consigli se non te li chiedo!
    .: DUCATI FOR LIFE :.
    *Vinniec*
    __________________

  9. #29
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    171
    Purtroppo non va, quando schiaccio il bottone
    errore di compilazione:
    tipo non corrispondente per l'argomento ByRef
    ed evidenzia cmdlg_file nella parte writeToTable

    Poi se vuoi detto file te lo invio, ma prima dobbbiamo risolvere

    Grazie ancora

  10. #30
    Utente di HTML.it L'avatar di Vinniec
    Registrato dal
    Apr 2002
    Messaggi
    195
    quando chiami writeToTable ci deve essere cmdlg_file:
    writeToTable cmdlg_file
    praticamente la mia funzione richiede un tipo di dati Stringa, la funzione cmdlg_file restituisce un tipo di dati stringa, pertanto dovrebbe funzionare...
    Ah OK, TROVATO:

    devi correggere così questa funzione:
    Public Function cmdlg_file() As String

    Dim OpenFile As OPENFILENAME
    Dim lReturn As Long
    Dim sFilter As String

    OpenFile.lStructSize = Len(OpenFile)
    [continua....]

    probabilmente il problema sta lì.
    __________________
    non darmi consigli se non te li chiedo!
    .: DUCATI FOR LIFE :.
    *Vinniec*
    __________________

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.