Avatar billede trinerafn Nybegynder
30. november 2004 - 14:35 Der er 14 kommentarer og
1 løsning

Opret nyt projektnr hvis bruger har tastet tilbudsnr som findes

Jeg har en FrmOrdre hvor brugeren taster et tilbudsnr, herefter trykker brugeren på CmdFind. Vha. DBLookup fremkommer diverse kundeoplysninger, og et nyt projektnr fremkommer. Dette virker, MEN hvis brugeren taster et Tilbudsnr. som IKKE findes i Tilbudstabellen, tæller projektnr én op og lagrer sig i TblOrdre. Jeg er klar over at der skal bruges en If..Then..Else men hvordan? Her er dele af koden:
Private Sub CmdNyFind_Click()
On Error GoTo Err_CmdNyFind_Click
Screen.PreviousControl.SetFocus
Me!TbVisKundenavn = DLookup("[Customer]", "Leads", "LeadsNo=" & Me!TbIndtast)
Me!TbVisTypenr = DLookup("[LeadsTypeNumber]", "QryLeadsKunder", "LeadsNo=" & Me!TbIndtast)   
Dim Projektnr As Integer
Select Case Me.TbVisTypeNavn
Case "Spare Parts"
Projektnr = Nz(DMax("Projektnr", "TblOrdreMeddel", "Projektnr>=999 AND Projektnr<=1999"), 999)
Case Else
MsgBox "Der skal indtastes et Leadsnr!"
End Select
Forms!FrmOrdre![Projektnr].Value = [Projektnr] + 1
Exit_CmdNyFind_Click:
    Exit Sub
Err_CmdNyFind_Click:
    MsgBox "Der skal indtastes et Leadsnr før en ordre kan dannes"
    Resume Exit_CmdNyFind_Click   
End Sub
Avatar billede mugs Novice
30. november 2004 - 16:28 #1
Efter din Select sætter du jo Projektnr til Projektnr + 1. Du skal først tælle hvor mange foreskomster der er af projektnr i tabellen:

Dim VARa As Long
VARa = Me.Projektnr
If DCount("*", "TABELNAVN", "[PROJEKTNR] =" & VARa) > 0 Then
If MsgBox("Vil du oprette posten?", vbYesNo) = vbYes
så gør noget
End If
Else:
gør noget andet
End If
Avatar billede trinerafn Nybegynder
30. november 2004 - 17:07 #2
Det forstår jeg ikke, hvorfor skal jeg tælle forekomster, det er ikke det jeg er ude efter. Det jeg er ude efter er at hvis Tilbudsnr (LeadsNo) findes i TblTilbud eller i QryLeadsKunder, skal den oprette et nyt projektnr fra Intervalsætningen ellers ikke. Og hvad står "*" for?
Avatar billede mugs Novice
30. november 2004 - 17:14 #3
Du skriver i dit spørgsmål:

"MEN hvis brugeren taster et Tilbudsnr. som IKKE findes i Tilbudstabellen"

Og det undersøger du her:

If DCount("*", "TABELNAVN", "[PROJEKTNR] =" & VARa) > 0 Then

Som i pseudokode lyder:

Hvis antallet af poster i TABELNAVN i feltet PROJEKTNR er større end 0
så gør noget
ellers gør noget andet

"*" tæller også tomme poster.
Avatar billede trinerafn Nybegynder
30. november 2004 - 17:50 #4
OK, så må jeg nok forklare lidt nærmere: Det at skrive >0 er ikke godt nok for TblTilbud består af numre som f.eks. 2019, 14336 osv. og starter ikke ved >0, Så selvom brugeren taster f.eks. 2003, så er det ikke sikkert dette nr. findes i TblTilbud. Det nr. brugeren taster SKAL findes i TblTilbud
Avatar billede mugs Novice
30. november 2004 - 17:58 #5
Jeg tror ikke jeg misforstår, derimod tror jeg du ikke forstår funktionen dCount ;o)

Funktionen DCount tæller antal poster i din tabel. Her har jeg indsat et kriterie, hvor DCount tæller det antal poster i tabellen hvor feltet Projektnr er = din formular's felt Projektnr. Hvis dette antal er større end 0 (Altså det findes i tabellen), skal db gøre noget. Hvis antalet er = 0 (findes ikke i tabellen), skal db gøre noget andet.

0 har ikke noget med selve tallet Projektnr at gøre, det er blot et led i If.. Then:

Hvis (DCount) antallet er større end 0 (1,2,3 eller flere poster med det samme projektnr) så
gør noget
Hvis (DCount) antallet er lig med 0 (ingen poster med det samme projektnr)
så gør noget andet
Avatar billede trinerafn Nybegynder
30. november 2004 - 18:13 #6
OK, undskyld hvis jeg lød bedrevidende, det er jeg bestemt ikke tværtimod, jeg er glad for at nogen gider sætte sig ind i problemet. Jeg tror jeg forstår noget af det nu, men ved du så at formens Tilbudsnr og Projektnr er 2 vidt forskellige ting. Det ved jeg ikke om fremgår af koden, men Tilbudsnr er noget som søges på i TblTilbud og så fremkommer nogle kundeoplysninger fra TblTilbud, disse skal jo så kun komme HVIS Tilbudsnr findes, SÅ skal der komme et nyt Projektnr som skal gemmes i TblOrdre
Avatar billede mugs Novice
30. november 2004 - 18:19 #7
If DCount("*", "TblTilbud", "[Tilbudsnr] =" & DIN VARIABEL) > 0 Then
tilbudsnr eksisterer
nyt projektnr
Else:
gør noget andet
Avatar billede trinerafn Nybegynder
30. november 2004 - 18:27 #8
Ok, nu tror jeg det er ved at blive godt, dog er jeg dårlig til VB, så hvordan deklareres "Din variabel", er det sådan noget som
Dim Tilbudsnr as Integer ? - og i Else sætningen: Hvordan får jeg den til bare IKKE at oprette et nyt projektnr?
Avatar billede mugs Novice
30. november 2004 - 18:34 #9
Dim a as Long
a = Tilbudsnr

Du kan også undlade at oprette variabler og måler på formularens felt direkte. Det er nok mere elegant:

If DCount("*", "Tbltilbud", "[Tilbudsnr] =  '" & Me.Tilbudsnr & "'") > 0 Then
Opret nyt projektnr
Else:
Me.Undo
Exit sub

Else annulerer den igangværende formularhandling og forlader procedüren. Hvis du kun vil annulere en handling i et bestemt felt:

Else:
Me.FELTNAVN.UNDO
Avatar billede trinerafn Nybegynder
30. november 2004 - 18:53 #10
1000 tak, nu må det lykkes, jeg går udfra at der hvor du skriver & Me.Tilbudsnr & skal jeg skrive navnet på Textboxen på formen. Jeg tester imorgen ved middagstid og giver dig herefter dine velfortjente points :-)
Avatar billede mugs Novice
30. november 2004 - 18:57 #11
& Me.Tilbudsnr &

Refererer til den aktuelle formular, og efter punktum feltnavnet. Du skal altså ikke skrive feltnavnet een gang til.

Hvis Tilbudsnr er numerisk, skal du ændre koden til:

If DCount("*", "Tbltilbud", "[Tilbudsnr] =  " & Me.Tilbudsnr & "") > 0 Then
Opret nyt projektnr
Else:
Me.Undo
Exit sub
Avatar billede trinerafn Nybegynder
01. december 2004 - 14:03 #12
Mugs>Nu har jeg afprøvet det. Det virkede med variablerne. Jeg kan ikke referere til Tilbudsnr som et feltnavn, idet feltnavnet kommer fra en anden tabel, (som ikke er med bag formens query). Hvis du har tid og lyst kan du fortælle mig hvordan jeg helt "Undo'er" det indtastede, sådan som det er nu stiller den sig i feltet og markerer teksten, kan man få den til at "blanke" feltet helt af? Svar kun hvis du har lyst-ellers må jeg bare leve med det som det er og igen Mega Tak for Hjælpen!
Avatar billede trinerafn Nybegynder
01. december 2004 - 14:09 #13
Nu spørger jeg lige dumt-har jeg fået givet dig points eller hva?
Avatar billede mugs Novice
01. december 2004 - 14:36 #14
Jeg har fået point - Og tak for det.

Jeg forstår ikke helt din bemærkning med Undo. Som jeg skrev 30/11 kan du undo hele den sidste handling i formularen med Me.Undo.
Eller i et enkelt felt med Me.Feltnavn.Undo
Avatar billede trinerafn Nybegynder
01. december 2004 - 15:23 #15
Selv tak, ja men hvis jeg nu indtaster et ikke gyldigt tilbudsnr, så stiller den sig i det rigtige felt, men "Sort" markerer det jeg skrev, det gør ikke så meget, for nu kan man jo så vælge at skrive et gyldigt nr eller gå ud af formen. Den sletter altså ikke det man skrev, men sådan må det nok være.
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