Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: Dataenvironment child objekti *vb*

Sivun loppuun

Vepa [05.05.2003 09:44:26]

#

eli ongelma on, että pitäisi saada luotua datareport joka hakee tiedot dataenvironmentistä tämä nyt onnistuu varmaankin jotenkin näin:

If DataEnvironment1.rscomasiakas.State = adStateOpen Then
    DataEnvironment1.rscomasiakas.Close
End If
sorsa = "select * from asiakas where" & nimihaku
DataEnvironment1.rscomasiakas.Source = sorsa
DataEnvironment1.rscomasiakas.Open
rptlasku.Show

mutta mites muokataan ton COMASIAKKAAN alla olevan COMTAPAHTUMA sourcea??

eakem [15.05.2003 18:34:17]

#

Voitko tarkentaa mitä olet jo saanut aikaan. Onko datareport jo tehty? Saatko siihen tulostettua jotakin?
Mikä on toi COMTAPAHTUMA johon viittaat?

Vepa [16.05.2003 21:32:03]

#

data report on tehty ja tuo comtapahtuma on dataenvironmentillä com comasiakkaan child objektina...

ja ongelmana on se että miten saan syötettyä tuolle comtapahtumalle sql lauseella lähde koodin...???

eakem [17.05.2003 09:19:18]

#

Toimiiko tuo rptlaskun käynnistys halutulla tavalla vai onko se just se ongelma. Vai onko kyse eri data reportista?

Kirjoita child commandiin 'perus' sql lause, jolla haet halutut tiedot ja laita siihen parametrit, joilla voit sitten tarkentaa haun raporttia varten.

Vai onko perusongelma parametrien välitys raporttia kutsuttaessa?

Vepa [18.05.2003 11:20:30]

#

siis millä parametreillä saan laitettua sen sql lauseen paikalleen childille???

sille ekalle meni ihan näin..

sorsa = "select * from asiakas where" & nimihaku
DataEnvironment1.rscomasiakas.Source = sorsa

mutta miten menee lapselle??

tuon rptlaskun käynnistus menee ihan hyvin mutta sitä rptlaskua pitäs päästä muuttamaan sen childin sql lausetta..

eakem [18.05.2003 21:53:33]

#

lainaus:

tuon rptlaskun käynnistus menee ihan hyvin mutta sitä rptlaskua pitäs päästä muuttamaan sen childin sql lausetta..

Nyt en pysy mukana. Haluatko muuttaa rptlaskua jotenkin?
Mihin sitä child commandia tarvitset?
Sql lauseenhan voi kirjoittaa suoraan siihen child commandiin ja määritellä relationin parent commandin ja
childin välillä.

Miksi child commandin lausetta ylipäätään pitäisi muuttaa ajon aikana (siis koodissa)?

En tiedä onko se edes mahdollista.

Jos voisit vielä selittää mihin tällä haet ratkaisua niin voitais miettiä onko siihen joku helpompi keino.

Vepa [19.05.2003 07:37:17]

#

yritän saada tulostuman raportille asiakkaitten tapahtumia käyttäjän tekemän valintojen perusteella joten jos käyttäjä valitsee tapahtumat tietyltä aikaväliltä niin muuttasin tuota sql lausetta erilaiseksi..

olen kyllä jo tehnyt sinne peruslauseen mutta entäs lennosta laitto??

eakem [19.05.2003 19:04:44]

#

Etkö saa raporttia mieleiseksesi jos lisäät sen aikavälirajauksen suoraan siihen sorsaan, siis:
sorsa = "select * from asiakas where" & nimihaku & aikavali ?

Vepa [20.05.2003 10:57:00]

#

ratkaisin jo ongelman....
koko ongelma oli että miten saan syötettyä childille sql lauseen ja se kä vi jokseenkin näin..

tsorsa = "SELECT * FROM tapahtuma" & missa & haku(1) & ja(1) & haku(2) & ja(2) & haku(3) & ja(3) & haku(4) & ja(4) & haku(5) & ja(5) & haku(6) & ja(6) & haku(7)

