[vb.net] Report di immagini

giovedì 30 agosto 2007 - 16.07

ertulio Profilo | Senior Member

Salve, ho realizzato un software che visualizza anche delle immagini. Nel db access le immagini sono memorizzate sotto forma di path e non di immagine vera e propria. Quando effettuo report con dataset siccome nel database cè memorizzato il path dellimmagine nel report mi viene memorizzata il path e non l'immagine, comne posso risolvere? spero di essere stato chiaro, grazie 1000
http://www.risorsefantacalcio.it

Risorse per tutti gli appassionati di fantacalcio da cui prelevare news, probabili formazioni, voti del corriere e gazzetta e tanhto altro.

SSUPERPIPPO Profilo | Guru

>Salve, ho realizzato un software che visualizza anche delle immagini. Nel db access le immagini sono memorizzate sotto forma di >path e non di immagine vera e propria. Quando effettuo report con dataset siccome nel database cè memorizzato il path >dellimmagine nel report mi viene memorizzata il path e non l'immagine, comne posso risolvere? spero di essere stato chiaro, grazie >1000

Dovresti caricare nel dataset l'immagine relativa al path specificata in un campo blob.
Ti consiglio questo trucchetto:

Crei il tuo DataSet passandogli una select di questo tipo:

"SELECT Campo1,Campo2,... CampoPath, CONVERT(image, '') AS Immagine FROM Nometabella"

In questo modo creerai un DataTable con i campi specificati più una colonna che accetta dati di tipo blob (e quindi immagine) chiaramente vuota.

Ora non ti resta che ciclare i record del tuo DataSet e caricare nel campo l'immagine specificata nel campo path:

Dim CurRow As DataRow

For Each CurRow In TuoDataSet.Tables("NomeTabella").Rows
CurRow.Item("Immagine") = GetFile(CurRow.Item("CompoPath"))
Next

Ora puoi passare il dataset al tuo report per la stampa

Ciao

Alessandro


http://blogs.dotnethell.it/alebadalin

ertulio Profilo | Senior Member

Grazie dell'aiuto, però sono un po spiazzato, non ho mai sentito parlare di un campo blob, inoltre questo campo devo dichiararlo nel database? Grazie
http://www.risorsefantacalcio.it

Risorse per tutti gli appassionati di fantacalcio da cui prelevare news, probabili formazioni, voti del corriere e gazzetta e tanhto altro.

SSUPERPIPPO Profilo | Guru

Ti rimando a questo articolo scritto dal grande David De Giacomi che spiega cos'è un campo blob, vantaggi e svantaggi del suo utilizzo: http://www.dotnethell.it/articles/DatabaseBLOBs.aspx

A questo link invece trovi le istruzioni più dettagliate su come implementare quanto ti ho brevemente sintetizzato prima:
http://www.dotnethell.it/tips/Crystal-Reports-BLOB.aspx

Se hai bisogno di aiuto sono a disposizione

Ciao

Alessandro


http://blogs.dotnethell.it/alebadalin

ertulio Profilo | Senior Member

Quindi se non erro un tipo blob è un tipo binary, quindi io nel mio database access oltre ad avere il campo pathimage di tipo string che contine il path dell'immagine devo creare un campo di tipo binary per l'appoggio dell'immagine, ho compreso bene? Grazie
http://www.risorsefantacalcio.it

Risorse per tutti gli appassionati di fantacalcio da cui prelevare news, probabili formazioni, voti del corriere e gazzetta e tanhto altro.

SSUPERPIPPO Profilo | Guru

Non hai compreso bene...

Allora cerco di farti capire partendo da come funziona il DataSet.

Quando crei un DataSet con un DataAdapter (metodo fill), non fai altro che creare una copia lato client del DataBase fisico; questo significa che potrai apportare modifiche al DataTable senza influenzare il DataBase fisico.

Premesso questo, la procedura che ti consiglio di attuare è questa:

