30. november 2004 - 14:35Der 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
I lang tid har samarbejdsbranchen fokuseret på at forbedre enhedsfunktioner – bedre kameraer, klarere lyd og smartere software. Men den virkelige forvandling handler ikke om funktioner.
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
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?
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
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
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
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?
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 :-)
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!
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
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.
Synes godt om
Ny brugerNybegynder
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.