Oppure

Loading
30/07/09 22:10
Swanny
Ri-salve :D Dopo aver risolto con buoni risultati il mio topic precedente, rieccomi qui con un nuovo quesito. Come detto sto programmando un programmino in VB6 dove archiviare la miriade di libri/fumetti che possiedo. Al programma vorrei aggiungere la possibilità di visualizzare nella form la scansione della copertina (per lo + per i fumetti) che cambi per ogni nuovo record, salvandola nel database. Girando sul web ho letto che è sconsigliato fare questo tipo di salvataggio in quanto gonfia enormemente la dimensione del database, ma al momento non mi importa molto visto che lo spazio per fortuna non mi manca. Oppure invece del salvataggio "fisico" dell'immagine nel database, salvare SOLO il percorso dove risiede l'immagine nel database, così da richiamarla con + facilità ad ogni record.

Ho fatto questa prova creando un bottone (DATASOURCE data1; DATAFIELD copertina), una casella di testo (DATASOURCE data1; DATAFIELD copertina) e un campo image:

Con questo apro l'immagine nel campo image e ne visualizzo il percorso nella textbox

Private Sub Cmdcaricaimmagine_Click()
CommonDialog1.ShowOpen
Image1.Picture = LoadPicture(CommonDialog1.FileName)
Text12.text =CommonDialog1.FileName
End Sub


Al click sul campo image compare l'immagine da me selezionata caricando il percorso dalla textbox

Private Sub Image1_Click()
If Dir(Text12.Text) <> "" then
Image2.Picture = LoadPicture(Text12.Text)
End If
End Sub


Ora per salvare il percorso dell'immagine nel database come faccio? Pensavo che il comando Data1.Recordset.AddNew salvasse anche questo campo. Da notare che ho dovuto riselezionare la nel campo DATASOURCE di data1 il percorso del database altrimenti non potevo specificare i campi nel pulsante sopra citato che nel topic prima avevo assegnato al form load:

Private Sub Form_Load()
Data1.DatabaseName = App.Path & "\Listafilm.mdb"
End Sub

Per essere + chiaro posto il codice intero:

Option Explicit
Dim criterioricerca As String

Private Sub cmdaggiorna_Click()
'Ricollega il recordset alla tabella aggiornando i dati
Data1.Refresh
End Sub

Private Sub cmdaggiungi_Click()
Data1.Recordset.AddNew
End Sub

Private Sub cmdcarica_Click()
  Data1.UpdateRecord
  Data1.Recordset.Bookmark = Data1.Recordset.LastModified
End Sub

Private Sub cmdelimina_Click()
    Dim Opzione
    Opzione = MsgBox("Vuoi eliminare la scheda di questo libro?", vbCritical + vbYesNo, "Sei sicuro?")
If Opzione = 6 Then
    Data1.Recordset.Delete
    Data1.Recordset.MoveNext
    If Data1.Recordset.EOF Then
    Data1.Recordset.MoveLast
    End If
End If
End Sub

Private Sub cmdesci_Click()
Unload Me
End Sub

Private Sub cmdricerca_Click()
Dim segnaposto As String
Dim ricercaparola As String
segnaposto = Data1.Recordset.Bookmark
ricercaparola = InputBox("Quale libro vuoi cercare?")
If ricercaparola = "" Then Exit Sub

criterioricerca = "titolo = '" + ricercaparola + "'"
Data1.Recordset.FindFirst criterioricerca

If Data1.Recordset.NoMatch Then
    MsgBox ("Il titolo '" + ricercaparola + "' non esiste nel database.")
End If
End Sub

Private Sub Data1_Reposition()
Frame2.Caption = "Scheda " + Str((Data1.Recordset.AbsolutePosition) + 1) + " /" + Str(Data1.Recordset.RecordCount)
End Sub

Private Sub Form_Load()
Data1.DatabaseName = App.Path & "\Listalibri.mdb"
End Sub

Private Sub Cmdcaricaimmagine_Click()
CommonDialog1.ShowOpen
Image1.Picture = LoadPicture(CommonDialog1.FileName)
Text12.text =CommonDialog1.FileName
End Sub

Private Sub Image1_Click()
if dir(Text12.Text) <> "" then 
  Image2.Picture = LoadPicture(Text12.Text)
End if
End Sub


Risolto questo intoppo posto anche il problema che ho relativo al salvataggio del testo di una textbox in un file di testo. :hail:
aaa
30/07/09 22:24
theprogrammer
1) non sopporto l'uso di DAO nei programmi VB6. E' veramente obsoleto, poco supportato e crea non pochi problemi nei sistemi recenti ... sarebbe meglio utilizzare sempre ADO nella versione piu' recente ...

2) non sopporto l'uso di controlli (Data per DAO ma anche ADODC per ADO ...) ... e' sempre preferibile non usarli perche' sono fonte di bug e sono poco controllabili ... molto meglio utilizzare il "modello ad oggetti" e istanziare quello che serve, dove serve (connection, recordset, command ...)

Fatte le due premesse, non capisco il tuo problema, sebbene tu abbia scritto parecchio ... Come farei personalmente ... tieni tutti i file in una cartella e prepara un campo di tipo testo per memorizzare il percorso nel db. Tutto qui.
aaa
31/07/09 0:19
Swanny
1) sul manuale da cui sto leggendo, il primo esempio che fa per connettere un DB a VB è DAO (il manuale è abbastanza vecchio), quindi essendo il primo manuale da dove ho preso spunto ho trovato questo. Anche su internet i vari esempi di utilizzo del DB sono in DAO. Non potendo utilizzare la nuova versione di VB mi arrangio con questa purtroppo.

2) non saprei da dove cominciare per usare il modello ad oggetti...cmq tengo in considerazione le tue parole.

