Ich fülle das Main-ListIconGadget meiner Video-Verwaltung mit folgender Subroutine:
Code: Alles auswählen
loadDB:
;############################################# ;bearbeitet, Fehler => End
;{
HideGadget(#main_list,1) ; dürfte die Sache etwas beschleunigen
HideGadget(#main_text,0)
HideGadget(#main_prbar,0)
DisableGadget(#main_list,1)
DisableGadget(#main_tree,1) ; damit da nicht drinrumgeklickt werden kann
SendMessage_(#main_list, #WM_SETREDRAW, #False, 0 )
DisableExplicit
BufferSize.l = 2500 * 400
;SendMessage_(#main_list,#LB_INITSTORAGE,0,BufferSize)
z1=ElapsedMilliseconds()
If DBref
maintable.SQ3_TABLEMAP
If SQliteGetTable(DBref, "SELECT * FROM maintable order by Titel ASC", maintable) = #False
MessageRequester("Error beim Laden des maintable von "+DBName, SQliteErrorMsg(DBref))
End
Else
mainDBsatzanzahl = maintable\Rows
sbarfeld1 = "erfaßte Filme: "+Str(mainDBsatzanzahl)
StatusBarText(#main_stbar, 1, sbarfeld1)
SetGadgetAttribute(#main_prbar, #PB_ProgressBar_Maximum, mainDBsatzanzahl)
If maintable\Cols <> feldercount +1
MessageRequester("Datenbankfehler", "Die SQLLIte-Datenbank hat "+ Str(maintable\Cols) +" statt "+Str(feldercount+1)+" :(", 0)
Else
spaltencounter = 0
zeilencounter = 0
If maintable
While SQLiteNextRow(maintable)
eintrag = ""
While SQLiteNextCol(maintable)
eintrag = eintrag + SQLiteValue(maintable) + Chr(10)
spaltencounter + 1
Wend
AddGadgetItem(#main_list,-1,eintrag)
sbarfeld2 = "geladene Filme: " + Str(Zeilencounter + 1)
StatusBarText(#main_stbar, 2, sbarfeld2)
SetGadgetState(#main_prbar,Zeilencounter)
; ohne die Schleife refresht das Window nicht korrekt, siehe meinen Thread im PB-Forum
While WindowEvent(): Wend
Zeilencounter + 1
;Debug Zeilencounter
Wend
EndIf
EndIf
EndIf
SQliteFreeTable(maintable)
Else
MessageRequester("Error beim Laden von "+DBName, SQliteErrorMsg(DBref))
End
EndIf
;jede 2. Zeile hellgrau unterlegen ;
;hierfür muß von Gnozal "PureCOLOR" installiert sein
PureCOLOR_SetGadgetColorEx(#main_list, RGB(0,0,0), RGB(255, 255, 255), RGB(222, 222, 222), #PureCOLOR_LV_AlternateColors)
;Spaltenbreiten einrichten
PureLVSORT_SetColumnWidth(#main_list, 0, ugs_PLVS_ColMaxWidth(#main_list, 0)) ;UID ;
PureLVSORT_SetColumnWidth(#main_list, 1, 200) ;Titel ; 0.10
PureLVSORT_SetColumnWidth(#main_list, 2, 120) ;Genre ; 0.10
PureLVSORT_SetColumnWidth(#main_list, 3, ugs_PLVS_ColMaxWidth(#main_list, 3)) ;Jahr ;
PureLVSORT_SetColumnWidth(#main_list, 4, ugs_PLVS_ColMaxWidth(#main_list, 4)) ;MediumTyp ;
PureLVSORT_SetColumnWidth(#main_list, 5, ugs_PLVS_ColMaxWidth(#main_list, 5)) ;MediumName ;
PureLVSORT_SetColumnWidth(#main_list, 6, ugs_PLVS_ColMaxWidth(#main_list, 6)) ;Owner ;
PureLVSORT_SetColumnWidth(#main_list, 7, ugs_PLVS_ColMaxWidth(#main_list, 7)) ;Quelle ;
PureLVSORT_SetColumnWidth(#main_list, 8, ugs_PLVS_ColMaxWidth(#main_list, 8)) ;Dauer ;
PureLVSORT_SetColumnWidth(#main_list, 9, ugs_PLVS_ColMaxWidth(#main_list, 9)) ;Qualität ;
PureLVSORT_SetColumnWidth(#main_list,10, ugs_PLVS_ColMaxWidth(#main_list,10)) ;Infos ;
PureLVSORT_SetColumnWidth(#main_list,11, ugs_PLVS_ColMaxWidth(#main_list,11)) ;Path ;
PureLVSORT_SetColumnWidth(#main_list,12, ugs_PLVS_ColMaxWidth(#main_list,12)) ;Filename ;
PureLVSORT_SetColumnWidth(#main_list,13, ugs_PLVS_ColMaxWidth(#main_list,13)) ;FileSize ;
PureLVSORT_SetColumnWidth(#main_list,14, ugs_PLVS_ColMaxWidth(#main_list,14)) ;Videocodec ;
PureLVSORT_SetColumnWidth(#main_list,15, ugs_PLVS_ColMaxWidth(#main_list,15)) ;VideoBitrate ;
PureLVSORT_SetColumnWidth(#main_list,16, ugs_PLVS_ColMaxWidth(#main_list,16)) ;Auflösung ;
PureLVSORT_SetColumnWidth(#main_list,17, ugs_PLVS_ColMaxWidth(#main_list,17)) ;fps ;
PureLVSORT_SetColumnWidth(#main_list,18, ugs_PLVS_ColMaxWidth(#main_list,18)) ;Audiocodec ;
PureLVSORT_SetColumnWidth(#main_list,19, ugs_PLVS_ColMaxWidth(#main_list,19)) ;AudioBitrate ;
PureLVSORT_SetColumnWidth(#main_list,20, ugs_PLVS_ColMaxWidth(#main_list,20)) ;AudioKanäle ;
PureLVSORT_SetColumnWidth(#main_list,21, ugs_PLVS_ColMaxWidth(#main_list,21)) ;SamplingRate ;
z2=ElapsedMilliseconds()
EnableDebugger
Debug "Dauer: " +Str(z2 - z1)+" Millisekunden"
DisableDebugger
HideGadget(#main_list,0)
HideGadget(#main_text,1)
HideGadget(#main_prbar,1)
DisableGadget(#main_tree,0)
DisableGadget(#main_list,0)
SendMessage_(#main_list, #WM_SETREDRAW, #True, 0 )
LIGinhalt="Alles"
;}
Return; loadDB
Wie bekomme ich das schneller ?
Ich bin bei einer Suche über #lb_initstorage und #wm_setredraw gestolpert, hab aber keine Idee, wie mir das weiterhelfen könnte.
Mag das vielleicht jemand an dem Code oben erklären/einpflegen ?
Meine zusätzliche Idee:
Während der Nutzung der DB kann man in das LIG auch Teilmengen einlesen, z.B. Filterungen nach einzelnen Medien, Genres, o.Ä.
Wäre es da nicht besser, den kompletten Datenbestand in das "erste" LIG einzulesen und dann für diese Teilmengen ein zusätzliches zweites LIG drüberzulegen, welches gelöscht wird, wenn der User wieder eine andere Ansichtsmenge erwartet ?
interessante Vorschläge erwartend... scholly