Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB.NET: Tietokantahaun selaaminen etee-taakse? VB 2005

Sam76 [15.03.2008 11:17:45]

#

Ongelman ei pitäisi olla vaikea mutta jostain syyste ei lähde ratkeamaan. Koodina:

Public Sub HaeEd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles HaeEd.Click
        Dim Counter As Integer = 0
        try
            MyDataSet.Clear() 'Tyhjennetään mahdolliset aikaisemmat tiedot
            MyDataAdapter.SelectCommand = New OleDbCommand
            MyDataAdapter.SelectCommand.Connection = MyConnection

            MyDataAdapter.SelectCommand.CommandText = "SELECT merkinta FROM paivakirja ORDER BY laskuri DESC"
            MyConnection.Open() 'Avataan yhteys tietokantaan
            MyDataAdapter.Fill(MyDataSet, "Paivakirja") 'haetaan tiedot Paivakirja-nimiseen MyDataSet-tietojoukkoon
            MyConnection.Close() 'suljetaan yhteys

            PKmerkinta.Text = MyDataSet.Tables("Paivakirja").Rows(Counter).Item("merkinta")

            Counter = Counter + 1
            If Counter = MyDataSet.Tables("Paivakirja").Rows.Count Then Counter = 0
        Catch
            MsgBox("Paivakirjamerkintoja ei löytynyt", , "Ilmoitus")
            PKmerkinta.Text = ""
            Counter = 0
        End Try
    End Sub

Eli haetaan kaikki merkinnät ja selataan niitä uusimmasta vanhimpaa yksi kerrallaan. Homma siis toimii mutta miten saan jo edelle mainitun lauseen muutettua sellaiseksi että kun counter:ia vähennetään niin nollan jälkeen se saa arvokseen maksimin:

If Counter = MyDataSet.Tables("Paivakirja").Rows.Count Then Counter = tähän rows maksimi?

Tämä siis siinä tapauksessa kun selataan merkintöjä vanhemmasta uudempaan.

Sorg kun selitys on niin pitkä mutta en oikein osannu laittaa lyhemmäksikään.. :/

Mod. lisäsi kooditagit, lisää ensi kerralla itse.

Sam76 [15.03.2008 13:08:58]

#

Täällä on suht reippaasti idiotismiä liikenteessä näin lauantaiaamuna...

Laitan tämän kuitenkin tänne, jos joku muukin sattuu olemaan joskus lauantaiaamu-terässä.. :)

Counter = Counter - 1
PKmerkinta.Text = MyDataSet.Tables("Paivakirja").Rows(Counter).Item("merkinta")

If Counter = 0 then Counter = MyDataSet.Tables("Paivakirja").Rows.Count

edit: ja siis tuon edellisen koodin counter on metodin ulkopuolella eikä sisällä, kuten siinä virheellisesti käy ilmi.

neau33 [15.03.2008 18:05:18]

#

Moikka Sam76!

Mikäli DataSetissä on kamaa niin ensimmäinen rivi eli tietue = 0, joten viimeinen rivi on täten luonnollisesti DataSet.Tables("taulu").Rows.Count - 1

'...
DataSetti.Clear: DataAdapteri.TableMappings.Clear

'...
'.....................................................................
'voisit myös soveltaa tällaista viritelmää...
'Dim kysely As String
'Select Case Me.CheckBox1.Checked
   'Case False
     'kysely = "SELECT merkinta FROM paivakirja ORDER BY laskuri DESC"
   'Case True
     'kysely = "SELECT merkinta FROM paivakirja ORDER BY laskuri ASC"
'End Select
'DataAdapteri.SelectCommand.CommandText = kysely
'......................................................................

Static rivi As Integer

If rivi = DataSetti.Tables("taulu").Rows.Count -1 Then
 rivi -= rivi
End If

If DataSetti.Tables("taulu").Rows.Count = 0 Then
  Messagebox.Show("kamaa ei löytynyt"): Exit Sub
Else
  TekstiBoxi.Text = DataSetti.Tables("taulu").Rows(rivi)("sarake")
  rivi += 1
End If

Sam76 [15.03.2008 21:29:13]

#

Kiitos Nea!

Sain ks. ominaisuuden toiminaan mutta niin monimutkaisella tavalla, että oksat pois. Tämä sinun esimekkisi vaikuttaa paljon paremmalta.

Olin aiemmin kokeillut myös tuota select-case mutta huonolla menestyksellä. Tänks siitäkin.

edit: voitko selittää että mitä tämä tarkoittaa: DataAdapteri.TableMappings.Clear ?

neau33 [15.03.2008 22:04:54]

#

Heippa taas Sam76!

DataAdapteri.TableMappings.Clear - pyyhkii adapterin sisältämät tiedot tauluista nevadaan...

Sam76 [15.03.2008 22:36:32]

#

Kiitos taas Nea!

Vastaus

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

Tietoa sivustosta