Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB.NET: VB 2008 query ongelma

Sivun loppuun

mmikko [10.08.2009 19:22:15]

#

Terve taas kaikille pitkästä aikaa. Pieni muotoisia ongelmia taasen.

Johdanto: Olen tehnyt raportin, johon tulostuu päivämäärät. Tavoitteena olisi saada tehtyä siihen hakukentät. Eli kirjoitetaan asiakasnumero, alkupvm ja loppupvm, tämän seurauksena tulostetaan asiakasnumero ja kaikki päivämäärät annettujen ehtojen mukaan. Käytän vb 2008:a ja query builderiin oon kyselyä tehnyt.

Ongelma: Saan hienosti haettua asiakasnumerolla ja alkupvm:llä, mutta kun yritän laittaa vielä tuon loppupvm:n siihen niin johan tulee ongelma jota oon yrittänyt nyt selvittää.

Tämä toimii: haku asiaksnumerolla ja alkupvm:llä ->

SELECT asiakasnumero, pvm, klo FROM asiakas where asiakasnumero =@asnro and pvm =@alkupvm

Miten saan ympättyä tuohon lauseeseen between komennon, että se hakee päivämäärien väliltä? olen yrittänyt mm. tälläistä:

SELECT asiakasnumero, pvm, klo FROM asiakas where asiakasnumero =@asnro and pvm BETWEEN =@alkupvm & =@loppupvm

vaikka pyöritän miten päin lauseketta, lisään hipsuja, heittomerkkejä, poistan niitä, kokeilen eripaikkoihin niin aina tulee ilmoitus että:

Syntaksivirhe (puuttuva operaattori) kyselylausekkeessa "asiakasnumero =@asiakasnumero and Pvm between =@alkupvm & =@loppupvm"

kiitoksia jo tässä vaiheessa!

t:mikko

Grez [10.08.2009 22:11:14]

#

Ei mitään havaintoa tuosta VB 2008 Query:stä, mutta vastaan silti.

mmikko kirjoitti:

SELECT asiakasnumero, pvm, klo FROM asiakas where asiakasnumero =@asnro and pvm BETWEEN =@alkupvm & =@loppupvm

BETWEEN x & y ??
Yleensä se on: BETWEEN x AND y

Eli mitä jos laitat:
SELECT asiakasnumero, pvm, klo FROM asiakas where asiakasnumero =@asnro and pvm BETWEEN =@alkupvm AND =@loppupvm

mmikko [11.08.2009 12:09:31]

#

Moro Grez!

Ei ihan toiminu tuolla sun ehdotuksella mutta siitä oli paljon apua! alla olevalla toimii.

WHERE asiakasnumero = ‘asnro’ AND Pvm BETWEEN (‘alku’) AND (’loppu’)

En todellakaan ymmärrä miksi nuita "hipsuja" sanojen asnro, alku ja loppu ympärillä ja ku ne on vielä erilaisia....osaako joku kertoa niistä tarkemmin. Nimittäin jos muutan niitä, vaikka tuon loppu sanan kohdalla samanlaiseksi mitkä on alku sanan ympärillä niin ei enää toimi....

t:mikko

mmikko [11.08.2009 13:12:25]

#

mmikko kirjoitti:

Moro Grez!

Ei ihan toiminu tuolla sun ehdotuksella mutta siitä oli paljon apua! alla olevalla toimii.

WHERE asiakasnumero = ‘asnro’ AND Pvm BETWEEN (‘alku’) AND (’loppu’)

En todellakaan ymmärrä miksi nuita "hipsuja" sanojen asnro, alku ja loppu ympärillä ja ku ne on vielä erilaisia....osaako joku kertoa niistä tarkemmin. Nimittäin jos muutan niitä, vaikka tuon loppu sanan kohdalla samanlaiseksi mitkä on alku sanan ympärillä niin ei enää toimi....

t:mikko

