Avatar billede rough Nybegynder
02. marts 2003 - 18:25 Der er 10 kommentarer og
1 løsning

Produktdatabse

Kan nogle hjælpe mig med en simpelt lille database ???
I databasen skal man kunne oprette produkter som består af flere dele...
Når man oprettet et produkt skal man kunne klikke på de dele man vil have med i produktet.

VIGTIGT

Hvis man opdaterer nogle af delene (retter stavefejl etc.)
så skal det blive rettet på produkterne.
Avatar billede Tony Juniormester
02. marts 2003 - 19:05 #1
Snakker du om et rent Access-miljø, eller er du inde på noget med Internet ?
Avatar billede rough Nybegynder
03. marts 2003 - 12:39 #2
Rent Access....
Avatar billede Tony Juniormester
03. marts 2003 - 12:45 #3
Hvis den blot er til dig selv, aldrig skal på nettet og ikke kommer til at indeholde over ca. 500 poster, så kan du nøjes med at oprette én tabel. Ellers skal du nok skille den ud i flere tabeller ...
Avatar billede fynbohans Nybegynder
05. marts 2003 - 21:42 #4
I princippet kan du gøre følgende:

Du skal bruge 2 tabeller.
En med navne på dele og en med IdNr(Autonummerering).
I en anden tabel gemmes Produkt og hvem der har lavet det.

Delene vælges i en Kombinationsboks, bundet til IdNr.

Efter hvert valg gemmes IdNr som tekst. F.eks.med

Dim Nr as Long
Dim Text as String

Nr  = [Kombiboks]
Text = Text & Right("0000" & CLng(Nr),4)

Når produktet er færdigt gemmes Text i Produktabellen og
variablen Text nullestilles med Text = "".

Produktet kan f.eks.genskabes med

Dim Nr as Long
Dim AntalDele as Long
Dim i AS LONG
Dim Text AS String
Dim Produkt as String
Dim Deltext as String

AntalDele = Len(Text)/4
Produkt  = ""

For i = 0 to AntalDele - 1
    Nr = Mid(Text,i + 4,4)
    ' navnet på delen(Deltext) hentes med DLookUp ved hjælp af Nr
    Produkt = Produkt & Deltext & vbCrLf
    ' med vbCrLf får hver del en linje for sig
next i


I eksemplet er der plads til 63 dele i et produkt, hvis det skal
gemmes i et almindeligt tekstfelt, og IdNr må aldrig overstige 9999.
Avatar billede fynbohans Nybegynder
05. marts 2003 - 21:45 #5
en i linje 4 = et felt
Avatar billede fynbohans Nybegynder
05. marts 2003 - 22:37 #6
og i FOR/NEXT skal det naturlivis være Nr = Val(Mid(Text,1 +4*i,4))
Avatar billede rough Nybegynder
06. marts 2003 - 11:37 #7
Hej fynbohans

Det lydder rigtigt godt... Jeg er ikke så brav til Access så jeg kan lave det du beskriver.. Er det noget du kan lave til mig ??
Avatar billede fynbohans Nybegynder
11. marts 2003 - 22:45 #8
Teksten har været væk her og ser først dit svar nu. Kigger på det i
løbet af denne uge og svarer senest den kommende weekend.
Avatar billede fynbohans Nybegynder
15. marts 2003 - 16:08 #9
Har nu lavet en testbase (Access2000) , som indeholder:

TABELLER:
DELE, med  felterne
  DID(Autonummerering)
  DELNAVN(Tekst)
PRODUKTER, med felterne 
  PID(Autonummerering)
  PRODUKTNAVN(Tekst)
  PRODUKT(Tekst)
  VALGTAF(Tekst)

FORMULAR: VISPRODUKT
  Kombinationsboks, DELVALG med felterne DID og DELNAVN(bundet kolonne)
  Kombinationsboks, PRODUKTVALG med felterne PID(bundet kolonne) , PRODUKTNAVN,           
              PRODUKT og  VALGTAF
  Tekstboks,  PROTEXT til PRODUKTNAVN (ubundet - synlig)
  Tekstboks,  NAVNFELT til VALGTAF (ubundet - synlig)
  Tekstboks,  PRODUKTNAVN bundet til PRODUKTNAVN (ikke synlig)
  Tekstboks,  PRODUKT bundet til PRODUKT (ikke synlig)
  Tekstboks,  VALGTAF bundet til VALGTAF (ikke synlig)
  Tekstboks,  NYTEXT (ubundet - synlig)
  Tekstboks, PRODUKTTEXT (ubundet - synlig)
  Etiket, DVALG (kun denne etiket bruges i koden)
  Knap, NYT_KNAP
  Knap, GEM_KNAP
  Knap, AFSLUT_KNAP

MACRO:
  autoexec, med linjerne KørKommando\SkjulVindue, ÅbnFormular\VISPRODUKT, Maksimer
---------------------------------------------------------------------------------------------------------------------------
I formularen ser koden således ud:
Dim Antal As Long
Dim i As Long
Dim ProText As String
Dim Nr As Long
Dim Text As String
Dim Deltext As String
Dim PValg As Boolean
Dim PText As String
Dim Test As Long

Private Sub AFSLUT_KNAP_Click()
            DoCmd.Quit
End Sub

Private Sub DELVALG_AfterUpdate()
            If PValg = True Then
              If Len(PText) = 252 Then
                  MsgBox " Der er ikke plads til flere dele"
                  [DELVALG] = Null
                  Exit Sub
              End If
             
              Test = InStr(PText, Right("0000" & CLng([DELVALG]), 4))
              If Test > 0 Then
                  MsgBox "Denne del er allerede brugt"
                  [DELVALG] = Null
                  Exit Sub
              End If
            End If
           
            PText = PText & Right("0000" & CLng([DELVALG]), 4)
            [NYTEXT] = [NYTEXT] & " " & [DELVALG].Column(1) & vbCrLf
            [DELVALG] = Null
End Sub

Private Sub Form_Open(Cancel As Integer)
            PValg = False
            [DELVALG].Visible = False
            [DVALG].Visible = False
            [PRODUKTVALG].SetFocus
End Sub

Private Sub GEM_KNAP_Click()
            If IsNull([NAVNFELT]) = True Then
              MsgBox "Bruger ikke valgt"
              [NAVNFELT].SetFocus
              Exit Sub
            End If
            If IsNull([PROFELT]) = True Then
              MsgBox "Produktnavn ikke valgt"
              [PROFELT].SetFocus
              Exit Sub
            End If
           
            If Len(PText) > 0 Then
              DoCmd.GoToRecord , , acNewRec
              [PRODUKT] = PText
              [PRODUKTNAVN] = [PROFELT]
              [VALGTAF] = [NAVNFELT]
              DoCmd.RunCommand acCmdSaveRecord
              [PRODUKTVALG].Requery
              [NYTEXT] = Null
              [PROFELT] = Null
              [NAVNFELT] = Null
              PValg = False
              [DELVALG].Visible = False
              [DVALG].Visible = False
            End If
End Sub

Private Sub NYT_KNAP_Click()
            PValg = True
            [DELVALG].Visible = True
            [DVALG].Visible = True
            [NYTEXT] = Null
            [NAVNFELT] = Null
            [PROFELT] = Null
            [PRODUKTTEXT] = Null
            PText = ""
End Sub

Private Sub PRODUKTTEXT_GotFocus()
            [PRODUKTVALG].SetFocus
End Sub

Private Sub PRODUKTVALG_AfterUpdate()
            [NAVNFELT] = [PRODUKTVALG].Column(3)
            [PROFELT] = [PRODUKTVALG].Column(1)
                     
            Text = ""
            Deltext = ""
            ProText = [PRODUKTVALG].Column(2)
            Antal = Len(ProText) / 4
            For i = 0 To Antal - 1
                Nr = Val(Mid(ProText, 1 + 4 * i, 4))
                Deltext = DLookup("[DELNAVN]", "DELE", "DID = " & CLng(Nr))
                Text = Text & " " & Deltext & vbCrLf
            Next i
           
            [PRODUKTTEXT] = Text
            [PRODUKTVALG] = Null
End Sub

---------------------------------------------------------------------------------------------------------------------------
Når du skal rette i delene kan du enten skrive direkte i tabellen, lave en selvstændig formular,
eller indarbejde denne rutine i hovedformularen.

Hvis du selv bruger Access2000 og lægger din e-mailadresse her, vil jeg gerne sende
testbasen til dig.
Avatar billede rough Nybegynder
19. marts 2003 - 13:01 #10
Hej Fynbohans

Det lydder bare fedt du kan sende den til mig på thomas@dbs.dk
Avatar billede rough Nybegynder
20. marts 2003 - 09:06 #11
Den er bare helt super tak skal du have her er dine fortjente point
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