Moi
Rustailen tässä pientä projektia. Nyt olen hieman jumissa.
Teen tietokantaa joka käsittelee osaluetteloita.
Osaluettelo jossa olevat komponentit on eritelty tunnuksella tiettyyn osaluetteloon. Miten voisin kopioida toisesta osaluettelosta "pohjan" (samat osat) uuteen osaluetteloon? Ja vielä siten että osaluettelon tunnus muuttuu ja vanha säilyy.
Rustailen tässä pientä projektia. Nyt olen hieman jumissa.
Teen tietokantaa joka käsittelee osaluetteloita.
Osaluettelo jossa olevat komponentit on eritelty tunnuksella tiettyyn osaluetteloon. Miten voisin kopioida toisesta osaluettelosta "pohjan" (samat osat) uuteen osaluetteloon? Ja vielä siten että osaluettelon tunnus muuttuu ja vanha säilyy.
Vastaukset 13
Vanhimmat
Kaikkein helpon tapa on luoda lyhyt koodinpätkä VB:llä tai Accessin VBA:lla. Eli haet recordset muuttujaan edellisen (vastaavan) osaluettelon tiedot ja lisäät tietokantaan (add) kopio vaihdettuna uudella osaluettelotunnuksella.
Mutta mitäs kun esim. jokin komponentti esim. poistuu kokonaan ja on monessa osaluettelossa? Yht äkkiä voisi sanoa että ylläpito tulee olemaan hankalaa.
Käytännöllisintä olisi ehkä sitoa komponentit osaluetteloihin eikä toistapäin.
Kiitos suuresti vihjeestä. Mutta jos vielä olisi mahdollista saada lisä-apua tuohon koodiin. VBA-taitoni ovat olemattomat.
Ohessa esimerkki tuosta kaikkein yksinkertaisemmasta (vaikea ylläpidettävä) tapauksesta.
Tehokkaampiakin tapoja softan suhteen on mutta otin helppotajuisimman.
Pätkä on Accessin omalla editorilla ja toimii myös 97 versiossa.
Huom.! Referenssikirjastosta DAO 3.6 (tai pienempi) päälle
'Taulun määritys
Dim dbsKaikkiLuettelot As DAO.Database
Dim rstKysely As DAO.Recordset
Dim stSQL as String
Static Taulukko(1000) as Variant 'Väliaikainen taulukko
Set dbsKaikkiLuettelot = CurrentDb
'Kyselyn muodostus
stSQL = "SELECT OSALUETTELOT.Osaluettelo, OSALUETTELOT.Komponentti "
stSQL = stSQL & "FROM OSALUETTELOT"
stSQL = stSQL & "WHERE (((OSALUETTELOT.Osaluettelo)=" & Chr(34)
stSQL = stSQL & HaluttuOsaluettelo & Chr(34) & "));" 'Chr(34) koska lainausmerkit tarvitaan
'Kyselyn käynnistys
Set rstKysely = dbsKaikkiLuettelot.OpenRecordset(stSQL, dbOpenDynaset) 'Kyselyn muodostus
'Tiedot taulukkoon
rstKysely.MoveFirst
i = 1
'Silmukka
do
Taulukko(i,1) = rstKysely!Komponentti
i = i 1
rstKysely.MoveNext
Loop While Not rstKysely.EOF
'Tiedot tauluun
For j = 1 To i - 1
rstKysely.AddNew
rstKysely!Osaluettelo = UusiOsaluetteloNimi
rstKysely!Komponentti = Taulukko(j)
rstKysely.Update
next j
Kiitos suuresti tuosta esimerkistä. En saanut esimerkkiä vielä toimimaan. Tuosta Referenssikirjastosta DAO 3.6 Mistä sen voi kytkeä päälle. Käytössä minulla on Access 2003.
Olen paininut tämän projektin kanssa jo puolivuotta. Harmittaa että menin lupaamaan tietämättömyydessäni tätä. Mutta pakko olisi saada tämä toimimaan, kun olen aikaakin niin paljon siihen kuluttanut. Apu on kyllä poikaa.
MOI, Kun teet liittymän niin laita siihen kaksi tekstikenttää joihin toiseen tulee vanha osaluettoninimi (huom.! isot ja pienet kijaimet) ja toiseen uusi. Ne ovat aina variantteja. Jos luot liittymään esim. "Painonappulan" niin pääset sitäkautta softaan. Tools -> References -> Mikrosoft DAO 3.6 object library. Ton kyselyn mikä valitaan on hyvä ensiksi käyttää query jutussa ensin niin, että haet halutun osaluettelon ja sitten otat sen SQL näyttöön ja kopioit ja siirrät sen stSQL muuttujaan. Muista myös välilyönnit sillä jos niitä ei ole niin....Ei toimi
Terve
Jos saisin vielä lisäselostusta aikaisempaan esimerkkiin. Olen ohittanut SQL-jutut sujuvasti opiskellessani Acccessiä. Se oli virhe!
Eli rimpsu:
stSQL = "SELECT OSALUETTELOT.Osaluettelo, OSALUETTELOT.Komponentti "
stSQL = stSQL & "FROM OSALUETTELOT"
stSQL = stSQL & "WHERE (((OSALUETTELOT.Osaluettelo)=" & Chr(34)
stSQL = stSQL & HaluttuOsaluettelo & Chr(34) & "));" 'Chr(34) koska lainausmerkit tarvitaan
on sama kuin tekisin Accessissä SQL-kyselyn.
Ymmärsinkö oikein?
Olenko mahdollisesti antanut liian vähän tietoa tietokannastani.
Eli Osaluettelo(taulukko) jonne menevät kaikki osaluettelossa tarvittavat komponentit. Komponentit erotellaan eri osaluetteloihin koneikon tunnuksella. Sitten on lomake jossa alilomakkeena kysely osaluettelosta. Tällä lomakkeella suoritetaan komponenttien lisääminen tiettyyn osalutteloon. Ja kyselyllä tietty osaluettelo.
Asian voisi varmasti tehdä helpomminkin, en vain tiedä miten??
Moi,
Mahdoinkohan ymmärtää oikein ongelman. Tarkoitus oli ilmeiseti kopioida vanha uudella nimellä nopeasti ja vaivattomasti, right?
Rimpsu on ihan puhtaasti Accessin SQL:ää ja napattu tekemällä query ja sql-näkymä. Kysely on siirretty string tyypin muuttujaan koska yhdet heittomerkit tarvitaan välissä (se mikä osoittaa olemassa olevan osaluetettelon). Eli ideana oli että sinulla on esim. valintaruutu millä on nimi (tuo HaluttuOsaluettelo) ja luot tekstikentän mihin voit formillasi kirjoittaa uusi osaluettolonimi). Form mikä on käytössä on ihan ok jossillä vain on tilaa tekstikenttään. Ja lisäksi tarvitaan komentonappula (tai näppäinkomentoyhdistelmä) minkä taakse laitat kopiointi koodin ja vol´a, voit heti hakea olemassa olevaan formiin uuden osaluettelon missä on samat osat kuin siinä minkä halusit kopioida. Softa oli testattu.
Moi
Virhe ilmoitus: Tapahtumaominaisuuden arvoksi asetettu lauseke "napsautattessa" aiheutti virheen :Wrong number of dimension.
Osaatko vihjata mistä etsisin virhettä.
(Accessin VBA on kenkkuillut hieman koko ajan. Esim.
wizardit ei toimi lainkaa vaan herjaa jostakin puuttuvasta osasta. Ohjeessa vaan kehotetaan laittemaan se päälle mutta mitään ei ole pois päältä???)
Eli virheilmoitus (wrong number of dimension) tulee 6.nelta riviltä olevasta taulukko(i,1).
VBA ilmoittaa näin.
'Tiedot taulukkoon
rstKysely.MoveFirst
i = 1
'Silmukka
Do
Taulukko(i, 1) = rstKysely!Koodi
i = i 1
rstKysely.MoveNext
Loop While Not rstKysely.EOF
'Tiedot tauluun
For j = 1 To i - 1
rstKysely.AddNew
rstKysely!Koneikontunnus = UusiOsaluetteloNimi
rstKysely!Koodi = Taulukko(j)
rstKysely.Update
Next j
End Sub
Joo, ajatusvirhe kun tein kokeeksi kaksiuloitteisen taulukon ja käytin mielessä helppoa esimerkkiä ja missasin kokeilussa (laiskuutta).
Mihin ihmeeseen apuja kaipaat? Olet jo polulla!
Että polulla :) Mutta kun se polku häipyy näkyvistä melkein koko ajan. Ja kun löydän polun uudestaan, lähden sitä kulkemaan niin ses päätyy umpikujaan. Ja palaan lähtö pisteeseen.
Kerro nyt OI SUURI JA VIISAS missä vika piilee?
Ja pari lisäkyssäriä perään. Kun täytän uutta osaluetteloa. Komponentit ovat omassa alitaulukossa. Kun kaksois-klikkaan alitaulukosta osan se menee osaluetteloon. Miten saan kursorin siirtymään aina seuraavaan tietueeseen. Yritin näillä move-johdannaisilla mutta en onnistunut. Vihjeitä kaivataan...
Jos kiitos mutta ei kiitos, Access ominaisuusksista en tiedä kaikkea, mutta pistäisitko varsinaisen softan niin tsekkaan miten se on kirjoitettu. Musta tuntuu että idea kuitenkin on siinä osaluettelossa mikä on jo olemassa ja jolla on jo tunnus, jolla voidaan vaihtaa uusi vastaava osaluettelo. Olet jo niin lähellä!! Ohjelmointiputkasta löytyy muutamia loistavia esimerkkejä (Suomenkielinen).
Tervehdys
Vieläkö "Kaksi kirjaa" on maisemissa. Olen ollut lomalla...