View Full Version : [vb] report & e-mail
disumano
25-05-2004, 10:57
ho creato un report con il datareport di vb6 e vorrei aggiungere queste 2 possibilità:
1) vorrei che a piè pagina del report ci fossero data e n° di pagina del report (nella sezione apposita del report non è possibile inserire controlli se non label);
2) vorrei poter spedire il report per e-mail (semplicemente creare un nuovo messaggio che abbia come corpo o come allegato il report, non voglio inviarlo direttamente da vb, insomma come "mailto:
[email protected]").
:confused:
ringrazio in anticipo per i suggerimenti
disumano
25-05-2004, 11:11
mi serve poi anche poter fare il refresh del recordset sul quale è basato il report, ma non trovo il metodo refresh...:(
Allora facciamo una cosa per volta... per visualizzare il numero delle pagine devi creare una label che contenga il testo "%p", in questa maniera ti va a leggere il numero della pagina corrente!
Per il resto mangio e poi mi metto al lavoro :)
Originariamente inviato da disumano
mi serve poi anche poter fare il refresh del recordset sul quale è basato il report, ma non trovo il metodo refresh...:(
Per fare il metodo di refresh se la tua varibile recordset si chiama rs, devi fare così: rs.Requery(adCmdText)
disumano
25-05-2004, 14:25
ovviamente tutto ok con il numero di pagina ;)
in
rs.Requery(adCmdText)
adcmdtetxt sarebbe uno dei controlli del report?
No è un parametro che passi alla funzione per fare il refresh del recordset.
Naturalmente il report va riaperto da capo.
disumano
25-05-2004, 14:36
io ho un pulsante che fa:
Private Sub stampa_Click()
report_forn.Show
data1.rsfornitori.Requery (adCmdText)
End Sub
però mi dice "L'operazione non è consentita se l'oggetto è chiuso".
ha a che fare con la gestione pessimistica?
Ma tu mica usi il controllo data per fare la gestione del database?
:( brutta cosa....
Se ti posso dare un consiglio impara a lavorare con ADO a mano... ti posto un esempio che ho trovato (perchè nn mi va di crearlo io) :p
PS: io intanto sto cercando per la mail, ci sono quasi riuscito, devo solo superare ancora qlc ostacolo :)
disumano
25-05-2004, 14:52
non uso il controllo data, in genere uso il controllo ado, e in questo caso ho usato il dataenvironment.
il fatto è che preferisco avere un riferimento visuale nei miei progetti, quindi vedendo il controllo ado sul form capisco a cosa serve quel form in quel progetto :p
in ogni caso ora ho bisogno di ultimare un programma che mi sta prendendo da un mesetto, e mi manca solo la gestione delle stampe.
le prime + imbecilli le ho fatte con printform (te ne ricorderai perché anche lì ci sei andato a finire di mezzo:D );
queste ultime che sono + complesse le ho fatte con i report.
adesso anche se si tratta di usare un artificio (nella mia "carriera" ne ho usati di tutti i colori, a fondamenti 2 il professore mi stava per sputare in faccia :D), mi basta che se apro un report, lo richiudo, modifico i dati nel db e poi apro di nuovo il report, questo visualizzi i dati aggiornati.
Bhe infatti è quello che devi fare, rifai la query e rilanci il report e lui rivisualizza i dati aggiornati :D
disumano
25-05-2004, 15:05
ma le query che uso sono dei command del dataenvironment.
come faccio a rifare la query?
con il controllo ado facevo
ado.refresh
e mi passava la paura:D
ora pare che io non possa...
Bhe io nn ho mai usato quel controllo che usi tu, ma credo che se tu chiudi il recorset e rilanci la query e riapri il report dovrebbe essere aggiornato...
disumano
25-05-2004, 15:09
il discorso è che il recordset non lo istanzio io, viene istanziato (credo) all'avvio, e non ho modo di chiuderlo e riaprirlo tramite codice...
Bhe ma io ripeto...usare ADO come tutti i cristiani? :p
disumano
25-05-2004, 15:22
dai, non mi fare una schifezza solo perché sono pigro...:D
cmq sei stato fin troppo gentile, vedrò come fare per aggirare il problema.
aspetto con ansia notizie per l'email (sto provando da stamattina ma nisba)
Bhe le librerie ADO sono + potenti del controllo e soprattutto le tratti come vuoi :D
Cmq per la mail, come mai ti serve esterna a VB ?
disumano
25-05-2004, 15:32
xché credo sia + facile implementare un semplice link che non tutto l'invio, e siccome non mi è stato chiesto di inviare email, ma lo faccio di mia iniziativa, mi basta una cosa semplice, tanto è un di più.
Allroa io ho trovato un metodo per farlo... sai cosa è la CDONTS ?
disumano
25-05-2004, 16:04
ho appena letto che è un oggetto com e che per utilizzarlo serve iis, giusto?
Bhe che serva IIS no, diciamo che è usato su IIS, per mandare le mail tramite ASP, ecco, per facilitare il tutto se utilizziamo questa dll esterna, è un figata della madonna...
Se ti interessa ti mando un esempio che ho fatto :p
disumano
25-05-2004, 16:19
manda manda :oink:
Devi includere nelle references la: Microsoft CDO for NTS 1.2 Library .... se per caso nn c'è in elenco, caricala la dll CDONTS dal browse (si trova in system32)
Dim miaEmail As CDONTS.NewMail
Set miaEmail = New CDONTS.NewMail
miaEmail.From = "
[email protected]"
miaEmail.To = "
[email protected]"
miaEmail.Subject = "Prova"
miaEmail.BodyFormat = 0
miaEmail.MailFormat = 0
miaEmail.Importance = 1
miaEmail.AttachFile ("G:\Y2K\stcascad.reg")
miaEmail.Body = "<B>ciao</B>"
miaEmail.Send
Set miaEmail = Nothing
disumano
25-05-2004, 16:36
mi mandi anche la dll per favore?
mi sa che non ce l'ho sul pc...
disumano
25-05-2004, 16:37
come non detto, l'ho appena presa da internet...
disumano
25-05-2004, 16:43
non per minare la tua onniscenza, ma siamo sicuri che funge?
non ho alcun risultato...
deve esserci qualche conferma?
deve succedere qlcs?
Bhe postami il tuo codice...
Al massimo la dll (che deve essere messa in system32), prova a registrarla così... in esegui scrivi: REGSVR32 CDONTS.DLL
disumano
03-06-2004, 11:59
Originariamente inviato da matpez
Se ti posso dare un consiglio impara a lavorare con ADO a mano...
mi sto cimentando ad usare ADO solo da codice, come mi hai consigliato, e voglio farti una piccola domanduccia:
una volta istanziato rs1 come recordset, con il comando
text1.DataSource=rs1
va tutto bene, ma se scrivo
DataGrid1.DataSource=rs1
mi da l'errore 7004: 'Impossibile assegnare segnalibri al gruppo di righe'.
ne sai qlcs?:confused:
Solitamente non uso un datagrid perchè è poco manovrbile, solitamente tendo ad usare il controllo ListView in modalità report
disumano
03-06-2004, 12:26
ma per il listview non c'è un datasource? i record li linki manualmente?
Si certo, devi popolarteli a mano :)
disumano
03-06-2004, 12:31
ma allora che rottura di marroni:D
Questa è una funzione che ti potrebbe venire utile:
Private Sub AddListViewLine(objLvw As ListView, ParamArray items() As Variant)
Dim nI As Integer
With objLvw.ListItems
With .Add(, , items(0)).ListSubItems
nLenVet = UBound(items)
For nI = 1 To nLenVet
.Add , , items(nI)
Next
End With
End With
End Sub
Il primo parametro è il nome della tua listview e dopo sono tutte le colonne della prima riga
es:
AddListViewLine lvwPianificazione, sVetAux(1), sVetAux(2), sVetAux(3)
Se la richiami lui riempe la seconda riga, e così via...
Originariamente inviato da disumano
ma allora che rottura di marroni:D
Bhe, tutti dicono che VB è facile da usare, io dico, certo, finchè si usano le cose già pronte si, ma le cosee già pronte non sempre rispecchiano quello che si vuole cercare di fare :)
disumano
03-06-2004, 12:33
sempre gentilissimo;)
Ti posto anche questo esempio che utilizza i record:
While Not rs.EOF
Call AddListViewLine(lvwRisultati, rs!IDPaziente, rs!Cognome, rs!Nome, Format$(rs!DataDimissione, "dd/mm/yyyy"), Format$(rs!DataRicovero, "dd/mm/yyyy"))
rs.MoveNext
Wend
Ti conviene infatti utilizzare la prima colonna della lista salvando l'ID, così poi è + facile da recuperare. ;)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.