Olen käyttänyt alla olevaa koodia tekstitiedoston lukemiseen. Tieodosto luetaan rivi kerrallaan, jonka jälkeen kyseinen rivi näytetään MsgBoxissa. (Tämä vain siksi, että olen voinut seurata koodin toimivuutta.) Tekstitiedoston data on kolmessa sarakkeessa, välilyönneillä jaettuna. Koodin alapuolella on esimerkki tekstitiedostosta. Jotta tämä ei olisi liian yksinkertaista, on tekstitiedostossa 28 vastaavaa yhdistelmää kuin tässä esimerkissä (COMBINATION 1). Yhdistelmien ekalla rivillä on otsikko: COMBINATION 1 (2, 3, jne...) Yhdistelmien välissä on aina yksi tyhjä rivi.
Tarvitsen tietokantaani 29 saraketta. Ensimmäiseen tulee tekstitiedoston toinen sarake ja loppuihin 28:aan tulee jokaisen yhdistelmän kolmas sarake. Yhdistelmien toinen sarake on kaikissa yhdistelmissä sama, siksi riittää, että se on tietokannassa vain kerran. Jotta tämä olisi vieläkin vaikeampaa, on yhdistelmissä kaikkia muita rivejä kuin ensimmäistä ja viimeistä tuplasti. Tarvitsen siis jokaista riviä vain kerran. Kaikissa yhdistelmissä on siis yhtä monta riviä, mutta rivien lukumäärä vaihtelee tapauskohtaisesti.
Tuliko tämä nyt tarpeeksi epäselvästi? Voinko saada joitakin yksinkertaisia vinkkejä esim. miten käytän Split-käskyä, luon sarakkeet tietokantaan, jätän ekan sarakkeen huomioimatta, miten toinen sarake huomioidaan vain kertaalleen ja miten saan yhdistelmien otsikot sarakkeiden nimiksi? Tässähän näitä ongelmia on riittävästi... Olisi mukavaa jos joku voisi vastata edes yhteen kysymykseen ja vaikka kommentoida tuota koodia ja miten sitä muokkaamaan.
Olen kyllä tutkiskellut esimerkkejä ja ohjeita mutta en esimerkiksi tiedä miten käyttäisin split-käskyä juuri tässä tapauksessa. En siis hyödy kovinkaan paljon viittauksista vanhoihin kysymyksiin ja vastauksiin. Kiitos etukäteen ja tässä alla nämä esimerkit:
Dim iReadFile As Integer Dim sLine As String iReadFile = FreeFile Open App.Path & "\Sas\M.log" For Input As #iReadFile While Not EOF(iReadFile) Line Input #iReadFile, sLine MsgBox "This was recieved by the file: " & sLine, vbOKOnly Wend Close #iReadFile
Alla esimerkki tekstitiedostosta:
COMBINATION 1 1 0.00 -7.5000E-01 2 230.00 2.6579E+05 2 230.00 2.6580E+05 3 460.00 5.6492E+05 3 460.00 5.6492E+05 4 690.00 8.9737E+05 4 690.00 8.9737E+05 5 920.00 1.2631E+06 5 920.00 1.2631E+06 6 1150.00 1.6622E+06 6 1150.00 1.6622E+06 7 1380.00 2.0947E+06 7 1380.00 2.0947E+06 8 1610.00 2.5604E+06 8 1610.00 2.5604E+06 9 1840.00 3.0595E+06 9 1840.00 3.0595E+06 10 2070.00 3.5919E+06 10 2070.00 3.5919E+06 11 2300.00 4.1577E+06 11 2300.00 4.1577E+06 12 2470.00 3.6600E+06 12 2470.00 3.6600E+06 13 2640.00 3.1805E+06 13 2640.00 3.1805E+06 14 2810.00 2.7192E+06 14 2810.00 2.7192E+06 15 2980.00 2.2761E+06 15 2980.00 2.2761E+06 16 3150.00 1.8512E+06 16 3150.00 1.8512E+06 17 3320.00 1.4446E+06 17 3320.00 1.4446E+06 18 3490.00 1.0561E+06 18 3490.00 1.0561E+06 19 3660.00 6.8588E+05 19 3660.00 6.8588E+05 20 3830.00 3.3384E+05 20 3830.00 3.3383E+05 21 4000.00 7.5000E-01
Anteeksi että pääsi unohtumaan, kyseessä on siis VB 6.0. Tuosta esimerkistä ei näköjään erota välilyöntejä kovinkaan selvästi. Eka sarake on siis 1 - 21, toka 0.00 - 4000.00 ja kolmas -7.5000E-06 - 7.5000E-01. Tuo data pitäisi siis muuttaa tekstistä numeroiksi.
Moi,
Joko sait koodin väännettyä vai vieläkö tämä case odottaa ratkaisua?
Olen kyllä saanut apua pulmaan ja tällä hetkellä ohjelma tekee tietokantaan 28 taulukkoa, joissa kaikissa on kaksi saraketta. Ekassa sarakkeessa on yllä olevan esimerkin toinen sarake ja toisessa sarakkeessa on esimerkin kolmas saraka. Lisäksi koodi poistaa rivit, jotka on kaksi kertaa.
Tämä on siis ihan ok, mutta nyt minun pitäisi löytää se taulukko, joka sisältää maksimiarvon ja se taulukko, joka sisältää minimiarvon. Jokaisen taulukon eka sarake on samanlainen ja min. ja max. arvot siis löytyvät taulukoiden toisesta sarakkeesta. Pitäisi siis selvittää taulukot, joista löytyy ääriarvot.
Vinkkejä?
Tarvitsen kuvaajaa varten ne kaksi tau
Tässä on yksi tapa toteuttaa homma. Oletan, että käytät access -kantaa. Seuravaan esimerkkiin tarvitset formille seuraavat kontrollit:
command1
4 textboxia (Txt_min_tbl_name,Txt_max_tbl_name,
Txt_min_tbl_value,Txt_max_tbl_value)
esimerkin tietokannan nimi on testi.mdb ja kantaan on tehty kolme taulua, jotka on nimetty taulu1, taulu2,taulu3.
Kussakin taulussa on sarake kentta1, jonka minimi ja
maksimiarvoja tarkastellaan.
ohjelma lukee taulut läpi ja tallettaa min ja max arvot tekstikenttiin, ja näyttää vastaavat taulujen nimet.
Tein formille myös labelit, että tulos olisi helposti luettavissa, tyyliin:
----------- taulu arvo
minimi----- |txtbox| |txtbox|
maksimi---- |txtbox| |txtbox|
Private Sub Command1_Click() Dim ADO_conn As New ADODB.Connection Dim db_rset As New ADODB.Recordset Dim table_name As String Dim sql_string As String 'määritellään yhteys access- kantaan ADO_conn.ConnectionString = "PROVIDER=Microsoft.Jet.OLEDB.3.51;Data Source=" & App.Path & "\testi.mdb;" 'avataan yhteys ADO_conn.Open 'luetaan silmukassa taulujen minimi- ja maksimiarvot For x = 1 To 3 Step 1 'muokataan luettavan taulun nimi table_name = "taulu" & x 'määritellään suoritettava sql-lause sql_string = "select min(kentta1) as minimi, max(kentta1) as maksimi from " & table_name 'suoritetaan sql-lause db_rset.Open sql_string, ADO_conn, adOpenDynamic, adLockOptimistic db_rset.MoveLast 'tämä ei ole välttämätön 'alustetaan tekstikentät eka taulun kyselyn tuloksilla 'edellyttää, että tekstikenttien text property on alussa tyhjä. If Txt_min_tbl_name.Text = "" Then Txt_min_tbl_name.Text = table_name Txt_max_tbl_name.Text = table_name Txt_min_tbl_value.Text = db_rset.Fields(0) Txt_max_tbl_value.Text = db_rset.Fields(1) End If 'vertaillaan kyselyn palauttamia arvoja. Jos min tai max muuttuu, 'otetaan arvot talteen tekstikenttiin. If db_rset.Fields(0) < Txt_min_tbl_value.Text Then Txt_min_tbl_value.Text = db_rset.Fields(0) Txt_min_tbl_name.Text = table_name End If If db_rset.Fields(1) > Val(Txt_max_tbl_value.Text) Then Txt_max_tbl_value.Text = db_rset.Fields(1) Txt_max_tbl_name.Text = table_name End If 'suljetaan recordset. Muuten tulee virhe. db_rset.Close Next x 'lopuksi suljetaan yhteys. ADO_conn.Close End Sub
Toivottavasti voit tästä soveltaa jotakin omaan juttuusi.
Tämänkaltainen toteutus voi olla aika tehoton, jos tauluja on paljon, ja niissä on paljon tietueita. Minimin ja maksimin haussa on kahlattava kaikki taulut läpi.
Voisiko tehdä niin, että ylläpidät erillistä taulua, josta seuraat minimin ja maksimin muutosta? Kannattaa miettiä siinä tapauksessa, että tulee suorituskykyongelmia.
Aihe on jo aika vanha, joten et voi enää vastata siihen.