sorsa = " SHAPE {select * from asiakas}  AS comasiakas APPEND ({" & tsorsa & "}  AS comtapahtuma RELATE 'asiakkaannimi' TO 'Asiakkaannimi') AS comtapahtuma"

dataenvironment1.comasiakas.source = sorsa

eakem [20.05.2003 17:04:35]

#

Eipä olisi itselläni tullut mieleen tuollasta vääntää...
Täytyypä vähän mutustella tuota ja miettiä mitä olet tehnyt.
Hyvä että homma selvisi.

Vepa [21.05.2003 20:04:04]

#

ongelmia tuli sittenkin... eli miten tota sorsa sql-lausetta pitäs muuttaa että se jättäisi pois valinnasta kaikki ne asiakkaat joilla ei ole tapahtumia..

eakem [21.05.2003 20:54:04]

#

Nyt pitäis vähän tietää noita taulurakenteita että osais kommentoida tarkemmin.

Itse kyllä lähtisin tekemään yhden sql-lauseen, jossa taulut liitetään toisiinsa ja tehdään kaikki tarvittavat rajaukset. Laitan pienen esimerkin:

select a.kenttä1, a.kenttä2, b.kenttä7
from tapahtuma a, asiakas b
where a.asiakas = b.asiakas and ... (muut ehdot)

Tässä oletetaan että nämä kaksi taulua liitetään toisiinsa asiakas- kentän kautta. Jos esim. tapahtumataulussa ei ole niitä asiakkaita, joilla ei ole tapahtumia, ne putoavat automaattisesti pois tässä lauseessa.

Tuon sql lauseen voi tehdä suoraan sinne data environmentin commandiin, ja täydentää halutuilla parametreilla seuraavasti:

... where ... and kenttäX=? and kenttäY =? and kenttäZ=?

Nuo Kyssärit tulevat automaattisesti parametreiksi Commandin parameter tabille ja siellä niitä voi muokata (nimi,tietotyyppi).

Commandia voi sitten kutsua koodissa halutuilla parametreilla ja tadaa... saat raportin ulos parametrein höystetyn kyselyn avulla.

En tiedä onko tämä sulle tuttua asiaa. Itse olen saanut toimivia datareportteja tehtyä näin. Jos haluat vielä tarkempia esimerkkejä niin palataan asiaan.

Vepa [22.05.2003 07:39:08]

#

no ei ihan tutuinta hommaa mut kokeillaan...
sanoisitko olisiko tämmönen lause edes periaatteessa oikein..

SELECT asiakas.*, tapahtuma.asiakkaannimi
FROM asiakas, tapahtuma
WHERE asiakas.asiakkaannimi = tapahtuma.asiakkaannimi

ja niin edelleen...ok??

eakem [22.05.2003 18:38:49]

#

On se periaatteessa lähes oikein.

Tuo Where- lause pitäisi täydentää:
WHERE asiakas.asiakkaannimi=tapahtuma.asiakkaannimi

Ilmeisesti tietokantasi on access?

Select lauseen voi testata VB:ssa, kun avaa visual data managerin , joka löytyy Add-Ins -menusta. Visual data managerilla avaat tietokannan, ja manageriin tulee SQL-statement ikkuna, jossa voit kokeilla selectiä.

Vepa [23.05.2003 08:26:30]

#

jep access on käytössä...

ainut nyt vaan että se ei toiminut ihan niinkuin piti..
kyllä hävis ne joilla ei ollut tapahtumia mut se ottaa mukana olevat nimet jotkut useaankin kertaa... ???

ja jos tiedät niin kertoisitkos miten sais korjattua kun reportin sivunvaihto hyppii se on alkupäässä ihan ok mut lopussa se yrittää laittaa niitä kax sivulleen (yritän saada tulostettua jokaisen asiakkaan omalle sivulle)..

eakem [23.05.2003 21:45:17]

#

lainaus:

mut se ottaa mukana olevat nimet jotkut useaankin kertaa... ???

