Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB.NET: Tietokanta.... miten?

Sivun loppuun

novice [17.10.2008 19:15:23]

#

Hei taas.

Tein tietokanta harjoituksen: http://www.homeandlearn.co.uk/NET/nets12p4.html

Nyt haluaisin tehdä saman kaltaisen harjoituksen omalla tietokannalla, mutta ongelmaksi muodostui tietokannan luominen.

Millä ja miten esimerkin kaltainen yksinkertainen tietokanta luodaan?
En löytänyt aiheeseen mistään mitään selkeää ohjetta suurista etsinnöistä huolimatta.

novice [17.10.2008 21:08:52]

#

Siis... tietokanna luomiseen löytyy kyllä ohjeita pilvin pimein, mutta mistä löytyy itse ohjelma millä se tehdään? Vai tarviiko siihen edes erityistä ohjelmaa? Microsoft access - maksullinen vai ei - mistä sen saa? Jos visual basic 2008 on ilmainen, niin en osaa kuvitella miksi tietokannanluomisohjelma olisi maksullinen. Löytyykö ilmaista ohjelmaa - mistä?

Grez [17.10.2008 23:06:31]

#

Tietokannan voi luoda ihan millä vaan ohjelmalla joka osaa käskyttää RDBMS:ää eli tietokantamoottoria.. Eli jos tarkoitus on luoda vaikka MySQL-palvelimelle tietokanta, niin millä vaan ohjelmointikielelle pystyy kyllä homman hoitamaan. Sen pystyy hoitamaan myös MySQL:n mukana tulevaa komentoriviclienttiä käyttäen. Access-tyyppisen (Jet engine) tietokannankin voi luoda ilmaiseksi saatavilla työkaluilla. Tosin miksi kukaan haluaisi käyttää Access-kantoja, jos tarkoitus ei ole käyttää Accessia, eli sitä graafista käyttöliittymää.

En nyt tiedä mikä voisi olla maksullinen tietokannanluomisohjelma, mutta voisin kuvitella että siinä olisi graafinen käyttöliittymä joka tekisi hommasta helpompaa tai tehokkaampaa. Silloin joku voisi jopa ostaa sellaisen.

novice [18.10.2008 11:11:53]

#

Ok, mutta miten voin tehdä tietokantatiedoston jossa olisi nyt aluksi 1 taulu, 10 saraketta ja 10 riviä (en tiedä kutsunko noita nyt suomeksi oikeilla nimillä(table, column, row)).
Tietokannan olisi tarkoitus kulkea itse ohjelman mukana tiedostona josta tietoja luetaan ja tarvittaessa muutetaan (siis kaikki kopiot ohjelmasta käyttävät omaa tietokantaansa).
Onko siis olemassa yksinkertaista ohjelmaa jolla tämän tietokannan "pohjan" voisi tehdä valmiiksi (ja pohjan voisi sitten täyttää itse ohjelmalla)?
Vai täytyykö se tietokanta tehdä itse "koodaamalla"?

Olen varma, että tässä tietokanta hommassa on ainakin yksi (varmasti useampikin) asia mitä en ole tajunnut kunnolla/ollenkaan.

neau33 [18.10.2008 12:07:45]

#

Moikka taas novice!

Koskapa sinulla näyttää olevan täysi vauhti päällä jo koulutuksen tässä vaiheessa niin...
Valmiita ohjelmia on pilvin pimein, mutta maksaa suhtkoht saman vaivan lisätä tietokannan luominen taulun/jen lisääminen ohjelmaasi mikäli ohjelmasi on takoitus pystyä dynaamiseen taulujen luontiin/muokkaukseen...

Jos sinulla ei ole JET-moottoria niin imppaa se täältä
ja tutki täältä mitä minulla on kerrottavaa ja tutki eritoten se ADOX-linkki (osviittaa)

Jos haluat monipuolisen, kevyen ja helppokäyttöisen työkalun tutustu tähän

neau33 [19.10.2008 19:25:17]

#

Heippa taas novice!

jos innostuksesi ei ole laantumassa, mutta DataBase-viritelmät sattuisivat tökkimään niin tässä hieman lisää osviittaa...

dbdata.txt:

Matti;Mainio;Matinkatu 2;12112;Kotikaupunki;041-1234567;mailto:matti.mainio@kotiposti.fi;Eronnut äskettäin vaimostaan, juo paljon*
Liisa;Mainio;Liisankatukatu 1;12110;Kotikaupunki;041-1234533;mailto:liisa.mainio@kotiposti.fi;Eronnut äskettäin miehestään, nai paljon*
Martti;Mölsä;Sivukuja 13;12113;Kotikaupunki;050-5055513;Ei tietoa;Valittaa yleensä joka asiasta*
Lilli;Simpsakka;Kotikatu 33;12133;Kotikaupunki;044-7649520;mailto:lilli.simpsakka@kotikanava.fi;Nähty usein kaupunginjohtajan kyljessä*
Jorma;Jortikka;Keskuskatu 10;12111;Kotikaupunki;010-1112221;mailto:jorma.jortikka@kotikanava.fi;Vaimon kanssa ongelmia, vaan ei herra Mainion ex-vaimon
' Projektiin COM-Referenssi:
' Microsoft ADO Ext. 2.8 for DDL and Security

' Lomakkeelle: 
' TextBox (ReadOnly/Multiline=True)
' DataGridView (Enabled/Visible=False)
' Button

Imports ADOX 
Imports System
Imports System.Data
Imports System.Data.OleDb
Imports System.Drawing
Imports System.Windows.Forms
Imports Microsoft.VisualBasic
'huom. väännetty SharpDevelop 3.0:lla
Public Partial Class MainForm: Inherits Form

  Public Sub New()
    Me.InitializeComponent()
  End Sub

  Sub Button1Click(sender As Object, e As EventArgs)

    Dim tietokanta As String = "C:\"
    tietokanta += InputBox( _
    "Tietokannan nimi""Tietokanta manageri","")

    If tietokanta <> "C:\" Then
      tietokanta += ".mdb"
    ElseIf tietokanta = "C:\"
      MessageBox.Show("Tietokantaa ei ole nimetty!")
      tietokanta = NothingExit Sub
    End If

    If Dir(tietokanta) = "" Then
      LuoAccessTietokanta(tietokanta)
    Else
      Dim palaute As DialogResult = _
      MessageBox.Show( _
      "Tietokanta: " + tietokanta + " on jo olemassa!" + _
      Environment.NewLine + Environment.NewLine + _
      "Ylikirjoitetaanko tietokanatatiedosto", _
      "Tietokanta manageri",MessageBoxButtons.YesNo, _
      MessageBoxIcon.Question)
      Select Case palaute
        Case 6
          FileSystem.Kill(tietokanta)
          LuoAccessTietokanta(tietokanta)
        Case Else
          Exit Sub
      End Select
    End If

  End Sub

  Public Sub LuoAccessTietokanta(ByVal tietokanta As String)

    Dim katalogi As ADOX.Catalog = New ADOX.Catalog()
    katalogi.Create("Provider=Microsoft.Jet.OLEDB.4.0; " + _
    "Data Source=" + tietokanta + ";Jet OLEDB:Engine Type=5")
    katalogi = Nothing
    MsgBox("Tietokanta " + tietokanta + " luotu onnistuneesti...")

    Dim yhteysmerkkijono As String = _
    "PROVIDER=Microsoft.Jet.OLEDB.4.0;" + _
    "Data Source =" + tietokanta

    Dim taulu As String = InputBox( _
    "Taulun nimi""Tietokanta manageri","")

    If taulu = "" Then
      MsgBox("Taulua ei nimetty")
      yhteysmerkkijono = NothingExit Sub
    End If

    Dim onnistunut As Boolean = True
    Dim yhteys As OleDb.OleDbConnection = _
    New OleDb.OleDbConnection(yhteysmerkkijono)
    Dim malliTaulu As New DataTable

    Try
      yhteys.Open()
      malliTaulu = yhteys.GetOleDbSchemaTable( _
      OleDb.OleDbSchemaGuid.Tables, New Object() _
      {NothingNothing, Taulu, "TABLE"})
      yhteys.Close(): yhteysmerkkijono = Nothing

      If malliTaulu.Rows.Count = 0 Then
        Dim komento As OleDb.OleDbCommand = _
        New OleDb.OleDbCommand( _
        "CREATE TABLE [" + Taulu + "]" + _ 
        "([ID] INT IDENTITY(1, 1), " + _
        "[Etunimi] TEXT(20) NOT NULL, " + _
        "[Sukunimi] TEXT(20) NOT NULL, " + _
        "[Osoite] MEMO NOT NULL, " + _
        "[Postinumero] TEXT(10) NOT NULL, " + _
        "[Postitoimipaikka] TEXT(50) NOT NULL, " + _
        "[Puhelin] TEXT(15), " + _
        "[Sähköposti] MEMO, " + _
        "[Merkinnät] MEMO, " + _
        "CONSTRAINT [pk_ID] PRIMARY KEY (ID))", yhteys)
        yhteys.Open()
        komento.ExecuteNonQuery()
        yhteys.Close(): komento = Nothing
        malliTaulu = Nothing
      End If

    Catch ex As Exception
      onnistunut = False
    End Try

    If Not onnistunut Then

      If connectionstate.Open Then
        yhteys.Close: yhteys = Nothing 
      End If

      If Not (yhteysmerkkijono) Is Nothing Then
        yhteysmerkkijono = Nothing
      End If

      If Not (malliTaulu) Is Nothing Then
        malliTaulu = Nothing
      End If

      MsgBox("Tietokantataulun: " + taulu + _
      " luomisessa tapahtui virhe!")
      onnistunut = NothingExit Sub

    End If

    onnistunut = True
    MsgBox("Tietokantataulu: " + taulu + _
    " luotu onnistuneesti...")

    If Dir() <> "C:\dbdata.txt" Then
      FileSystem.FileOpen( _
      1"C:\dbdata.txt", OpenMode.Input, OpenAccess.Read)
      TextBox1.Text =  FileSystem.InputString(1, LOF(1)) 
      TextBox1.Tag = TextBox1.Text 
    End If

    If TextBox1.Text <> "" Then

      Dim aErottelu() As String = _
      TextBox1.Text.Split("*")
      yhteys.Open 

      Dim i As Integer = 0
      For i = 0 To aErottelu.GetUpperBound(0)

        onnistunut = True

        Dim bErottelu() As String = _
        aErottelu(i).Replace(Environment.NewLine,"").Split(";")

        If bErottelu.Length <> 8 Then
          i = Nothing:yhteys.Close 
          yhteys = Nothing
          MessageBox.Show( _
          "Tietorakenne on väärää muotoa..." + _
          Environment.NewLine + Environment.NewLine + _
          "Tarkista tietolähteen tietorakenne")
          Exit Sub
        End If

        Dim j As Integer = 0
        Dim arvot As String = String.Empty 
        For j = 0 To bErottelu.GetUpperBound(0)
          arvot += Chr(34) + bErottelu(j).ToString.Replace( _
          Environment.NewLine, "") + Chr(34)
          If j < bErottelu.GetUpperBound(0Then
            arvot += ","
          End If
        Next j: j = Nothing
        Dim kysely As String = String.Empty 
        Dim bKomento As New OleDb.OleDbCommand

        Try
          kysely = "INSERT INTO [Taulu1] " + _
         "([Etunimi], [Sukunimi], [Osoite], [Postinumero], " + _
         "[Postitoimipaikka], [Puhelin], [Sähköposti], " + _ "
         "[Merkinnät]) VALUES(" + arvot +")"
          bKomento  = _
          New OleDb.OleDbCommand(kysely, yhteys)
          bKomento.ExecuteNonQuery()
        Catch ex As Exception
          onnistunut = False
        End Try

        bErottelu = Nothing: arvot = Nothing
        kysely = Nothing: bKomento = Nothing

        If Not onnistunut Then
          yhteys.Close(): yhteys = Nothing 
          aErottelu = Nothing: onnistunut = Nothing
          Dim msgstr As String = String.Empty 
          If i = 0 Then
            msgstr = _
            "Tietueiden viennissä tapahtui odottamaton virhe!"
          Else
            msgstr = Cstr(i) + _
            ". tietueen viennissä tapahtui odottamaton virhe!"
          End If
          MsgBox(msgstr): msgstr = Nothing
          i = Nothing: Exit Sub
        End If

      Next i: i = Nothing

      yhteys.Close(): yhteys = Nothing 
      aErottelu = Nothing: onnistunut = Nothing
      MsgBox("Tietueet viety onnistuneesti tauluun: " _
      + taulu +"...", MsgBoxStyle.OkOnly, "Tietokantamanageri")
      TextBox1.Enabled = False
      TextBox1.Visible = False
      Button1.Enabled = False
      DataGridView1.Enabled = True
      DataGridView1.Visible = True
      TäytäDataTauluKontrolli(tietokanta, taulu)
    Else
      MsgBox("Mitään vietävää tietokantaan ei löytynyt!", _
      MsgBoxStyle.OkOnly,"Tietokantamanageri")
      Exit Sub
    End If

  End Sub

  Sub TäytäDataTauluKontrolli( _
  ByVal tietokanta As String, ByVal taulu As String)

    If Dir(tietokanta) <> "" Then

      Dim yhteysmerkkijono As String = _
      "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source =" + tietokanta

      Dim yhteys As OleDbConnection = _
      New OleDbConnection(yhteysmerkkijono)

      Try
        yhteys.Open
      Catch ex As Exception
      End Try

      If connectionstate.Open Then
        Try
          Dim datasetti As DataSet = New DataSet
          Dim kysely As String = _
          "Select * From [" + taulu + "]"
          Dim adapteri As OleDbDataAdapter = _
          New OleDbDataAdapter(kysely, yhteys)
          adapteri.Fill(datasetti, taulu)
          MsgBox("Tuodaan tietokannan: " _
          + tietokanta + " tiedot...")
          DataGridView1.DataSource = _
          datasetti.Tables(taulu)
          DataGridView1.Refresh
          kysely = Nothing: adapteri = Nothing
          yhteys.Close: yhteys = Nothing
        Catch ex As Exception
          MsgBox("Tiedonsiirto tietokannasta: "+ _
          tietokanta + " epäonnistui!"
        End Try
      Else
        MsgBox("Yhteyttä tietokantaan: " + tietokanta + _
        " ei saatu luotua!",MsgBoxStyle.OkOnly, "Tietokantamanageri")
      End If
      yhteysmerkkijono = Nothing
    Else
      MsgBox("Tietokantaa " + tietokanta + _
      " ei löydy!", MsgBoxStyle.OkOnly,"Tietokantamanageri")
    End If
    tietokanta = Nothing

  End Sub

  Sub TextBox1Enter(sender As Object, e As EventArgs)
    Button1.Focus 
  End Sub

  Sub MainFormFormClosing(sender As Object, _
As FormClosingEventArgs)
    Me.Dispose 
  End Sub

  Sub MainFormFormClosed(sender As Object, _
As FormClosedEventArgs)
    End
  End Sub

End Class

novice [20.10.2008 00:14:28]

#

Hahaaa!!!

Kiitos Nea! Tämä viimeisin esimerkki valotti montaa asiaa.
Ohjelmassa on kuitenkin joku bugi; Taulun onnistuneen nimeämisen jälkeen data ilmestyy textboxiin ja tulee ilmoitus "tietueiden viennissä tapahtui odottamaton virhe!". En näin yömyöhään viitsinyt alkaa etsimään virhettä (tuskinpa olisin löytänytkään).
Toivon, että maanantaina iltasella pääsisin jatkamaan harjoituksia toimivan koodin parissa.

Edit: Nyt konetta sulkiessa huomasin, että dbdata.txt oli auki notepadissa. Liekö vaikutusta asiaan?

neau33 [20.10.2008 07:49:25]

#

Heippa taas novice!

Tietolähteenä toimivan tekstitiedoston dbdata.txt tulee sijaita C:-aseman juuressa (C:\dbdata.txt). Oletan, että kopioit tiedoston käyttäen hyväksi copy/paste-kombinaatiota...tarkista, ettei esim. tiedoston loppuun tullut muutamaa ylimääräistä rivinvaihtoa...elikä tiedoston ensimmäiset viisi merkkiä
ovat: Matti ja kuusi viimeistä merkkiä ovat: vaimon...
Voit ohittaa tietolähteen kirjoittamalla ohjelmakoodissa seuraavien rivien eteen '-merkin tai poistamalla rivit kokonaan...

'If Dir() <> "C:\dbdata.txt" Then
      'FileSystem.FileOpen( _
      '1, "C:\dbdata.txt", OpenMode.Input, OpenAccess.Read)
      'TextBox1.Text =  FileSystem.InputString(1, LOF(1))
      'TextBox1.Tag = TextBox1.Text
'End If

sen jälkeen voit kirjoittaa ohjelman tekstiboxiin oman tietolähteen (ennen napin painamista) vaihda myös TextBox1.ReadOnly-ominaisuuden arvoksi False

Tietolähteen tietuerakenteen tulee noudattaa seuraavaa kaavaa:

etunimi;sukunimi;osoite;postinumero;postitoimipaikka;puhelin;email;merkinnät
etunimi;sukunimi;osoite;postinumero;postitoimipaikka;puhelin;email;merkinnät
etunimi;sukunimi;osoite;postinumero;postitoimipaikka;puhelin;email;merkinnät

Huom! viimeisen tietueen perään ei tule *-merkkiä eikä rivinvaihtoa.

Jos et kommentoi/poista koodissa em. rivejä voit kirjoittaa uuden templaatin esim. Notepad-ohjelmalla noudattaen samaa kaavaa, tallentaa tiedoston C:-aseman juureen nimellä dbdata.txt ja käyttää sitä omana tietolähteenä...

Tarkista, että ADOX ja Microsoft.VisualBasic näkyy Solution Explorer'ssa Referencess-listalla...jos ei näy niin tuo ne/se projektiin klikkaamalla Referencess-kuvaketta hiiren oikealla ja valitse: Add Reference, valitse .NET tai GAC-välilehti, etsi listalta Microsoft.VisualBasic tuplaklikkaa nimeä (pitäisi ilmaantua alempaan laatikkoon) valitse COM-välilehti, etsi listalta Microsoft ADO Ext. 2.8 for DDL and Security tuplaklikkaa nimeä ja klikkaa OK-painiketta.

PS. esimerkkiohjelmassa ei olekaan mitään muuta, kuin puutteita, mutta missään nimessä en ole kiinnostunut rakentamaan kenellekkään ilmaiseksi täydellisyyksiä hipovaa graafista tietokanta-hallintaohjelmaa...
Toiminta on kuitenkin testattu, joten toimintaa vakavasti haittaavia bugeja ei pitäisi löytymän - yksi sulkumerkki ")" oli jäänyt pois leikatessa/liimatessa tänne (Visual Basic näyttää automaattisesti mistä) ja MessageBox-viesteissä on tietenkin kirjoitusvirheitä...

novice [20.10.2008 12:38:09]

#

Noniin.. Lähtihän se toimimaan. Taulun nimeksi piti vaan laittaa 'taulu1'.
Nyt vaan rivi riviltä käymään tämä läpi, että tajuan mitä tässä oikeen tapahtuu...

neau33 [20.10.2008 15:22:40]

#

Moikka taas novice!

Teit todella tarkan havainnon...

vaihda koodissa rivi:

kysely = "INSERT INTO [Taulu1] " + _

tähän:

kysely = "INSERT INTO [" + taulu + "] " + _

ja voit antaa taululle haluamasi nimen.

novice [20.10.2008 22:29:52]

#

Hei taas

Miten saan yhteyden vaikkapa openoffice base:lla (.odb) tehtyyn tietokantaan?

Tästä ilmeisesti pitää jotain vaihtaa

Dim yhteys As New OleDb.OleDbConnection
yhteys.ConnectionString = "PROVIDER=Microsoft.Jet.OLEDB.4.0 _
;Data Source = C:\tietokanta.odb"
yhteys.Open()

Ja sitten jos vielä joku viitsisi suomentaa muutamia 'termejä':

OleDb
Microsoft.Jet.OLEDB.4.0
ODBC
OBDC
ADO
ADOX
API
RDBMS

neau33 [21.10.2008 00:15:19]

#

Moikka taas novice!

Hauskaa, minullakin on oma tietokantamuoto, jonka tiedostopääte on .odb ja joka käyttää viriteltyä JET-moottoria... tein sen, kun rakentelin Excelin sisään oman graafisen tietokanta-hallinta moduulin...hoitelen samalla virityksellä myös sähköpostin-liitetiedostoineen ja FTP-down/upload työt.
Mikäli kiinnostaa niin sähköposti-moduulin esiastetta voi käydä tsekkaamassa täältä

OpenOffice.org mainostaa täyttä yhteensopivuutta Microsoft Office tuotteisiin nähden, joten jos lupaukset pitää niin OleDb-yhteyden pitäisi onnistua...testaa niin tiedät onnistuuko...

suomenteluissa ei ole mitään järkeä...riittää, että tietää mistä on kysymys ja miten jutskat toimii...Wikipedia auttaa...

Grez [21.10.2008 00:43:48]

#

Heippa Nea, minua alkoi kiinnostamaan tämä kohta:

neau33 kirjoitti:

käyttää viriteltyä JET-moottoria...

Siis miten oikein olet viritellyt JET-moottoria? Vai käytätkö jonkun muun virittelemää JET-moottoria? Miten tuo virittely käytännössä tapahtuu, kun tietääkseni siitä ei ole lähdekoodejakaan saatavilla?


Sitten noiden sanojen selityksiin. Uskoisin että tässä haettiin nimenomaan selityksiä mitä lyhenteet tarkoittavat eikä vain suomennoksia. Toki Wikipedia auttaa ja sinne noista monesta onkin linkki. Laitoin nyt silti myös lyhyen suomenkielisen kuvauksen kustakin.

OleDb
Microsoftin komponenttiobjektimalliin (COM) pohjautuva tietokantarajapinta

Microsoft.Jet.OLEDB.4.0
OLEDB:n ja Jet-tietokantamoottorin välinen liima (provider)

ODBC Open Database Connectivity
Liityntärajapinta, jonka avulla sovellus voi kommunikoida useiden eri tietokantamoottoreiden kanssa. Käytännössä kaikille yleisille tietokantamoottoreille löytyy ODBC-korjasto

OBDC
Hmm, olisiko väärin kirjoitettu ODBC ?

ADO ActiveX Data Objects
Microsoftin ActiveX komponenttimalliin perustuva tietokantakirjasto

ADOX Microsoftin DDL ja turvaominaisuuksien laajennus ADO:lle
Laajennus edelliseen, mahdollistaa myös tietokannan rakenteiden ja käytönhallinan käsittelemisen komponenttimallina.

APIApplication Programming Interface
Rajapinta, jonka avulla voidaan ohjelmallisesti käyttää toista ohjelmaa tai järjestelmää.

RDBMS Relational database management system
Relaatiotietokantamoottori. Eli järjestelmä joka säilyttää relaatiomallin mukaista tietoa muistivälineellä (yleensä kiintolevyllä) ja antaa käsitellä (lukea ja kirjoittaa) kyseistä tietoa, yleensä rakenteista kyselykieltä käyttäen.

neau33 [21.10.2008 00:53:26]

#

Heippa Grez!

virittely on täysin omaa ja tieto siitä miten virittely käytännössä tapahtuu pysyy aivan täysin omana tietona...

Grez [21.10.2008 00:56:32]

#

No jos et halua kertoa miten olet viritellyt, niin paljasta edes miksi? Eli siis, mitä etuja olet hakenut ja saavuttanut virittelyllä.

Eipä sillä että nyt olisi mitään "akateemista" suurempaa mielenkiintoa asiaan. Viriteltyjä Jet-kirjastoja kun ei kuitenkaan voisi oikein hyödyntää mihinkään muuhun kuin omakäyttöprojekteihin.

neau33 [21.10.2008 01:18:34]

#

Heippa taas Grez!

toi ei nyt toimi...miksi tässä = mitä kohtaa ≈ miten ...

novice [21.10.2008 23:44:17]

#

Huomenta!

Aloin Nea vääntämään tosta sun antamasta 'tietokanta managerista' vähän 'edistyneempää'.
Laitoin nyt ainakin aluksi mahdollisuuden asettaa kenttien nimet ja lukumäärän ennen tietokanna tekemistä.

Koodi on varmaan päin peräaukkoa, mutta ei se ainakaan code ikkunassa herjaa mistään. Muuten hyvä mutta ei toimi ;(
Ei varmaan ole oikeen toi ALTER TABLE ADD systeemi - miten se pitäis tehdä?
Oletuksen ohjelman pitäis tehdä 1. kentään ton ID:n

 Dim k As Integer
'nudlkm = numeric updown = 8 koska alkuperäisessäkin
'oli 8 kenttää + ID (muutan kunhan opin)
        Dim kenttänimi(nudLkm.Value - 1) As String
        For k = 0 To nudLkm.Value - 1
            kenttänimi(k) = InputBox( _
            "Anna " & k + 1 & ". kentän nimi", "Tietokanta manageri", "")
        Next k



        Try
            yhteys.Open()
            malliTaulu = yhteys.GetOleDbSchemaTable( _
            OleDb.OleDbSchemaGuid.Tables, New Object() _
            {Nothing, Nothing, taulu, "TABLE"})
            yhteys.Close() : yhteysmerkkijono = Nothing

            If malliTaulu.Rows.Count = 0 Then
                Dim komento As OleDb.OleDbCommand = _
                New OleDb.OleDbCommand( _
                "CREATE TABLE [" + taulu + "]" + _
                "([ID] INT IDENTITY(1, 1), " + _
                "CONSTRAINT [pk_ID] PRIMARY KEY _ (ID))", yhteys)
                yhteys.Open()
                komento.ExecuteNonQuery()
                yhteys.Close() : komento = Nothing

                For k = 0 To nudLkm.Value - 1
                    komento = New OleDb.OleDbCommand( _
                    "ALTER TABLE [" + taulu + "] ADD _
                    ([" + kenttänimi(k) + "] MEMO NOT NULL) ", yhteys)

                    yhteys.Open()
                    komento.ExecuteNonQuery()
                    yhteys.Close() : komento = Nothing
                Next k

                malliTaulu = Nothing
            End If

neau33 [22.10.2008 04:35:32]

#

Moikka taas novice!

mitähän jos lähtisit lähestymään asiaa ensin vaikkapa tältä pohjalta...

C:\dbdata.txtbase:

Etunimi;Sukunimi;Osoite;Postinumero;Postitoimipaikka;Puhelin;Sähköposti;Merkinnät*TEXT;TEXT;TEXT;TEXT;TEXT;TEXT;HYPERLINK;MEMO|Matti;Mainio;Matinkatu 2;12112;Kotikaupunki;041-1234567;mailto:matti.mainio@kotiposti.fi;Eronnut äskettäin vaimostaan, juo paljon*Liisa;Mainio;Liisankatukatu 1;12110;Kotikaupunki;041-1234533;mailto:liisa.mainio@kotiposti.fi;Eronnut äskettäin miehestään, nai paljon*Martti;Mölsä;Sivukuja 13;12113;Kotikaupunki;050-5055513;Ei tietoa;Valittaa yleensä joka asiasta*Lilli;Simpsakka;Kotikatu 33;12133;Kotikaupunki;044-7649520;mailto:lilli.simpsakka@kotikanava.fi;Nähty usein kaupunginjohtajan kyljessä*Jorma;Jortikka;Keskuskatu 10;12111;Kotikaupunki;010-1112221;mailto:jorma.jortikka@kotikanava.fi;Vaimon kanssa ongelmia, vaan ei herra Mainion ex-vaimon

Ohjelma on väännetty SharpDevelop 3.0:lla

Imports System.Data
Imports MicroSoft.VisualBasic
Imports System.Windows.Forms

Public Partial Class MainForm: Inherits Form

  Public Sub New()
    Me.InitializeComponent()
  End Sub

  Sub OpenToolStripMenuItemClick(sender As Object, e As EventArgs)

    OpenFileDialog1.Title = "Avaa tietokanta"
    OpenFileDialog1.InitialDirectory = "c:\"
    OpenFileDialog1.Filter = "Tietokanta tiedostot|*.txtbase"
    OpenFileDialog1.FileName = String.Empty
    OpenFileDialog1.ShowDialog()

    If Dir(OpenFileDialog1.FileName) <> "" And _
      OpenFileDialog1.FileName.IndexOf(".") > -1 Then

      FileOpen(1,OpenFileDialog1.FileName, OpenMode.Input)
      Dim FileStrArray() As String = _
      InputString(1,LOF(1)).Split("|")
      FileClose(1)

      Dim TypeArray() As String = _
      FileStrArray(0).Split("*")

      Dim DataArray() As String  = _
      FileStrArray(1).Split("*")

      FileStrArray = Nothing

      Dim ds As DataSet = New DataSet
      Dim tbl As DataTable = New DataTable("Taulu1")

      Dim ColHeaderArray() As String = _
      TypeArray(0).Split(";")

      For i As Integer = 0 To ColHeadeRArray.GetUpperBound(0)
        Dim dcols As DataColumn = New DataColumn
        With dcols
          .DataType = System.Type.GetType("System.String")
          .ColumnName = ColHeaderArray(i)
        End With
        tbl.Columns.Add(dcols): dcols = Nothing
      Next: ds.Tables.Add(tbl)

      For i As Integer = 0 To DataArray.GetUpperBound(0)
        Dim ArraySplit() As String = _
        DataArray(i).Replace( _
        Environment.NewLine,"").Split(";")
        Dim drow As DataRow = tbl.NewRow()
        For j As Integer = 0 To ArraySplit.GetUpperBound(0)
          drow.Item(j) = ArraySplit(j)
        Next j
        tbl.Rows.Add(drow)
        ArraySplit = Nothing
      Next i

      DataGridView1.DataSource = ds.Tables("Taulu1")

      Dim linkcol As DataGridViewLinkColumn = _
      New DataGridViewLinkColumn
      Dim cell As DataGridViewCell = _
      New DataGridViewLinkCell ()
      linkcol.HeaderText = "Sähköposti"
      linkcol.CellTemplate = cell
      DataGridView1.Columns.RemoveAt(6)
      DataGridView1.Columns.Insert(6,linkcol)

      DataGridView1.ClearSelection
      Dim LinkExists As Boolean = False
      Dim ColTypes() As String = _
      TypeArray(1).Split(";"): TypeArray = Nothing

      For i As Integer = 0 To ColTypes.GetUpperBound(0)
        If ColTypes(i) = "HYPERLINK" Then
          LinkExists = True: Exit For
        End If
      Next: ColTypes = Nothing

      If LinkExists Then
        For i As Integer = 0 To DataArray.GetUpperBound(0)
          DataGridView1.Rows(i).Selected = True
          Dim GetlinkArray() As String = _
          DataArray(i).Replace( _
          Environment.NewLine,"").Split(";")
          DataGridView1.SelectedCells.Item( _
          6).Value = GetlinkArray(6)
          DataGridView1.Rows(i).Selected = False
        Next i: DataArray = Nothing
      End If

      DataGridView1.AutoResizeColumns( _
      DataGridViewAutoSizeColumnsMode.AllCells)

    End If

  End Sub

  Sub DataGridView1CellDoubleClick( _
  sender As Object, e As DataGridViewCellEventArgs)
    CheckLinkField
  End Sub

  Public Sub CheckLinkField()

    If dblClick Then
      Dim col As DataGridViewColumn
      For Each col In DataGridview1.Columns
        If col.HeaderText = "Sähköposti" Then
          Dim address As String = _
          DataGridView1.CurrentCell.Value.ToString
          If address.IndexOf("mailto:") > -1 Then
            If Dir("C:\Program Files\" " + _
            "Outlook Express\msimn.exe") <> "" Then
               Shell("C:\Program Files\" + _
               "Outlook Express\msimn.exe /mailurl:" + address)
               Exit Sub
            End If
          End If
        End If
      Next
    End If

  End Sub

End Class

Sivun alkuun

Vastaus

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

Tietoa sivustosta