Teen ohjelmaa, joka lähettää ohjelmaan asetetun päivämäärän täytyttyä varoituksen sähköpostilla. Jos teen lähetyksen tyylillä, kuin jotain nappia painettaisiin lähettääkö ohjelma mahdollisesti sähköpostin tukkoon. Vai tarvitseeko ottaa jotain muuta huomioon. Noh ilmaisin taas asian epäselvästi.
Jos käsken ohjelmaa lähettämään s-postia, kun tietty pvm täyttyy ymmärtääkö vb6 lähettää tapahtuman vain kerran, vai toistaako se itseään koko ko. päivän? Ja jos toistaa kuinka voin tehdä ohjelmasta sellaisen, että se haistelee pvm. vain kerran. Huom. Ohjelma on käyttäjällä päällä jatkuvasti.
Tässä tapauksessa ohjelman käyttäjä merkitsee tietokantaan päivämäärän, milloin Hän haluaa ohjelman muistuttavan Häntä tapahtumasta. Ohjelma edelleen lähettää käyttäjän sähköpostiin muistutuksen tapahtumasta em. päivämäärän täytyttyä.
Kiitokset vastauksista jo etukäteen!!!
Moro Apuvaaaa!
Elikäs siis periaatteessa olisi hyvä olla kaksi eri ohjelmaa: Agentti (voisi toteuttaa esim. Windows Service pohjalta), joka tutkii tietokannan ja hoitaa mailaamisen sekä sovellus jolla hoidellaan tietokannan hallinnointi.
Tietokantaan voi pistää vivun joka asetetaan True asentoon, kun mahdolliset päivän mailit on kertaalleen lähetetty...
Jos nyt agentti avataan vaikkapa Windowsin käynnistyksen yhteydessä niin se kannattaisi laittaa sulkemaan itsensä automaattisesti jos tietokannasta ei löydy ko. päivälle merkintää tai kun mahdolliset mailit on lähetetty.
Kun hallintasovellus käynnistetään niin sen tulisi ensitöikseen tsekkata prosesseista rullaako agentti ja pysäyttää prosessi mikäli rullaa.
Kun ja jos tietokantahallinnassa tehdään muutoksia niin hallintaohjelman pitäisi sulkemisensa yhteydessä käynnistää agentti (joka sitten taas sulkeutuu automaattisesti, kun tietokanta on tsekattu), jolloin homma hoituu jokseenkin synkronoidusti...
Kannattaa laittaa tietokantaan myös kenttä, että viesti on lähetetty. Sähköpostin lähettävä kikkare sitten merkitsee ko. kenttään että viesti on lähetetty, eikä yritä lähettää sitä enää uudelleen.
Kiitokset avusta, mutta ratkaisin ongelman niin, että pistin käyttäjän määrittämään kellonajan, milloin viesti tulee lähettää. Em. kellonaikaa ei ole kuin kerran päivän aikana ja näin ohjelma lähettää vain yhden viestin.
Vielä kerran kiitokset vaivannäöstä.
Apuvaaaa
Kyllä tuo Grezin ehdottama ratkaisu sentään on varmempi ja helppo toteuttaa. Jos ohjelma tarkistaa vaikka sekunnin välein, onko kello niin paljon, että viesti pitää lähettää, ja aika on määritelty sekunnin tarkkuudella, on mahdollista että yhtään tarkistusta ei tehdä oikeaan aikaan, jos joku muu ohjelma kuormittaa konetta, vaikkapa virustutka innostuu touhuamaan juuri silloin. Jos taas tarkistus tehdään vaikka sekunnin välein, mutta aikaa verrataan kymmenen sekunnin tarkkuudella, lähtee viesti varmasti, mutta useimmiten 10 kertaa.
hk
No tuota en nyt tullutkaan ajatelleeksi. Tein kylläkin Grezin mukaisen lisäyksen tietokantaan ja tästä sain myös idean tehdä lähetyslogin. Täytynee tuumata miten tuon toteutan.
Kohta olen täällä taas huutamassa Apuvaaaa.
No heippa taas!
Jos ehdottamani vipu eli {kenttä:mailattu->arvo:true/false} ei jostain kumman syystä toimisi niin voihan sen viritemän säätää poistamaan ko. päivän tietueet heti kun mailit on lähetelty ja sitä raataa...
Itse ehdottaisin päivämäärä&kellonaika-kenttää lähetykselle. Null jos ei lähetetty. Samalla saisi kätevästi lähetyslokin.
No morjens taas!
ITSE taas laittaisin tietokantaan lokitaulun jonne pukkaisin tiedot lähetetyistä posteista ja liittäisin tietokanatahllinta-ohjelmaan toiminon joka tsekkaisi silloin tällöin sähköpostipalvelimelta mahdolliset Mail delivery failed-aiheiset viestit ja jos sellainen/sellaisia löytyisi toiminto pukkaisi niistä tiedon lokitauluun, poistaisi em. viestit palvelimelta ja näyttäisi viestilootalla käyttäjälle, että ko. viesti/viestejä ei ole voitu toimittaa perille syystä vikakoodi: FF jne.
että sellaista hauskaa taas tällä kertaa...
Toki, jos tuollaiselle on tarvetta. Oma ehdotukseni ei vaatisi käytännössä lainkaan lisätyötä verrattuna pelkkä kyllä/ei -kenttään verrattuna, mutta silti sieltä pystyisi tarvittaessa katsomaan mihin aikaan niitä viestejä oikeasti on lähetetty.
Heippa taas!
Ehdottamassani viritelmässä on se etu, että jos ja kun agentti-ohjelma lähettää niin se lisää lähettämisen jälkeen lokitauluun tarvittavat tiedot ja poistaa tsekattavasta taulusta ko. päivämäärän tietueet. Tällöin ei agentin tsekkaamien tietueiden määrä kasva edes ajankaan myötä mittavaksi, jolloin agentti suoriutuu tehtävästään aina suurinpiirtein samalla nopeudella.
neau33 kirjoitti:
Tällöin ei agentin tsekkaamien tietueiden määrä kasva edes ajankaan myötä mittavaksi, jolloin agentti suoriutuu tehtävästään aina suurinpiirtein samalla nopeudella.
Ja tämä toisaalta onnistuu myös laittamalla tuohon "lähetetty" kenttään indeksi.
No MORJENS!
@Grez: siis ettäkö SQL SELECT query ei jollain konstilla tsekkaisikaan kaikkia tietueita???
neau33 kirjoitti:
@Grez: siis ettäkö SQL SELECT query ei jollain konstilla tsekkaisikaan kaikkia tietueita???
No moi Nea.
Jep, näin on. Tutustu ihmeessä indekseihin (ne auttaa monessa muussakin suorituskykyjutussa) ja sitten tietysti tarvitset where-avainsanan kyselyyn!
Heippa taas!
@Grez: josko vääntäisit pienoisen rautalankamallin..?
Indeksi on vähän niin kuin kirjan aakkosellinen hakemisto. Voit lukea tietyn sanan sisältävät sivut kätevästi ilman, että muita sivuja täytyy lukea ollenkaan.
Esimerkin tapauksessa WHERE-lause voi käyttää indeksiä käydäkseen läpi vain ne tietueet, joissa "lähetetty" on null.
Heippa taas!
@Grez: Tuossa minun mallissani ei ole tarvetta "selata mitään hakemistoja" eikä tsekkailla erikseen suoritetaanko vertailu vaiko eikö syystä, että tietojoukko pysyy aina minimaalisena ja erilliseen lokintauluun viennin aiheuttama hidastus kuittautuu sillä, että indeksin asettaminen hidastaa DML operaatioita (UPDATE jne.)
Niin, kuten sanoinkin, niin myös indeksillä saavutetaan se, että agentti selviytyy aina suurin piirtein samassa ajassa. En toki sanonut ettei sinunkin esittämäsi vaihtoehto toimi. (tosin kyllä se tietokanta sinunkin vaihtoehdossasi joutuu tekemään vastaavia hakuja, vaikka taulussa tiedot näyttävätkin olevan kivasti peräkkäin)
Mutta onhan se hienoa että pääsit tutustumaan indekseiden ihmeisiin. Niistä on taatusti sinullekin hyötyä jatkossa, vaikkei juuri tässä tapauksessa olisikaan.
Aihe on jo aika vanha, joten et voi enää vastata siihen.