Tuleeko siis duplikaatteja (=sama rivi 2 kertaa)?
Jos tulee duplikaatteja, silloin taulujen välisestä liitoksesta (where ehdosta) todennäköisesti puuttuu jotakin.

Jos kyse ei ole duplikaateista, niin tauluja toisiinsa liitettäessä ilmiö on normaali. Jos se haittaa reportilla, niin siellä commandissa voi tehdä grouping välilehdellä sellaisen ryhmittelyn, jossa otat ikkunaan 'Fields used for Grouping' ne kentät, jotka haluat näkyvän vain kerran, ja ikkunaan 'Fields in command' ne jotka haluat toistuvan aina.

Tässä kannattaa noudattaa samanlaista ryhmittelyä kuin on taulurakenteessasikin, eli ilmeisesti laitat vain sen asiakkaan sinne 'Fields used for grouping' ikkunaan. Kun ryhmittely on valmis, commandiin ilmestyy 'summary fields' ja 'detail fields', joka on hierarkisesti 'summary fields':n alapuolella.

Tämän jälkeen pitää reportille tehdä 'Retrieve structure', jolloin reporttiin tulee omat sectionit ryhmitellyn commandin mukaisesti. (olettaen tietysti että reportin data member on se ryhmitelty command)

Kuulostaako riittävän monimutkaiselta? Kyllä se onnistuu.

Vepa [24.05.2003 17:09:17]

#

nyt meni vähän yli(tai ainakin niin luulen),koska ei näyttänyt mulla toimivan..

se laitaa kaikki asiakkaat niin monen kertaan kun niillä on tapahtumia..

jos saisit jotenkin vielä selvennettyä tota..
esim. kumpaan commandiin toi pitäs laittaa ekaan(asiakas) vai lapseen(tapahtuma)??

no ei tässä auta muu kuin testailla..

eakem [24.05.2003 18:29:31]

#

Tee vaan yksi tavallinen (ei child) command, jossa select lause on.
Tee siihen commandiin sit se grouppaus.

Kun teet selectin, jossa liität asiakkaan ja tapahtumat toisiinsa, asiakas tulee siinä kyselyssä niin monta kertaa kuin sille on tapahtumia. Selviät siitä em. grouppauksella.

Vepa [24.05.2003 18:59:54]

#

