Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Program radi u debug modu, ali nece u Run modu ???

[es] :: Visual Basic 6 :: Program radi u debug modu, ali nece u Run modu ???

Strane: 1 2

[ Pregleda: 4194 | Odgovora: 20 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Ivan_Grunf
Ivan Ivan

Član broj: 74154
Poruke: 35
*.ptt.yu.



+1 Profil

icon Program radi u debug modu, ali nece u Run modu ???07.02.2006. u 10:21 - pre 222 meseci
Imam sledeci problem: program mi radi kada prolazim kroz kod rucno (zaustavim ga u kodu i idem liniju po liniju) , dok, kada ga pustim da odradi sve normalno on se zablokira. Takodje, kada ubacim neku poruku (msgbox) unutar koda (sto znaci da on saceka malo sa izvrsavanjem) opet sve radi ok. Evo koda koji pravi problem:

Code:

      Dim objOutlook As New Outlook.Application
      Dim objMail As Outlook.MailItem
      Dim objRecipient As Outlook.Recipient

      Set objMail = objOutlook.CreateItem(olMailItem)

      With objMail
         Set objRecipient = .Recipients.Add(strAddress)
         objRecipient.Type = olTo
         .Subject = "dokument"
         .Attachments.Add (App.Path & "\doc\fajl.doc")
         .Send
      End With

      Set objRecipient = Nothing
      Set objMail = Nothing
      Set objOutlook = Nothing

      SendMail = True
      
Clear:
   Exit Function
   
MsgError:
   MsgBox Err.Description
   SendMail = False
   GoTo Clear


Otprilike mi se cini da problem nastaje u ovom poslednjem delu kada se objekti unistavaju i oslobadjaju memoriju posto sam primetio kada ja prolazim kod, treba im malo vremena da to urade. Pretpostavljam da je problem u brzini unistavanja objekata i njihovoj povezanosti, ali ne znam kako da to resim!
 
Odgovor na temu

Ivan_Grunf
Ivan Ivan

Član broj: 74154
Poruke: 35
*.ptt.yu.



+1 Profil

icon Re: Program radi u debug modu, ali nece u Run modu ???07.02.2006. u 15:33 - pre 222 meseci
A da, evo jos jedne zanimljivosti u vezi ovoga:
Kada mi je ukljucen Outlook, program radi, a kada nije onda program pravi ovaj problem, tj. blokira se. Takodje, radise o Outlook-u, a ne o Outlook Express-u, da ne bude zabune.

Nadam se da neko ZNA resenje...
 
Odgovor na temu

batalule

Član broj: 39086
Poruke: 105
*.magnetplus.net.



Profil

icon Re: Program radi u debug modu, ali nece u Run modu ???07.02.2006. u 22:09 - pre 222 meseci
Pa program ti radi u debug modu zato sto Outlook ima vremena da posalje mail a u runtime-u on krene da salje mail a ti mu ubijes referencu sa Nothing.

Mogao bi da koristis ItemSend event pa u njemu da uradis garbage collection.
Znaci napises negde
[Private][Public] WithEvents objOutlook As Outlook.Application
Onda postavi varijablu u nekoj rutini sa
Set objOutlook = New Outlook.Application
napravi mail, posalji ga sa Send metodom a negde u modulu ili formi napisi event handler:

Private Sub objOutlook_ItemSend(ByVal Item As Object, Cancel As Boolean)
' ovde proveri da li je poslato ono sto si hteo da posaljes pa ako jeste onda zavrsi
' sa aplikacijom
objOutlook.Quit
' Pa tek kada uradis quit onda ubij reference inace ako ovo ne uradis moze da ti se
' desi da imas jedno xyz Outlook aplikacija koje mozes da vidis u Task Manageru
End Sub

Mada, mislim da sve ovo ima da ti radi kako si vec napisao ako samo izostavis onaj deo sa Nothing ali kao sto rekoh Outlook ti ostaje u memoriji samo sto ga ne vidis na task baru. Uz put jedna napomena: kada radis sa office aplikacijama ili bilo kojim drugim na koje se referenciras imas magicni F2 [Object Browser] pa u njemu prvo pogledas dogadjaje, svojstva i metode pa jos ako je aplikacija valjano dokumentovana desni klik pa Help i skapiras kako app sljaka u pozadini

Evo ti objasnjenje za pomenuti event:
ItemSend occurs whenever an item is sent, either by the user through an Inspector (before the inspector is closed, but after the user clicks the Click button) or when the Send method is used in a program. This event is not available in VBScript.

 
Odgovor na temu

Ivan_Grunf
Ivan Ivan

Član broj: 74154
Poruke: 35
*.ptt.yu.



+1 Profil

icon Re: Program radi u debug modu, ali nece u Run modu ???08.02.2006. u 12:19 - pre 222 meseci
Citat:
batalule: Private Sub objOutlook_ItemSend(ByVal Item As Object, Cancel As Boolean)
' ovde proveri da li je poslato ono sto si hteo da posaljes pa ako jeste onda zavrsi
' sa aplikacijom

Kako ovo da proverim? Probao sam da ubacim property Sent, ali ono je ili False, ili mi kaze <Item have been moved or deleted.> tako da ne mogu da utvrdim njegovu vrednost, a treba da vrati boolean.

U stvari, ja sam pokusao da posle slanja sa naredbom objOutlook.Send napravim petlju koja ispituje da li je objOutlook.Sent = true ili False, koja bi se vrtela sve dok nije true, ali posle funkcije Send, vrednost property-ja Sent je <Item have been moved or deleted.> i to onda ode na errorhandler sa tom porukom. Kako da realizujem moju ideju?

Citat:

objOutlook.Quit

' Pa tek kada uradis quit onda ubij reference inace ako ovo ne uradis moze da ti se
' desi da imas jedno xyz Outlook aplikacija koje mozes da vidis u Task Manageru
End Sub

Ovo sam i ja ocekivao, ali nekako se on u Task Manageru izbrise, iako ne uradim objOutlook.Quit, vec samo Set objOutlook = Nothing. To sa Word-om, recimo, ne prolazi. Njega bas moras da zatvoris, pa onda tek "set nothing"
 
Odgovor na temu

Ivan_Grunf
Ivan Ivan

Član broj: 74154
Poruke: 35
*.ptt.yu.



+1 Profil

icon Re: Program radi u debug modu, ali nece u Run modu ???09.02.2006. u 10:27 - pre 222 meseci
Ok, probao sam da implementiram ovaj metod Private Sub objOutlook_ItemSend u istom modulu gde mi je ta funkcija za slanje mailova. Evo kako sam napisao kod koji odgovara onim nazivima objekata iz poruke na pocetku (dodacu ponovo i taj kod):
Code:

Private Sub objOutlook_ItemSend(ByVal objMail As Object, Cancel As Boolean)
    Prompt$ "Da posaljem mail? " & objMail.Subject & "?"
    If MsgBox(Prompt$, vbYesNo + vbQuestion, "Sample") = vbNo Then
        Cancel = True
    End If
End Sub

Kada posaljem mail, ova procedura se ne okida. Zasto?
Evo ga i kod od f-je koja salje mailove, a koja je u istom modulu gde i procedura _ItemSend:
Code:

      Dim objOutlook As New Outlook.Application
      Dim objMail As Outlook.MailItem
      Dim objRecipient As Outlook.Recipient

      Set objMail = objOutlook.CreateItem(olMailItem)

      With objMail
         Set objRecipient = .Recipients.Add(strAddress)
         objRecipient.Type = olTo
         .Subject = "dokument"
         .Attachments.Add (App.Path & "\doc\fajl.doc")
         .Send
      End With

      Set objRecipient = Nothing
      Set objMail = Nothing
      Set objOutlook = Nothing

      SendMail = True
      
Clear:
   Exit Function
   
MsgError:
   MsgBox Err.Description
   SendMail = False
   GoTo Clear


Mozda bi za ovo trebao vec da otvorim drugu temu, neka odluci moderator...
 
Odgovor na temu

batalule

Član broj: 39086
Poruke: 105
*.magnetplus.net.



Profil

icon Re: Program radi u debug modu, ali nece u Run modu ???10.02.2006. u 16:23 - pre 222 meseci
Citat:

Kada posaljem mail, ova procedura se ne okida. Zasto?
Evo ga i kod od f-je koja salje mailove, a koja je u istom modulu gde i procedura _ItemSend:


Na tvoje "Zasto" i ja imam "zasto". Moje "zasto" glasi: zasto nisi lepo procitao sta sam ti napisao? Tamo ti je sve objasnjeno vec ali ponavljam:
ne mozes da napises
Code:

Dim objOutlook As New Outlook.Application 'to ti je early binding pogledaj malo MSDN ako ne znas sta je rano vezivanje i obavezno procitaj "Handling an Object's Events" 

nego moras da koristis event pa onda moras da napises kao sto sam ti vec rekao
Code:

Dim objOutlook as Outlook.Application' ovo napises u "Declarations section" forme 

pa onda negde u nekoj rutini/funkciji kako ti je volja vec uradi
Code:

Set objOutlook = New Outlook.Application

Tek ovako ce da ti se okine
Code:

Private Sub objOutlook_ItemSend(ByVal objMail As Object, Cancel As Boolean)


iz ovoga sto si napisao u poslednjoj poruci vidi se da nisi tako uradio.

[Ovu poruku je menjao batalule dana 10.02.2006. u 17:27 GMT+1]
 
Odgovor na temu

Ivan_Grunf
Ivan Ivan

Član broj: 74154
Poruke: 35
*.ptt.yu.



+1 Profil

icon Re: Program radi u debug modu, ali nece u Run modu ???13.02.2006. u 10:49 - pre 222 meseci
Ok batalule, kao sto vidis nov sam ovde tako da se nisam snasao odmah sa tvojim predlozima. Nadam se da to nije problem. Evo uspeo sam da od tvog prvog i ovog drugog predloga napravim neki kod koji okida event _ItemSend, ali i dalje imam problem. Naime, kada unutar te metode pokusam da ispitam (sa property-jem Sent) da li je mail poslat, on sve vreme pokazuje da je False. Evo koda koji se poziva (sada sam sve premestio u klasu):

Code:

Public WithEvents objOutlook As Outlook.Application

Private Sub Class_Initialize()
    Set objOutlook = New Outlook.Application
End Sub


Public Function SMail(ByVal strFile As String, _
                         strStatus As String, _
                         Optional ByVal strComputerName As String, _
                         Optional ByVal strOpId As String, _
                         Optional strAddress As String = "[email protected]") As Boolean
      
    On Error GoTo MsgError
    
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    Dim objMail As Outlook.MailItem
    Dim objRecipient As Outlook.Recipient

    Set objMail = objOutlook.CreateItem(olMailItem)
    Set objRecipient = objMail.Recipients.Add(strAddress)
    objRecipient.Type = olTo
       
    objMail.Subject = "Proba"
        
    objMail.Attachments.Add (App.Path & "\doc\" & strFile)
    
    objMail.Send

    fso.DeleteFile App.Path & "\doc\" & strFile
    SMail = True

Clear:
    
    Set fso = Nothing

    Set objRecipient = Nothing
    Set objMail = Nothing
    
   Exit Function
   
MsgError:
   MsgBox Err.Description
   SMail = False
   GoTo Clear

End Function


Private Sub objOutlook_ItemSend(ByVal objMail As Object, Cancel As Boolean)
    
    While Not objMail.Sent

    Wend
    
    Set objMail = Nothing
    Set objRecipient = Nothing
    
End Sub

Private Sub Class_Terminate()
    Set objOutlook = Nothing
End Sub


Gde gresim? Meni se cini da je problem i u nekom podesavanju Outlook-a. Meni stoji oznacena opcija 'Send messages immediatly when connected' u Outlook-u. Kada to ne stoji oznaceno, program radi ok, a pisma ostanu u Outbox-u.
 
Odgovor na temu

Ivan_Grunf
Ivan Ivan

Član broj: 74154
Poruke: 35
*.ptt.yu.



+1 Profil

icon Re: Program radi u debug modu, ali nece u Run modu ???13.02.2006. u 10:52 - pre 222 meseci
Imam jos jedno interesantno zapazanje: Ako je zaista problem u tome sto ja pokusavam da ubijem mail dok on pokusava da ga posalje, zasto bi postojala razlika u odnosu na to da li je Outlook ukljucen ili ne.
Znaci, kada je Outlook ukljucen, sve prodje ok, a kada je iskljucen onda pravi problem.
 
Odgovor na temu

Ivan_Grunf
Ivan Ivan

Član broj: 74154
Poruke: 35
*.ptt.yu.



+1 Profil

icon Re: Program radi u debug modu, ali nece u Run modu ???13.02.2006. u 11:47 - pre 222 meseci
Inace, ja koliko znam (a pogledao sam i u knjizi za VB koju imam "Vodic kroz VB6", QUE) rano povezivanje je sve ono gde ti unapred zadas tip objekta, nezavisno od toga da li mu i odvojis memoriju sa New, ili ne. Tako da ona tvoja deklaracija Dim objOutlook as Outlook.Application nije kasno povezivanje vec isto tako rano povezivanje. Kada bi definisao:
Dim objOutlook as Object
pa kasnije uradio
Set objOutlook = New Outlook.Application ili
Set objOutlook = CreateObject("Outlook.Application")
to bi bilo kasno povezivanje (vidi neku literaturu)

Citat:
batalule: Na tvoje "Zasto" i ja imam "zasto". Moje "zasto" glasi: zasto nisi lepo procitao sta sam ti napisao? Tamo ti je sve objasnjeno vec ali ponavljam:
ne mozes da napises
Code:

Dim objOutlook As New Outlook.Application 'to ti je early binding pogledaj malo MSDN ako ne znas sta je rano vezivanje i obavezno procitaj "Handling an Object's Events" 

nego moras da koristis event pa onda moras da napises kao sto sam ti vec rekao
Code:

Dim objOutlook as Outlook.Application' ovo napises u "Declarations section" forme 

 
Odgovor na temu

Shadowed
Vojvodina

Član broj: 649
Poruke: 12851



+4784 Profil

icon Re: Program radi u debug modu, ali nece u Run modu ???13.02.2006. u 12:18 - pre 222 meseci
Kada je Outlook aktivan manje mu je vremena potrebno da posalje mail.
 
Odgovor na temu

Ivan_Grunf
Ivan Ivan

Član broj: 74154
Poruke: 35
*.ptt.yu.



+1 Profil

icon Re: Program radi u debug modu, ali nece u Run modu ???13.02.2006. u 14:36 - pre 222 meseci
OK,evo po 1001. put sam propratio sve (iza svake linije koda upisivao sam neki komentar u log fajl), izbacio sam kod koji unistava bilo koji objekat koji je vezan za Outlook, i opet je program ublokirao, i to onda kada je pokusao da izadje iz f-je u kojoj saljem mail. Cak vrlo cesto mi se desi da mail stigne na adresu, a program stoji ublokiran.

Pretpostavljam da on i pri izlasku iz f-je pokusava da ubije Outlook,ali ne moze. Prvo sam mislio da je problem u objektu MailItem, ali izgleda da nije. Nije mi jasno zasto ne mogu da unistim Outlook objekat???
 
Odgovor na temu

batalule

Član broj: 39086
Poruke: 105
*.magnetplus.net.



Profil

icon Re: Program radi u debug modu, ali nece u Run modu ???13.02.2006. u 20:42 - pre 222 meseci
Pa upisi lepo u petlju

Code:

While Not objMail.Sent
DoEvents ' ovo upisi 
Wend


jer ti ovako toliko nagaris Outlook i VB da oni zajedno pojedu 100% procesorkog vremena. Ja probao kod mene i radi i sa podignutim Outlook-om i bez njega.
 
Odgovor na temu

Ivan_Grunf
Ivan Ivan

Član broj: 74154
Poruke: 35
*.ptt.yu.



+1 Profil

icon Re: Program radi u debug modu, ali nece u Run modu ???14.02.2006. u 07:36 - pre 221 meseci
Citat:
batalule: Pa upisi lepo u petlju

Code:

While Not objMail.Sent
DoEvents ' ovo upisi 
Wend


jer ti ovako toliko nagaris Outlook i VB da oni zajedno pojedu 100% procesorkog vremena. Ja probao kod mene i radi i sa podignutim Outlook-om i bez njega.


Ne, nije pomoglo. Jedino sto je drugacije jeste da mi se forma sada ne "slogira" vec mogu da je pomeram a ranije nisam mogao.

A inace kada se ublokira, procesor je na 0% , a procesorsko vreme objekta Outlook je oko 1-2 sec. Cesto on i posalje mail (pre ove izmene) tako da kada ga ubijem u task manageru, program nastavi da radi...
 
Odgovor na temu

batalule

Član broj: 39086
Poruke: 105
*.magnetplus.net.



Profil

icon Re: Program radi u debug modu, ali nece u Run modu ???14.02.2006. u 12:59 - pre 221 meseci
Evo pogledao sam kako to radi "ispod haube" i evo u cemu je stvar: naveo sam te na pogresan put u principu ali sam to tek sada uvideo... sorry
Event "ItemSend(ByVal objMail As Object, Cancel As Boolean)" ima jedan problem a to je da se njemu prosledjuje objMail po vrednosti a ne po referenci (to sam prevideo) a kada se on desi mail se tek premesta u Outbox - drugim recima ne mozes da ga pitas za Sent property jer je on uvek u ovom eventu False. Ali mozes nesto drugo sada mi pada napamet a to je da pogledas u Outbox ili u Sent Items folderu (izeksperimentisi malo) pa tamo vidi jel ima maila koji si poslao (Outlook prvo napravi mail, onda ga premesti u Outbox iz outbox-a ga salje odmah ako ti je "Send imedietely" opcija ukljucena a na "SendReceive" ako nije ukljucena, i TEK kada ga posalje premesti ga u Sent Items znaci ovo je gde bi posle nekog vremena trebao da bude). Znaci, iskometarisi sav kod u eventu i ono ce da radi - mora da radi - a ostatak posla prepusti Outlook-u nek on vodi racuna o mailu i neka ga salje shodno njegovim podesavanjima. Ono sto tebe treba da interesuje je ne da li je mail poslat (to ce Outlook da uradi sam ako ga podesis kako treba) nego da li je mail stigao na odrediste pa mozes da dodas header u mail "request a read receipt for this message". Izvini jos jedanput na pogresnom navodjenju i javi jel si uspeo.
 
Odgovor na temu

Ivan_Grunf
Ivan Ivan

Član broj: 74154
Poruke: 35
*.ptt.yu.



+1 Profil

icon Re: Program radi u debug modu, ali nece u Run modu ???14.02.2006. u 13:50 - pre 221 meseci
Pa vidis, tu je mali problem. Outlook mi je podesen na 'Send messages immediatly when connected' i da proverava na svakih 1 min. I kada je ukljucen, moj prog radi ok. ALI, ako iskljucim OL, onda se desava da neki put prodje , a neki put ne. Najcesce, prodje mail (sto znaci da je dosao do sent foldera), a prog mi se ublokira. Probao sam na jos jednoj slicnoj makini (samo manje ram-a), ista prica, samo dosta cesce bude sve ok, ali se desi i da se ukoci. To je meni nedopustivo jer pravim prog koji treba da radi non-stop mesecima i ne sme da se desi da se ublokira ni jednom. Takodje, kada mi nije ukljucena opcija da proverava na svakih x min, mail mi ostane u Outbox-u. I tada sve se zavrsi ok. Ali ne posalje mi mail.

Sto se tice gledanja u Sent items, nema svrhe, jer mail stigne tamo a Outlook ostane u memoriji (sto mi ublokira program - verovatno jer ne moze da rastereti memoriju). Ja sam cak pokusao i da ga ostavim u memoriji ali opet isto - verovatno izlazak iz f-je takodje pokusa da ukine reference na memoriju pa mu to dodje na isto.

Znaci ja sam hteo da ispitujem da li je mail poslat da bi znao kada da ubijem Outlook, ali ocigledno nije u tome problem. Ili mozda jeste? A kada program posalje mail, a Outlook ostane ukljucen, ublokiravsi moj program, ja ne mogu vise na taj nacin da resim problem. Znaci, sada me zanima da li neko moze da mi pomogne da otkrijem zasto Outlook nece da mi se ukine iz memorije? Da li mozda u task manageru -> View -> Select Coloumns mogu to da vidim? Verovatno je sa nekim drugim objektom 'mrtvo zakljucan'. Ali ne znam kako to da provalim!
 
Odgovor na temu

Ivan_Grunf
Ivan Ivan

Član broj: 74154
Poruke: 35
*.ptt.yu.



+1 Profil

icon Re: Program radi u debug modu, ali nece u Run modu ???14.02.2006. u 13:53 - pre 221 meseci
Ili mozda neko ima neku finu f-ju/klasu u VB-u, koja salje mail-ove sa attachmentima bez outlook-a...
 
Odgovor na temu

Nibble

Član broj: 63173
Poruke: 302
*.dlp197.bih.net.ba.



+1 Profil

icon Re: Program radi u debug modu, ali nece u Run modu ???14.02.2006. u 14:25 - pre 221 meseci
Jel to pravis nekog mass mailera ;).Evo ti kod za slanje meilova bez winsock ocx kontrole(Just API) naravno uz mogucnost slanja attachmenta.
Prikačeni fajlovi
 
Odgovor na temu

batalule

Član broj: 39086
Poruke: 105
*.magnetplus.net.



Profil

icon Re: Program radi u debug modu, ali nece u Run modu ???14.02.2006. u 18:35 - pre 221 meseci
Imas na PlanetSource-u jedno desetak mailera pa odaberi ... :-)
 
Odgovor na temu

Ivan_Grunf
Ivan Ivan

Član broj: 74154
Poruke: 35
*.ptt.yu.



+1 Profil

icon Re: Program radi u debug modu, ali nece u Run modu ???16.02.2006. u 10:46 - pre 221 meseci
Ma joook, ne planiram da napravim nikakav mass mailer, naprotiv, program treba u jednoj firmi da pakuje s vremena na vreme neki fajl i da ga salje.

Ok, a koja je adresa planetsource-a? Pretpostavljam da sam jedini koji ne zna :)
 
Odgovor na temu

Ivan_Grunf
Ivan Ivan

Član broj: 74154
Poruke: 35
*.ptt.yu.



+1 Profil

icon Re: Program radi u debug modu, ali nece u Run modu ???16.02.2006. u 14:43 - pre 221 meseci
Citat:
Nibble: Jel to pravis nekog mass mailera ;).Evo ti kod za slanje meilova bez winsock ocx kontrole(Just API) naravno uz mogucnost slanja attachmenta.

Ja nisam uspeo da nadjem mogucnosti attachmenta :( Mislim da gresis.

A inace koja je razlika u slanju ako ide preko winsocket-a, CDO, MAPI objekata i sta god jos ima? Sta je najcistije, sta se na sta oslanja itd. Bas me to zanima.
 
Odgovor na temu

[es] :: Visual Basic 6 :: Program radi u debug modu, ali nece u Run modu ???

Strane: 1 2

[ Pregleda: 4194 | Odgovora: 20 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.