ScrollBarGadget limité à 10.000
- microdevweb
- Messages : 1802
- Inscription : mer. 29/juin/2011 14:11
- Localisation : Belgique
ScrollBarGadget limité à 10.000
Bonjour à tous,
Dans le cadre de ma table j'utilise des scroolBar, dans mes testes la Db faisant + 10.000 record j'ai un message d'erreur "La valeur d'un scrollBarGadget doit être comprise entre 0 et 10.000.
Un idée pour passé cette limite ?
Merci
Dans le cadre de ma table j'utilise des scroolBar, dans mes testes la Db faisant + 10.000 record j'ai un message d'erreur "La valeur d'un scrollBarGadget doit être comprise entre 0 et 10.000.
Un idée pour passé cette limite ?
Merci
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Work at Centre Spatial de Liège
- falsam
- Messages : 7324
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: ScrollBarGadget limité à 10.000
Hello Micro. Est ce que tu crois qu'un utilisateur sain d'esprit va parcourir une liste de 10000 lignes ? Je pense que tu dois mettre en place un système de pagination.
Etant donné que tu utilises SQL ça va pouvoir se faire les doigts dans le nez ^^
Etant donné que tu utilises SQL ça va pouvoir se faire les doigts dans le nez ^^
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
- Kwai chang caine
- Messages : 6989
- Inscription : sam. 23/sept./2006 18:32
- Localisation : Isere
Re: ScrollBarGadget limité à 10.000
Evidemment que non, pfffff !!!Est ce que tu crois qu'un utilisateur sain d'esprit va parcourir une liste de 10000 lignes ?

Par contre.... 14 000 comme mon fichier disque, ....... tous les jours ......

Et je parle pas des taquets souvent atteints avec Excel 2000 des 65 000 lignes au boulot

Dernière modification par Kwai chang caine le mer. 14/sept./2016 10:17, modifié 2 fois.
- falsam
- Messages : 7324
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: ScrollBarGadget limité à 10.000
j'ai bien dis utilisateurs sains d'espritKwai chang caine a écrit :Par contre.... 14 000 comme mon fichier disque, ....... tous les jours ......

Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
- Kwai chang caine
- Messages : 6989
- Inscription : sam. 23/sept./2006 18:32
- Localisation : Isere
Re: ScrollBarGadget limité à 10.000
Aaaah !!! j'avais pas vu ... je me disais aussi ... 

- falsam
- Messages : 7324
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: ScrollBarGadget limité à 10.000
pas grave on t'aime bien au village de Purebasic :p
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
- Kwai chang caine
- Messages : 6989
- Inscription : sam. 23/sept./2006 18:32
- Localisation : Isere
Re: ScrollBarGadget limité à 10.000
Moi aussiiiiii !!!
Merci

Merci


