Hur gör jag för att sortera efter datum i en databas (*.mdb) med VB härifrån: Sist i frågan använder du ORDER BY <FältNamn>. Andreas du som är inne på optimeringssvängen..... Varför adderar du strängar med + operatoren istället för med & operatorn ??? Ledsen att behöva göra dig besviken. Din utvärdering av hastigheten är felaktig. Om du testar att upprepa anropen ytterligare några gång. Så får du ett annat resultat. Får i alla fall jag. Resultatet är dock lite tvetydigt. Har fått att + operationen är snabbare och ibland & operationen. Alternativt test(Minskar behovet av antalet loopar):Sortera datum i en databas?
Data1.RecordSource = "select * from " + frmStart.txtUserName_ & "tider" (vad skriver jag här för att sortera?)
Data1.RefreshSv: Sortera datum i en databas?
Något sånt här:
Data1.RecordSource = "SELECT * " + _
"FROM " + frmStart.txtUserName & "tider " + _
"ORDER BY Datumfält"
Data1.Refresh
Tips: Det är nog bättre att använda en tabell men ett fält för vems tid det är. Istället för en tabell för varje användare?
Om man vill vara riktigt snygg så skapar man en tabell för användare och anger vilken användare som äger tidsposten med idnummer från den tabellen.Sv: Sortera datum i en databas?
Alla vet vi väl rent generellt att aritmetiska operationer tar längre tid att exekvera än logiska.
Kör denna kod och kolla.... Spara ca 42% exekveringstid... Det kallar jag optimering eller..... ?
=============================================
Option Explicit
Private Declare Function GetTickCount Lib "kernel32" () As Long
Private strA As String
Private strB As String
Private startA As Single
Private startB As Single
Private i As Long
Private Sub Command1_Click()
strA = ""
startA = GetTickCount()
For i = 0 To 32767
strA = strA + "*"
Next i
Debug.Print GetTickCount() - startA
strB = ""
startB = GetTickCount()
For i = 0 To 32767
strB = strB & "*"
Next i
Debug.Print GetTickCount() - startB
End Sub
/peterh <=> hpeterSv: Sortera datum i en databas?
Mitt resultat:
strA1: 4367
strB1: 3755
strA2: 3765
strB2: 3766
strA3: 3765
strB3: 3776
Skillnaden är inte så stor. Det är det första anropet som får tar en smäll. Denna erfarenhet har jag fått efter otalig optimering... :O)
Detsutom testar du fel operation. Det som tar tid i looparna är att strängen växer. I koden jag föreslog slog jag samman strängkonstanter och en sträng variabel.
Ett mer korrekt test skulle vara något sådant här(Denna kod går betydligt snabbar, därför tvungen att öka antalet loopar):
Option Explicit
Private Declare Function GetTickCount Lib "kernel32" () As Long
Private Sub Command1_Click()
Dim strA As String
Dim strB As String
Dim startA As Single
Dim startB As Single
Dim i As Long
Const Times = 1000000
startA = GetTickCount()
For i = 0 To Times
strA = "*" + "*"
Next i
Debug.Print "strA1: "; GetTickCount() - startA
startB = GetTickCount()
For i = 0 To Times
strB = "*" & "*"
Next i
Debug.Print "strB1: "; GetTickCount() - startB
startA = GetTickCount()
For i = 0 To Times
strA = "*" + "*"
Next i
Debug.Print "strA2: "; GetTickCount() - startA
startB = GetTickCount()
For i = 0 To Times
strB = "*" & "*"
Next i
Debug.Print "strB2: "; GetTickCount() - startB
startA = GetTickCount()
For i = 0 To Times
strA = "*" + "*"
Next i
Debug.Print "strA3: "; GetTickCount() - startA
startB = GetTickCount()
For i = 0 To Times
strB = "*" & "*"
Next i
Debug.Print "strB3: "; GetTickCount() - startB
End SubSv: Sortera datum i en databas?
strA1: 781
strB1: 761
strA2: 771
strB2: 761
strA3: 741
strB3: 771
strA1: 791
strB1: 841
strA2: 751
strB2: 801
strA3: 741
strB3: 791
Om vi tittar i hjälpen:
& Operator - Used to force string concatenation of twoexpressions.
+ Operator - String concatenation
When you use the + operator, you may not be able to determine
whether addition or string concatenation will occur.
Use the & operator for concatenation to eliminate ambiguity and
provide self-documenting code.
Ej rekomenderat att allmänt använda + för att slå ihop strängar. Men om man slår ihop sträng konstanter, ser jag inget fel i att använda + Operatorn. Prestanda mässigt är de nog likvärdiga.
Men du gör rätt i att avråda mig från att använda den...Sv: Sortera datum i en databas?
Private Sub Command1_Click()
Dim strA As String
Dim strB As String
Dim startA As Single
Dim startB As Single
Dim i As Long
Const Times = 200000
startA = GetTickCount()
For i = 0 To Times
strA = "*" + "*"
strA = "*" + "*"
strA = "*" + "*"
strA = "*" + "*"
strA = "*" + "*"
Next i
Debug.Print "strA1: "; GetTickCount() - startA
startB = GetTickCount()
For i = 0 To Times
strB = "*" & "*"
strB = "*" & "*"
strB = "*" & "*"
strB = "*" & "*"
strB = "*" & "*"
Next i
Debug.Print "strB1: "; GetTickCount() - startB
startA = GetTickCount()
For i = 0 To Times
strA = "*" + "*"
strA = "*" + "*"
strA = "*" + "*"
strA = "*" + "*"
strA = "*" + "*"
Next i
Debug.Print "strA2: "; GetTickCount() - startA
startB = GetTickCount()
For i = 0 To Times
strB = "*" & "*"
strB = "*" & "*"
strB = "*" & "*"
strB = "*" & "*"
strB = "*" & "*"
Next i
Debug.Print "strB2: "; GetTickCount() - startB
startA = GetTickCount()
For i = 0 To Times
strA = "*" + "*"
strA = "*" + "*"
strA = "*" + "*"
strA = "*" + "*"
strA = "*" + "*"
Next i
Debug.Print "strA3: "; GetTickCount() - startA
startB = GetTickCount()
For i = 0 To Times
strB = "*" & "*"
strB = "*" & "*"
strB = "*" & "*"
strB = "*" & "*"
strB = "*" & "*"
Next i
Debug.Print "strB3: "; GetTickCount() - startB
End Sub