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 :

Connexion MS Access [Lazarus]


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 68
    Par défaut Connexion MS Access
    Bonjour,

    Je débute en Lazarus.

    Je voudrais pouvoir connecter une base ACCESS via Lazarus
    Je suis sous Seven 64 et Lazarus 1.04
    J'ai installé le redistribuable d'access 2010.

    Sur une fiche, je dépose le composant ODBC de l'onglet SQLDB.

    Quand je veux mettre la propriété de Connected à true, j'ai le message d'erreur suivant : Source de données introuvable et nom de pilote non spécifié.

    Que doit on mettre comme nom de pilote pour une base ACCESS ?
    Ou doit on mettre le chemin de la base ?

    Merci d'avance
    Jazz77

  2. #2
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 786

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 68
    Par défaut
    Citation Envoyé par Ph. B. Voir le message
    Merci Philippe


    En fait dans le composant ODBCConnection il faut uniquement renseigner
    le propriété FileDSN avec le chemin et le nom du fichier DSN
    et mettre la propriété connected=True

    dans mon cas c'est FileDNS = C:\Lazarus\compta.dsn

    Le contenu ce mon fichier DSN est le suivant :
    [ODBC]
    DRIVER=Microsoft Access Driver (*.mdb)
    UID=admin
    UserCommitSync=Yes
    Threads=3
    SafeTransactions=0
    PageTimeout=5
    MaxScanRows=8
    MaxBufferSize=2048
    FIL=MS Access
    DriverId=25
    DefaultDir=c:\Lazarus
    DBQ=Compta.mdb
    Cependant J'ai un problème d'accent
    Aucun caractère accentué ne s'affiche...

  4. #4
    Membre émérite
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    469
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 469
    Par défaut
    Bonjour

    C'est sans doute parce que le jeu de caractères utilisé dans le fichier Access n'est pas celui qu'attend Lazarus, qui est UTF-8 par défaut.

    Donc, il faut convertir en appelant pour chaque champ chaîne de caractère une fonction de conversion. Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TFormImport.StringOnGetText(Sender: TField; var aText: string;   DisplayText: boolean);  
    begin
        aText := ISO_8859_1ToUTF8(Sender.AsString);
    end;
    Si c'est un MS-ACCESS récent, je suppose que le jeu de caractères est ISO-8859-1, sinon il faut utiliser une autre fonction de la même unité LConvEncoding.

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 68
    Par défaut
    Citation Envoyé par tintinux Voir le message
    Bonjour

    C'est sans doute parce que le jeu de caractères utilisé dans le fichier Access n'est pas celui qu'attend Lazarus, qui est UTF-8 par défaut.

    Donc, il faut convertir en appelant pour chaque champ chaîne de caractère une fonction de conversion. Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TFormImport.StringOnGetText(Sender: TField; var aText: string;   DisplayText: boolean);  
    begin
        aText := ISO_8859_1ToUTF8(Sender.AsString);
    end;
    Si c'est un MS-ACCESS récent, je suppose que le jeu de caractères est ISO-8859-1, sinon il faut utiliser une autre fonction de la même unité LConvEncoding.
    Merci tintinux

  6. #6
    Membre éprouvé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2006
    Messages : 58
    Par défaut


    j'ai passé des heures à chercher comment afficher les caractères accentués d'une base ACCESS avant de plonger dans la LCL et de trouver la fonction OnGetText

    un petit tour par ici m'aurais permis de gagner pas loin de 6h dans mes dev ...

    donc j'ai trouvé comme un grand :
    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
     
    procedure TDM.QueryGetText(Sender: TField; var aText: string; DisplayText: Boolean);
    begin
      atext := AnsiToUTF8(Sender.AsString);
    end;
     
    procedure TDM.QueryAfterOpen(DataSet: TDataSet);
    var
        count: longint;
    begin
      count := 0;
      while count<DataSet.RecordCount do begin
    //    DataSet.FieldDefs[count].Name :=AnsiToUTF8(DataSet.FieldDefs[count].Name);
        DataSet.Fields[count].OnGetText:=@DM.QueryGetText;
        inc(count);
      end;
    end;
    (Je réécris afin d'être bien clair pour tout le monde)

    Vous remarquerez en commentaire la ligne où j'essaye de transformer les noms de champs ... la manip ne fonctionne pas. Lorsque je connecte via un DataSource la requête à un TDBGrid, les têtes de colonnes ont toujours les accents ACCESS (cad des ?) !

    N'ayant rien trouvé dans les recherches google avec les mots clé 'ACCESS charset encoding' et tout un tas d'autre combinaison, ni dans le wiki de lazarus, nous devrions peut-être rajouter cette astuce et dans la faq lazarus de developpez, et dans le wiki officiel ?

    @bientôt

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

Discussions similaires

  1. [ACCESS] connexion base ACCESS sans VC++ ou BC++ ni wizard
    Par roce dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 18/03/2007, 23h13
  2. [JDBC] problème connexion à MS Access
    Par naz dans le forum JDBC
    Réponses: 7
    Dernier message: 03/10/2005, 10h06
  3. emuler des pages asp avec connexion a access
    Par laville dans le forum ASP
    Réponses: 2
    Dernier message: 01/06/2005, 18h44
  4. pb connexion asp/access
    Par cell dans le forum ASP
    Réponses: 5
    Dernier message: 21/04/2005, 17h31
  5. [ODBC] Connexion MS-Access sans DSN
    Par Chap$ dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 30/11/2004, 17h16

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