Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VBA: Pirullinen pyöristysongelma (vb)

Knappe [07.02.2004 18:13:20]

#

Terve.

Olen pian tapellut yhden desimaaliarvon kanssa vuorokauden. Jostain kumman syystä se pyöristyy kokonaisluvuksi kun se näkyy textboxissa. Koodissani on useita samanlaisia kohtia ja textboxeja, ja niissä muissa arvot ovat ihan ok. Olen käynyt koodin ja textboxit läpi ainakin kymmenen kertaa mutta tuloksetta. Koodi on periaatteessa sama kuin muissakin kohdissa.

Onko tällaisesta kokemuksia. Voiko johtua muusta kuin koodaajasta ja koodista?

remontti-reiska [07.02.2004 18:35:48]

#

Hmm. Pastees tähän hieman koodia, niin voin auttaa.

rndprogy [07.02.2004 18:42:43]

#

Oletko varmistanut ettet ole dimmannut muuttujaa integeriksi

dim muuttuja as integer

laita näin

dim muuttuja as double

niin ainakin pitäis desimaalit näkyä.

remontti-reiska [07.02.2004 18:45:39]

#

Heh. Dimmannut :D. Jeps juup, tee rndprogyn kertomalla tavalla, niin toimii, jos ei pastea tähän osaa koodistasi

Knappe [07.02.2004 19:56:23]

#

Tässä ois se kohta, jossa uskon ongelman syntyvän. On kyllä tuossa palanen sitä ohjelmaa tuossa pakattuna, jos haluatte saada paremman kuvan ongelmasta. Pistää paniikin puolelle kun deadline puskee päälle ja olen nyt vuorokauden tapellut tuon yhden arvon kanssa.

Kiitti!

'-------------------------------------

Private Sub ExtremeD()

Dim ADO_conn As New ADODB.Connection
Dim db_rset As New ADODB.Recordset
Dim table_name As String
Dim sql_string As String
Dim x As Integer

'määritellään yhteys access- kantaan
ADO_conn.ConnectionString = "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\Development\Databases\Taip.mdb"
'avataan yhteys
ADO_conn.Open

'luetaan silmukassa taulujen minimi- ja maksimiarvot
For x = 9 To 18 Step 1
'DoEvents
'muokataan luettavan taulun nimi
table_name = "[Combination " & x & "]"

'määritellään suoritettava sql-lause
sql_string = "select min(taip) as minimi, max(taip) as maximi from " & table_name

'suoritetaan sql-lause
db_rset.Open sql_string, ADO_conn, adOpenDynamic, adLockOptimistic
db_rset.MoveLast 'tämä ei ole välttämätön

'alustetaan tekstikentät eka taulun kyselyn tuloksilla
If txtMinDComb.Text = "" Then
    txtMinDComb.Text = table_name
    txtMaxDComb.Text = table_name
    txtMinDValue.Text = db_rset.Fields(0)
    txtMaxDValue.Text = db_rset.Fields(1)
End If

'vertaillaan kyselyn palauttamia arvoja. Jos min tai max muuttuu,
'otetaan arvot talteen tekstikenttiin.
If db_rset.Fields(0) < Val(txtMinDValue.Text) Then
     txtMinDValue.Text = db_rset.Fields(0)
     txtMinDComb.Text = table_name
'***************************************
'txtMinDValue-boxiin tulee kokonaisluku
'vaikka ei pitäis, txtMaxDValue toimii kuten pitää
'***************************************

     txtMinDValue.Text = Format(txtMinDValue.Text, "Fixed")

End If

If db_rset.Fields(1) > Val(txtMaxDValue.Text) Then
     txtMaxDValue.Text = db_rset.Fields(1)
     txtMaxDComb.Text = table_name

     txtMaxDValue.Text = Format(txtMaxDValue.Text, "Fixed")

End If

'suljetaan recordset. Muuten tulee virhe.
db_rset.Close


Next x

'lopuksi suljetaan yhteys.
ADO_conn.Close

Call MakeExtremeD

End Sub

Knappe [07.02.2004 22:25:49]

#

Virhe paikallistettu. Ohjelma etsii ääriarvot 29 taulukosta ja näyttää niiden kahden taulukon arvot, joista löytyy pienin ja suurin arvo. Tällä kertaa pienin arvo olikin sattumalta juuri siinä yhdessä taulukossa, jonka yhden sarakkeen tietotyyppi oli jäänyt kokonaisluvuksi. Siitä johtui koko hässäkkä.

Uskokaa tai älkää mutta valmistuminen koulusta voi olla pienestä kiinni. Yhden pienen mokan takia voi innssityö myöhästyä. Syvältä tämä koodaaminen!

Vastaus

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

Tietoa sivustosta