Olen tehnyt oman ohjelman vb:llä (laskutuspohja).
Mutta, miten saan laskupohjan tallennettua koneelle kun se on valmis?? Ohjelmani on .exe ja haluaisin tallentaa sen exe:nä. Ymmärtääköhän ketään mitä koitan sanoa :D commondialogilla saan näkymään tallenna ikkunan mut mitään ei tallennu, koska jotain oleellista puuttuu... PS. Älkää hermoilko koska olen aloittelija ja muistakaa vääntää rautalangasta että minäkin tajuan!!
tarkoitatko, että kun olet syöttänyt laskupohjaan lukuja, niin ne pitäisi tallentaa exe-tiedostoon siten, että kun käynnistät sen seuraavan kerran niin luvut ovat siellä valmiina. Ei varmaankaan onnistu. Tallenna data erilliseen tiedostoon, josta exe lukee ne.
Joo, ohjelman Exeen ei kannata ruveta mitään kirjoittelemaan. Tee niin kuin setä neuvoi, ja tallenna erilliseen tiedostoon ASCII- tai binäärimuodossa riippuen datan laadusta. Hausta, koodivinkeistä ja oppaista löytyy ohjeita tallentamiseen ja lataamiseen, jollet vielä osaa sitä.
Mikäli et osaa tallentaa sitä dataa mihinkään erilliseen tiedostoon kannattaa katsoa koodivinkit sekä oppaat osiota.
Tarkoitan juuri sitä mitä setä sanoi.
Taitaa mennä turhan hankalaksi vai? Kaikkee ei voi saada PRKL!
No jos kyse on nimenomaan siitä, että haluat välttämättä tallentaa tietoa ohjelman Exeen, niin ei se tietääkseni mahdotonta ole. Käsittääkseni on parasta tallentaa data Exen ohjelmakoodin perään, ja jotenkin varmistaa, ettei se sekoitu ohjelmakoodiin ja aiheuta virheellistä toimintaa. Mitään tarkempia ohjeita en osaa antaa, kun en ole tuollaista koskaan kokeillut.
Vohveli... kyllä datan tallentaminen exeen on melkoisen mahdotonta kääntämättä exeä uudelleen.
OkkiZ kirjoitti:
PS. Älkää hermoilko koska olen aloittelija ja muistakaa vääntää rautalangasta että minäkin tajuan!!
Kun nyt muistaa lähtökohdat, niin puheet
hunajavohveli kirjoitti:
tallentaa data Exen ohjelmakoodin perään
on varsin turhaa.
OkkiZ kirjoitti:
Taitaa mennä turhan hankalaksi vai?
Ei ollenkaan. Seuraava lainaus on Laaksosen kirjoittamasta Visual Basic Oppaasta, jota voit käyttää/soveltaa tallentaaksesi laskutuspohjasi.
Laaksosen opas kirjoitti:
Peräkkäistiedostot
Peräkkäistiedostoista on eniten hyötyä silloin, kun haluaa tehdä ohjelmalle oman tallennusformaatin tai jos haluaa tallentaa tietueessa olevaa tietoa.
Seuraavassa on näyte peräkkäistiedostojen käytöstä tietueen kanssa:
Type HTiedot nimi As String ika As Integer palkka As Currency End Type 'aliohjelmaan: Dim tiedot As HTiedot tiedot.nimi = "Jussi Virtanen" tiedot.ika = 25 tiedot.palkka = 2500 Open "c:\hakemisto\tiedosto.dat" For Binary As #1 Put #1, ,tiedot Close #1Nyt tiedostossa tiedosto.dat on kaikki tietueen muuttujat - yhdellä tallennuskäskyllä. Tiedot voisi ladata takaisin tietueeseen seuraavasti:
Type HTiedot nimi As String ika As Integer palkka As Currency End Type 'aliohjelmaan: Dim tiedot As HTiedot Open "c:\hakemisto\tiedosto.dat" For Binary As #1 Get #1, ,tiedot Close #1 Msgbox tiedot.nimi Msgbox tiedot.ika Msgbox tiedot.palkkaPeräkkäistiedostoissa avaustapa on siis Binary. Tiedostoa pystyy sekä lukemaan että kirjoittamaan samalla avauskerralla - komennoilla Get ja Put. Tietoa kirjoitetaan/luetaan järjestyksessä, jos toisen parametrin jättää pois, muuten sitä voidaan lukea mistä kohtaa tiedostoa tahansa.
Eli muutat tuota Typeä siten, että se sisältää laskutuspohjaltasi kaikki tiedot jotka haluat tallentaa. Ja ennen kuin tallennus tai luku tapahtuu voidaan kysyä käyttäjältä tiedostonnimeä joka avataan/johon tallennetaan, jos laskutuspohjia on useita.
Edit: typote...
Tuo Laaksosen peräkkäistietoesimerkki ei ole hyvä useammille henkilöille tai tietueille. Varminta on avata tiedosto erikseen lukua ja kirjoitusta varten ja varmistaa seek-käskyllä, ettei kirjoiteta jo olemassa olevan tiedon päälle. Jos samaa tiedostonumeroa lukee ja välillä kirjoittaa menee tietueet sekaisin. On siis vain joko luettava tai kirjoitettava. Tässä taoauksessa kyllä esimerkki sopii, kun tiedot tallennetaan ohjelman sulkemisen jälkeen ja luetaan käynnistyksen jälkeen. Luetaan siis kerralla kaikki tallennetut tiedot.
Lukeminen mistäkohtaa tahansa ei onnistu, koska ei ole tietoa tietueen alkukohdasta. Siksi tietoa on luettava aina peräkkäin alusta loppuun. Tiedostoon tallentuu merkkijonon eteen myös sen pituus, jolloin luettaessa tiedetään, montako tavua merkkijonoon kuuluu.
Random-tiedostolla on kiinteä tietuepituus ja sitä on helppo lukea mistä kohtaa tahansa. Binääritiedostossa tarvitaan erillistä indeksointia osoittamaan tietueiden alkukohtaa.
En minäkään suosittele Exeen kirjoittamista, mutta olen kuullut, ettei se mahdotontakaan ole. Ainakin ristinollakilpailun yhteydessä oli jotain puhetta tästä, kun keskusteltiin huijausmahdollisuuksista.
Mutta jos tässä nyt on siis kyse siitä, ettei halua ohjelman käyttäjien lukevan/muuttavan tiedostoa, niin paras tapa lienee kryptata se.
Alkuperäiseen ongelmaan ainoa järkevä ratkaisu on tallentaa tiedot erilliseen datatiedostoon. Mutta EXE-tiedoston tietojen muuttaminen on myös mahdollista, jos tietää, mihin kohtaan ne on tallennettu. Tässä on esimerkkiohjelma:
Private Sub Form_Load() Dim tiedot As String tiedot = "ABCDEFGHIJKLMN" End Sub
Heksaeditorin avulla ohjelman sisältä paljastuu:
000015D0 00 00 00 00 1C 00 00 00 41 00 42 00 43 00 44 00 ........A.B.C.D. 000015E0 45 00 46 00 47 00 48 00 49 00 4A 00 4B 00 4C 00 E.F.G.H.I.J.K.L. 000015F0 4D 00 4E 00 00 00 00 00 56 42 41 36 2E 44 4C 4C M.N.....VBA6.DLL
Ja noita tietoja voisi ihan helposti muuttaa toisesta ohjelmasta käsin. Oman käynnissä olevan EXE-tiedoston muuttaminen ajon aikana ei kuitenkaan ole mahdollista.
Aihe on jo aika vanha, joten et voi enää vastata siihen.