Avatar billede dougheffernan Nybegynder
05. januar 2006 - 14:30 Der er 14 kommentarer og
1 løsning

Objektorienteret programmering

Problemet er at jeg har lidt svært ved at se en objektorienteret (samt reusable code) i følgende.
Jeg har 3 klasser, clsFile, som tager sig af filoperationer, clsDatabase, som tager sig af databaseoperationer (surprise? :)) og en klasse, clsScanner, som er "hovedklassen".

Programmet skal hente data fra en fil som f.eks. kunne indeholde linier som følger:
"010105", "0700", "234233233", "3243432"
"020105", "0700", "234233233", "5244432"
"020105", "0710", "234335323", "8245432"

og sætte linierne ind i en tabel i databasen.
Men hvordan får jeg det "objektorienteret"??

I clsScanner opretter jeg et objekt af typen clsFile og bruger den metode jeg har lavet, SplitFile, som tager som argument navnet på filen som der skal hentes fra, samt en split-karakter. Det går fint. Jeg kan bare ikke se hvordan jeg kommer fra File-objektet til et Database-objekt som kan sætter dataene ind i tabellen! :(
Avatar billede jesperfjoelner Nybegynder
05. januar 2006 - 14:38 #1
Jeg synes det lyder ret OO allerede.
Du har en class, som er generisk og kan bruges på andre tekstfiler også.
Er det ikke det der menes med OO?
Avatar billede dougheffernan Nybegynder
05. januar 2006 - 14:46 #2
Jo.....men jeg kan bare ikke umiddelbart se hvordan jeg stopper værdierne fra arrayet (i clsFile objektet) ind i tabellen (vha. clsDatabase objektet)
Avatar billede jesperfjoelner Nybegynder
05. januar 2006 - 14:59 #3
Er der en method i clsDatabase, der kan tages et array som parameter?

Mangler du noget, der kan gennemløbe et array og indsætte data i tabellen?
Avatar billede dougheffernan Nybegynder
05. januar 2006 - 15:11 #4
1. Nej, det er der ikke.
2. Nej, jeg har koden.

Det er konceptuelt jeg ikke forstår hvad der skal ske.
Det kan være jeg tager fejl af noget, men binder jeg ikke de 2 klasser sammen (clsDatabase og clsFile) hvis jeg i den ene opretter et objekt af den andens type?
Avatar billede jesperfjoelner Nybegynder
05. januar 2006 - 15:15 #5
Jeg kan godt se hvad du mener. Jeg er såmænd ikke sikker på jeg er hård nok i OO-tankegang til at jeg kan komme med noget konstruktivt.

Er der en method i clsDatabase, der kan indsætte i databasen? Hvilke parametre tager den method?
Kan du lave en intermdiær funktion mellem dit array og en sådan method, som omformer dit array til en parameter, de indbyggede methods i clsDatabase kan acceptere?
Avatar billede dougheffernan Nybegynder
05. januar 2006 - 15:29 #6
Nope, den kan checke om en given tabel eksisterer og slette en given tabel. Men jeg laver lige en som kan tage 4 parametre.

Der hvor jeg knækker sammen er at i clsFile gennemløbes filen linie for linie og hver linie hakkes op i 4 bidder i arrayet.
disse 4 bidder skal så sættes ind i tabellen vha. et clsDatabase objekt's metode InsertData(). Men skal det være clsFile objektet som "kalder" clsDatabase objektets metode eller skal det være fra clsScanner ("hoved klassen")?
Avatar billede dougheffernan Nybegynder
05. januar 2006 - 15:55 #7
Er der en funktion indbygget i Access som kan tælle antallet af linier i en fil? For så kan jeg lave en løkke i clsScanner som kan kalde clsFile og dernæst clsDatabase for hver linie i filen!
Avatar billede jesperfjoelner Nybegynder
05. januar 2006 - 16:02 #8
SKAL det være en indbygget funktion i Access?
Du kan jo lave din egen på få linjer og bygge den ind i clsFile, var det noget?
Avatar billede jesperfjoelner Nybegynder
05. januar 2006 - 16:56 #9
Kunne du lave en method i clsFile med:

Function LineCount() as long
    Dim intFileNo As Integer
    Dim strLine As String
    Dim i as long
    intFileNo = FreeFile()
    Open "C:\stilnavn\MyFile.txt" For Input As #intFileNo

    ' Read and print all lines to the Immediate Window.
    Do While Not EOF(intFileNo)
        i=i+1
    Loop

    Close #intFileNo
    LineCount = i
End function
Avatar billede dougheffernan Nybegynder
06. januar 2006 - 10:39 #10
Ja, det kunne man jo godt, men ville hellere have haft en nem (læs: indbygget) løsning. :) :)
Avatar billede dougheffernan Nybegynder
06. januar 2006 - 10:59 #11
Der vil vel være det problem at med løkken vil SplitFilelines bliver kaldt med filen igen og derfor vil det altid være 1. linie i filen der hentes... :(
Avatar billede dougheffernan Nybegynder
06. januar 2006 - 11:52 #12
Hvordan overfører jeg et array?

Function SplitFilelines(FileName As String, Character As String) ' As Variant
  Dim Line As String
  Dim varArray As Variant
  Dim Counter As Integer
  Dim objDatabase As clsDatabase
 
  Open FileName For Input As #1
  While Not EOF(1)
    Line Input #1, Line
    varArray = Split(Replace(Line, Chr(34), ""), Character)
    With objDatabase  '??? varArray som parameter til funktionen InsertData
      .InsertData varArray
    End With
  Wend
  Close 1
End Function
Avatar billede dougheffernan Nybegynder
06. januar 2006 - 11:54 #13
Function InsertData(myArray As Variant)
  Set db = DBEngine.Workspaces(0).Databases(0)
  ' gennemløb array, sæt data ind i tabel.
End Function
Avatar billede dougheffernan Nybegynder
06. januar 2006 - 12:05 #14
Havde glemt at skrive New ved dimensioneringen af objektet objDatabase!!! :(
Avatar billede jesperfjoelner Nybegynder
06. januar 2006 - 14:11 #15
har du det til at virke - eller virker InsertData ikke?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester