Problemet er at ApplyFilter funktionen ikke altid virker. Query'en "ProspectsListFilterNo" henter nogle data fra en tabel ud fra det man angiver i InputBox'en. Nogle gange returnerer den bare et tomt recordset selvom der findes gyldige data ud fra det kriterie man har angivet. Hvis jeg kører query'en manuelt, så finder den fint de data som den af en eller anden årsag ikke kan finde når man bruger ApplyFilter funktionen.
Eftersom den ikke altid finder nogen data, så fejler funktionen når den når til QuNo = Me![QuotationNo] da "QuotationNo" feltet jo er tomt. Fejlen den kommer med er fejl nr. 94, "Invalid use of Null".
Hvad kan årsagen være til at query'en ikke altid returnerer data når man bruger ApplyFilter funktionen?
Eftersom en Variant godt kan være Null så kommer fejlen ikke længere, men den finder stadig ikke data ved ApplyFilter. Dermed er FilterInput <> QuNoNull eftersom QuNo = Null og så bliver InputBox'en blot vist igen.
hmm, jeg kan ikke helt gennemskue, hvad det hele gør. Og da størstedelen af filteret ligger i ProspectsListFilterNo, så er det svært for mig at se hvad der går galt.
Jeg kan heller ikke lige huske, hvad de 3 DoMenuItem-linier gør.
Simpel udgave - alt det andet er ikke nødvendigt i denne sammenhæng:
Sub Command122_Click() On Error GoTo Err_Command122_Click
Dim FilterInput As String Dim QuNo As Variant Dim QuNoNull As Variant Dim myMsg As String Dim NewLine As String
NewLine = Chr(10) & Chr(10)
Refresh 1 FilterInput = InputBox("Write ONLY Quotation No. Example 126000") If FilterInput = "" Then Exit Sub End If Me![Test] = FilterInput DoCmd.ApplyFilter "ProspectsListFilterNo" DoCmd.GoToControl "QuotationNo" DoCmd.GoToRecord , , acLast
QuNo = Me![QuotationNo] QuNoNull = Format(QuNo, "###0") If FilterInput <> QuNoNull Then GoTo 1
MsgBox myMsg, , "Fejl", Err.HelpFile, Err.HelpContext Exit Sub End Sub
Query'en ProspectsListFilterNo ser sådan her ud:
SELECT DISTINCTROW [Quotation costomers].Responsible, [Quotation costomers].QuotationNo FROM [Quotation costomers] WHERE ((([Quotation costomers].QuotationNo) Like [Forms]![ProspectsListAll]![Test] & "*")) ORDER BY [Quotation costomers].Responsible, [Quotation costomers].QuotationNo;
[Forms]![ProspectsListAll]![Test] er det felt som indtastningen af InputBox'en bliver gemt i.
okay, jeg har en svag teori om, at ProspectsListFilterNo ikke kan aflæse den korrekte værdi fra tekstboksen - simpelthen fordi feltet/ændringen endnu ikke er nået at blive ordentligt 'registreret' i systemet.
Men hvorfor ikke gøre op med den lidt besværlige metode og blot gøre således:
Sub Command122_Click() On Error GoTo Err_Command122_Click
Dim FilterInput As String Dim QuNo As Variant Dim QuNoNull As Variant Dim myMsg As String
Refresh 1 FilterInput = InputBox("Write ONLY Quotation No. Example 126000") If FilterInput = "" Then Exit Sub End If DoCmd.ApplyFilter ,"QuotationNo = '" & FilterInput & "'" DoCmd.GoToControl "QuotationNo" DoCmd.GoToRecord , , acLast
QuNo = Me![QuotationNo] QuNoNull = Format(QuNo, "###0") If FilterInput <> QuNoNull Then GoTo 1
Nu fejler ApplyFilter funktionen med fejlen "The ApplyFilter action was canceled". Skal man ikke også stadig have "ProspectsListFilterNo" delen med? (Det hjalp dog ikke at tilføje det!)
Me.Filter = "QuotationNo Like '" & FilterInput & "*'"
Med ovenstående så virker det som da vi startede - altså den finder ikke alle data man søger efter selvom de reelt findes. Søgningen skal være en LIKE da man skal kunne søge efter starten af tallet.
QuotationNo feltet som der søges på er som følgende:
Data type: Number Field size: Double Format: Fixed Decimal places: 4 Required: Yes Indexed: Yes (No dublicates)
Eftersom feltet er et tal, så kan jeg ikke helt forstå hvorfor der skal ' omkring værdien, men hvis jeg fjerner dem, så får jeg blot fejlen "You can't assign a value to this object" - det er Me.Filter den stopper ved.
Har prøvet at lave det om en til DoCmd.RunSQL i stedet for, men kan heller ikke helt få det til at virke.
"WHERE [Quotation costomers].QuotationNo LIKE 123456* "
Ovenstående virker fint hvis man kører det i en decideret query, men kører jeg det via en RunSQL, så får jeg en "Syntax error (missing operator) in query expression '[Quotation costomers].QuotationNo LIKE 123456*' fejl.
Har lavet et par test, og det viser sig at søgningen returnerer ikke noget når tallet man søger efter er 300000 eller derover - 299999 eller mindre virker fint. Hvorfor det er sådan, forstår jeg så slet ikke!?
hmm, det lyder heller ikke normalt. Du har ikke tilfældigvis prøvet at komprimere databasen, vel? Den slags unoder kan godt opstå, hvis der er fejl på databasen...
Har prøvet både Compact og Repair, men problemet er der stadig. Har også prøvet at importere data over i en helt ny database, men det hjalp heller ikker.
Så fandt jeg endelig løsningen. Det viste sig at den tidligere programmør havde indsat en spærring i en query som køres før den dette spørgsmål omhandler. I den query havde han valgt at den kun skal hente poster der netop har nummeret under 300000 :o)
Lav et svar - så deler vi så du får nogle point som tak for forsøget :)
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.