Pulma. Kyseinen ongelma kohta ohjelmassani hakee tietoa tietokannasta ok. Minulla on kannassa kaksitaulua toinen toimii mutta toisesta taulusta kun haen tieto tämä rivi herjaa:
objRs.Open(SqlStr, objConn, 1, 3)
Mitä nuo numerot käytännössä merkitsevät?
Herjaus lause on seuraava:
Additional information: [Microsoft][ODBC Microsoft Access -ohjain] Liian vähän parametreja. Tarvitaan 1.
Ohjelmointiin
20
1557
Vastaukset
- Time is on My Side
objRs on Recordset. Sivulla http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/mdmthrstopen.asp kerrotaan Recordsetin Open-metodin toiminnasta. Samalla sivulla on kerrottu parametrien nimet. Metodin rakenne on tämä:
recordset.Open Source, ActiveConnection, CursorType, LockType, Options
Eli:
SqlStr on Source,
objConn on ActiveConnection,
1 viittaa tiettyyn CursorType:een,
3 viittaa tiettyyn LockType:een
Sivulta http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/mdcstcursortypeenum.asp saamme selville, että ykköstyypin CursorType tarkoittaa adOpenKeyset:ia.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/mdcstlocktypeenum.asp taas kertoo, että kolmostyypin locktype on "adLockOptimistic".
Tässäpä tärkeimmät.. :)
TioMS- Apua
Kiitos nuo sivut ovatkin oivankätevät. Muttamielestäni kaikki pitäsi olla oikein. Mikä tuossa voisi olla sitten väärin kun ei toimi.
Tuo toimii toisessa taulussa muttei tässätaulussa?
objRs.Open(SqlStr, objConn, 1, 3) '???
If Not objRs.EOF Then
-....
-.... - TioMS
Apua kirjoitti:
Kiitos nuo sivut ovatkin oivankätevät. Muttamielestäni kaikki pitäsi olla oikein. Mikä tuossa voisi olla sitten väärin kun ei toimi.
Tuo toimii toisessa taulussa muttei tässätaulussa?
objRs.Open(SqlStr, objConn, 1, 3) '???
If Not objRs.EOF Then
-....
-...... hauissasi on tehty eri tavalla :)
Jos et muuten pääse eteenpäin, niin laita tänne molemmat metodit täydellisenä. - Apua
TioMS kirjoitti:
.. hauissasi on tehty eri tavalla :)
Jos et muuten pääse eteenpäin, niin laita tänne molemmat metodit täydellisenä.objConn = New ADODB.Connection()
objRs = New ADODB.Recordset()
objConn.Open("Driver={Microsoft Access Driver (*.mdb)};Dbq=trimmit.mdb")
Dim SqlStr = "SELECT * FROM 49er WHERE Tuuli='" & TuuliLuokka & "' AND Aallokko='" & AallokkoLuokka & "' AND Paino='" & PainoLuokka & "'"
MsgBox(SqlStr)
objRs.Open(SqlStr, objConn, 1, 3) 'TÄHÄN KOHTAAN SIIS TYSSÄÄ!!!!
If Not objRs.EOF Then
ListBox1.Items.Add("Bend:" & objRs("Bend").Value)
ListBox1.Items.Add("Toppi vantin jännitys:" & objRs("Top").Value)
ListBox1.Items.Add("Päävantin jännitys:" & objRs("Paa").Value)
ListBox1.Items.Add("Kelavantin jännitys:" & objRs("Keula").Value)
End If
objRs.Close()
objConn.Close() - sulut?
Apua kirjoitti:
objConn = New ADODB.Connection()
objRs = New ADODB.Recordset()
objConn.Open("Driver={Microsoft Access Driver (*.mdb)};Dbq=trimmit.mdb")
Dim SqlStr = "SELECT * FROM 49er WHERE Tuuli='" & TuuliLuokka & "' AND Aallokko='" & AallokkoLuokka & "' AND Paino='" & PainoLuokka & "'"
MsgBox(SqlStr)
objRs.Open(SqlStr, objConn, 1, 3) 'TÄHÄN KOHTAAN SIIS TYSSÄÄ!!!!
If Not objRs.EOF Then
ListBox1.Items.Add("Bend:" & objRs("Bend").Value)
ListBox1.Items.Add("Toppi vantin jännitys:" & objRs("Top").Value)
ListBox1.Items.Add("Päävantin jännitys:" & objRs("Paa").Value)
ListBox1.Items.Add("Kelavantin jännitys:" & objRs("Keula").Value)
End If
objRs.Close()
objConn.Close()>objRs.Open(SqlStr, objConn, 1, 3) 'TÄHÄN KOHTAAN SIIS TYSSÄÄ!!!!
Eikö sen pitäisi olla:
objRs.Open SqlStr, objConnn
Nuo loput parametrit viittaa kursoreihin ja lukituksiin joista access ei taida ymmärtää "höykäsenpöläystä" - Apua
sulut? kirjoitti:
>objRs.Open(SqlStr, objConn, 1, 3) 'TÄHÄN KOHTAAN SIIS TYSSÄÄ!!!!
Eikö sen pitäisi olla:
objRs.Open SqlStr, objConnn
Nuo loput parametrit viittaa kursoreihin ja lukituksiin joista access ei taida ymmärtää "höykäsenpöläystä"Visual Basic.NET korjaa itse nuo sulut siihen ja herjaa kirjoitusvirheistä.
Idea menee niin kun kursori hakee tietokannan sarakkeista käyttäjän valitut arvot ja kun löytää se tulostaa tietokannasta tulokset. - tuota
Apua kirjoitti:
Visual Basic.NET korjaa itse nuo sulut siihen ja herjaa kirjoitusvirheistä.
Idea menee niin kun kursori hakee tietokannan sarakkeista käyttäjän valitut arvot ja kun löytää se tulostaa tietokannasta tulokset.>Idea menee niin kun kursori hakee tietokannan sarakkeista...
Onkohan nyt homma oikein hanskassa? Ei kai kursorilla ole yksinkertaisessa select lausessa mitään tekemistä.
Mitä muuten tulostaa se MessageBox eli onko sen SQL-lauseen syntaksi oikein? - Apua
tuota kirjoitti:
>Idea menee niin kun kursori hakee tietokannan sarakkeista...
Onkohan nyt homma oikein hanskassa? Ei kai kursorilla ole yksinkertaisessa select lausessa mitään tekemistä.
Mitä muuten tulostaa se MessageBox eli onko sen SQL-lauseen syntaksi oikein?Tuolla messageBoxsilla voin tarkistaa löytääkö se valitut solut.
Tämä esimerkiksi toimii täydellisesti:
objConn = New ADODB.Connection()
objRs = New ADODB.Recordset()
objConn.Open("Driver={Microsoft Access Driver (*.mdb)};Dbq=trimmit.mdb")
Dim SqlStr = "SELECT * FROM 470 WHERE Tuuli='" & TuuliLuokka & "' AND Aallokko='" & AallokkoLuokka & "' AND Paino='" & PainoLuokka & "' AND Mittari='" & MittariLuokka & "' AND Masto='" & MastoLuokka & "'"
MsgBox(SqlStr)
objRs.Open(SqlStr, objConn, 1, 3)
If Not objRs.EOF Then
ListBox1.Items.Add("Rake:" & objRs("Rake").Value & "mm")
ListBox1.Items.Add("Bend:" & objRs("Bend").Value & "mm")
ListBox1.Items.Add("Keulavaijerin jännitys:" & objRs("Keula").Value)
ListBox1.Items.Add("Spriidarinkulma:" & objRs("Spriidarinkulma").Value & "mm")
ListBox1.Items.Add("Spriidarinpituus:" & objRs("Spriidarinpituus").Value & "mm")
End If
objRs.Close()
objConn.Close() - tuota
Apua kirjoitti:
Tuolla messageBoxsilla voin tarkistaa löytääkö se valitut solut.
Tämä esimerkiksi toimii täydellisesti:
objConn = New ADODB.Connection()
objRs = New ADODB.Recordset()
objConn.Open("Driver={Microsoft Access Driver (*.mdb)};Dbq=trimmit.mdb")
Dim SqlStr = "SELECT * FROM 470 WHERE Tuuli='" & TuuliLuokka & "' AND Aallokko='" & AallokkoLuokka & "' AND Paino='" & PainoLuokka & "' AND Mittari='" & MittariLuokka & "' AND Masto='" & MastoLuokka & "'"
MsgBox(SqlStr)
objRs.Open(SqlStr, objConn, 1, 3)
If Not objRs.EOF Then
ListBox1.Items.Add("Rake:" & objRs("Rake").Value & "mm")
ListBox1.Items.Add("Bend:" & objRs("Bend").Value & "mm")
ListBox1.Items.Add("Keulavaijerin jännitys:" & objRs("Keula").Value)
ListBox1.Items.Add("Spriidarinkulma:" & objRs("Spriidarinkulma").Value & "mm")
ListBox1.Items.Add("Spriidarinpituus:" & objRs("Spriidarinpituus").Value & "mm")
End If
objRs.Close()
objConn.Close()>...voin tarkistaa löytääkö se valitut solut.
MessageBox ei tarkista mitään vaan esittää miltä SQL-lause näyttää ja virhe on ilmeisimmin siinä.
Tarkista siis sen syntaksi tai laita molemmista tänne kopio mitä siinä messageboxissa näkyy. - Apua
tuota kirjoitti:
>...voin tarkistaa löytääkö se valitut solut.
MessageBox ei tarkista mitään vaan esittää miltä SQL-lause näyttää ja virhe on ilmeisimmin siinä.
Tarkista siis sen syntaksi tai laita molemmista tänne kopio mitä siinä messageboxissa näkyy.MessageBox antaa tekstin kun ensimmäisessä Formissa on valittu luokaksi 49er:
SELECT* FROM 49er WHERE Tuuli='3' AND Aallokko='ei' AND Paino='120'
Nuo ovat siis niitä käyttäjän valintoja. Nuo samat avot löytyvät tietokannasta. Joiden mukaan löytyvät tulokset noille olosuhteille tietokannan.
Tulokset ovat:
ListBox1.Items.Add("Bend:" & objRs("Bend").Value)
ListBox1.Items.Add("Toppi vantin jännitys:" & objRs("Top").Value)
ListBox1.Items.Add("Päävantin jännitys:" & objRs("Paa").Value)
ListBox1.Items.Add("Kelavantin jännitys:" & objRs("Keula").Value) - tuota
Apua kirjoitti:
MessageBox antaa tekstin kun ensimmäisessä Formissa on valittu luokaksi 49er:
SELECT* FROM 49er WHERE Tuuli='3' AND Aallokko='ei' AND Paino='120'
Nuo ovat siis niitä käyttäjän valintoja. Nuo samat avot löytyvät tietokannasta. Joiden mukaan löytyvät tulokset noille olosuhteille tietokannan.
Tulokset ovat:
ListBox1.Items.Add("Bend:" & objRs("Bend").Value)
ListBox1.Items.Add("Toppi vantin jännitys:" & objRs("Top").Value)
ListBox1.Items.Add("Päävantin jännitys:" & objRs("Paa").Value)
ListBox1.Items.Add("Kelavantin jännitys:" & objRs("Keula").Value)Otitko tuon kopiona MessageBoxista vai onko ihan typo että tuosta SELECT:in perästä puutuu välilyönti?
- Apua
tuota kirjoitti:
Otitko tuon kopiona MessageBoxista vai onko ihan typo että tuosta SELECT:in perästä puutuu välilyönti?
Kirjoitin sen tänne käsin ei pystynyt Copy / Paste :lla joten se on kyllä kirjoitus virhe. Koodissa oikein.
Huomasin ainakin että kannassa sarake osake oli kirjoitettu väärin Aallokko oli Aalokko.
Mutta korjasin sen niin se virhe ilmoitus muuttui hieman: Oliko se nyt että ilmoittaa että parametrissa tyyppi virhe. - tuota
Apua kirjoitti:
Kirjoitin sen tänne käsin ei pystynyt Copy / Paste :lla joten se on kyllä kirjoitus virhe. Koodissa oikein.
Huomasin ainakin että kannassa sarake osake oli kirjoitettu väärin Aallokko oli Aalokko.
Mutta korjasin sen niin se virhe ilmoitus muuttui hieman: Oliko se nyt että ilmoittaa että parametrissa tyyppi virhe.>...että parametrissa tyyppi virhe.
Kun ehdossa on että: "Tuuli='3' AND Aallokko='ei' AND Paino='120'"
Onko kaikki sarakkeet char tai varchar tyyppiä että niitä voi kysellä merkkitiedolla eikä Tuuli tai Paino ole esim tyyppiä int. - Apua
tuota kirjoitti:
>...että parametrissa tyyppi virhe.
Kun ehdossa on että: "Tuuli='3' AND Aallokko='ei' AND Paino='120'"
Onko kaikki sarakkeet char tai varchar tyyppiä että niitä voi kysellä merkkitiedolla eikä Tuuli tai Paino ole esim tyyppiä int.Kyllä kaikki sarakkeet ovat luku muodossa.
Se nykyinen virheteksti meen siis näin.
Additional information: [Microsoft][ODBC Microsoft Access -ohjain] Tyyppivirhe ehtomäärityksessä. - tuota
Apua kirjoitti:
Kyllä kaikki sarakkeet ovat luku muodossa.
Se nykyinen virheteksti meen siis näin.
Additional information: [Microsoft][ODBC Microsoft Access -ohjain] Tyyppivirhe ehtomäärityksessä.>...ovat luku muodossa.
Mutta mikä on datatyyppi?
>Tyyppivirhe ehtomäärityksessä.
Tuo tarkoittaa juuri sitä mitä kysyin edellisessä kommentissani. Ehto on asetettu merkkitietona (char tai varchar) ja kannassa sen tyyppi on jotakin muuta, luultavasti kokonaisluku (int). - Kiitos avusta
tuota kirjoitti:
>...ovat luku muodossa.
Mutta mikä on datatyyppi?
>Tyyppivirhe ehtomäärityksessä.
Tuo tarkoittaa juuri sitä mitä kysyin edellisessä kommentissani. Ehto on asetettu merkkitietona (char tai varchar) ja kannassa sen tyyppi on jotakin muuta, luultavasti kokonaisluku (int).Todella näin pienestä asiasta se oli kiinni!!! Kaikki piti olla teksti -muodossa.
Suur kiitokset vaivan näöstäsi opastaa tälläistä hönää.
Olet GURU!! - tuota
Kiitos avusta kirjoitti:
Todella näin pienestä asiasta se oli kiinni!!! Kaikki piti olla teksti -muodossa.
Suur kiitokset vaivan näöstäsi opastaa tälläistä hönää.
Olet GURU!!...kiitoksista.
>näin pienestä asiasta se oli kiinni
Näin se monesti meneen. Työvoitto.
Pääasia että toimii.
Erityisesti pitää arvostaa sitä että ilmoitit kun sait homman pelaamaan. Valitettavan usein kysyjä katoaa saatuaan ratkaisun ja ongelma jää ikäänkuin ilmaan kun ei tiedä auttoiko neuvot vai ei. - Jos sallinet
tuota kirjoitti:
...kiitoksista.
>näin pienestä asiasta se oli kiinni
Näin se monesti meneen. Työvoitto.
Pääasia että toimii.
Erityisesti pitää arvostaa sitä että ilmoitit kun sait homman pelaamaan. Valitettavan usein kysyjä katoaa saatuaan ratkaisun ja ongelma jää ikäänkuin ilmaan kun ei tiedä auttoiko neuvot vai ei.Voiko käyttää if rakennetta ja miten kun haluan käytännössä tämän seuraavasti:
Jos Form1:ssä on valinttu Luokka 49er niin tapahtuu tämä --->
objConn = New ADODB.Connection()
objRs = New ADODB.Recordset()
objConn.Open("Driver={Microsoft Access Driver (*.mdb)};Dbq=trimmit.mdb")
Dim SqlStr = "SELECT * FROM 49er WHERE Tuuli='" & TuuliLuokka & "' AND Aallokko='" & AallokkoLuokka & "' AND Paino='" & PainoLuokka & "'"
MsgBox(SqlStr)
objRs.Open(SqlStr, objConn, 1, 3)
If Not objRs.EOF Then
ListBox1.Items.Add("Bend:" & objRs("Bend").Value)
ListBox1.Items.Add("Toppi vantin jännitys:" & objRs("Top").Value)
ListBox1.Items.Add("Päävantin jännitys:" & objRs("Paa").Value)
ListBox1.Items.Add("Kelavantin jännitys:" & objRs("Keula").Value)
End If
objRs.Close()
objConn.Close()
Jos Form1:ssä on valinttu Luokka 470 niin tapahtuu tämä --->
objConn = New ADODB.Connection()
objRs = New ADODB.Recordset()
objConn.Open("Driver={Microsoft Access Driver (*.mdb)};Dbq=trimmit.mdb")
Dim SqlStr = "SELECT * FROM 470 WHERE Tuuli='" & TuuliLuokka & "' AND Aallokko='" & AallokkoLuokka & "' AND Paino='" & PainoLuokka & "' AND Mittari='" & MittariLuokka & "' AND Masto='" & MastoLuokka & "'"
MsgBox(SqlStr)
objRs.Open(SqlStr, objConn, 1, 3)
If Not objRs.EOF Then
ListBox1.Items.Add("Rake:" & objRs("Rake").Value & "mm")
ListBox1.Items.Add("Bend:" & objRs("Bend").Value & "mm")
ListBox1.Items.Add("Keulavaijerin jännitys:" & objRs("Keula").Value)
ListBox1.Items.Add("Spriidarinkulma:" & objRs("Spriidarinkulma").Value & "mm")
ListBox1.Items.Add("Spriidarinpituus:" & objRs("Spriidarinpituus").Value & "mm")
End If
objRs.Close()
objConn.Close()
- tuota
Meni ketju niin pitkäksi että jatkuu täällä.
Tuossa koodissahan on paljon samaa ja myös taulu voi muuttuja joten itse tekisin näin
objConn = New ADODB.Connection()
objRs = New ADODB.Recordset()
objConn.Open("Driver={Microsoft Access Driver (*.mdb)};Dbq=trimmit.mdb")
Dim SqlStr = "SELECT * FROM " & Taulu & " WHERE Tuuli='" & TuuliLuokka & "' AND Aallokko='" & AallokkoLuokka & "' AND Paino='" & PainoLuokka & "'"
'lisätään 470:n kentät
if Taulu="470"
SqlStr = SqlStr & "' AND Mittari='" & MittariLuokka & "' AND Masto='" & MastoLuokka & "'"
end if
MsgBox(SqlStr)
objRs.Open(SqlStr, objConn, 1, 3)
If Not objRs.EOF Then
If Taulu="49er"
ListBox1.Items.Add("Bend:" & objRs("Bend").Value)
ListBox1.Items.Add("Toppi vantin jännitys:" & objRs("Top").Value)
ListBox1.Items.Add("Päävantin jännitys:" & objRs("Paa").Value)
ListBox1.Items.Add("Kelavantin jännitys:" & objRs("Keula").Value)
Else
ListBox1.Items.Add("Rake:" & objRs("Rake").Value & "mm")
ListBox1.Items.Add("Bend:" & objRs("Bend").Value & "mm")
ListBox1.Items.Add("Keulavaijerin jännitys:" & objRs("Keula").Value)
ListBox1.Items.Add("Spriidarinkulma:" & objRs("Spriidarinkulma").Value & "mm")
ListBox1.Items.Add("Spriidarinpituus:" & objRs("Spriidarinpituus").Value & "mm")
End If
End If
objRs.Close()
objConn.Close()
Syntaxista en mene takuuseen kun basicin käytöstä on vähän jo aikaa mutta noin periaattees jotenkin noin. Jos tauluja (luokkia?) on enemmän kuin kaksi niin kannattaa varmaan käyttää select-case rakennetta.- .NET
objConn = New ADODB.Connection()
objRs = New ADODB.Recordset()
objConn.Open("Driver={Microsoft Access Driver (*.mdb)};Dbq=trimmit.mdb")
If Luokka = "470" Then
Dim SqlStr = "SELECT * FROM 470 WHERE Tuuli='" & TuuliLuokka & "' AND Aallokko='" & AallokkoLuokka & "' AND Paino='" & PainoLuokka & "' AND Mittari='" & MittariLuokka & "' AND Masto='" & MastoLuokka & "'"
'MsgBox(SqlStr)
objRs.Open(SqlStr, objConn, 1, 3)
If Not objRs.EOF Then
ListBox1.Items.Add("Rake: " & objRs("Rake").Value & "mm")
ListBox1.Items.Add("Bend: " & objRs("Bend").Value & "mm")
ListBox1.Items.Add("Keulavaijerin jännitys: " & objRs("Keula").Value)
ListBox1.Items.Add("Spriidarinkulma: " & objRs("Spriidarinkulma").Value & "mm")
ListBox1.Items.Add("Spriidarinpituus: " & objRs("Spriidarinpituus").Value & "mm")
End If
ElseIf Luokka = "Express" Then
Dim SqlStr = "SELECT * FROM Express WHERE Tuuli='" & TuuliLuokka & "' AND Aallokko='" & AallokkoLuokka & "'"
'MsgBox(SqlStr)
objRs.Open(SqlStr, objConn, 1, 3)
If Not objRs.EOF Then
ListBox1.Items.Add("Keulavantin kireys: " & objRs("Keula").Value)
ListBox1.Items.Add("Toppivantin jännitys: " & objRs("Ylä").Value)
ListBox1.Items.Add("Alavantin jännitys: " & objRs("Ala").Value)
ListBox1.Items.Add("Hekki: " & objRs("Hekki").Value)
ListBox1.Items.Add("Outhoul: " & objRs("Outhoul").Value)
ListBox1.Items.Add("Puomi: " & objRs("Puomi").Value)
End If
Else : Luokka = "49er"
Dim SqlStr = "SELECT * FROM 49er WHERE Tuuli='" & TuuliLuokka & "' AND Aallokko='" & AallokkoLuokka & "' AND Paino='" & PainoLuokka & "'"
'MsgBox(SqlStr)
objRs.Open(SqlStr, objConn, 1, 3)
If Not objRs.EOF Then
ListBox1.Items.Add("Bend: " & objRs("Bend").Value)
ListBox1.Items.Add("Toppi vantin jännitys: " & objRs("Top").Value)
ListBox1.Items.Add("Päävantin jännitys: " & objRs("Paa").Value)
ListBox1.Items.Add("Keulavantin jännitys: " & objRs("Keula").Value)
End If
End If
objRs.Close()
objConn.Close()
Ketjusta on poistettu 0 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
Kotkalainen Demari Riku Pirinen vangittu Saksassa lapsipornosta
https://www.kymensanomat.fi/paikalliset/8081054 Kotkalainen Demari Riku Pirinen vangittu Saksassa lapsipornon hallussapi862331Olen tosi outo....
Päättelen palstajuttujen perusteella mitä mieltä minun kaipauksen kohde minusta on. Joskus kuvittelen tänne selkeitä tap182267Vanhalle ukon rähjälle
Satutit mua niin paljon kun erottiin. Oletko todella niin itsekäs että kuvittelet että huolisin sut kaiken tapahtuneen191788- 1051477
Maisa on SALAKUVATTU huumepoliisinsa kanssa!
https://www.seiska.fi/vain-seiskassa/ensimmainen-yhteiskuva-maisa-torpan-ja-poliisikullan-lahiorakkaus-roihuaa/1525663911440Hommaatko kinkkua jouluksi?
Itse tein pakastimeen n. 3Kg:n murekkeen sienillä ja juustokuorrutuksella. Voihan se olla, että jonkun pienen, valmiin k1631248Aatteleppa ite!
Jos ei oltaisikaan nyt NATOssa, olisimme puolueettomana sivustakatsojia ja elelisimme tyytyväisenä rauhassa maassamme.2571042- 63953
- 78919
Omalääkäri hallituksen utopia?
Suurissa kaupungeissa ja etelässä moinen onnistunee. Suuressa osassa Suomea on taas paljon keikkalääkäreitä. Mitenkäs ha174903