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 :

[Delphi 10.2.3 - Win32] Erreur BD SqLite


Sujet :

Delphi

  1. #1
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 345
    Points : 3 123
    Points
    3 123
    Par défaut [Delphi 10.2.3 - Win32] Erreur BD SqLite
    Bonjour,

    j'ai voulu m'inspirer de ce tutoriel pour ma première base SqLite :

    Tutoriel SqLite

    J'ai suivi le tuto, je me connecte bien, mais à l’exécution de la requête j'ai un message d'erreur : Exception TDBXError no such table : Employee

    pourtant dans le chemin d'accès de connexion j'ai bien le fichier Employees.s3db ?

    A+
    Charly

  2. #2
    Membre éprouvé
    Homme Profil pro
    Chef de projets retraité
    Inscrit en
    Juillet 2011
    Messages
    420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Chef de projets retraité
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2011
    Messages : 420
    Points : 1 102
    Points
    1 102
    Par défaut
    Bonjour,

    As tu une table Employee dans la base de données Employees.s3db ?

    Le message laisse penser que non.

    Cordialement

  3. #3
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 345
    Points : 3 123
    Points
    3 123
    Par défaut
    Bonjour et merci pour ta réponse,

    je ne sais pas, c'est un exemple fourni par embarcadero. Je pense avoir suivi exactement l'exemple donné sur le lien.

    Comment ouvrir cette table ?

    Voici mon code :

    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    unit Main;
     
    interface
     
    uses
      Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
      Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DbxSqlite, Data.FMTBcd, Data.DB,
      Data.SqlExpr, Vcl.StdCtrls;
     
    type
      TF_Main = class(TForm)
        ExecuteButton: TButton;
        ConnectButton: TButton;
        SQLConnection1: TSQLConnection;
        OutputMemo: TMemo;
        SQLQuery1: TSQLQuery;
        Label1: TLabel;
        procedure ConnectButtonClick(Sender: TObject);
        procedure ExecuteButtonClick(Sender: TObject);
        procedure ShowSelectResults();
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      F_Main: TF_Main;
     
    implementation
     
    {$R *.dfm}
     
    procedure TF_Main.ConnectButtonClick(Sender: TObject);
    begin
      SQLConnection1.Params.Add('C:\Users\Public\Documents\Embarcadero\Studio\19.0\Samples\Data');
      try
        // Establish the connection.
        SQLConnection1.Connected := true;
        executeButton.Enabled := true;
        outputMemo.Text := 'Connection established!';
      except
        on E: EDatabaseError do
          ShowMessage('Exception raised with message' + E.Message);
      end;
     
    end;
     
    procedure TF_Main.ExecuteButtonClick(Sender: TObject);
    var
      query: String;
    begin
      outputMemo.ClearSelection;
      // A random query
      query := 'SELECT * FROM Employee;';
      try
      // Assign the query to the object SQLQuery1.
        SQLQuery1.SQL.Text := query;
        SQLQuery1.Active := true;
      except
        on E: Exception do
          outputMemo.Text := 'Exception raised with message: ' + E.Message;
      end;
      // Show the results of the query in a TMemo control.
      ShowSelectResults();
    end;
     
    procedure TF_Main.ShowSelectResults();
    var
      names: TStringList;
      i: Integer;
      currentField: TField;
      currentLine: string;
    begin
      if not SQLQuery1.IsEmpty then
      begin
        SQLQuery1.First;
        names := TStringList.Create;
        try
          SQLQuery1.GetFieldNames(names);
          while not SQLQuery1.Eof do
          begin
            currentLine := '';
            for i := 0 to names.Count - 1 do
            begin
              currentField := SQLQuery1.FieldByName(names[i]);
              currentLine := currentLine + ' ' + currentField.AsString;
            end;
            outputMemo.Lines.Add(currentLine);
            SQLQuery1.Next;
          end;
        finally
          names.Free;
        end;
      end;
    end;
     
    end.
    Ce que je trouve bizarre, c'est qu'il n'y a pas Employees.s3db dans le code, il n'y a que le Path. Faut il le mettre dans les propriété des controls DBX ?

    A+
    Charly

  4. #4
    Membre confirmé Avatar de Galet
    Homme Profil pro
    Consultant/Programmeur Robotique industrielle
    Inscrit en
    Mars 2010
    Messages
    323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant/Programmeur Robotique industrielle

    Informations forums :
    Inscription : Mars 2010
    Messages : 323
    Points : 484
    Points
    484
    Par défaut
    Bonjour,

    En étude sur les bases de données, j'ai fais le même test (Delphi Tokyo)...et le même constat.
    Tu trouveras une requête dans le code, qui interroge la table Employes. cette requête est en échec si la table n'est pas trouvée.

    J'ai aussi recherché le meilleur outil pour créer une nouvelle base SqLite. DBBrowser semble fonctionner. Le gestionnaire de données de Delphi ne fonctionne pas parfaitement (Après recherche, confirmation sur Developpez), à cause des limitation de SqLite.
    J'ai trouvé de nombreux tuto mais pas encore une solution complète...(
    )
    Firedac ou pas...

    Je recherche encore la meilleure solution pour la gestion d'une petite BD en local
    A suivre,
    Windows 10 / Delphi Tokyo
    "Les choses ne changent pas. Change ta façon de les voir, cela suffit" Lao Tseu

  5. #5
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 345
    Points : 3 123
    Points
    3 123
    Par défaut
    J'ai installé DBBrowser. La base Employees.s3db contient bien la table Employee (avec ID, Name, Departement et Seniority)

    Je ne comprends pas pourquoi cela ne fonctionne pas.

    A+
    Charly

  6. #6
    Membre éprouvé
    Homme Profil pro
    Chef de projets retraité
    Inscrit en
    Juillet 2011
    Messages
    420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Chef de projets retraité
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2011
    Messages : 420
    Points : 1 102
    Points
    1 102
    Par défaut
    (Re)Bonjour

    Ce que dit le tutoriel que tu cites
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQLConnection1.Params.Add('Database=full_path_to_your_database_file');
    Ce que tu écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQLConnection1.Params.Add('C:\Users\Public\Documents\Embarcadero\Studio\19.0\Samples\Data');
    Ce que j'aurais écrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQLConnection1.Params.Add('Database=C:\Utilisateurs\Public\Documents\Embarcadero\Studio\19.0\Samples\Data\Employees.s3db');
    Attention cependant au chemin d'accès (C:\Utilisateurs\Public\Documents\Embarcadero\Studio\19.0\Samples\Data) qui peut varier selon la variable d'environnement PUBLIC

    Cordialement

  7. #7
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 345
    Points : 3 123
    Points
    3 123
    Par défaut
    Oui, tu as raison. J'ai vérifié le chemin et mis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQLConnection1.Params.Add('Database=C:\Users\Public\Documents\Embarcadero\Studio\19.0\Samples\Data\Employees.s3db');
    la connexion est Ok, mais l'exécution de la requête donne une exception EExternelException : Exception externe C06D00F7 ?

    A+
    Charly

  8. #8
    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 299
    Points
    11 299
    Billets dans le blog
    6
    Par défaut
    Ça n'a pê rien à voir, mais je me rappelle (même environnement ?) avoir eu des problèmes avec un IsEmpty erroné...
    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 !

  9. #9
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 345
    Points : 3 123
    Points
    3 123
    Par défaut
    Bonjour Tourlourou,

    c'est quoi un IsEmpty (pour le moment c'est mon cerveau qui est vide

  10. #10
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    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 042
    Points : 40 952
    Points
    40 952
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    ma question serait "pourquoi DBExpress plutôt que Firedac ?"
    A mon avis, le tutoriel de la doc est resté figé sur la version XE3

    Je dois avouer que, n'aimant pas DBExpress, je n'ai testé DBExpress avec SQLite ! La vidéo d'Alister Christie fourni par Galet ne me donne vraiment pas envie de tester (ai-je bien vu 5 composants, sans parler de l'obligation de déclarer les champs etc.) là où avec Firedac un FDConnexion, FDTable et un Datasource suffisent ?

    Seul avantage du DBBrowser la création de la base et de la table au moment du design. Passant directement par un GUI dédié (SQLite studio) je n'ai jamais eu besoin de créer des tables comme ça, à la volée c'est une nouveauté pour moi ! Je n'ai jamais testé donc ce genre de fonctionnalité

    NB tu as la même connexion à la base de données exemple avec les connecteurs firedac
    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

  11. #11
    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 299
    Points
    11 299
    Billets dans le blog
    6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if not SQLQuery1.IsEmpty then
    J'ai un vieux souvenir de valeur erronée ; du coup, ça pourrait adresser un résultat vide, d'où EAV. Mais c'était pê sur un autre objet, et dans un autre environnement...
    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 !

  12. #12
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 345
    Points : 3 123
    Points
    3 123
    Par défaut
    Merci SergioMaster,

    j'ai fait un autre exemple avec FireDac et la base Customers.db. Cela fonctionne bien et j'affiche les données dans un DBGrid.

    Je vais donc continuer à apprendre avec FireDac.

    Petite question subsidiaire : FireDac et Firebird c'est la même chose ?

    A+
    Charly

    PS : dans le tuto que j'ai utilisé il y a :
    - un qlite_democonnection
    - un customersTable
    - un DataSetProvider
    - un ClientDataSet
    - et un DataSource

    c'est différent de tes 3 controls ?

  13. #13
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    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 042
    Points : 40 952
    Points
    40 952
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par Charly910 Voir le message
    Je vais donc continuer à apprendre avec FireDac.
    de mon point de vue un bon choix, très BDE like et propose de nombreuses fonctionnalités intéressantes

    PS : dans le tuto que j'ai utilisé il y a :
    - un qlite_democonnection
    - un customersTable
    - un DataSetProvider
    - un ClientDataSet
    - et un DataSource

    c'est différent de tes 3 controls ?
    je t'ai indiqué que un FDConnection, un FDTable et un DataSource suffisent, cela étant dès que tu veux avancer un peu, un FDQuery+un FDUpdateSQL c'est mieux que un FDTable
    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

  14. #14
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 345
    Points : 3 123
    Points
    3 123
    Par défaut
    Merci je vais déjà essayer au plus simple

    A+
    Charly

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

Discussions similaires

  1. erreur requete SQlite
    Par viking1404 dans le forum SGBD
    Réponses: 3
    Dernier message: 03/05/2009, 23h39
  2. [DELPHI 7][DLL] Message d'erreur s'il n'y a pas de DLL
    Par Stef.web dans le forum Delphi
    Réponses: 9
    Dernier message: 01/05/2007, 17h55
  3. Réponses: 1
    Dernier message: 29/03/2006, 10h39
  4. [PHP5 APACH2 WIN32]Erreurs sur "session_start();"
    Par Jean_Benoit dans le forum Langage
    Réponses: 3
    Dernier message: 17/02/2006, 14h36
  5. Delphi 2006 - CE.net - Win32
    Par p-f.philippe dans le forum Delphi .NET
    Réponses: 6
    Dernier message: 10/01/2006, 18h57

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