Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Web & réseau Delphi Discussion :

Delphi Intraweb et Table de plus de 18000 rows


Sujet :

Web & réseau Delphi

  1. #1
    Membre du Club
    Delphi Intraweb et Table de plus de 18000 rows
    Bonjour tous le monde et un grand merci à Dany pour l'article d'intraweb pour delphi https://dany-leblanc.developpez.com/tutoriels/delphi/intraweb/, alors moi j'ai une question concernent l'utilisation de DataTables de JQuery que j'utilise avec IntraWeb. à l'ouverture de la page l'affichage et long et prend beaucoup de temps pour affiché une datatables de jquery, sachant que la table contient 18500 ROWS, que faire pour que l'affichage se fait instantanément en 50 lignes, je suis coincé merci à tous.

    Delphi 10.2 Tokyo
    Intraweb 14.0
    Windows 8.1

  2. #2
    Rédacteur/Modérateur

    Bonjour,

    on déborde de Delphi puisqu'il s'agit plus de JQuery. Ce dernier a beaucoup évolué depuis mes dernières utilisations, le DataTable n'existait pas encore, c’était donc mes composants qui géraient les données.
    Ma première réaction était donc de parler de Threads et/ou de gestion de requêtes.
    Mais un petit tour dans les pages de JQuery Datatable semble indiquer qu'il y a des options à essayer
    Si j'étais vous je regarderais de plus près data-page-length, Paging, ScrollY
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein

    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio, Sidney) et peut être quelques autres
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

  3. #3
    Membre du Club
    Bonjour, et merci Sergio, j'avoue ne pas comprendre votre réponse et ou trouvé data-page-length, Paging, ScrollY, moi j'ai suivi la vidéo de
    Il utilise dans l'exemple OnUnknownTag de IWTemplateProcessorHTML pour afficher les donnes dans datatables de JQuery, le processus marche bien mais l'affichage des donnes et longue.

  4. #4
    Rédacteur/Modérateur

    Citation Envoyé par masterdash Voir le message
    Bonjour, et merci Sergio, j'avoue ne pas comprendre votre réponse et ou trouvé data-page-length, Paging, ScrollY
    je vous ai indiqué le lien, un peu de recherche sur le site et vous trouverez ! par exemple ici
    mais comme vous n'indiquez absolument pas comment vous chargez la table c'est tout ce que je (et d'autres) peut faire pour vous

    de plus, j'ai visionné rapidement la vidéo j'y vois un TClientDataset et je n'ai pas vraiment vu de Datatable et Jquery
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein

    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio, Sidney) et peut être quelques autres
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

  5. #5
    Membre du Club
    Voici comment la tables et chargée:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    procedure TIWAdherent.IWTemplateProcessorHTML1UnknownTag(const AName: string;
      var VValue: string);
    begin
    IF AnsiUpperCase(AName) = 'GRIDAHDERENTDATA' Then
      Begin
        UserSession.AdhereTable.First;
        While Not UserSession.AdhereTable.Eof Do
        Begin
          VValue := VValue + '<tr><td>' + UserSession.AdhereTable.FieldByName
            ('Num_Adherent').AsString + '</td>' + sLineBreak + '<td>' +
            UserSession.AdhereTable.FieldByName('Nom').AsString + '</td>'
            + sLineBreak + '<td>' + UserSession.AdhereTable.FieldByName
            ('Prenom').AsString + '</td>' + sLineBreak + '<td>' +
            UserSession.AdhereTable.FieldByName('DateDebut').AsString +
            '</td>' + sLineBreak + '<td>' + UserSession.AdhereTable.
            FieldByName('DateActiv').AsString + '</td>' + sLineBreak + '<td>' +
            UserSession.AdhereTable.FieldByName('Adresse').AsString +
            '</td>' + sLineBreak + '<td>' + UserSession.AdhereTable.
            FieldByName('Adresse_Suite').AsString + '</' + 'td></tr>' + sLineBreak;
          UserSession.AdhereTable.Next;
        End;
      End;
    end;

  6. #6
    Rédacteur/Modérateur

    Bonsoir,

    c'est bien ce que je pensais en fait vous n'utilisez pas "DataTables de JQuery" mais créez un simple tableau.

    A mon avis le plus simple est d'utiliser plutôt un tableau plus court, égal au nombre de lignes qui peut être visible sur l'écran avec deux boutons supplémentaires permettant de naviguer d'avant en arrière et ainsi de gérer une position.
    Du coup la première chose à faire est de revoir AdhereTable qui ne doit plus être une table mais une requête (beaucoup plus légère) qui permettra de ne récupérer que les n lignes nécessaires et ce à partir d'une position dans la table. (cela va beaucoup dépendre du SGBD en général il s'agit de la clause LIMIT ou ROWS )
    une variable position est donc à mémoriser au niveau de la session.

    donc vous aurez à faire avec une requête paramétrée de ce style ( N est la position, R le nombre de lignes)
    MYSQL SELECT Num_Adherent,nom,Prenom,DateDebut,DateActiv,Adresse,Adresse_Suite FROM ADHERENTS LIMIT :N,:R ;
    MSSQL* SELECT Num_Adherent,nom,Prenom,DateDebut,DateActiv,Adresse,Adresse_Suite FROM ADHERENTS WHERE ROWNUM>=:N LIMIT :R ;
    POSTGRES SELECT Num_Adherent,nom,Prenom,DateDebut,DateActiv,Adresse,Adresse_Suite FROM ADHERENTS LIMIT :R,:N ;
    Firebird** SELECT Num_Adherent,nom,Prenom,DateDebut,DateActiv,Adresse,Adresse_Suite FROM ADHERENTS ROWS :R FROM :N



    * à vérifier
    ** dépend de la version
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein

    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio, Sidney) et peut être quelques autres
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

  7. #7
    Membre du Club
    La base de données utilisé et Access 2007.

  8. #8
    Rédacteur/Modérateur

    Bonjour,

    Évidemment, il fallait que cela tombe sur Acces et certainement ADO pour s'y connecter deux trucs pour lesquels je n'ai aucune affinité !

    le SQL proposé pour MSSQL devrait fonctionner quoique je n'ai pas idée si ROWNUM existe pour Access
    mais des contournements pourraient exister pour y pallier :
    A essayer je n'en sais pas assez sur DCOUNT et je n'ai pas ACCESS
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT TOP :R * FROM 
    (SELECT DCount("[NUM_ADHERENT]","[ADHERENTS]","[NUM_ADHERENT]<=" & [NUM_ADHERENT]) AS row_id,Num_Adherent,nom,Prenom,DateDebut,DateActiv,Adresse,Adresse_Suite
     FROM ADHERENTS ORDER BY NUM_ADHERENT)
    WHERE row_id>=:N

    Mais il y a certainement d'autres formulations ou pistes à explorer

    tant qu'à faire vous pouvez même certainement concaténer les colonnes demandées
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT TOP :R * FROM 
    (SELECT DCount("[NUM_ADHERENT]","[ADHERENTS]","[NUM_ADHERENT]<=" & [NUM_ADHERENT])AS row_id,'<tr><td>'||Num_Adherent||'</td><td>'||nom||'</td><td>'||Prenom||'</td><td>'||DateDebut||'</td><td>'||DateActiv||'</td><td>'||Adresse||'</td><td>'||Adresse_Suite||'</td></tr>' as ligne
     FROM ADHERENTS ORDER BY NUM_ADHERENT)
    WHERE row_id>=:N

    ce qui allégera votre code
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein

    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio, Sidney) et peut être quelques autres
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd