VB6, ADO ja SQL

Olen tekemässä VB6:llä ja ADO:a käyttäen ohjelmaa
joka tekee tietyn kyselyn Access-tietokantaan,
mutta saan virheilmoituksen:
Run-time error '-2147217904 (80040e10)':
[Microsoft][ODBC Microsoft Access -ohjain] Liian
vähän parametrejä. Tarvitaan 1.

Ilmoitus tulee juuri kun olen avaamassa
recordsettiä:

Joko:

rs.Open cmd, , adOpenStatic, adLockReadOnly,
adCmdText

tai:

rs.Open "SELECT osat.* From osat WHERE ((([osat].
[Osanro])=" & Chr(34) & "10014" & Chr(34) & "))"

Ihmeellistä on että seuraava tapa toimii:

rs.Open "SELECT OSAT.* From osat", cn, , ,
adCmdText

mutta en saa millään toimimaan sitä niin että
WHERE olisi mukana.
Mitä parametrejä tulisi asettaa ja mitä muuta
(ADO:n lisäksi) projektissa pitäisi olla mukana?

Odotan vastauksia _VAIN_ ADO:a joskus
käyttäneiltä, kiitos! :)
2334
Äänestä

Muut lukivat myös

Vastaukset 2

Vanhimmat

VB näkee kyselyn seuraavana:

SELECT osat.* From osat WHERE ((([osat].[Osanro])
="10014"))

Voi olla että olen väärillä jäljillä, mutta jos
VB:n pitää nähdä kysely näin:

SELECT osat.* From osat WHERE ((([osat].[Osanro])
= 10014))

Niin koodin on oltava:

"SELECT osat.* From osat WHERE ((([osat].
[Osanro]) = 10014))"

Jos osanro on tekstityyppinen, niin VB:n pitää
nähdä parametri (osanumero) heittomerkeissä:

SELECT osat.* From osat WHERE ((([osat].[Osanro])
= '10014'))

Ja tätä vastaava VB-koodi on

"SELECT osat.* From osat WHERE ((([osat].[Osanro])
= " & Chr(39) & 10014 & Chr(39) & "))"

Chr(39) on sama kuin heittomerkki (')
Käyttämäsi Chr(34) on sama kuin heittomerkki (")

Toivottavasti osuin oikeaan, mitä epäilen - tätä
mahdollisuutta etukäteen pahoitellen...

Äänestä
  • Tajusin saman itsekin n. tunti pari ennen
    vastauksesi ilmestymistä.
    Eli ((([osat].[Osanro]) = '10014')) toimii kuten
    myös osat.osanro='10014' tai osanro='10014' .
    Kenttä on tekstimuotoinen.

    Virhe syntyi siitä että vanhahtava DAO (toisin
    kuin ADO) hyväksyy heittomerkit (34) kyselyissä.
    Myös access hyväksyy ne.

    Äänestä

Kommentoi aloitusta


- jkwl - kirjoitti:

Olen tekemässä VB6:llä ja ADO:a käyttäen ohjelmaa
joka tekee tietyn kyselyn Access-tietokantaan,
mutta saan virheilmoituksen:
Run-time error '-2147217904 (80040e10)':
[Microsoft][ODBC Microsoft Access -ohjain] Liian
vähän parametrejä. Tarvitaan 1.

Ilmoitus tulee juuri kun olen avaamassa
recordsettiä:

Joko:

rs.Open cmd, , adOpenStatic, adLockReadOnly,
adCmdText

tai:

rs.Open "SELECT osat.* From osat WHERE ((([osat].
[Osanro])=" & Chr(34) & "10014" & Chr(34) & "))"

Ihmeellistä on että seuraava tapa toimii:

rs.Open "SELECT OSAT.* From osat", cn, , ,
adCmdText

mutta en saa millään toimimaan sitä niin että
WHERE olisi mukana.
Mitä parametrejä tulisi asettaa ja mitä muuta
(ADO:n lisäksi) projektissa pitäisi olla mukana?

Odotan vastauksia _VAIN_ ADO:a joskus
käyttäneiltä, kiitos! :)

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu