Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VBA: Access-apua

Sivun loppuun

avevu [10.11.2012 11:18:48]

#

Tuo edellinen jo ratkennut ongelma saa jatkoa (kyseessä on siis eräisiin testauksiin liittyvät tietojen talletukset ja niiden raportoinnit):

Kutakin testaustyyppiä varten on lomake on tietojen syöttämisiin, ja siinä sitten tehdään syötettyjen tietojen perusteella tarvittavia laskutoimituksia. Lomakkeella lasketaan monia asioita. Sen kolmea laskettua tietoa tarvitaan sitten myöhemmin testausraportilla.

Saanko jotenkin koodatuksi (tai muulla tavoin toteutetuksi) sen, että nämä lasketut tiedot talletetaan ko. tietueen niitä varten tehtyihin kenttiin?

Tulostettavalla raportilla tarvitaan kustakin testauksesta paljon vähemmän tietoa kuin taulussa ja lomakkeella on, ja tuntuu turhauttavalta laskea jälleen raportilla samoja asioita, jotka on jo kertaalleen laskettu. Lisäksi yksi näistä luvuista on se, joka on käyty excelissä laskemassa.

(On turhan vähän tullut tämän Accessin ja sen VBA:n kanssa touhutuksi.)

neau33 [13.11.2012 13:33:54]

#

Moi avevu!

Yksinkertainen ratkaisu suoraan raporttiin...

Private Sub RaportinYlätunniste_Paint()

    Static laskettu As Boolean

    If Not laskettu Then
        laskettu = True
        Summaruutu1.Text = CStr(Val(arvoruutu1.Text) + Val(arvoruutu2.Text)) 'esim.
        'Summaruutu on raporttiin jälkikäteen lisätty sitomaton tekstiruutu
        'ja arvoruudut taas voit pukata halutessasi vaikkapa piiloon...
        'jne...
    End If

End Sub

toinen mahdollisuus on tehdä kysely johon lisäät rakennenäkymässä uuden kentän (esim. Summa) ja lisäät kenttään lauseenmuodostimella kaavan (esim. Summa: [Kenttä1]+[Kenttä2]) ja teet sitten raportin luomastasi kyselystä.

avevu [14.11.2012 10:57:20]

#

Hei neau33 ja muutkin!

Alla on esimerkki raportista. Siinä siis voi olla - ja yleensä myös on - useita tutkimustuloksia. Kaikki alkupään tiedot (joihin en otsikkoa ole laittanut) tulevat tietueen kentistä niihin syötettyinä lukuina. Tuo sarakkeen "K150" luku on se Excelin avulla kullekin tutkimukselle laskettu. Samoin "Tiheys" lasketaan dimensioiden (tapauksesta riippuen 9 tai 12 kpl) keskiarvojen ja punnitun massan perusteella. Juuri nuo luvut pitäisi saada lomakkeelta talteen sen täyttöhetkellä käsittelyssä olevan tietueen arvoiksi. Tästä siis on kyse. Lomake käsittelee yhtä tutkimusta. Raportti koostaa asiakkaalle useita tutkimuksia.

K150 Tiheys

2 25.10.12 K45 7 01.11.12 104,0 385,0 OK Ei täyty 47,6 2436
4 25.10.12 K45 7 01.11.12 104,1 374,3 OK ok 46,1 2415
6 25.10.12 K45 7 01.11.12 104,1 358,3 OK Ei täyty 44,2 2409
8 25.10.12 K45 7 01.11.12 104,2 389,6 OK Ei täyty 48,0 2419
10 25.10.12 K45 7 01.11.12 104,1 367,8 OK Ei täyty 45,4 2401
12 25.10.12 K45 7 01.11.12 104,1 381,6 OK ok 47,1 2402
14 25.10.12 K45 7 01.11.12 104,1 388,2 OK Ei täyty 47,9 2423
16 25.10.12 K45 7 01.11.12 104,1 402,6 OK Ei täyty 49,6 2423
18 25.10.12 K45 7 01.11.12 104,1 392,0 OK Ei täyty 48,3 2416

Toivottavasti nyt tulin ymmärretyksi!

groovyb [14.11.2012 11:02:46]

#

Mikä tuon excelin käyttötarkoitus tässä tapauksessa on, eli voisiko koko excelin ohittaa laskemalla arvot suoraan lomakkeella vba:lla?

ylipäätään, en oikein ymmärrä mitä haluat? Arvon tietokannasta lomakkeen kenttään vai arvon excelistä lomakkeen kenttään?

avevu [14.11.2012 11:09:13]

#

Oho. En esikatsellut ja aineisto meni "nippuun". Kyse on kuitenkin kahdesta viimeisestä luvusta kussakin tietueessa, esim. eka rivin 47,6 ja 2436

Lisäys: Ei voi. Arvot tulevat normien määrittelemien arvojen perusteella. Tässä on kyseessä akkreditoitu tarkastuslaitos ja normeja on pakko noudattaa (vaikka aika lähelle päästäisinkiin etsimällä lauseke muodostamaan tuo luku). Kyseessä on ns. ekvivalentti, jolloin eri kokoisten tutkittavien kappaleiden tulos muunnetaan normikokoisen kappaleen lujuudeksi.

Grez [14.11.2012 12:51:38]

#

Aika jännää kyllä toi "Excel-taikuus". Oon kuvitellut, että jos samat kaavat ja tiedot mitä Excelissä on laitetaan jonnekin muualle, niin saadaan sama tulos. Ehkä Excel sitten kuitenkin laskee jotenkin maagisesti väärin ja tämä virhe halutaan mukaan tuloksiin että ne on "normin mukaisia" tms..

avevu [14.11.2012 20:58:29]

#

Se kun on niin, että interpolointi olemassa olevista taulokoista on excelillä helppoa. Ja tässähän ei tuo excel ole se ydinkysymys, vaan laskettujen arvojen talletus - oli ne sitten miten vain laskettuja - tietyn tietueen kentiksi myöhempää raportointia varten.

neau33 [15.11.2012 06:05:05]

#

Moi taas avevu!


'näin saat ne kolme laskettua arvoa lomakkeelta tietokantaan

Dim values(0 To 2) As String

Private Sub Form_Load()
    Muokkaus0.Locked = True 'sitomattomia tekstiruutuja
    Muokkaus2.Locked = True
    Muokkaus4.Locked = True
End Sub

Private Sub Komento5_Click()
    'Testi
    Muokkaus0.Locked = False
    Muokkaus2.Locked = False
    Muokkaus4.Locked = False
    Muokkaus0.SetFocus
    Muokkaus0.Text = "100"
    Muokkaus2.SetFocus
    Muokkaus2.Text = "200"
    Muokkaus4.SetFocus
    Muokkaus4.Text = "300"
    Muokkaus0.Locked = True
    Muokkaus2.Locked = True
    Muokkaus4.Locked = True
End Sub

Private Sub Muokkaus0_Change()
    values(0) = Muokkaus0.Text
    CheckValues
End Sub

Private Sub Muokkaus2_Change()
    values(1) = Muokkaus2.Text
    CheckValues
End Sub

Private Sub Muokkaus4_Change()
    values(2) = Muokkaus4.Text
    CheckValues
End Sub

Private Sub CheckValues()

    For i = 0 To 2
        If values(i) = "" Then Exit Sub
    Next

    Dim rs As Recordset
    Set rs = CurrentDb.TableDefs("Taulu1").OpenRecordset(dbOpenTable) 'esim.
    rs.MoveLast
    rs.AddNew
    rs.Fields("Kenttä1").Value = values(0) 'tai jos on luku: Val(values(0))
    rs.Fields("Kenttä2").Value = values(1)
    rs.Fields("Kenttä3").Value = values(2)
    rs.Update: rs.Close: Set rs = Nothing

    For i = 0 To 2
        values(i) = ""
    Next

End Sub

mikäli käytät tietokantaan sidottua lomaketta ja haluat päivitellä jo olemassa olevia tietueita niin täältä löytyy VBA:lle sovitettavissa oleva, VB6:lla toteutettu malli siitä miten rakennella update systeemi recordset kloonin avulla.

avevu [17.11.2012 10:49:34]

#

Kiitos oikein paljon neau33. Homma etenee!


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta