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 :

probleme avec l'enregistrement des donnée


Sujet :

Bases de données Delphi

  1. #1
    Membre régulier
    Homme Profil pro
    agent de fisc(les impots)
    Inscrit en
    Juillet 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : agent de fisc(les impots)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 427
    Points : 111
    Points
    111
    Par défaut probleme avec l'enregistrement des donnée
    Salut
    delphi 7,interbase
    sur ma form jais 4 composant
    sqlconnection,sqldataset,datasource,clientdataset
    en utilisant le composant sqldataset jais volu insert des enregistrement appartir d'un dbgrid(DBgrid pour saisire mes donnée)
    jai ajouter un button nouveaux enregistrement voila le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    QLDataSetNoms.Insert;
    un button sauvgarder
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SQLDataSetNoms.Post;
    si je clic sur le button nouveaux un message d'erreur
    "sqldataset:impossible de modifier un enssemble de donnée en lecture seul"
    set ce que vous pouvez m'aider svp
    merci

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 549
    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 549
    Points : 25 119
    Points
    25 119
    Par défaut
    tu dois utiliser le ClientDataSet si tu en disposes pour effectuer des modifications sur un ensemble unidirectionnel en lecture seul (SQLDataSet)

    entre SQLDataSet et le DBGrid tu as le DataSource connecté sur un SQLClientDataSet (ou ClientDataSet) lui même associé un DataSetProvider qui donne l'accès au SQLDataSet ?

    En Delphi 7, le TSimpleDataSet qui regroupe le SQLDataSet, DataSetProvider et SQLClientDataset n'existe pas encore, il me semble ?

    Là, ou je travaille, on insère effectivement l'enregistrement dans un SimpleDataSet mais on ne fait jamais de Post, il ne sert que d'objet Tampon pour les DBControls, ensuite un système interne utilise ce tampon pour générer une requête SQL explicite !
    N'ayant jamais utilisé DBExpress avant, je trouve étrange de ne pas trouver d'objet équivalents au TIBUpdateSQL, n'ayant jamais aimé Edit\Post (stable et pratique en BDE, trop souvent pénible avec ADO ou DBX avec des message aussi limpide qu'un marécage)
    Ce principe de tampon puis génération ne me choque pas même si je le trouve lourd mais à l'avantage d'une maîtrise absolu des opérations sur la DB !

    d'ailleurs, selon ta version InterBase, si c'est celle fourni avec Delphi 7, utilise les composants TIBTable et TIBQuery, ils sont plus pratique !
    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 régulier
    Homme Profil pro
    agent de fisc(les impots)
    Inscrit en
    Juillet 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : agent de fisc(les impots)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 427
    Points : 111
    Points
    111
    Par défaut
    Merci bien pour toute ces explication
    mais si j'utilise Tibquery ou Tibtable je ne peut pas r'entrer mes donnee appartire du DBgrid,
    et moi je ne veux pas utiliser des edite pour saisire mes donnée

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 549
    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 549
    Points : 25 119
    Points
    25 119
    Par défaut
    Citation Envoyé par kroma23 Voir le message
    mais si j'utilise Tibquery ou Tibtable je ne peut pas r'entrer mes donnee appartire du DBgrid
    Ah bon ?
    Il me semble que UpdateObject était justement conçu pour accueillir un TIBUpdateSQL fournissant justement les SQL INSERT\UPDATE et DELETE !
    Il faudrait mieux connaître avant de te prononcer aussi radicalement, ce n'est pas parce que tu ignores une chose qu'elle n'existe pas !

    Mais c'est vrai que c'est moins pratique que le RequestLive du TQuery, perso, j'ai souvent eu la flemme en Delphi 5, j'utilisais IB6+BDE, cela fonctionnait très bien avec 20 utilisateurs simultanés (dont 1 seul provoquait plus de 1000 requêtes par minute, les autres pas plus de 1 à 5 requête/minute en moyenne)

    Pense que si tu veux profiter vraiment des performances tu TIBQuery, il faut utiliser des requêtes préparées et paramètrées, sinon les perfs ne sont pas terrible !
    Idem pour le TSQLQuery même si l'impact est moins grand et que naturellement ce composant est plus rapide car unidirectionnel et sans tampon


    Il ne me semble pas que TIBQuery pose problème avec le DBGrid !
    Je ne l'ai quasiment jamais utilisé, et encore moins fait de Edit desuss !

    Sache qu'il existe le TDBNavigator qui fourni une barre de bouton sans qu'il soit nécessaire d'écrire de code !

    Mais bon, déjà que tu n'as pas compris qu'il fallait faire Insert\Edit\Post sur le TClientDataSet et non sur le TSQLDataSet, alors le TIBUpdateSQL te semblera surement plus complexe à utiliser !

    Surtout que c'est écrit dans l'aide

    Il n'existe pas de gestion d'édition intégrée. Les données d'un ensemble de données SQL ne peuvent être éditées qu'en créant explicitement une commande SQL UPDATE ou en connectant l'ensemble de données à un ensemble de données client au moyen d'un fournisseur. Les fonctionnalités qui exigent la mémorisation dans un tampon mémoire de plusieurs enregistrements, par exemple les filtres ou les champs de référence, ne sont pas disponibles.
    Tu es semble-t-il passé par TDataSetProvider et TClientDataSet comme intermédiare au TDataSource\TDBGrid !
    Cela ne fonctionne uniquement sur une seule table sinon faut le faire à la main via BeforeUpdateRecord

    Sinon, la saisie directement dans une grille, je peux te le dire pour avoir fait des logiciels de saisie en masse, c'est très pénible pour l'utilisateur qui n'utilise QUE le clavier !
    J'ai du gérer une saisie rapide dans une TDBGrid avec PickList et CheckBox, je peux te le dire, le code est un tas de bidouille ...

    Un écran bien conçu pour la saisie rapide, c'est une série de Edit (tu peux gérer des préférences pour TabStop\TabOrder), chaque Enter ou Tab, fait passer au champ suivant, le dernier provoquant le click sur un Bouton Valider qui ajoute dans le DataSet, et automatiquement si il n'y a pas d'erreur de saisie, cela reprend au 1er Edit, et l'opérateur de saisie peut ainsi débiter un maximum de fiche comme à l'époque d'une console AS400

    Les Edit et la Grille sont dans le même écran car les sous-fenêtres implique souvent 2-3 clics totalement à bannir en mode clavier

    Evidemment, pour les Erreurs, il ne faut pas utiliser un MessageDlg standard qui pré-selectionne OK avec un Enter frénétique le message se ferme mais une version modifiée pour n'avoir aucun bouton pré-sélectionné et penser aux raccourcis clavier V pour Valider, C pour Corriger ... et évidemment un SetFocus sur l'Edit erronné, toujours guider l'utilisateur !

    Surtout lorsque la grille affiche des colonnes "calculées", par exemple un écran de saisie, ou l'on tape des numéros Patient et Medecin (issu de code barre), tu ajoute un libellé pour afficher le nom à côté de l'edit\combo pour que l'utilisateur puisse voir l'exactitude de sa frappe, mais dans la grille, le plus simple c'est de faire une jointure entre la table listing, patient, medecin pour afficher les colonnes nécessaires !

    Essaye de mettre correctement à jour une jointure avec le trio infernal TSQLDataSet\TDataSetProvider\TClientDataSet, hum ... cela revient à générer du SQL dans BeforeUpdateRecord

    Essaye de voir le TStringGrid, pour certains écrans, je l'ai utilisé pour la saisie, souvent lorsque l'affichage est une matrice (genre un PIVOT) alors que le stockage est beaucoup plus classique (soit plein de ligne, soit des jointures)
    L'utilisation du TStringGrid te poussera naturellement à générer des SQL à la main, ce qui est la meilleure solution car maîtrisée !

    PS : Relis-toi ! Tu fais plein de faute !
    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

Discussions similaires

  1. Réponses: 3
    Dernier message: 17/09/2012, 23h04
  2. Probleme avec l'acquisition des données dans un port dans le serveur
    Par soufian2290 dans le forum Serveurs (Apache, IIS,...)
    Réponses: 12
    Dernier message: 04/11/2007, 12h48
  3. enregistrer des données dans une base avec jboss jbpm
    Par paolo2002 dans le forum Wildfly/JBoss
    Réponses: 2
    Dernier message: 19/09/2007, 11h56
  4. probleme avec la conversion des données
    Par tchimou dans le forum Bases de données
    Réponses: 5
    Dernier message: 12/06/2007, 12h02
  5. Réponses: 8
    Dernier message: 05/02/2007, 13h28

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