ei toimikkaan niin kuin pitäis.... =(

mmikko [11.08.2009 15:39:52]

#

lainaus:

ei toimikkaan niin kuin pitäis.... =(

hakee, mut hakee mitä sattuu...

neau33 [11.08.2009 17:24:45]

#

Moro mmikko!

Ekaks: unohda tässä kohtaa se query builder

jos tietokantasi on SQL Server'llä niin oheinen viritelmä toimii...

'...

Dim asnro As String = txtAsnro.Text

Dim pvm1 As DateTime =  _
DateTime.Parse(txtAlkuPvm.Text.ToString)

Dim alku As String = _
pvm1.ToString("yyyy.MM.dd HH:mm:ss.fff")

If txtLoppuPvm.Text = String.Empty Then
  txtLoppuPvm.Text = txtAlkuPvm.Text
End If

Dim pvm2 As DateTime =  _
DateTime.Parse(txtLoppuPvm.Text.ToString + " 23:59:59")

Dim loppu As String = _
pvm2.ToString("yyyy.MM.dd hh:mm:ss.fff")

Dim kysely As String = "SELECT asiakasnumero, pvm, klo " _
+ "FROM asiakas where asiakasnumero = '" + asnro + "'" + _
" And pvm Between '" + alku + "' And '" + loppu + "'"
' (jos asiakasnumero ei ole kannassa textinä
' poista hipsu muutujan asnro edestä/perästä)
'...

ja vielä erikseen: toimiva viritelmä MS Access kannalle...

'...

Dim asnro As String = txtAsnro.Text

Dim dateSplit() As String = _
txtAlkuPvm.Text.Split(".")

Dim alku As String = "#" + dateSplit(1) + _
"/" + dateSplit(0) + "/" + dateSplit(2) + "#"

Erase dateSplit

If txtLoppuPvm.Text = String.Empty Then
  txtLoppuPvm.Text = txtAlkuPvm.Text
End If

dateSplit = txtLoppuPvm.Text.Split(".")

Dim loppu As String =  "#" + dateSplit(1) + _
"/" + dateSplit(0) + "/" + dateSplit(2) + "#"

Dim kysely As String = "SELECT asiakasnumero, pvm, klo " _
+ "FROM asiakas where asiakasnumero = '" + asnro + "'" + _
" And pvm >= " + alku + " AND pvm <= " + loppu
' (jos asiakasnumero ei ole kannassa textinä
' poista hipsu muutujan asnro edestä/perästä)

dateSplit = Nothing

'...

mmikko [11.08.2009 18:38:19]

#

Kiitos nyt toimii ainakin toistaseksi!

Olisko vielä kenelläkään tietoa semmosta asiasta kun:
tietokanssa on tuo pvm-kenttä muodossa Pvm./klo ja muotoa Lyhyt pvm. Tietokannassa ei näy muuta kuin päivämäärä, mutta kun raportti luodaan niin tulee pvm ja sitten vielä kellonaika siihen perään eli: 11.8.2009 0:00:00. Saako tuota 0:00:00 pois mitenkään? raportista löysin pvm-kentän asetuksista kohdan format ja sieltä saa asetuksen jossa kentän arvo on 11.8.2009, mutta kun rapsua ajaa niin aina ilmestyy toi 0:00:00.

t:mikko

neau33 [12.08.2009 14:25:26]

#

Moikka taas mmikko!

kokeile...
pvm-kentän Format-asetukseksi: d tai "d"
& klo-kentän Format-asetukseksi: t tai "t"

' (esim. Formaatin asetus koodista DataGridView-kontrollissa)
   '...
   For Each dgvColumn As DataGridViewTextBoxColumn _
   In Me.dataGridView1.Columns
      With dgvColumn
         If .Name = "pvm" Or .Name = "klo" Then
            .DefaultCellStyle.Alignment = _
             DataGridViewContentAlignment.MiddleRight
             Select Case .Name
               Case "pvm"
                  .DefaultCellStyle.Format = "d"
               Case "klo"
                  .DefaultCellStyle.Format = "t"
            End Select
         End If
      End With
   Next
'...

mmikko [13.08.2009 09:00:45]

#

Hei nea!
mä kokeilen tuota, ku pääsen duunista kotia!

Kiitos taas tuhannesti ku autoit! :)

t: mikko


Sivun alkuun

Vastaus

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

Tietoa sivustosta