Premettendo che tutto il materiale necessario al programma l'ho inserito/salvato tutto nella stessa cartella del progetto. Il mio problema sta nel non saper salvare il percorso del file nel DB, ho fatto come descritto su da codice (provando anche a togliere la stringa di form load) ma ogni volta che premo il pulsante aggiungi mi compare l'errore
Errore di run-time "3426"
Azione eliminata da un oggetto associato

evidenziandomi la seguente stringa

Data1.Recordset.AddNew


Che senza effettuare questa nuova operazione funziona per bene.


Poi per il fatto del salvataggio su file di testo (che non ho specificato prima) di un campo non capisco cosa succede...se creo un form nuovo con una casella di testo e un pulsante con questo codice:

Private Sub cmdaggiungi_Click()
Open App.Path & "\Listatxt.txt" For Output As #1
Print #1, text1.text
Close #1 
end sub


Tutto va bene e mi salva il contenuto, se invece applico la stessa cosa al mio progetto (per salvare la lista di tutti i libri, pronta alla stampa) mi da: errore di compilazione; impossibile trovare il metodo o il membro dei dati.
Sottolineandomi l'estensione .text


PS: Mi spiace aver fatto "alterare" theprogrammer con il mio metodo di lavoro/programmazione, se lo si ritiene opportuno potete chiudere il topic, purtroppo mezzi e conoscenze sono molto bassi nel mio caso.:(
Ultima modifica effettuata da Swanny 31/07/09 0:20
aaa
31/07/09 8:08
theprogrammer
Postato originariamente da Swanny:

1) sul manuale da cui sto leggendo, il primo esempio che fa per connettere un DB a VB è DAO (il manuale è abbastanza vecchio), quindi essendo il primo manuale da dove ho preso spunto ho trovato questo. Anche su internet i vari esempi di utilizzo del DB sono in DAO. Non potendo utilizzare la nuova versione di VB mi arrangio con questa purtroppo.


Non esiste una nuova versione o una vecchia version di VB6. Tu puoi usare sia DAO che ADO. Ma quest'ultima libreria e' preferibile. Devi avere installato il SP6 (in ogni caso) e seguire un manuale piu' aggiornato. Non c'e' giustificazione.

2) non saprei da dove cominciare per usare il modello ad oggetti...cmq tengo in considerazione le tue parole.


Premettendo che tutto il materiale necessario al programma l'ho inserito/salvato tutto nella stessa cartella del progetto. Il mio problema sta nel non saper salvare il percorso del file nel DB, ho fatto come descritto su da codice (provando anche a togliere la stringa di form load) ma ogni volta che premo il pulsante aggiungi mi compare l'errore
Errore di run-time "3426"
Azione eliminata da un oggetto associato


Questi sono i problemi creati dai controlli Data di cui ti parlavo. Non li usare.

Poi per il fatto del salvataggio su file di testo


Tutto va bene e mi salva il contenuto, se invece applico la stessa cosa al mio progetto (per salvare la lista di tutti i libri, pronta alla stampa) mi da: errore di compilazione; impossibile trovare il metodo o il membro dei dati.
Sottolineandomi l'estensione .text


Non l'ho capito ... tu quale codice usi? Hai inserito il textbox sul form? O no?

PS: Mi spiace aver fatto "alterare" theprogrammer


Ma non dire sciocchezze ... non mi altero ma ti indico solo di non perdere tempo e seguire la strada corretta ... se vuoi ...
aaa
31/07/09 8:30
GrG
Postato originariamente da Swanny:
PS: Mi spiace aver fatto "alterare" theprogrammer con il mio metodo di lavoro/programmazione, se lo si ritiene opportuno potete chiudere il topic, purtroppo mezzi e conoscenze sono molto bassi nel mio caso.:(


LoL

Guarda che ti ha dato solo un consiglio, è stato un pò "severo" per fartelo entrare ben in testa :asd:
aaa
31/07/09 11:37
Swanny
Per nuova versione di VB intendevo la visual studio 2008 che ho provato ma con il mio pc non la posso sfruttare al meglio. Avevo provato ad utilizzare ADO come mi avevi consiglato nel topic precedente solo che non mi riconosceva le stringhe di codice, forse per il fatto di non aver installato il SP6? Non so se tutt'ora l'ho ma d'ho un occhiata e in caso lo scarico e lo installo.
Se pensi che l'errore del salvataggio sul DB sia dato dal fatto che uso il controllo DATA allora provo ad usare ADO con ADODC (prima vediamo come funziona rispetto a DAO)

Per il file di testo, si inserisco la textbox nel form, ho dimenticato a scrivere il codice dopo aver editato il messaggio. Allora quello che scrivo sul pulsante come detto prima è:

Private Sub cmdaggiungi_Click()
Open App.Path & "\Listatxt.txt" For Output As #1
Print #1, text1.text
Close #1
End Sub


Quello sulla casella di testo che in teoria dovrebbe far in modo che al click sul controllo Image venga caricata l immagine è il seguente:

Private Sub Image2_Click()
if dir(Text12.Text) <> "" then 
  Image2.Picture = LoadPicture(Text12.Text)
End if
End sub


aaa
31/07/09 13:14
XBarboX
Usa direttamente Access, viene meglio.
aaa
01/08/09 19:16
Swanny
Postato originariamente da XBarboX:

Usa direttamente Access, viene meglio.


L'idea mia era venuta in mente ma in questo modo dovrei avere sempre access installato. Mi piaceva di + l'idea di un programma da poter usare dovunque e da distribuire anche ai miei colleghi appassionati di libri come me :k:

Per adesso son fermo con il lavoro aspettando qualche risposta ;)
aaa