IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

 Delphi Discussion :

lecture record sous android


Sujet :

Delphi

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 27
    Points : 34
    Points
    34
    Par défaut lecture record sous android
    bonjour delphi xe8
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    type
      Cours = Packed record
        Indx: Integer;
        Qte: Integer;
        URL: string[250];
      end;
     
      Fichier = File Of Cours;
     
      Var
      F: Fichier;
      Ret : integer
     
    {$IFDEF ANDROID}
      AdrFichier :=  TPath.Combine(TPath.GetDocumentsPath, 'cours.DAT');
    {$ELSEIF Defined(MSWINDOWS)}
      AdrFichier := TPath.GetHomePath + PathDelim + 'cours.DAT';
    {$ENDIF}
     
      if FileExists(AdrFichier) then
        begin
          reset(F);
          //ici mon fichier existe le message s'affiche bien
           TDialogService.MessageDialog(AdrFichier, TMsgDlgType.mtConfirmation, [TMsgDlgBtn.mbYes, TMsgDlgBtn.mbNo], TMsgDlgBtn.mbYes, 0,
            procedure(const AResult: TModalResult)
            begin
            Ret := AResult;
            end
            );
            if Ret <> mrYes then
        end
        else
          Rewrite(F);
      except
         TDialogService.MessageDialog('Erreur Lire Fichier F', TMsgDlgType.mtConfirmation, [TMsgDlgBtn.mbYes, TMsgDlgBtn.mbNo], TMsgDlgBtn.mbYes, 0,
          procedure(const AResult: TModalResult)
          begin
          Ret := AResult;
          end
          );
          if Ret <> mrYes then
      end;
     
      if FileSize(F) <> 0 then   //<-- ici sous windows ok FileSize(F) > 0   mais sous android FileSize(F) = 0
        begin
          reset(F);
          Seek(F, 0);
          Try
            While Not Eof(F) Do .....
    ce code fonctionne sous windows
    mais sous android FileSize(F) est égal a 0
    question
    est ce que le fichier n'est pas stocké au bon endroit pourtant il est reconnu,
    ou reset sous android doit être différent ????
    autant de questions pourquoi ça ne marche pas sous android

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 301
    Points
    11 301
    Billets dans le blog
    6
    Par défaut
    Bonjour,
    j'imagine qu'il y a un Assign(Fichier, AdrFichier) quelque part dans ton code que tu n'as pas repris sur le forum ?
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  3. #3
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 611
    Points
    3 611
    Par défaut
    Si le filesize() est fait après un rewrite() ça me semble normal, après un reset() non.

    est-ce que le fichier est bien créé ?

    où est le AssignFile() ?

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 27
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par pprem Voir le message
    Si le filesize() est fait après un rewrite() ça me semble normal, après un reset() non.

    est-ce que le fichier est bien créé ?

    où est le AssignFile() ?
    Bonjour merci de vos réponses a tous deux
    oui j'ai bien un AssignFile(F, AdrFichier).
    le code tel que marche bien sous windows et mon fichier s'affiche bien dans un stringgrid.
    j'ai placé des MessageDialog a plusieurs endroits.
    c'est seulement sous android que FileSize(F) est à 0, alors que sous windows il est à 2

  5. #5
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 611
    Points
    3 611
    Par défaut
    as-tu pu tester sur plusieurs appareils différents pour voir si ça tourne de façon différente ?

    sur quelle version d'android ça déconne ?

    je n'ai pas trouvé de relevé d'incident laissant supposer que ce serait un bogue connu, donc faut faire quelques vérifications avant de remonter l'info si ça se confirme.

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par pprem Voir le message
    je n'ai pas trouvé de relevé d'incident laissant supposer que ce serait un bogue connu, donc faut faire quelques vérifications avant de remonter l'info si ça se confirme.
    D'un autre côté, XE8 c'est pas du récent du coup remonter l'information

    Du coup, même si le sujet est l'utilisation de record utiliser SQLite (même pour une seule table) serait certainement une solution plus "radicale"
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  7. #7
    Membre émérite
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 496
    Points : 2 762
    Points
    2 762
    Billets dans le blog
    10
    Par défaut
    Je vote pour que tu utilises une table SQLLite. Je ne pense pas que le string[250] soit bien géré par Androïd

  8. #8
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 611
    Points
    3 611
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    D'un autre côté, XE8 c'est pas du récent du coup remonter l'information
    Forcément, pour XE8 je m'en fiche un peu, mais c'est pour voir s'il y a un problème général sur Android ou s'il est par rapport à une version précise afin de vérifier ce qu'il en est sur la dernière version en date de RAD Studio et remonter l'info si c'est justifié.

  9. #9
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 611
    Points
    3 611
    Par défaut
    Concernant le choix de SQLite plutôt que les fichiers binaires basés sur un RECORD, effectivement pour les mobiles ça serait nettement mieux notamment à cause du string[250] comme le relève Alain (problème de taille des caractères qui fait que de toute façon le fichier ne sera pas portable d'un OS à un autre selon l'encodage choisi).

    En revanche, si le string[250] est un AnsiString[250] (non géré par la RTL en XE8) ou se transforme en array [0..255] of char, ça peut améliorer la portabilité du fichier stocké et justifier l'utilisation des FILE FO RECORD "antiques".

    Si la question de passer le fichier de la liste d'un programme à un autre ne se pose pas, il faut clairement abandonner le file of record et passer à une base SQLite ou IBLite... et pas que sur Android, mais partout.

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 27
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par pprem Voir le message
    Concernant le choix de SQLite plutôt que les fichiers binaires basés sur un RECORD, effectivement pour les mobiles ça serait nettement mieux notamment à cause du string[250] comme le relève Alain (problème de taille des caractères qui fait que de toute façon le fichier ne sera pas portable d'un OS à un autre selon l'encodage choisi).

    En revanche, si le string[250] est un AnsiString[250] (non géré par la RTL en XE8) ou se transforme en array [0..255] of char, ça peut améliorer la portabilité du fichier stocké et justifier l'utilisation des FILE FO RECORD "antiques".

    Si la question de passer le fichier de la liste d'un programme à un autre ne se pose pas, il faut clairement abandonner le file of record et passer à une base SQLite ou IBLite... et pas que sur Android, mais partout.
    j'ai fais tester avec sydney le problème est le même.
    comme finalement il y a peu de données je vais passer par un fichier ini , j'ai testé ça devrait le faire.
    merci de vos sugestions je regarder SQLite .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 25/12/2018, 22h22
  2. lecture ecriture d'un fichier xml sous android
    Par ouarda090 dans le forum Android
    Réponses: 5
    Dernier message: 03/03/2014, 11h07
  3. Lecture d'une video sous android
    Par INFORMATOL dans le forum Android
    Réponses: 21
    Dernier message: 22/05/2012, 01h00
  4. Lecture d'un vidéo à partir d'un serveur sous Android
    Par ensinienne dans le forum API standards et tierces
    Réponses: 10
    Dernier message: 11/04/2012, 13h45
  5. Lecture de code DATAMATRIX sous ANDROID
    Par courdi95 dans le forum Windev Mobile
    Réponses: 0
    Dernier message: 13/10/2011, 15h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo