torstai 12. joulukuuta 2013

VB.net - ReportViewer: RowNumber Function

Tällä funktiolla voi helposti laskea esim. raportin ryhmän sisältämät rivit.

torstai 28. marraskuuta 2013

VB.net ja sähköpostin lähetys

 Sähköpostia voi lähettää monella tavalla, tässä esimerkki kahdesta niistä:
1. SMTP esimerkki: lähettää sähköpostin automaattisesti annetuilla parametreilla.
2. Outlook esimerkki: luo Outlook:iin uuden viestin annetuilla parametreilla (käyttäjä lähettää).


1. SMTP:

Private Sub Send_Smtp(FromEmail As String, ToEmail As String, _
                                       TheAttachements() As String, SubjectEmail As String, _
                                       ContentEmail As String, AttachmntCount As Integer)
        'Lähettää sähköpostia parametreissa annettuilla tiedoilla: keneltä, kenelle, liitteet, otsikko,
        'sisältö, liitemäärä

        'Salaamaton yhteys käytössä:
        Dim SmtpClient As New System.Net.Mail.SmtpClient("smtp.XXX.com", YY)
        'korvaa XXX oman SMTP serverin nimellä, ja YY portin numerolla

        Dim i As Integer = 0
        Dim attach As System.Net.Mail.Attachment
        Dim myMessage As New System.Net.Mail.MailMessage(FromEmail.ToString, _
                                                 ToEmail.ToString, _
                                                 SubjectEmail.ToString, _
                                                 ContentEmail.ToString)
        Try
            Do Until i = AttachmntCount
                attach = New System.Net.Mail.Attachment(TheAttachements(i).ToString)
                myMessage.Attachments.Add(attach)
                i = i + 1
            Loop
            SmtpClient.Send(myMessage)
            MsgBox("Sähköposti ja liitetiedosto(t) " & CStr(AttachmntCount) & _
                         " kpl lähetetty onnistuneesti vastaanottajalle: " & ToEmail & "!")

        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try

    End Sub


2. Outlook

HUOM. Outlook 2010 tarvii VB.net referencen:
Microsoft.Office.Interop.Outlook versin 12.0.0.0

 
'Avaa Outlookin, johon luotu uusi viesti liitteineen, käyttäjän painettava Send
      If liitteet >= 1 Then
                Dim kpl_liitteet As Integer = liitteet
                eTo = "XXXXX"
                'korvaa XXXXX sähköpostiosoitteella, jolle lähetät
                eSubject = "Test"
                eBody = "Test content"

                oApp = New Outlook.Application()
                oMsg = CType(oApp.CreateItem(Outlook.OlItemType.olMailItem), Outlook._MailItem)
                oMsg.Subject = eSubject
                oMsg.Body = eBody
                oMsg.To = eTo

                'Dim sBodyLen As Integer = oMsg.Body.Length
                oAttachs = oMsg.Attachments
                Dim sSource As String
                Dim sDisplayName As String
                If liitteet = 1 Then
                    sSource = "w:\Tilausvahvistukset\" & tiedostot(0)
                    sDisplayName = tiedostot(0)
                    'oAttach = oAttachs.Add(sSource, _
                                                             Outlook.OlAttachmentType.olByValue, _
                                                             sBodyLen + 1, _sDisplayName)
                    oAttach = oAttachs.Add(sSource, , 0 + 1, sDisplayName)
                Else
                    Dim i As Integer = 0
                    Do Until i = liitteet
                        sSource = "w:\Tilausvahvistukset\" & tiedostot(i)
                        sDisplayName = tiedostot(i)
                        'oAttach = oAttachs.Add(sSource, Outlook.OlAttachmentType.olByValue, _
                                                                   sBodyLen + 1, sDisplayName)
                        oAttach = oAttachs.Add(sSource, , i + 1, sDisplayName)
                        i = i + 1
                    Loop
                End If

                ' Display
                oMsg.Display()
      End if

tiistai 29. lokakuuta 2013

MS Access ja SQL server versiot

SQL server 2008 ja MS Access 2013 eivät ymmärrä vanhempia Access versiota esim. 2000 ja 1997.
Access 2013 ei osaa edes avata vanhoja tietokantoja. SQL server 2008:n Import- toiminto ei myöskään ymmärrä vanhoja Access tietokantoja.

Jos sinulla on Access 2000 tai aiemmilla versiolla tehty tietokanta, joka on saatava SQL server 2008 tai uudempaan versioon, niin tarviit Access 2010 version konvertointiin. Se osaa vielä konvertoida vanhemmat Access tietokannat 2002_2003.mdb muotoon, jonka ymmärtää myös SQL server 2008 ja Access 2013.

Näin toimii Microsoft tässä tapauksessa :)

tiistai 24. syyskuuta 2013

ReportViewer - Datan ryhmittely

Avaa Report Data- paneeli (=View - Report data) ja vedä ryhmittelyyn tarvittava kenttä Row Groups- alueelle tai Column groups- alueelle. Kaksoisklikkausella voi lisätä ryhmälle erilaisia ominaisuuksia..

Jos rymittely luotu Wizard:in avulla, ja muutat sitä, niin jossain tapauksessa ei toimi oikein. Mutta ei myöskään anna virhettä käännettäessä ohjelma!

keskiviikko 4. syyskuuta 2013

Visual Studio 2010 - ReportViewer bugi

Someone wrote in web:
"I'm using Visual studio 2010 and Report Viewer 2010 and I have created report with 4 columns of data with the font size 8pt and in the previewer shows OK. When I previewed the report some columns change automatically the size of the font.
In the expression of the columns has a condition to show or not show data something like this
=iif(Fields!Bucket1Amount.Value>0,FormatNumber(Fields!Bucket1Amount.Value,2),"")"

Apu tähän:
Muuta fontti ennenkuin lisäät Expression:iin Condition- ehtoja.

tiistai 27. elokuuta 2013

SQL server 2008 - Views

Näkymän (view) voi kopioida tietokannasta (database) toiseen samalle nimelle.

  1. Valitse view hiiren oikealla, ja avautuvasta valikosta Script view as - Create to: New Query editor window.
  2. Muuta scriptin USE- lauseeseen kohde database nimi.
  3. Execute, ja kopio tehtiin.

maanantai 26. elokuuta 2013

VB.net ja ReportViewer


Tämä ominaisuus on mielestäni huonosti dokumentoitu, niin laitanpa sen itsellenikin tänne muistiksi.

Parametrin välittäminen ReportViewer:n SQL-kyselyyn:
1. Lisää "parametri" report.rdlc Report data:aan, ilman arvo (arvo välitetään koodilla myöhemmin).
2. Avaa Dataset ja siellä valitse Tableadapter - Configure:
    Lisää SQL- lauseeseen välittävän "parametrin" paikalle ?- merkki.

3. Jos toimit oikein tähän asti, niin Tableadapterissa näkyy nyt: Fill ("parametri")
4. Avaa Tableadapter.Fill("parameter")- ominaisuudet, ja SelectCommand. Ja lisää Parameters (Collection)- kohtaan se parametrin nimi, johon viittasit SQL-lauseessa. 
5. Koodissa sitten luot Reportviewerille vastaavan parametrin, ja annat sille arvon:

Esim.
Dim p_lahetenro As New ReportParameter("lahetenro", lahetenro.ToString)
Dim p_otsikko As New ReportParameter("laheteotsikko", laheteotsikko.ToString)
Lahete.Viewer.LocalReport.SetParameters(p_lahetenro)
Lahete.Viewer.LocalReport.SetParameters(p_otsikko)
Lahete.
Viewer.RefreshReport()
Lahete.Show()



Kuulostaa monimutkaiselta, mutta ei loppujen lopuksi sitä ole :)
Toinen vaihtoehto antaa parametri ReportViewerille on käyttää Filter ominasuutta, mutta sille löytyy paremmin googlesta vinkkejä!

maanantai 19. elokuuta 2013

Virtual PC - XPmode

Ylläpidän Windows 7:n XPmodessa VB6.0 kehitysympäristöllä tehtyjä ohjelmia.
Tänään asiakkaallani oli verkko-ongelma, joka aiheutti XPmoden käynnistystiedoston katoamisen. Eipä hätää, onhan Järjestelmänpalauttaminen Windowsissa olemassa...
Yllätyksekseni Järjestelmänpalauttaminen ei palauttanut XPmodea koneeseeni. Syykin oli selvä, XPmode:n käynnistyskuvake (=näennäiskone) oli asennettu C:\Users- kansioon, jota ei kuulukaan palauttaa Järjestelmän palauttamisen yhteydessä.

Eipä siinä. Asensin XPmoden ohjelmineen uusiksi... 

Tässä paikka, josta kannattaa ottaa varmuuskopio:
C:\Users\"Yourname"\AppData\Local\Microsoft\Windows Virtual PC\Näennäiskoneet\XP mode.vmc

maanantai 12. elokuuta 2013

VB.net Kodakimaging

Teen konvertointia VB 6.0 ohjelmasta VB.net:iin. Seuraavaksi olisi urakkana imgedit.ocx ActiveX- komponentin käyttöönotto Windows 7:ssa. Konvertoitava ohjelma käyttää ao. komponenttia kuvan tulostamiseen tiedostosta. Löysin ohje, jonka mukaan yritän ottaa komponentin käyttöön:
Kodakimaging running on windows 7:
http://www.computing.net/answers/windows-7/kodakimaging-running-on-windows-7/6114.html 

Ja niinhän siinä sitten kävi, että hylkäsin Kodakimagingin ja korvasin sen VB.net:n integroidulla ominaisuudella: PrintImage.Print()
Lisää tietoa löytyy suoraan googlesta hakemalla.

tiistai 6. elokuuta 2013

Ilmalämpöpumpun GSM-ohjaus mökille

Vapaa-ajan asunnon ilmalämpöpumppua on hyvä pystyä ohjaamaan etänä kotoa käsin. Sain tutustua aiheeseen hankittuamme mökin Pudasjärveltä. Mökissä on Mitsubishin ilmalämpöpumppu. Liitin erilliseen GSM control- yksikköön oman  SIM-kortin. Nyt voin lähettää tekstiviestin SIM-kortille, ja GSM control ohjaa infrapunan välityksellä ilmalämpöpumppua. Kyllä tekniikka on kivaa!


torstai 1. elokuuta 2013

Dataseppä perustettu 1.2.2013

Puolivuotis-synttäreiden kunniaksi julkaisen tänään tämän uuden sivustoni/blogin. Tarkoitus on alkaa bloggaamaan työn kautta oppimiani asioita. Jos vaikka joku muukin näistä hyötyisi :)

Tällä hetkellä olen lomalla, mutta eiköhän elokuun puolenvälin jälkeen ala ilmestyä ohjelmointivinkkejä yms. tähän blogiin.