1. Creai un DataSet attraverso il DataAdapter (metodo fill) passando come stringa command quella che ti ho indicato prima; in questo modo la tabella lato client (copia del database fisico) che si viene a creare avrà una colonna in più rispetto a quella del database fisico; questa colonna sarà di tipo blob (potrà quindi contenere un'immagine).
2. A questo punto devi ciclare, come ti ho indicato prima, tutti i record del tuo DataTable (che ti ricordo è disconnesso) e caricare nel campo BLOB le immagini derivanti dal Path specificato nel relativo campo.
3. Per finire devi passare questo DataSet al tuo Report e avviarlo.

Ora non sò quanto tu abbia dimestichezza con i DataSet...

Fammi sapere se ti è tutto chiaro

Ciao

Alessandro

http://blogs.dotnethell.it/alebadalin

ertulio Profilo | Senior Member

Quello che non mi è chiaro è come faccio a dichiarare iol campo blob. Scusa se non capisco.
http://www.risorsefantacalcio.it

Risorse per tutti gli appassionati di fantacalcio da cui prelevare news, probabili formazioni, voti del corriere e gazzetta e tanhto altro.

SSUPERPIPPO Profilo | Guru

Nessun problema.

Il campo BLOB lo crei attraverso la funzione CONVERT(image,'') che dovrai inserire nella SELECT (in coda ai campi che realmente estrapoli dal Database) che passi al meto FILL del DataAdapter. Questa funzione crea il campo BLOB nel DataTable.

Ecco l'esempio di prima:

SELECT Campo1,Campo2,... CampoPath, CONVERT(image, '') AS Immagine FROM Nometabella

Ora ti è chiaro?

Ciao

Alessandro

http://blogs.dotnethell.it/alebadalin

ertulio Profilo | Senior Member

Ah ecco ora si, ti faccio sapere qualcosa domani perchè ora sono finito, grazie della disponibilità
http://www.risorsefantacalcio.it

Risorse per tutti gli appassionati di fantacalcio da cui prelevare news, probabili formazioni, voti del corriere e gazzetta e tanhto altro.

SSUPERPIPPO Profilo | Guru

Di nulla, a domani.

Ciao

Ale

http://blogs.dotnethell.it/alebadalin

ertulio Profilo | Senior Member

Arieccomi, ho un problema sulla riga

Dim CurRow As DataRow

For Each CurRow In AnamnesiAtletaDataSet3.Tables("NomeTabella").Rows
CurRow.Item("Immagine") = GetFile(CurRow.Item("CompoPath"))
Next

in quanto mi dice che getfile non è dichiarato. L'esempio del link da te proposto è in c# io uso .net, come risolvo? grazie ancora
http://www.risorsefantacalcio.it

Risorse per tutti gli appassionati di fantacalcio da cui prelevare news, probabili formazioni, voti del corriere e gazzetta e tanhto altro.

SSUPERPIPPO Profilo | Guru

>Dim CurRow As DataRow

>For Each CurRow In AnamnesiAtletaDataSet3.Tables("NomeTabella").Rows
>CurRow.Item("Immagine") = GetFile(CurRow.Item("CompoPath"))
>Next

Credo che tu stia usando VB.NET 2003 vero?
In questo caso puoi usare

Dim CurRow As DataRow

For Each CurRow In AnamnesiAtletaDataSet3.Tables("NomeTabella").Rows
CurRow.Item("Immagine") = System.Drawing.Bitmap.FromFile(CurRow.Item("CompoPath"))
Next

Ciao

Alessandro

http://blogs.dotnethell.it/alebadalin

ertulio Profilo | Senior Member

Sbaglio qualcosa, ti posto il codice che uso, magari sapresti dirmi l'errore, uso vb.net 2005.
La tabella in questione è TempAnamnesiAtleta. Il campo contenente il path è Foto. Il campo del datset di tipo blob è Immagine.

Dim objConn As OleDbConnection
Dim daT1, As OleDbDataAdapter
Dim AnamnesiAtletaDataSet3 As DataSet
Dim strConnection As String
Dim strSQL As String

strConnection = "Data Source=" + Application.StartupPath + "\AnamnesiAtleta.mdb; Provider=Microsoft.Jet.OLEDB.4.0;"
objConn = New OleDbConnection(strConnection)
objConn.Open()

strSQL = "SELECT * CONVERT(Foto, '') AS Immagine FROM TempAnamnesiAtleta"
Dim CurRow As DataRow

For Each CurRow In AnamnesiAtletaDataSet3.Tables("TempAnamnesiAtleta").Rows
CurRow.Item("Immagine") = System.Drawing.Bitmap.FromFile(CurRow.Item("Foto"))
Next

daT1 = New OleDbDataAdapter(strSQL, objConn)
AnamnesiAtletaDataSet3 = New DataSet
daT1.Fill(AnamnesiAtletaDataSet3, "TempTestAtleta")


Dim rpt As New CrystalReport7
rpt.SetDataSource(AnamnesiAtletaDataSet3)
CrystalReportViewer1.ReportSource = rpt

objConn.Close()



Grazie 1000


Dimenticavo, l'errore che mi da è alla riga
For Each CurRow In AnamnesiAtletaDataSet3.Tables("TempAnamnesiAtleta").Rows
(Riferimento a un oggetto non impostato su un istanza di un oggetto)

SSUPERPIPPO Profilo | Guru

>strSQL = "SELECT * CONVERT(Foto, '') AS Immagine FROM TempAnamnesiAtleta"

Il tuo errore è nella Select. Manca una virgola di divisione tra * (che indica l'estrazione di tutti i campi) e il campo aggiuntivo Immagine.

Quindi la stringa corretta è:

strSQL = "SELECT TempAnamnesiAtleta.*, CONVERT(Foto, '') AS Immagine FROM TempAnamnesiAtleta"

>Dimenticavo, l'errore che mi da è alla riga
>For Each CurRow In AnamnesiAtletaDataSet3.Tables("TempAnamnesiAtleta").Rows
>(Riferimento a un oggetto non impostato su un istanza di un oggetto)

Questo errore ti segnala che l'oggetto tabella a cui ti riferisci non esiste. Infatti, essendo errata la Select, la tabella non viene generata.

il resto mi sembra ok!

>Grazie 1000

Di nulla, ciao

Alessandro



http://blogs.dotnethell.it/alebadalin

ertulio Profilo | Senior Member

Mi da sempre lo stesso errore sulla stessa riga, ho controllato la tabella se avavo sbagliato le diciture ma tutto ok, però l'errore persiste
http://www.risorsefantacalcio.it

Risorse per tutti gli appassionati di fantacalcio da cui prelevare news, probabili formazioni, voti del corriere e gazzetta e tanhto altro.

SSUPERPIPPO Profilo | Guru

Scusa ma non mi ero accorto del tuo errore più grave!!!

>strSQL = "SELECT TempAnamnesiAtleta.*, CONVERT(Foto, '') AS Immagine FROM TempAnamnesiAtleta"

non devi scrivere CONVERT(Foto,'') ma bensi CONVERT(Image,'') perchè questa funzione ti crea un nuovo campo di tipo Image vuoto, non fa alcun riferimento a campi del database.

Poi con la routine di caricamento file vai a riempire questo campo.

Spero che ora ti sia chiaro

Ciao

Alessandro


http://blogs.dotnethell.it/alebadalin

ertulio Profilo | Senior Member

Non va, spero che non ti scocci ma non so che fare.
Riposto il codice:


Dim objConn As OleDbConnection
Dim daT1, As OleDbDataAdapter
Dim AnamnesiAtletaDataSet3 As DataSet
Dim strConnection As String
Dim strSQL As String

strConnection = "Data Source=" + Application.StartupPath + "\AnamnesiAtleta.mdb; Provider=Microsoft.Jet.OLEDB.4.0;"
objConn = New OleDbConnection(strConnection)
objConn.Open()

strSQL = "SELECT *, CONVERT(Image, '') AS Immagine FROM TempAnamnesiAtleta"

Dim CurRow As DataRow

For Each CurRow In AnamnesiAtletaDataSet3.Tables("TempAnamnesiAtleta").Rows
CurRow.Item("Immagine") = System.Drawing.Bitmap.FromFile(CurRow.Item("Foto"))
Next

daT1 = New OleDbDataAdapter(strSQL, objConn)
AnamnesiAtletaDataSet3 = New DataSet
daT1.Fill(AnamnesiAtletaDataSet3, "TempAnamnesiAtleta")

Dim rpt As New CrystalReport7
rpt.SetDataSource(AnamnesiAtletaDataSet3)
CrystalReportViewer1.ReportSource = rpt

objConn.Close()

SSUPERPIPPO Profilo | Guru

Ci mancherebbe che mi scoccio...

Ripostami il codice così come lo hai modificato e se puoi allegami anche il file MDB così tagliamo la testa al toro e te lo preparo io per benino così individuiamo dove stà l'errore...

Ciao

Ale

http://blogs.dotnethell.it/alebadalin

ertulio Profilo | Senior Member

Dim objConn As OleDbConnection
Dim daT1, As OleDbDataAdapter
Dim AnamnesiAtletaDataSet3 As DataSet
Dim strConnection As String
Dim strSQL As String

strConnection = "Data Source=" + Application.StartupPath + "\AnamnesiAtleta.mdb; Provider=Microsoft.Jet.OLEDB.4.0;"
objConn = New OleDbConnection(strConnection)
objConn.Open()

strSQL = "SELECT *, CONVERT(Image, '') AS Immagine FROM TempAnamnesiAtleta" --------dapprima al posto di image inserivo foto che è il campo del db

Dim CurRow As DataRow

For Each CurRow In AnamnesiAtletaDataSet3.Tables("TempAnamnesiAtleta").Rows
CurRow.Item("Immagine") = System.Drawing.Bitmap.FromFile(CurRow.Item("Foto")) -----------foto è il campo del db
Next

daT1 = New OleDbDataAdapter(strSQL, objConn)
AnamnesiAtletaDataSet3 = New DataSet
daT1.Fill(AnamnesiAtletaDataSet3, "TempAnamnesiAtleta")


Dim rpt As New CrystalReport7
rpt.SetDataSource(AnamnesiAtletaDataSet3)
CrystalReportViewer1.ReportSource = rpt

objConn.Close()
http://www.risorsefantacalcio.it

Risorse per tutti gli appassionati di fantacalcio da cui prelevare news, probabili formazioni, voti del corriere e gazzetta e tanhto altro.

SSUPERPIPPO Profilo | Guru

Ecco risolto l'arcano!

Dim objConn As OleDbConnection
Dim daT1 As OleDbDataAdapter
Dim AnamnesiAtletaDataSet3 As DataSet
Dim strConnection As String
Dim strSQL As String

strConnection = "Data Source=" + Application.StartupPath + "\AnamnesiAtleta.mdb; Provider=Microsoft.Jet.OLEDB.4.0;"
objConn = New OleDbConnection(strConnection)
objConn.Open()

strSQL = "SELECT * FROM TempAnamnesiAtleta" <== Ho tolto la funzione CONVERT xchè non funziona su Db Access

daT1 = New OleDbDataAdapter(strSQL, objConn)
AnamnesiAtletaDataSet3 = New DataSet
daT1.Fill(AnamnesiAtletaDataSet3, "TempAnamnesiAtleta")

' Dopo aver creato il DataTable, aggiungo un campo di tipo image (blob)

AnamnesiAtletaDataSet3.Tables("TempAnamnesiAtleta").Columns.Add("Immagine", GetType(Image))

Dim CurRow As DataRow

' Solo ora esegui il ciclo per riempire il campo con l'immagine che caricherai dal path relativo

For Each CurRow In AnamnesiAtletaDataSet3.Tables("TempAnamnesiAtleta").Rows
CurRow.Item("Immagine") = System.Drawing.Bitmap.FromFile(CurRow.Item("Foto"))
Next

' E ora lanci il report passandogli il Dataset

Scusami, avevo commesso io un errore. Non ricordavo che la funzione CONVERT non funziona su Database Access ma solo su DB Sql (che io sono abituato ad utilizzare).
Ho provato tutto da me e funziona che è una meraviglia! Prova e speriamo sia la volta buona.

Ciao

Alessandro

P.S.: Scusa se ti ho risposto tardi ma purtroppo non posso essere sempre davanti al computer, devo anche lavorare...


http://blogs.dotnethell.it/alebadalin

ertulio Profilo | Senior Member

Grazie 1000 ora funziona, però nella visualizzazione non mi visualizza nessuna immagine bensi il path, ti allego la foto del risultato, dove sbvaglio?

586x377 33Kb


io al crystal report ho collegato il anamnesiAtletaDataSet3 e poi nella visualizzazione ho trascinato il campo foto

SSUPERPIPPO Profilo | Guru

Bene, fino a qui ci siamo arrivati...

Ora vado a nanna... domani ti spiego cosa fare per realizzare correttamente il tuo report.

Ciao

Alessandro


http://blogs.dotnethell.it/alebadalin

ertulio Profilo | Senior Member

Grazie ancora
http://www.risorsefantacalcio.it

Risorse per tutti gli appassionati di fantacalcio da cui prelevare news, probabili formazioni, voti del corriere e gazzetta e tanhto altro.

SSUPERPIPPO Profilo | Guru

Allora... considerando che Access non mi consente di creare un DataSet con la funzione CONVERT, ti tocca per forza fare così:

1. Modifichi la tabella fisica del database Access aggiungento un campo di typo OggettoOLE che chiamerai per l'appunto immagine;
2. Ora modifichi il tuo report aggiornando il DataSet a cui ti colleghi che ora avrà un campo aggiuntivo 'Immagine' che è quello che devi usare per inserire l'immagine;
3. Il resto rimane invariato, unica cosa, elimina dal codice l'aggiunta del campo immagine a runtime che non è più necessaria.

In questo modo cosa succede:

- Carichi il DataSet con i dati derivanti dal DataBase; tutte le datarow avranno il campo Immagine vuoto!
- A runtime carichi nel DataSet (lato client) le immagini relative ai path specificati; in questo modo non vengono memorizzate nel database fisico ma solo nel DataSet a cui si collega il Report;

Il vantaggio stà nel fatto che se tu salvassi le immagini nel database quest'ultimo crescerebbe in maniera esagerata creando dei seri problemi prestazionali.

Chiaro che anche le immagini caricate lato client hanno il loro peso ma solitamente si parte da una SELECT che riduce il numero di record rispetto a quelli nel database.

Spero di essere stato sufficientemente chiaro

Ciao

Alessandro


http://blogs.dotnethell.it/alebadalin

ertulio Profilo | Senior Member

Ciao, ho fatto come mi hai spiegato, però mi da degli errori, ti posto il codice e poi alla riga ti deco cosa mi da:

Dim objConn As OleDbConnection
Dim daT1 As OleDbDataAdapter
Dim AnamnesiAtletaDataSet3 As DataSet
Dim strConnection As String
Dim strSQL As String

strConnection = "Data Source=" + Application.StartupPath + "\AnamnesiAtleta.mdb; Provider=Microsoft.Jet.OLEDB.4.0;"
objConn = New OleDbConnection(strConnection)
objConn.Open()

strSQL = "SELECT * FROM TempAnamnesiAtleta"

daT1 = New OleDbDataAdapter(strSQL, objConn)
AnamnesiAtletaDataSet3 = New DataSet
daT1.Fill(AnamnesiAtletaDataSet3, "TempAnamnesiAtleta")

' Dopo aver creato il DataTable, aggiungo un campo di tipo image (blob)

AnamnesiAtletaDataSet3.Tables("TempAnamnesiAtleta").Columns.Add("Immagine", GetType(Image)) <====****1*****

Dim CurRow As DataRow

' Solo ora esegui il ciclo per riempire il campo con l'immagine che caricherai dal path relativo

For Each CurRow In AnamnesiAtletaDataSet3.Tables("TempAnamnesiAtleta").Rows
CurRow.Item("Immagine") = System.Drawing.Bitmap.FromFile(CurRow.Item("Foto")) <====****2*****
Next



<====****1***** Una colonna immagine appartiene già a a questa datatable

<====****2***** Il tipo di valore non è conforme al tipo di colonna impossibile archioviare System.Drawing.Bitmap nella colonna immagine, il tipo previsto è Byte[]


Come posso risolvere? Grazie
http://www.risorsefantacalcio.it

Risorse per tutti gli appassionati di fantacalcio da cui prelevare news, probabili formazioni, voti del corriere e gazzetta e tanhto altro.

SSUPERPIPPO Profilo | Guru

>' Dopo aver creato il DataTable, aggiungo un campo di tipo image (blob)

>AnamnesiAtletaDataSet3.Tables("TempAnamnesiAtleta").Columns.Add("Immagine", GetType(Image)) <====****1*****

Se leggi bene ti avevo scritto di togliere il codice che aggiunge il campo immagine xchè già presente!!!

>CurRow.Item("Immagine") = System.Drawing.Bitmap.FromFile(CurRow.Item("Foto")) <====****2*****

Ora verifico. Scusa ma con database Access non ho più contatti da un pò di tempo... provo e ti faccio sapere.

Ciao

Alessandro

http://blogs.dotnethell.it/alebadalin

ertulio Profilo | Senior Member

Si, in effetti questa riga
AnamnesiAtletaDataSet3.Tables("TempAnamnesiAtleta").Columns.Add("Immagine", GetType(Image))
la avevo eliminata.
Però siccome mi dava un secondo errore ho deciso di ripristinare il tutto e segnalarti gli errori, scusa se ti sto scocciando, però è la prima volta che lavoro con report di immagini e non so dove mettere le mani, Grazie 1000
http://www.risorsefantacalcio.it

Risorse per tutti gli appassionati di fantacalcio da cui prelevare news, probabili formazioni, voti del corriere e gazzetta e tanhto altro.

SSUPERPIPPO Profilo | Guru

Sono in difficoltà anch'io... sto facendo delle ricerche perchè non mi è ben chiaro come gestire i campi blob in Access...
Ti tengo aggiornato appena ho chiarito la cosa.
Ciao

Alessandro

http://blogs.dotnethell.it/alebadalin

ertulio Profilo | Senior Member

ok grazie
http://www.risorsefantacalcio.it

Risorse per tutti gli appassionati di fantacalcio da cui prelevare news, probabili formazioni, voti del corriere e gazzetta e tanhto altro.

freeteo Profilo | Guru

ciao,
scusate se mi intrometto, ma scorrendo velocemetne questo thread mi stavo chiedendo, ma seguendo quanto fatto in questo tip non funziona?
http://www.dotnethell.it/tips/Crystal-Reports-BLOB.aspx

infondo c'e' anche un download dell'esempio, prova a vedere come viene fatto li.Il concetto cmq è che ti puoi creare un campo blob sul db access (se lavori con un dataset nel progetto, lo puoi aggiungere a quello, direttamente nel designer di visual studio, da tastoDX sopra alla tabella "aggiungi colonna" e specificargli il tipo blob/image)

Dopodiche' usi il codice dell'esempio dove viene fatto il caricamente su un'oggetto immagine del framework e passato come bytes dentro al campo, cosi' il report che si aspetta quel formato, renderizza le varie immagini...
ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

ertulio Profilo | Senior Member

Già superpippo mi aveva dato questa dritta, però non ci son riuscito, oltretutto li si parla di c# e io non ne capisco molto di c#. Grazie
http://www.risorsefantacalcio.it

Risorse per tutti gli appassionati di fantacalcio da cui prelevare news, probabili formazioni, voti del corriere e gazzetta e tanhto altro.

freeteo Profilo | Guru

ciao,
sinceramente se programmi in .net dovrai abituarti a passare tra un linguaggio e l'altro, soprattutto da c# e vb.net che sono molto molto simili, tanto simili che esistono dei traduttori di codice automatici tipo questo:
http://www.carlosag.net/Tools/CodeTranslator/

Prova a convertirti il progetto e vedere dove sbagli, li fa quello che vuoi fare tu, dovrebbe aiutarti a calarlo nella tua situazione...
ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

ertulio Profilo | Senior Member

Sto provandoi a fare cosi, ma al report devo agganciargli il data set?
http://www.risorsefantacalcio.it

Risorse per tutti gli appassionati di fantacalcio da cui prelevare news, probabili formazioni, voti del corriere e gazzetta e tanhto altro.

ertulio Profilo | Senior Member

Tutto ok, funzionaaaaaaa
http://www.risorsefantacalcio.it

Risorse per tutti gli appassionati di fantacalcio da cui prelevare news, probabili formazioni, voti del corriere e gazzetta e tanhto altro.

SSUPERPIPPO Profilo | Guru

Ciao,

sono stato assente un paio di giorni per lavoro e vedo che nel frattempo hai risolto... ma come? sembrerebbe che tu habbia seguito le mie iniziali istruzione... ma consa non funzionava?

Fammi sapere, ciao

Alessandro

http://blogs.dotnethell.it/alebadalin

ertulio Profilo | Senior Member

Si, Grazie alla segnalazione di freeteo sono risucito a convertire il codice del link da te come da freeteo segnalatomi in vb.net. Praticamente quando lo segnalasti tu, nella conversione a vb sbagliavo qualcosa. Cmq ora ho risolto in questo modo, ti mando il codice.

Dim miaConn As OleDbConnection = New OleDbConnection(("Data Source=" + Application.StartupPath + "\AnamnesiAtleta.mdb; Provider=Microsoft.Jet.OLEDB.4.0;"))
Dim miaDataAdapter As OleDbDataAdapter = New OleDbDataAdapter("select * from TempAnamnesiAtleta", miaConn)
Dim miaTab As DataTable = New DataTable("Immagine")
miaDataAdapter.Fill(miaTab)

For Each miaDr As DataRow In miaTab.Rows
miaDr("Immagine") = getFile(CType(miaDr("Foto"), String))
Next
'---- setto la sorgente del report

Dim rpt As New CrystalReport7
rpt.SetDataSource(miaTab)
CrystalReportViewer1.ReportSource = rpt

End Sub

Private Function getFile(ByVal pFilePath As String) As Byte()
Dim mioStream As FileStream = New FileStream(pFilePath, FileMode.Open, FileAccess.Read)
Dim mioBuffer() As Byte = New Byte((mioStream.Length) - 1) {}
mioStream.Read(mioBuffer, 0, mioBuffer.Length)
Return mioBuffer
End Function


Ora però sorge un problema, quando avvio il programma e visualizzo i dati per poi inviarli al report tutto bene, se torno indietro per inviare i nuovi dati al report l'immagine è sempre la stessa, anche se io ho cambiato percorso. inoltre nella form quando inserisco una nuova immagine tramite percorso mi visualizza questo errore a questa riga:


Me.PictureBox1.Image = System.Drawing.Bitmap.FromFile(foto) ======== Memoria Insufficiente

Come mai nel report le foto non vengono aggiornate nonostante il percorso sia cammbiato e mi segnala memoria insufficiente nonostante abbia 1 Gb di ram? Grazie

http://www.risorsefantacalcio.it

Risorse per tutti gli appassionati di fantacalcio da cui prelevare news, probabili formazioni, voti del corriere e gazzetta e tanhto altro.

ertulio Profilo | Senior Member

Ho risolto, era il formato delle immagini troppo grande, grazie
http://www.risorsefantacalcio.it

Risorse per tutti gli appassionati di fantacalcio da cui prelevare news, probabili formazioni, voti del corriere e gazzetta e tanhto altro.

SSUPERPIPPO Profilo | Guru

Ormai ti risolvi i problemi da solo...

... forte, ciao.

Alessandro

http://blogs.dotnethell.it/alebadalin

freeteo Profilo | Guru

ok ertulio, accetta qualche risposta cosi' marchiamo il thread (abbastanza corposo direi) come risolto...
Grazie
ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

ertulio Profilo | Senior Member

Vi ringrazie entrambi per l'aiuto
http://www.risorsefantacalcio.it

Risorse per tutti gli appassionati di fantacalcio da cui prelevare news, probabili formazioni, voti del corriere e gazzetta e tanhto altro.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5