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

Bases de données Delphi Discussion :

Base paradox en lecture seule ?


Sujet :

Bases de données Delphi

  1. #1
    Membre actif Avatar de [Silk]
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2005
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2005
    Messages : 198
    Points : 201
    Points
    201
    Par défaut Base paradox en lecture seule ?
    Salut,
    j'ai une BDD paradox dans mon appli controlée avec un Tquery, un TDataSource et un TDBGrid.
    J'arrive à ouvrir la table normalement mais je ne peux pas la modifier et je ne sais pas du tout d'où ça peut venir.
    Par exemple avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    With FQuery do
     begin
       Edit;
       FieldByName('Date').Value := aDate;
       FieldByName('Type').Value := OperationType;
       FieldByName('Description').Value := Description;
       [...]
       Post;
     end;
    Delphi me renvoie l'erreur :
    Query: Impossible d'effectuer cette opération sur un ensemble de données fermé
    Pourtant toutes les propriétés possible de lecture seule sont à false, il reste quand meme "Fquery.CanModify" qui est à false mais qui n'est pas modifiable
    J'ai meme vérifié si dans windows mon fichier *.db n'était pas en lecture seule.

    Si j'utilise
    j'obtient ça :
    Query: Impossible de modifier un ensemble de données en lecture seule.

    La seule solution que j'ai trouvée pour l'instant est d'utiliser le SQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    With FQuery do
    begin
      SQL.Clear;
      SQL.Add('INSERT INTO donnees');
      SQL.Add('VALUES (null, null, null, null)');
      ExecSQL;
    end;
    Les valeurs null sont là juste pour tester.
    Là pas de bug mais je ne vois pas comment je peut faire passer mes paramètres correctement en sachant que j'ai entre autres une Date et un type monétaire (currency).

    Si vous avez la moindre idée ou suggestion je prend.
    Silk

  2. #2
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    As tu bien ouvert (Open) ta requete FQuery ?
    Quel est la requete que tu as dans FQuery ?
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  3. #3
    Membre actif Avatar de [Silk]
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2005
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2005
    Messages : 198
    Points : 201
    Points
    201
    Par défaut
    As tu bien ouvert (Open) ta requete FQuery ?
    Quel est la requete que tu as dans FQuery ?
    Oui je l'ouvre au chargement de la table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    [...]
     With FQuery do
              begin
                Active := false;
                Close;
                DatabaseName := FDirectory;
                SQL.Clear;
                SQL.Add('SELECT * FROM donnees.db');
                Open;
                Active := true;
              end;
    Silk

  4. #4
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut,

    A priori ton query est fermé au moment du Edit.
    Tu peux vérifier cet état juste avant le Edit en ajoutant:

    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
     
    With FQuery do
     begin
       if State = dsInactive then
       begin
         ShowMessage('FQuery fermé !');
         Exit;
       end;
       Edit;
       FieldByName('Date').Value := aDate;
       FieldByName('Type').Value := OperationType;
       FieldByName('Description').Value := Description;
       [...]
       Post;
     end;
    @+

  5. #5
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par [Silk]
    [...]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     With FQuery do
              begin
                Active := false;
                Close;
                DatabaseName := FDirectory;
                SQL.Clear;
                SQL.Add('SELECT * FROM donnees.db');
                Open;
                Active := true;
              end;
    On voit que t'as vraiement envi de fermer et d'ouvrir ta requete

    Pas besoin de le faire deux fois.

    Active := False; = Close
    Active := True; = Open
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 265
    Points : 290
    Points
    290
    Par défaut
    Salut,

    La propriété RequestLive du TQuery est à True ?

    a+

  7. #7
    Membre actif Avatar de [Silk]
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2005
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2005
    Messages : 198
    Points : 201
    Points
    201
    Par défaut
    Citation Envoyé par Malatar
    On voit que t'as vraiement envi de fermer et d'ouvrir ta requete

    Pas besoin de le faire deux fois.

    Active := False; = Close
    Active := True; = Open
    ben je sais pas moi quand je met que active := false et active := true j'ai une violation d'accès avec "mémoire insuffisante pour cette opération...

    Citation Envoyé par Zatoobux
    La propriété RequestLive du TQuery est à True ?
    non elle est à False.
    mais je viens de tester en la mettant à true et sa change strictement rien.
    Silk

  8. #8
    Membre actif Avatar de [Silk]
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2005
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2005
    Messages : 198
    Points : 201
    Points
    201
    Par défaut
    euh désolé Claudius j'ai zappé ton message...
    Bon sinon j'ai testé pour voir si mon Query est fermé, et c'est pas le cas.

    Malatar -> En fait tu avais raison pour le active et le Close/Open c'est juste mon IDE de delphi qui a fait des siennes
    J'ai relancé et sa marche nickel.
    Silk

  9. #9
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    744
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 744
    Points : 500
    Points
    500
    Par défaut
    Salut ,
    j'en suis presque au même point que toi !

    sauf que mon message d'erreur survient lors du "TQuery.append" pour ajouter un enregistrement !

    Et la propriéte d'edition est toujour à "CanMofidy=false" , je n'arrive pas non plus a la passer a true. Je cherche aussi !!

    a++
    Bye et bon code...

    Ce n'est pas tant l'aide de nos amis qui nous aide , mais notre confiance dans cette aide .

  10. #10
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    744
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 744
    Points : 500
    Points
    500
    Par défaut
    Une voie ...
    Mon Tquery passe en readonly si dans ma requette j'utilise un " Order By "

    cas ou je suis en readonly.
    SQL.Text:='select * from StockSav.db Order By SerieElement';

    cas ou j'y suis pas et que çà marche.
    SQL.Text:='select * from StockSav.db';

    un post traite le sujet , mais je ne l'ai pas encore mis en oeuvre ( voir le TUpdateSql )
    a++
    Bye et bon code...

    Ce n'est pas tant l'aide de nos amis qui nous aide , mais notre confiance dans cette aide .

  11. #11
    Membre actif Avatar de [Silk]
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2005
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2005
    Messages : 198
    Points : 201
    Points
    201
    Par défaut
    Citation Envoyé par petitcoucou31
    j'en suis presque au même point que toi !
    sa fait du bien de savoir qu'on est pas seul !

    de mon coté, j'ai pareil que toi quand j'utilise un simple "SELECT * FROM donnees.db" sa marche nickel mais dès que je veux utiliser une fonction du Query du genre Edit, Append, etc : message d'erreur me disant que la table et en lecture seule

    Citation Envoyé par petitcoucou31
    un post traite le sujet , mais je ne l'ai pas encore mis en oeuvre ( voir le TUpdateSql )
    je vais aller fouiner pour voir si on peut trouver des choses interressantes.
    Silk

  12. #12
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par Aide Delphi

    Pour obtenir un ensemble de résultats que l'utilisateur puisse éditer dans des contrôles orientés données, définissez la propriété RequestLive d'un composant requête à True. Définir RequestLive à True ne garantit pas un ensemble de résultats dynamique, mais le BDE essaie d'honorer la requête chaque fois que possible. Il existe quelques restrictions sur les requêtes d'ensemble de résultats dynamiques, selon que la requête utilise l'analyseur SQL local ou l'analyseur SQL d'un serveur.
    • Les requêtes dans lesquelles les noms des tables sont précédés d'un alias de base de données BDE (comme les requêtes hétérogènes) et les requêtes exécutées sur Paradox ou dBASE sont analysées par le BDE en utilisant le SQL local. Quand une requête utilise l'analyseur SQL local, le BDE offre une gestion étendue des ensembles de résultats dynamiques et modifiables, aussi bien dans les requêtes monotables que multitables. Lors de l'utilisation du SQL local, un ensemble de résultats dynamique d'une requête sur une vue ou une table unique est renvoyé si la requête ne contient aucun des éléments suivants :

      • DISTINCT dans la clause SELECT
      • Jointures (interne, externe ou UNION)
      • Fonctions d'agrégat avec ou sans clauses GROUP BY ou HAVING
      • Vues ou tables de base qui ne peuvent pas être mises à jour
      • Sous-requêtes
      • Clauses ORDER BY non basées sur un index

    • Les requêtes sur un serveur de base de données distant sont analysées par le serveur. Si la propriété RequestLive a pour valeur True, l'instruction SQL doit rester dans les standards Local SQL et se conformer de plus à toute restriction imposée par le serveur, car le BDE en a besoin pour communiquer les modifications de données à la table. Un ensemble de résultats dynamique d'une requête sur une vue ou une table unique est renvoyé si la requête ne contient aucun des éléments suivants :

      • Clause DISTINCT dans l'instruction SELECT
      • Fonctions d'agrégat avec ou sans clauses GROUP BY ou HAVING
      • Références à plusieurs tables de base ou vues modifiables (jointures)
      • Sous-requêtes qui référencent la table dans la clause FROM ou d'autres tables
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  13. #13
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 107
    Points : 115
    Points
    115
    Par défaut
    Il sufis de Mêtre une propriété du composant Tquery à True qui se charge de rendre votre query en Mode lecture et écriture
    Je me souviens pas vraimons du nom de cette Propriété mais sais pas compliquer de coniatre sa il sufis de selectioné votre Query Puis le L'inspecteur d'objet il vous affiche tous ces propriété il se trouve au milieu je croie de toutes les façons vous regarder les propriété possèdant la valeur True et false puis vous appuiez sur F1 dans l'explication vous trouverer que la propriété ce charge de rendre l'objet en mode lécture et écriture

  14. #14
    Membre actif
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 265
    Points : 290
    Points
    290
    Par défaut
    Oui ProgD, c'est la proriété TQuery.RequestLive.

    Mais cela n'aura aucun effet si les conditions citées par Malatar ne sont pas remplies.

    a+

  15. #15
    Membre actif Avatar de [Silk]
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2005
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2005
    Messages : 198
    Points : 201
    Points
    201
    Par défaut
    Salut,
    j'ai enfin trouvé la solution à mon problème !
    avant de mettre :
    il faut mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (State <> dsInsert) then Exit;
    c'est tout bête mais au moins sa marche
    Silk

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

Discussions similaires

  1. [Débutant] Problème à l'insertion sur base donné Access | Lecture Seule
    Par megibson dans le forum Windows Forms
    Réponses: 0
    Dernier message: 22/02/2014, 23h37
  2. Base SQLite en lecture seule comme ressource
    Par RaphAstronome dans le forum Android
    Réponses: 1
    Dernier message: 01/11/2011, 11h59
  3. [Ouvrir base de données] Lecture seule
    Par Zartak dans le forum VBA Access
    Réponses: 2
    Dernier message: 10/05/2007, 11h36
  4. Base access mode lecture seule
    Par lyndapr dans le forum Access
    Réponses: 1
    Dernier message: 03/08/2006, 15h18
  5. Réponses: 3
    Dernier message: 30/06/2004, 11h09

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