ei en ymmärrä.. ;(

siis miten toi uusi commandi pitäs sit liittää reporttiin??
vai toimiiko ihan vaan kun se on siellä??
eikö sitä voi muka tehdä jo valmiina oleviin commandeihin..??
ja kumpi asiakas sinne pitäs ottaa gruoppiin?? asiakas taulusta vai tapahtuma taulusta??

eakem [24.05.2003 20:14:45]

#

Voi kai sen tehdä olemassaolevaankin commandiin, mutta en tiedä miten se käyttäytyy jos sen alla on child command.

Äkkiähän uuden commandin tekee testausta varten.

Command liitetään reporttiin seuraavasti:
1. avaa raportti
2. properties ikkunasta valitset data sourcen (se on se dataenvironmentti, jossa command on)
3. Edelleen properties ikkunassa valitset data memberin (se on se command johon olet tehnyt grouppauksen)
4. Klikkaa oikealla napilla raportin päällä ja valitse avautuvasta menusta 'retrieve structure' jolloin data reportin sectionit tulevat commandin mukaiseksi.
5. Data environmentin commandista vetelet hiirellä halutut kentät raportin vastaaviin sectioneihin.

lainaus:

ja kumpi asiakas sinne pitäs ottaa gruoppiin?? asiakas taulusta vai tapahtuma taulusta??

Kun teet kyselyn niin että liität taulut toisiinsa kuten aiemmin oli puhe, niin ei ole mitään väliä kummasta taulusta otat grouppaukseen. Ota selectiin asiakas vain toisesta taulusta (aivan sama kummasta), niin ei tarvii miettiä sen enempää sitä.

Vepa [25.05.2003 00:38:14]

#

se on pakko saada tohon olemassa olevaan commandiin toihan jättäisi muuten kokonaan pois käytöstä tuon olemassa olevan.. ;((

ja en saa toimimaann millään...

eakem [25.05.2003 22:43:59]

#

Sopiiko että laitan sulle sähköpostilla projektin,
jossa on nyt pari mallia, miten olen niitä raportteja vääntänyt? Jospa siitä selviäis jotakin.
Sitten voitais palata keskustelupalstalle. Siitä mallista voi tietysti vapaasti heittää kysymyksiä.

Toinen vaihtoehto on että lähetät mulle oman projektisi niin voisin kurkata sitä ja ehkä päästä kiinni ongelman ytimeen.

Vepa [26.05.2003 11:03:55]

#

kiitän tuosta ja tutkin sitä katellaan jos ei nyt ala auteta niin saat sen mun projektin tuota pikaa..

Vepa [27.05.2003 10:25:29]

#

ohjelmasi sisälti tämmösen pätkän josta luultavasti mättää..

DataEnv_reptest.Cmd_rep_Grouping Text1.Text

ja itse en saanut tuommoista tehtyä tuli vain virhe ilmoitus ja välkyteli keltasta tossa lauseessa??
´
lähetin sulle postiin mun käyttämän tietokannan et viitsisi tehdä siitäkin tuommiosta mallia??
tai no saat koko ohjelman..

eakem [28.05.2003 23:53:30]

#

Sain projektisi ja lopulta jonkinlaisen kantayhteyden pelaamaan kun minulla on access 97 ja sen mukainen tietokantamoottori. No, sain Bill Microsoftilta haettua jet 4.0:n ja sainkin sitten projektisi käyntiin, mutta kannan sisältöä en päässyt suoraan katsomaan sen enempää accessilla kuin visual data managerillakaan.

Lisäsin uuden commandin jossa on grouppaus, ja siihen commandiin yhden parametrin (jolla voi antaa asiakkaan nimen, tai olla antamatta, tällöin käytetään '%'- merkkiä ja like- funktiota). Commandin kutsu on frmetsilasku formilla.
Raportin sivunvaihto näyttäisi menevän halutulla tavalla kun group headerin property ForcePageBreak laitetaan arvoon 1 (rptPageBreakBefore).
Malliraportissa kaikki logot ym ovat tuossa samassa groupissa. Tämä kannattaa huomiioida jos oman raporttisi sivunvaihto ei toimi samalla tavalla.

Miksi omassa raportissasi tiedot toistuivat useaan kertaan?
En osaa sanoa.

Kun katselet näitä juttuja siitä mallista niin kiinnitä huomiota:
1.Commandin sql- lauseen lopussa on kysymysmerkki (on siis parametri). Commandin parameter- välilehdellä annetaan nimi parametrille. Parametreja voi olla useitakin.
2. kun raportti halutaan käynnistää, kutsutaan commandia halutuilla parametreilla. Tuo edellisessä vastauksessasi oleva koodirivi tekee juuri sen. Ilmeisesti omassa commandissasi ei parametria ollut määritettynä, joten sait 'keltaisen rivin'.

Varmaan eteen tulee vielä avoimia kysymyksiä mutta toivottavasti pääset eteenpäin.

eakem [29.05.2003 10:25:54]

#

Taisi vielä selvitä syy siihen tietojen toistumiseen:
Koska commandissasi ei ole grouppausta, tulevat otsikkotiedot yhtä montaa kertaa kuin on tapahtumiakin,
johtuen siitä 'sorsa' sql- lauseesta.
Jos et halua vääntää grouppausta, jolla em ongelma taklataan, muuta hieman sitä sorsaa:

sorsa = " shape {select DISTINCT asiakas.*, tap..."
eli lisäät ton DISTINCTin sinne. Sitten raportin pitäis pelittää. Laitat vielä sen sivinvaihdon kohdalleen (ks. edellinen viesti)


Sivun alkuun

Vastaus

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

Tietoa sivustosta