20. september 2007 - 12:09Der er
18 kommentarer og 1 løsning
Finna saknade tal
Jag vill skapa en fråga som finner saknade tal i en talserie i nummerføljd. Låt sæga att talserien løper från 25 till 55 och talen 30, 36, och 40 saknas. Hur skall jag gøra før att hitta dessa saknade tal och få upp dessa i en fråga?
Jag førsøker køra din kod med For ix = DMin("KollKvitt", "KollKvitto", "TAXINR = Forms.Importera.Taxi") To DMax("KollKvitt", "KollKvitto", "TAXINR = Forms.Importera.Taxi") men får kompileringsfel med ix som odefinierad variabel.
Hvis feltet forms.importera.taxi er et tal: For ix = DMin("[KollKvitt]", "KollKvitto", "[TAXINR] = " & Forms.Importera.Taxi) To DMax("[KollKvitt]", "KollKvitto", "[TAXINR] = " & Forms.Importera.Taxi)
og hvis det er et tekstfelt: For ix = DMin("[KollKvitt]", "KollKvitto", "[TAXINR] = '" & Forms.Importera.Taxi & "'") To DMax("[KollKvitt]", "KollKvitto", "[TAXINR] = '" & Forms.Importera.Taxi & "'")
KollKvitto ær en urvalsfråga som listar alla kvittonr i fæltet KollKvitt før taxibilen med taxinr=Forms.Importera.Taxi. Jag vill alltså hitta de kvittonr som saknas mellan DMin och Dmax.
Function FindLedigeTal(intStart As Integer, intSlut As Integer) '******************* ' Finder ledige numre og afleverer ' resultatet som en streng ' ' Rettet 22-09-2007 '******************* Dim conn As ADODB.Connection Dim rst As ADODB.Recordset Dim strSQL As String Dim strLedige As String Dim iX As Integer
Set conn = CurrentProject.Connection Set rst = New ADODB.Recordset
For iX = intStart To intSlut strSQL = "SELECT Nummer FROM tblNummer Where Nummer = " & iX & ";" 'MsgBox strSQL rst.Open strSQL, conn If rst.BOF And rst.EOF Then ' No hit strLedige = strLedige & iX & ";" Else ' Hit End If rst.Close Next Set rst = Nothing conn.Close Set conn = Nothing
Sub cmd01_Click() '******************* ' Finder ledige numre i en serie ' og skriver dem til en tabel ' ' Rettet 22-09-2007 '******************* Dim conn As ADODB.Connection Dim strSQL As String Dim arrLedige Dim iX As Integer
Set conn = CurrentProject.Connection
' Kald til funktionen FindLedigeTal() resultatet ' lægges i et array arrLedige = Split(FindLedigeTal(25, 55), ";")
' Arrayet lægges i en tabel For iX = 0 To UBound(arrLedige) - 1 strSQL = "INSERT INTO tblLedigtNummer(Nummer) Values(" & arrLedige(iX) & ");" 'MsgBox strSQL conn.Execute strSQL Next
Fin løsning. Jeg har også kun kunnet få det til at fungere ved at lave en tekststreng med semikolonsepererede tal. Det er lidt omstændigt, men det virker. Fin løsning.
Ved et klik på en knap laves et kald til funktionen FindLedigeTal() og den returnede tekststreng lægges i et array ved hjælp af funktionen Split(). Arrayet gennemløbes og data overføres til en tabel ved navn tblLedigtNummer der har et felt der hedder nummer.
Mjaeh, man kunne jo godt have lavet det som en funktion der lægger værdien af iX i en tabel, når der er et hul i nummerserien. Så havde man undgået teksstrengen og arrayet, men det var blevet sværere at læse og forstå. Tror jeg.
Hej ffsoft! Jag har varit upptagen med annat och inte kunnat testa ditt førslag førræn nu. Jag får ett kompileringsfel på Dim conn As ADODB.Connection med meddelandet : "Egendefinierad typ har inte definierats". Vad ær galet?
Under Tools > Referencer skal du have kryds i Microsoft ADO 2.6 (eller lignenden) Måske kan eksemplet laves i DAO i stedet, så du undgår en ny reference i databasen.
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.