- falsam
- Messages : 7324
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: ScrollBarGadget limité à 10.000
@Micro: Mettre en place un système de pagination avec ta liste est simple.
Tu connais le nombre de lignes visibles même si l'utilisateur resize ta liste.
Cas d'école : Le nombre de lignes visible est de 100 et l'utilisateur consulte une table de code postaux.
■ La selection SQL de la première page sera
select * from CodePostaux limit 0, 99
■ L'utilisateur clique sur le bouton page suivante. La requête sera
select * from CodePostaux limit 100, 199
Etc ...
Tu peux faire la même chose avec la molette de la souris en sachant qu'un déplacement de molette fait un saut de 10 lignes.
Tu connais le nombre de lignes visibles même si l'utilisateur resize ta liste.
Cas d'école : Le nombre de lignes visible est de 100 et l'utilisateur consulte une table de code postaux.
■ La selection SQL de la première page sera
select * from CodePostaux limit 0, 99
■ L'utilisateur clique sur le bouton page suivante. La requête sera
select * from CodePostaux limit 100, 199
Etc ...
Tu peux faire la même chose avec la molette de la souris en sachant qu'un déplacement de molette fait un saut de 10 lignes.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
- microdevweb
- Messages : 1802
- Inscription : mer. 29/juin/2011 14:11
- Localisation : Belgique
Re: ScrollBarGadget limité à 10.000
Il y à un système de pagination, ce dernier est régit par un scrollbar
Code : Tout sélectionner
Procedure DrawData()
Protected req.s,lOf,lTo,N,Y,X,YT,XT,CurrentDataLine,Color,Txt.s
Protected CalculFunction.proCalcul
With myTable()
req=\req
; Ajout des limites de lecture de la table
; Si l'acensseur vertical est actif on le prend en compte
If IsGadget(\IdScrollV)
lOf=GetGadgetState(\IdScrollV)
CurrentDataLine=GetGadgetState(\IdScrollV)
EndIf
; Ajout de where clause
If \WhereClause<>""
req+" WHERE "+\WhereClause
If \FiltersClause<>""
req+" AND "+\FiltersClause
EndIf
EndIf
If \WhereClause="" And \FiltersClause<>""
req+" WHERE "+\FiltersClause
EndIf
; Ajout du tri à la table
req+\OrderClause
lTo=\NumberLine
req+" LIMIT "+Str(lOf)+","+Str(lTo)+" "
If DatabaseQuery(\IdDb,req)=0
MessageRequester("DrawData Error",DatabaseError(),#PB_MessageRequester_Error)
ProcedureReturn #False
EndIf
; Efface les ligne en mémoire
ClearList(myDataLine())
; On commence sous le titre de colonne
Y=\myProperties\ColumnTitleHeight
While NextDatabaseRow(\IdDb)
X=0
AddElement(myDataLine())
; Sauvegarde de l'id
myDataLine()\Id=GetDatabaseLong(\IdDb,0)
; Si aucune ligne n'est sélectionnée on sélectionne la première ligne
If \IdLigneSelected=-1
\IdLigneSelected=myDataLine()\Id
EndIf
; Choix de la couleur et la police suivant que la ligne sélectionnée paire ou impaire
If myDataLine()\Id=\IdLigneSelected ; Si la ligne est sélectionnée
; Dessin du cadre de sélection
AddPathBox(0,Y,\TotalWidthColumn,\myProperties\LineHeight)
VectorSourceColor(\myProperties\SelectLineColors\Bg)
FillPath()
; Choix de la police
VectorFont(FontID(\myProperties\SelectLineFont))
Color=\myProperties\SelectLineColors\Fg
Else ; La ligne n'est pas sélectionnée
If CurrentDataLine & 1 ; Ligne impaire
VectorFont(FontID(\myProperties\OddLineFont))
Color=\myProperties\OddLineColors\Fg
Else ; ligne pair
VectorFont(FontID(\myProperties\PairLineFont))
Color=\myProperties\PairLineColors\Fg
EndIf
EndIf
; Centrage de la ligne horizontalement
YT=Y+(\myProperties\LineHeight/2)
YT-(VectorTextHeight("W")/2)
; Parcour de toutes les colonnes
N=0
; Trie la liste sur l'ordre
SortStructuredList(myTable()\myColumn(),#PB_Sort_Ascending,OffsetOf(Column\Order),TypeOf(Column\Order))
ForEach \myColumn()
AddElement(myDataLine()\myColumn())
; Si pas une colonne mémoire
If \myColumn()\DbColumnName<>""
N+1
Select DatabaseColumnType(\IdDb,N)
Case #PB_Database_Long
myDataLine()\myColumn()\Type=#PB_Database_Long
myDataLine()\myColumn()\Value=Str(GetDatabaseLong(\IdDb,N))
Case #PB_Database_String
myDataLine()\myColumn()\Type=#PB_Database_String
myDataLine()\myColumn()\Value=GetDatabaseString(\IdDb,N)
Case #PB_Database_Float
myDataLine()\myColumn()\Type=#PB_Database_Float
myDataLine()\myColumn()\Value=StrF(GetDatabaseLong(\IdDb,N))
Case #PB_Database_Double
myDataLine()\myColumn()\Type=#PB_Database_Double
myDataLine()\myColumn()\Value=StrD(GetDatabaseLong(\IdDb,N))
Case #PB_Database_Quad
myDataLine()\myColumn()\Type=#PB_Database_Quad
myDataLine()\myColumn()\Value=StrD(GetDatabaseLong(\IdDb,N))
Case #PB_Database_Blob
MessageRequester("DrawData Error","The blob type is not available with this module",#PB_MessageRequester_Error)
ProcedureReturn #False
EndSelect
Else ; Si une colonne mémoire
myDataLine()\myColumn()\Type=-1 ; Colonne mémoire
If \myColumn()\CalculateCallback>-1
CalculFunction=\myColumn()\CalculateCallback
myDataLine()\myColumn()\Value=CalculFunction(GetDatabaseLong(\IdDb,0))
EndIf
EndIf
; Contatene le texte si nécessaire
Txt=myDataLine()\myColumn()\Value
While VectorTextWidth(Txt)>(\myColumn()\Widht-(\myColumn()\Margin*2))
Txt=Left(Txt,Len(Txt)-4)
Txt+"..."
Wend
; Mise en place du texte dans la colonne
Select \myColumn()\Alignment
Case #Left
XT=X+\myColumn()\Margin
Case #Right
XT=X+(\myColumn()\Widht-(VectorTextWidth(Txt)+\myColumn()\Margin))
Case #Center
XT=X+(\myColumn()\Widht/2)
XT-VectorTextWidth(Txt)/2
EndSelect
; Dessin du texte
VectorSourceColor(Color)
MovePathCursor(XT,YT)
DrawVectorText(Txt)
X+\myColumn()\Widht
Next
Y+\myProperties\LineHeight
CurrentDataLine+1
Wend
EndWith
EndProcedure
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Work at Centre Spatial de Liège
Re: ScrollBarGadget limité à 10.000
heu ... t'es sur de ça ??falsam a écrit : Tu peux faire la même chose avec la molette de la souris en sachant qu'un déplacement de molette fait un saut de 10 lignes.
ça doit dependre de la souris non ? , voir du paramétrage du scroll ..? , de mémoire le scroll des ascensseurs peut se modifier non ?
- microdevweb
- Messages : 1802
- Inscription : mer. 29/juin/2011 14:11
- Localisation : Belgique
Re: ScrollBarGadget limité à 10.000
Je penses ne pas avoir été clair.
Il y à une pagination sur la table seul les record affichés sont lu dans la base de données. Par contre le système n'est pas régis par des page 1,2,3,4 etc mais par un scrollbar, qui donne le premier record à affiché la valeur total du scrollbar est (NbRecord Db - Nb ligne affichées). La molette de la souris est également gérée.
Ma première table faisait appel à un scroolbar (personnalisé et dessiné dans le canvas) ne posait pas ce type de problème mais cela compliquait le code.
Il me reste donc deux solution, faire un scroll maison ou ajouté des pages au scroll
Ex= de 0 à 10.000 page 1 après j'ajoute une page et fait remonté le scroll à 0. Mais bon se n'est pas des plus propre
Il y à une pagination sur la table seul les record affichés sont lu dans la base de données. Par contre le système n'est pas régis par des page 1,2,3,4 etc mais par un scrollbar, qui donne le premier record à affiché la valeur total du scrollbar est (NbRecord Db - Nb ligne affichées). La molette de la souris est également gérée.
Ma première table faisait appel à un scroolbar (personnalisé et dessiné dans le canvas) ne posait pas ce type de problème mais cela compliquait le code.
Il me reste donc deux solution, faire un scroll maison ou ajouté des pages au scroll
Ex= de 0 à 10.000 page 1 après j'ajoute une page et fait remonté le scroll à 0. Mais bon se n'est pas des plus propre
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Work at Centre Spatial de Liège
- falsam
- Messages : 7324
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: ScrollBarGadget limité à 10.000
ça veut dire que tu lis la totalité d'une table par exemple pour afficher seulement 100 lignes si la partie visible de ton tableau est de 100 lignes ?
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
- microdevweb
- Messages : 1802
- Inscription : mer. 29/juin/2011 14:11
- Localisation : Belgique
Re: ScrollBarGadget limité à 10.000
Si la table sql comprend 100 lignes et que la table affichée est de 100 lignes en effet je lis la totalité. Mais si seulement 10 ligne sont affichées je lirais 10 lignes
Exemple:
Exemple:
Code : Tout sélectionner
req="SELECT * FROM client LIMIT +"gestGadgetState(IdScroll)+",10"
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Work at Centre Spatial de Liège
Re: ScrollBarGadget limité à 10.000
Dans ce style d'appli, je commence par un SELECT COUNT(*) FROM ...
suivi d'une pagination forcée (comme avec les pages web)
ou
forcer l'utilisateur à affiner.
Objectifs:
- Penser que tout le monde n'a pas une machine aussi puissante que les développeurs (vu trop souvent...
)
- Libérer la mémoire à chaque page vue
- En milieu pro: Ne pas faciliter le travail d'un "utilisateur" qui voudrait embarquer d'un coup toute la base de données sur une clé usb ...
suivi d'une pagination forcée (comme avec les pages web)
ou
forcer l'utilisateur à affiner.
Objectifs:
- Penser que tout le monde n'a pas une machine aussi puissante que les développeurs (vu trop souvent...

- Libérer la mémoire à chaque page vue
- En milieu pro: Ne pas faciliter le travail d'un "utilisateur" qui voudrait embarquer d'un coup toute la base de données sur une clé usb ...

- microdevweb
- Messages : 1802
- Inscription : mer. 29/juin/2011 14:11
- Localisation : Belgique
Re: ScrollBarGadget limité à 10.000
Pour résoudre mon soucis je vais utilisé mon module ScrollBarCanvas que j'avais déjà créer précédement pour un autre projet. Je place le lien ci-dessous pour ceux que cela intéresse.
https://github.com/microdevweb/ScrollCa ... master.zip
https://github.com/microdevweb/ScrollCa ... master.zip
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Work at Centre Spatial de Liège