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

Lazarus Pascal Discussion :

Problèmes avec TFixedFormatDataSet.FileName [Lazarus]


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Février 2013
    Messages : 70
    Par défaut Problèmes avec TFixedFormatDataSet.FileName
    Je n'ai aucun problème à ouvrir un fichier qui se trouve à la racine du disque dur, mais si je le mets dans mes documents, le fichier refuse de s'ouvrir. J'ai effectué plusieurs tests qui confirment que en dehors de mes documents, même si ce n'est pas à la racine, tout fonctionne correctement. Remplacer mes documents par son chemin absolu depuis la racine ne règle pas le problème.

    De plus, le programme est incapable de lire un fichier situé dans le même répertoire que le programme principal même en ajoutant un .\ devant le nom du fichier.

    J'ai l'impression que ce composant est très peu utilisé. Jusqu'à maintenant, il ne fonctionne qu'en fournissant un chemin absolu depuis la racine avec un fichier qui n'est pas dans mes documents. Ces restrictions n'étant pas dans la documentation, quasi inexistante. En Linux, il ne fonctionne pas du tout! Il est toujours incapable d'ouvrir le fichier d'entrée quelque soit son emplacement dans /home/pierre .

    Le nom de fichier doit comporter des restrictions non documentées. L'image attachée montre l'ouverture correcte du fichier e:\user\Travail\D12345678901234\yyy\k12345678901234567890\z.txt , la longueur ne semble pas causer problème. En fait, c'est l'ouverture d'une copie de z.txt situé dans le même répertoire que le fichier exécutable ou dans mes documents qui ne fonctionne pas.

    Nom : Test Fichier TRF.png
Affichages : 291
Taille : 27,0 Ko

  2. #2
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 132
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 132
    Par défaut
    Nous fournir les messages d'erreur serait un plus, parce que là,

  3. #3
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 236
    Par défaut
    hello,
    avec le code suivant sous windows 10, Lazarus 1.8.2 , le fichier fpc - avec des blancs.ssx (avec 1 enregistrement) dans mes documents, je n'ai pas d'erreur :
    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
    {$mode objfpc}
    {$h+}
    program testfix;
     
    uses DB,sdfdata,sysutils,lazfileutils;
     
    Procedure Dotest;
     
    Var
      I,Count : Integer;
     
    begin
      With TFixedFormatDataSet.Create(Nil) do
        try
          FileMustExist := False;
          FileName := AppendPathDelim(GetUserDir + 'mes Documents\') + 'fpc - avec des blancs.ssx';
          Schema.Add('First Name=15');
          Schema.Add('Last Name=15');
          Schema.Add('Email=20');
          Open;
          Count:=0;
          Try
            While Not EOF do
              begin
              Inc(Count);
              Writeln('Record : ',Count);
              For I:=0 to FieldCount-1 do
                Writeln(Fields[i].FieldName,' : ',Fields[i].AsString);
              Writeln('-------------------------------')  ;
              Next;
              end;
          Finally
            Close;
          end;
        finally
          free;
        end;
    end;
     
    begin
      DoTest;
    end.
    Record : 1
    First Name : Piet
    Last Name : Pompies
    Email : piet@pompi
    -------------------------------
    Ami calmant, J.P (sans T)

  4. #4
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Février 2013
    Messages : 70
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Nous fournir les messages d'erreur serait un plus, parce que là,
    Voici les messages d'erreurs. Le fichier se trouve dans le même répertoire que l'exécutable, mais il n'est pas détecté. Je comprends le message, ce que je ne comprends pas, c'est pourquoi le fichier disponible n'est pas ouvert.


    Nom : Test Fichier TRF Message Erreur.png
Affichages : 267
Taille : 16,1 Ko

  5. #5
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Février 2013
    Messages : 70
    Par défaut
    J'ai réduit le code à sa plus simple expression et il est toujours aussi fautif. Les champs ont été définis dans l'IDE. z.ssx existe et s'ouvre facilement dans notepad. Une copie placée dans e:\ s'ouvre sans problème.

    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
    50
     
    unit Unit1;
     
    {$mode objfpc}{$H+}
     
    interface
     
    uses
      Classes, SysUtils, SdfData, db, FileUtil, Forms, Controls, Graphics, Dialogs,
      DBGrids, StdCtrls, lazfileutils;
     
    type
     
      { TForm1 }
     
      TForm1 = class(TForm)
        Button1: TButton;
        DataSource1: TDataSource;
        DBGrid1: TDBGrid;
        FixedFormatDataSet1: TFixedFormatDataSet;
        procedure Button1Click(Sender: TObject);
      private
     
      public
     
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.lfm}
     
    { TForm1 }
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
       FixedFormatDataSet1.FileName:=AppendPathDelim(GetUserDir + 'mes Documents\') + 'z.ssx';
       TRY
          FixedFormatDataSet1.Open;
     
       except
         On E: Exception DO
            ShowMessage(E.Message);
     
       end;
    end;
     
    end.
    Images attachées Images attachées  

  6. #6
    Membre chevronné

    Homme Profil pro
    Autre
    Inscrit en
    Novembre 2015
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Novembre 2015
    Messages : 145
    Par défaut
    Citation Envoyé par Pierre le Grand Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      FixedFormatDataSet1.FileName:=AppendPathDelim(GetUserDir + 'mes Documents\') + 'z.ssx';
    Essayez plutôt avec:
    Enfin, avec une version 'récente' de Windows (pas sur Windows XP, par exemple).

  7. #7
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Février 2013
    Messages : 70
    Par défaut
    J'ai fini par comprendre, il y a deux problèmes dont un seul concerne Lazarus. Le résultat de la fonction GetUserDir est invalide: il donne C: comme disque, mais le vrai disque devrait être E:. De plus, le vrai répertoire est e:\user, pas c:\Users, il y a un s de trop. Finalement, la machine utilise la version anglaise de Windows et le nom du répertoire est My Documents.

    Avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NomDuFichier:='E:\user\Travail\My Documents\z.ssx';
    tout fonctionne normalement.

    Avec la prolifération des SSD, les ordinateurs qui réservent le SSD pour les logiciels et qui mettent les utilisateurs sur un autre disque seront de plus en plus fréquents. Le bogue dans GetUserDir est donc gênant. Je suppose que c'est un problème similaire qui empêche l'ouverture du fichier situé dans le même répertoire que le fichier exécutable.

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

Discussions similaires

  1. Problème avec la propriété Filename de mon controle MediaPlayer
    Par dlefebvre dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 22/08/2013, 22h10
  2. Problème avec : MyProc.StartInfo.FileName
    Par Freud44 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 19/10/2009, 15h29
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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