Gå til innhold

Hjelp til databehandling til fil


Anbefalte innlegg

Jeg er en nystarter i VisualBasic, jeg har et prosjekt jeg tenkte å gjøre for jobben min. Jeg har klart å lage et telefonbestillingssystem via Visual Basic i Exel, men dette ble så utrolig kjedelig og upraktisk syns jeg. Først og fremst, er det noen som vet om en fin tutorial om hvordan jeg skriver til en egen fil i Visual Basic express 2005 ?

 

Planen med programmet er at når kunder ringer inn, så har man programmet oppe og noterer f.eks navn, adresse og tlf nummer samt et lite kommentar felt.

 

Gjerne sett opp en kjapp liten form med database som dere kan dele med meg slik at jeg får studert litt kodene i forbindelse med å sette data til en annen fil.

 

Det som også er planen å implmentere er en rute hvor jeg LESER informasjonen vi har skrevet inn i filen på en oversiktlig måte. Dette fordi vi lett skal kunne finne igjen ordrene vi har hatt og muligens en funksjon hvor vi kan merke "ordren" med DONE når den er behandlet.

 

Først og fremst skal jeg skrive til en fil, samt kunne se alle ordrene igjen =)

 

Takker for all hjelp, dersom noen lager et lite forslag og gidder å laste dette opp så er dette til stoooor hjelp som sagt =)

Lenke til kommentar
Videoannonse
Annonse

Det finnes et hav av mulige lagringsmetoder til dette formålet. Etter min mening utgjør de viktigste delimiter-segmentert tekstfil, binærformaterte datafiler, XML-filer og ikke minst databaser så som Microsoft Access, SqlLite og liknende. I all hovedsak er nok XML-filer og databaser det letteste å benytte, men det er klart en òg kan benytte små tekst- og binærtfiler. Sistnevnte ville jeg i hvert fall løst ved å først lage en klasse noenlunde lik følgende (legg den utenfor End Class i formen eller i en egen modul):

 

Public Class Customer

 

    ' Ulike variabler som beskriver kunden (en kan fint legge til flere, om nødvendig)

    Public FirstName As String

    Public LastName As String

    Public PhoneNumber As Int64

    Public Address As String

    Public Comments As String

 

#Region "Constructors"

 

    ' Constructor - funksjon som kalles når en lager klassen.

    Public Sub New(ByVal FirstName As String, ByVal LastName As String, ByVal PhoneNumber As Int64, _

    ByVal Address As String, ByVal Comments As String)

 

        With Me

            .FirstName = FirstName

            .LastName = LastName

            .PhoneNumber = PhoneNumber

            .Address = Address

            .Comments = Comments

        End With

 

    End Sub

 

    ' *** Funksjoner som gjør det mulig å spesifisere forskjellig antall paramentre når klassen lages.

    Public Sub New(ByVal FirstName As String, ByVal LastName As String)

        Me.New(FirstName, LastName, 0, "", "")

    End Sub

 

    ' Denne funksjonen laster inn all innhold fra en binarisk "fil" (ikke nødvendigvis, dog).

    Public Sub New(ByVal Reader As IO.BinaryReader)

        ' Her kaller vi ReadString for å lese en streng fra filen, og ReadInt64 for å hente et tall.

        Me.New(Reader.ReadString, Reader.ReadString, Reader.ReadInt64, Reader.ReadString, Reader.ReadString)

    End Sub

 

#End Region

 

    ' Denne funksjonen lagrer innholdet i klassen til en fil.

    Public Sub OutputData(ByVal Writer As IO.BinaryWriter)

 

        ' Skriv innholdet til filen (husk å bruke samme rekkefølge som i funksjonen ovenfor)

        With Writer

            .Write(Me.FirstName)

            .Write(Me.LastName)

            .Write(Me.PhoneNumber)

            .Write(Me.Address)

            .Write(Me.Comments)

        End With

 

    End Sub

 

End Class

Legg deretter til følgende kode i formen:

    ' Inneholder alle våre kunder

    Public Customers As New List(Of Customer)

 

    ' Leser alle kunder fra en fil

    Public Function LoadFile(ByVal FilePath As String) As List(Of Customer)

 

        Dim File As IO.FileStream, Reader As IO.BinaryReader

        Dim Amount As Integer, Index As Integer

 

        ' Lag en ny liste

        LoadFile = New List(Of Customer)

 

        Try

 

            ' Åpne den angitte fil

            File = New IO.FileStream(FilePath, IO.FileMode.Open)

            Reader = New IO.BinaryReader(File)

 

            ' Last inn antall kunder lagret i filen

            Amount = Reader.ReadInt32

 

            ' Last så inn alle brukerene i filen

            For Index = 1 To Amount

                LoadFile.Add(New Customer(Reader))

            Next

 

        Catch ex As Exception

 

            ' Feilmelding som forklarer hva som gitt galt.

            MessageBox.Show(ex.Message, "Error")

 

        Finally

 

            ' Rydd opp

            If Not (Reader Is Nothing) Then

                Reader.Close()

            End If

 

        End Try

 

    End Function

 

    ' Skriver alle kunder til en fil

    Public Function SaveFile(ByVal FilePath As String, ByVal oCustomers As List(Of Customer)) As Boolean

 

        Dim File As IO.FileStream, Writer As IO.BinaryWriter, oCustomer As Customer

 

        Try

 

            ' Åpne den angitte fil til lagring

            File = New IO.FileStream(FilePath, IO.FileMode.Create)

            Writer = New IO.BinaryWriter(File)

 

            ' Lagrer antall kunder i databasen

            Writer.Write(Customers.Count)

 

            ' Lagrer hver kunde

            For Each oCustomer In oCustomers

                oCustomer.OutputData(Writer)

            Next

 

            ' Filen ble lagret

            SaveFile = True

 

        Catch ex As Exception

 

            MessageBox.Show(ex.Message, "Error")

 

        Finally

 

            If Not (Writer Is Nothing) Then

                Writer.Close()

            End If

 

        End Try

 

    End Function

Nå kan du enkelt lagre og åpne kundedatabasen i en fil med følgende funksjoner:

        ' Henter stien til EXE-filens mappe

        Dim sPath As String = IO.Path.GetDirectoryName(Application.ExecutablePath)

 

        ' Åpner en liste over kunder

        Customers = LoadFile(IO.Path.Combine(sPath, "Database.dat"))

 

        ' Lagrer listen over kunder

        SaveFile(IO.Path.Combine(sPath, "Database.dat"), Customers)

For å legge til brukere anvender du Customers.Add New Customer (<egenskaper>), sammen med de egenskaper du trenger å sette brukeren til, og For Each for å gå gjennom listen med brukere.

 

Jeg håper det ikke er noe problem å sette sammen dette til en fullverdig applikasjon. Dessverre har jeg ikke tilgang til .NET for øyeblikket, men om det skulle vise seg å være nødvendig, kan jeg få det gjort i morgen.

Lenke til kommentar

Heisan. Glimrende innlegg. Var på jakt etter dette selv og ser hvordan du bruker en klasse til å representere en RECORD. Genialt. VB og klasser er fine saker.

 

Men bare en kommentar til datastruktur. Vet dette bare var et eksempel, men er det noen grunn til å lagre telefon nummer som INT? Jeg har personlig en regel som er noe slik:

Skal man regne med verdien, bruk tall verdier, hvis ikke - STRING!!

 

Og til deg som startet tråden:

Sjekk ut begrepet "Dataset" og "DataGridView" Dette er kraftige saker og gir deg en hel drøss med saker og ting gratis. Du kan koble til nær sagt hva du vil. Når du "populater" et dataset kan du velge om du vil ha det i liste form, eller i ENTRY FORM form. Du kan bestemme på felt nivå hva som skal genereres, enden det er check, option, entry, droplist, etc. etc. Det som er muligens det råeste av alt er at om du lager en "stored procedure" (ikke bli skremt av begrepet) så kan du bruke denne som data grunnlag og vise den direkte i en liste eller en rapport om du vil.

 

Vet dette kansje høres vanskelig ut, men jeg garanterer deg en ting: Lærer du deg å beherske dette er det nesten ingenting du ikke klarer i database sammenheng. Er du enda råere så slenger du opp en enkel SQL server og dermed kan du veldig enkelt dele ut programmet til flere uten å tenke på record locking, endring i tabell struktur etc. etc.

 

Prøv deg frem litt og spør hvis du står fast. Masse god kunskap og kompetanse på dette forumet.

 

Ole

Lenke til kommentar
Takk takk, jeg er komt en hel del lenger på veg nå =)

 

DErsom du har muligheten til det hadde det vert kjempe om du satte inn eksempelet over i et VB prosjekt .

7295178[/snapback]

Eksempel på bruk av MSEQLExpress og Visual Basic 2005

Først og fremst laster du ned SQL Express fra Microsoft. Dette er gratis og koster deg med andre ord ingen ting. Installer på en maskin i nettet(eller egen maskin) med standard oppsett. Du trenger ikke tenke på noe her. Mulig du må sette at den skal akseptere tilkoblinger over IP, men dette er kunn hvis du skal kjøre i nett. Si ifra hvis du ikke finner ut av dette.

 

Start et nytt prosjekt. Kall det f.eks. Databasetest

Vis "Server Explorer" (ctrl + alt + s)

Trykk høyre museknapp på Data Connections og velg "Create new SQL database"

Velg serveren eller skriv inn servernavnet. Det skrives slik:

MASKINNAVN\SQLEXPRESS

der maskinnavnet er maskinens navn i nettet. Du kan også bruke IP adresse, men det virker kunn hvis maskinene har fast IP, noe som er uvanlig

 

Avhengig i hvordan du installerte SQL serveren må du velge innloggings måte. Hvis du har valgt å bare akseptere Windows Autentisering velger du øverste valget, hvis ikke velger du det andre alternativet og skriver SA som brukernavn og det passordet du selg oppga under installasjonen av SQLExpress.

 

Skriv navnet på basen du ønsker å lage, f.eks. KUNDER og trykk OK

 

Du har nå opprettet en database på Serveren. So fare So good ;-)

Åpne nå database tilkoblinger i Server Explorer slik at du ser Tables i listen

Høyreklikk på Tables og trykk Add new table

Du får nå opp et formular der du designer datastrukturen. Legg inn følgende felter for Kunder

Kundenr              INT              [ ]
Navn                 nvarchar(50)     [X]
Adresse              nvarchar(50)     [X]
Postnr               nvarchar(4)      [X]
Poststed             nvarchar(50)     [X]

 

Så trykker du på den firkanten i første kolonne på linjen med Kundenr. Trykk så på nøkkelen i verktøy linjen. Dette gjør at Kundenummer blir primær nøkkel. Alle tabeller i SQL må ha en primær nøkkel. Dette for at SQL skal kunne skilne mellom alle postene. Dette feltet må være unikt.

 

Under ser du en oversikt over alle egenskapene på feltet du har valgt. Du har fortsatt Kundenummer feltet i fokus, hvis ikke så trykker du på linja med kundenr. Under Column Properties blar du ned til Ident Specification. Trykk på + til venstre for å åpne denne. Dobbelt klikk på (Is Identity)

Dette sørger for at alle nye poster får et nytt nummer i rekken.

Trykk på LAGRE knappen og gi tabellen et navn. Kunder er et godt navn

Så må vi legge inn denne databasen som en "Datasource". Velt DATA på filmenyen og "Add new Datasource"

Velg Database og trykk Next

Hvis ikke databasen står der allerede velger du den i "trekkned" menyen

Trykk så Neste

Den foreslår KUNDERConnectionString. Bare la den være det og trykk Next

Neste du får opp er der du kan velge hva du ønsker å ha med i programmet ditt. I vårt tilfelle er databasen veldig enkel slik at det eneste du velger er Kunder. Utvid Tables så finner du den. Du kan også velge Tables direkte om du ønsker det. Da ville den tatt med alle eksisterende tabeller i databasen

Trykk på Next

Du skal nå ha fått opp under "Data Sources" en liste over tabellene som er tilgjengelig. Hvis du åpner tabellen "Kunder" vil du se alle feltene. Om du trykker på et av feltene vil du se at alle er default som "Entry". Her kan du endre til hva du vil. F.eks. Check box etc. La alle være Entry felter nå så kan du heller leke videre med dette senere.

 

Ok. Da har vi en database. Enkel base, joda, men dog en database

Nå over til programmet

I Sollution Explorer trykker du på Form1

 

Gjør følgende: Ta tak i Kunder med musen og trekk den over i vinduet på Form1 og slipp.

 

Kjør programmet!! ;-)

 

Enkelt og greit, ikke sant :-)

 

Prøv å kombinere tabellen med felter. Legg noen av feltene fra tabellen på vinduet ved å dra dem fra Datasource og over på vinduet. Du vil da se at disse feltene hele tiden vil vise deg innholdet i tabellen. Du kan også bruke disse til å endre med. Det vil si at du kan i listeboksen i vinduet gjemme vekk alle felter og heller vise dem som egne felter i vinduet. Alt er opp til deg

 

Videre morro:

Lek litt med flere tabeller, lag deg noen VIEWS, finn ut hvordan Stored Procedures funker og eventuellt bruk disse som "Data source" Her er det utrolig mye morro du kan få til.

 

Hvis du vil ha ekstra funksjonalitet i programmet som du ikke klarer få til fra databasens side er det jo bare å "embedde" inn kode der du måtte trenge det.

Jeg vet ikek noe om dine forkunnskaper angående programmering og eller Visual Basic men du vil finne masse eksempler på forskjellig koding her i forumet. www.msdn.com er også et rimelig bra hjelpe alternativ.

 

Håper du fikk noe ut av dette

 

Ole

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...