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 :

problème de mise à jours d'une BD


Sujet :

Bases de données Delphi

  1. #1
    Membre régulier
    Inscrit en
    Juillet 2005
    Messages
    478
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juillet 2005
    Messages : 478
    Points : 89
    Points
    89
    Par défaut problème de mise à jours d'une BD
    salut
    je me connecte à une base distante mais lors du lancement de quelques form il y'a le message suivant
    l'opération doit utiliser une requête qui peut être mise à jour.
    surtout dans les form ou il y'a un calcul au lancement de la form,
    exemple: une form ou je dois faire un calcul au lancement de la page dans OnActivate, il y'a le code suivant:

    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
     
    var
      dif:integer;
      naiss:tdatetime;
      ans,mois,jours,ans1,mois1,jours1:word;
      begin
     
      debut.Dtailsagents1.Enabled:=false;
     
     
    combobox1.Text:='';
     
     
      dif:=0;
      decodedate(now,ans,mois,jours);
     
      adotableinfo.First;
      while not adotableinfo.EOF do
      begin
      naiss:=adotableinfo.Fields[13].asdatetime;
      decodedate(naiss,ans1,mois1,jours1);
      if ((mois=mois1)and(jours>=jours1))or(mois>mois1) then
      dif:=ans-ans1 ;
     
      if ((mois=mois1)and(jours<jours1))or(mois<mois1)then
      dif:= (ans-ans1)-1;
     
      if naiss=0 then
      dif:=0;
     
      adotableinfo.Edit;
      adotableinfo.fields[12].asinteger:=dif;
      adotableinfo.Post;
      adotableinfo.next;
      end;

    mais toujours il y'a se message de requête qui peut être mise à jour, je ne sais pas ou le problème dans mon code même si j'ajoute adotableinfo.refresh rien ne se passe toujours même message ou il me dit que la base est en lecture seule
    merci

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 457
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 457
    Points : 24 870
    Points
    24 870
    Par défaut
    ADO sur ? Oracle ? Access ? SQL Serveur ? ...

    Sinon, peut-être que remplacer cette boucle par un simple UPDATE ça serait plus efficace, plus rapide, et éviterait les messages ADO toujours autant incompréhensible !

    ll faut se rendre compte que si il y a deux ouvertures de fenêtres simultanés sur deux ordi différents connectés sur la base, ils vont les deux effectuer ce traitement lourdissime ... c'est peu prudent, surtout que l'un peut bloquer l'autre selon le niveau de lock !

    Enfin, Fields[13], Fields[12], c'est pas beau, utilise des constantes pour définir les colonnes cela rendrait le code plus lisible ou utilise FieldByName (c'est à peine plus lent disons une nano-seconde ...) qui permet d'utiliser le nom de colonne, encore une fois pour la lisibilité, ... je plains celui qui doit maintenir ce code, je plains encore plus celui qui lui succédera !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Points : 1 181
    Points
    1 181
    Par défaut
    Déjà verrouille les contrôles orientés donnée rattaché à ton query car non seulement tu parcours mais update en même temps donc je te suggère d'utiliser Beginupdate au debut du traitement et EndUpdate à la fin du parcours.
    Pense aussi a ce que Shaill t'as suggèrer.
    On progresse .....

  4. #4
    Membre régulier
    Inscrit en
    Juillet 2005
    Messages
    478
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juillet 2005
    Messages : 478
    Points : 89
    Points
    89
    Par défaut
    bonjour
    j'utilise ADOConnection dans une datamodule et des adotables dans les forms, ma base est en format mdb (access), comment alors éliminer ces messages par le changement de la boucle avec un UPDATE.
    merci

  5. #5
    Membre régulier
    Inscrit en
    Juillet 2005
    Messages
    478
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juillet 2005
    Messages : 478
    Points : 89
    Points
    89
    Par défaut
    salut
    je viens de régler le problème, c'est au niveau de la propriété cursorlocation du adoconnection je l'ai mis à cluseserver, au niveau des datatables cluseclient, cursor type à ctstatic et lock type à itbatchoptimistic.
    mais le problème ici c'est que si je fais des modification ou j'ajoute des enregistrement les données ne seront pas sauvegarder, je ne sais pas comment régler sa même si j'ouvre la base .mdb je ne trouve pas les modification ni les enregistrements ajoutés.
    SVP je suis bien coincé et je ne trouve pas la solution

  6. #6
    Membre régulier
    Inscrit en
    Juillet 2005
    Messages
    478
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juillet 2005
    Messages : 478
    Points : 89
    Points
    89
    Par défaut
    bonjour
    svp y'a t'il une solution pour mon problème, j'attends vos réponses
    merci

  7. #7
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 457
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 457
    Points : 24 870
    Points
    24 870
    Par défaut
    Si on avait une réponse, on l'a donnerait, inutile de poster pour réclamer !

    As tu plusieurs TADOTable ouvert sur la même table ?
    As-tu envisagé un SQL nettement plus performant et plus fiable ?
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  8. #8
    Membre régulier
    Inscrit en
    Juillet 2005
    Messages
    478
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juillet 2005
    Messages : 478
    Points : 89
    Points
    89
    Par défaut
    je m'excuse, car je veux finir mon application le plutôt possible.
    message que je l'ai posté dans une autre discussion:
    dans une adotable (ou il y'a une relation maitre/details), lorsque je change la propriété cursorlocation à cluseserver et lock type à itpessimistic, j'obtiens le message d'erreur suivant:
    Citation:
    le fournisseur actuel ne prend pas en charge l'interface nécessaire pour le tri ou le filtrage
    SVP comment régler ca
    bon, j'ai beaucoup de adotable ouvert dans les form, mais au niveau sql je ne connais rien c'est sa mon problème, mon problème maintenant est comme j'ai expliquer la haut

  9. #9
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 457
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 457
    Points : 24 870
    Points
    24 870
    Par défaut
    Beaucoup de ADOTable ouvert sur la table Info ?
    Il est possible que les différentes instances ne partagent pas les mêmes données (un Refresh serait nécessaire) et donc le dernier qui modifie écrase ce qu'à fait la boucle ! ...

    Tu devrais n'avoir qu'un seul ADOTable par Table (un DataModule pour les regrouper), ou alors tu pars dans une aventure de conflit permanent, ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  10. #10
    Membre régulier
    Inscrit en
    Juillet 2005
    Messages
    478
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juillet 2005
    Messages : 478
    Points : 89
    Points
    89
    Par défaut
    bonjour
    effectivement je n'ai qu'un seul adoconnection dans un data module, mais plusieurs adotables dans les form, j'ai changé les propriété de quelques adotables en CLUSESERVER,CTkey et ITPessimistic, la je peux modifier et les donnés sont enregistré mais je n'arrive plus à changé les propriétés des adotables qui ont des relation maitres/détails il me donne se message
    le fournisseur actuel ne prend pas en charge l'interface nécessaire pour le tri ou le filtrage
    c'est à dire que maintenant mon problème c'est avec les tables qui ont des relations maitre/détails

  11. #11
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Points : 1 181
    Points
    1 181
    Par défaut
    C'est pour ça que j'aimes pas trop utiliser les controles oriéntés données.
    Je préfère quand j'ai le choix
    - utiliser des controles standard,
    - SQL Select pour charger les données et affectation vers les controles
    - SQL Insert/Update pour la sauvegarde dans la base.
    Comme ça mes transactions sont le plus courts possible.

    Pour dj_techno, essaie de voir s'il n'y a pas d'autres requêtes qui manipule la table incriminé (Table Info).

    Courage
    On progresse .....

  12. #12
    Membre régulier
    Inscrit en
    Juillet 2005
    Messages
    478
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juillet 2005
    Messages : 478
    Points : 89
    Points
    89
    Par défaut
    salut
    mon probléme, c'est que je dois finir mon application tel qu'elle est (contrainte du temps), donc le probléme qui se pose au niveau de l'application c'est la manipulation des curseurs, car comme j'ai fait la haut (changement des curseur et lock) tout fonctionne bien, mais au niveau des tables ou il y'a des relations maitre/détail la je ne peux pas changer comme les autres, est ce qu'il y'a une solution ou je peux le faire en conservant les relations?

  13. #13
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Salut;

    je dis ça d'après ta dernière réponse :

    mais au niveau des tables ou il y'a des relations maitre/détail la je ne peux pas changer comme les autres, est ce qu'il y'a une solution ou je peux le faire en conservant les relations?
    Pourquoi conserver la relation maître détails lors d'une mise à jour. Je crois que tu as la possibilité de faire ta mise à jour en trois temps :

    - détruire la relation au niveau du BeforePost ou être évènement correspondant;
    - faire la modification ou la mise à jour;
    - rétablir la relation au niveau du BeforePost ou être évènement correspondant.

    Bonne chance.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  14. #14
    Membre régulier
    Inscrit en
    Juillet 2005
    Messages
    478
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juillet 2005
    Messages : 478
    Points : 89
    Points
    89
    Par défaut
    salut
    merci, je vais essayé cette idée
    merci

Discussions similaires

  1. [A-03]Problème de mise à jour d'une liste déroulante
    Par mattvin dans le forum VBA Access
    Réponses: 19
    Dernier message: 05/03/2009, 09h38
  2. Problème de mise à jour d'une liste déroulante
    Par colgeo dans le forum VBA Access
    Réponses: 2
    Dernier message: 03/03/2009, 08h47
  3. Réponses: 2
    Dernier message: 14/05/2007, 10h45
  4. Problème de mise à jour d'une variable
    Par Claire07 dans le forum Access
    Réponses: 2
    Dernier message: 19/06/2006, 21h40
  5. [MySQL] Problème de mise à jour d'une table
    Par SnickeursMan dans le forum PHP & Base de données
    Réponses: 18
    Dernier message: 17/01/2006, 11h39

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