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 :

Insérer un enregistrement dans une base .DBF


Sujet :

Bases de données Delphi

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 31
    Points : 24
    Points
    24
    Par défaut Insérer un enregistrement dans une base .DBF
    Bonjour,

    Je suis débutante et j'utilise des bases de données en dbase .dbf

    Voici mon probléme:
    quand on insére un enregistrement Table.Insert; // Insertion d'un enregistrement celui-ci n'est pas inséré entre l'enregistrement pointé et l'enregistrement précédent mais à la fin de la base comme quand on fait Table.Append; donc Table.recno est égal au numéro du dernier engeristrement;

    quand j'utilisais dbase je me positionnais sur l'enregistremet recno()=X puis en faisant insert blank un enregistrement vierge était inséré à la position X-1
    le recno() de l'engeristrement inséré prenait la valeur X et le recno() des enregistrements suivants passait à recno() + 1

    J'aimerai savoir s'il éxiste quelque chose de similaire avec Delphi.

  2. #2
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2005
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 218
    Points : 311
    Points
    311
    Par défaut
    Je ne sais pas si je vais répondre entièrement à ta question puisque je n'ai jamais manipulé de base dbase. Mais je peux déjà te préciser :

    - Le recno que tu cites ne correspond pas au recid de la base il sert à Delphi en interne pour localiser les données. Par exemple si tu executes un select sur une table ramenant tous les enregistrements ou certains enregistrements le recno commencera toujours à 1. Si tu veux le récupérér ce qui me semble assez bizarre car dans certaines bases ca n'indique pas forcémment un ordre précis mais un identifiant unique qui bouge par exemple en rechargement de données, il faut le préciser dans le select de ta requête.

    - d'autre part le composant TTable c'est pas terrible car dés que tu l'utilises tu poses une transaction sur toute la table même pour une seule mise à jour. Il vaut mieux utiliser un Query dans lequel tu précises exactement ce que tu veux ramener et modifier.

    - Sur l'updatesql clause insert tu dois pouvoir indiquer en sql un script sql d'insertion dans la propriété insertsql : 'select * from matable where id > idAInserer order by id;insert blank; insert into matable values...'. A toi de paramétrer la requête que tu as besoin, par contre pour le positionnement il faut que tu connaisses le n° d'id à insérer, ce qui n'est pas gagné.

    - Delphi ne fait que ce que tu lui indiques de faire, si tu ne communiques pas les requêtes à la base pour faire telle ou telle action il ne les fera pas à ta place. Tu peux utiliser par exemple le moniteur sql pour vérifier ce qui est exécuté.

  3. #3
    Membre averti

    Homme Profil pro
    ingénieur, retraité
    Inscrit en
    Février 2007
    Messages
    230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : ingénieur, retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 230
    Points : 332
    Points
    332
    Par défaut Insertion d'un enregistrement dans DBase
    Bonjour

    Pour effectuer une insertion dans une table .dbf utiliser :

    InsertRecord([tableau des valeurs des champs]);

    Cette méthode insère l'enregistrement avant la position du curseur et exécute implicitement Post.

    Il existe aussi :

    AppendRecord([tableau des valeurs des champs]);

    qui ajoute l'enreg. à la fin de la table.

    (voir la doc. de Delphi).

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 31
    Points : 24
    Points
    24
    Par défaut
    J'avais déjà essayé insertrecord comme ci-dessous pour insérer un enregistrement vide entre l'enregistrement pointé et le précédent

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure Tsaisie.BitBtn11Click(Sender: TObject);
    begin
    Table1.InsertRecord([]);
    end;
    Mais l'enregistrement vide inséré est placé à la fin
    un refresh ni change rien et si je vérifie la base en utilisant excel l'enregistrement inséré se trouve à la fin de la base

    Je ne sais pas où se situe mon erreur

  5. #5
    Membre habitué Avatar de Archibald29
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 112
    Points : 131
    Points
    131
    Par défaut Delphi + Dbase
    J'ai régulièrment travaillé avec des tables dbase, mais je ne m'étais jamais posé la question "d'insérer" un enregistrement.

    En regardant l'aide voilà ce que je trouve :
    Après un appel de la méthode Insert, une application peut permettre à l'utilisateur de saisir des données dans les champs de l'enregistrement puis expédier ces modifications à la base de données en utilisant Post (ou ApplyUpdates si le cache des mises à jour est activé). Un nouvel enregistrement inséré peut être expédié de trois manières différentes dans la base de données :

    Pour les tables indexées Paradox ou dBASE, l'enregistrement est inséré dans l'ensemble de données à une position dépendant de sa valeur d'index.
    Pour les tables non indexées Paradox ou dBASE, l'enregistrement est ajouté à la fin de l'ensemble de données.
    Pour les bases de données SQL, l'emplacement physique de l'ajout dépend de l'implémentation. Pour les tables indexées, l'index est actualisé avec les informations du nouvel enregistrement.
    Donc si je comprends bien (en quelque sorte), il n'y aurait pas moyen "d'insérer"... sauf sur table indexée, et en fonction de la valeur d'index.

    a++

  6. #6
    Membre expert
    Avatar de aityahia
    Homme Profil pro
    CIEPTAL CARS SPA
    Inscrit en
    Mars 2006
    Messages
    1 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Algérie

    Informations professionnelles :
    Activité : CIEPTAL CARS SPA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 938
    Points : 3 329
    Points
    3 329
    Par défaut
    salut
    si vous utiliser la base de donnée dbase dans but autre que pédagogique alors je vous le déconseil, pour l'ordre d'insertion il faut vérifier l'index de ta table (les enregistrement sont normalement ordoné par le champs indexé)

Discussions similaires

  1. dernier enregistrements dans une base
    Par ac/dc dans le forum Administration
    Réponses: 2
    Dernier message: 13/02/2007, 11h45
  2. Réponses: 9
    Dernier message: 18/01/2007, 14h11
  3. enregistrer dans une base de données
    Par liverbird dans le forum C++Builder
    Réponses: 33
    Dernier message: 12/07/2006, 19h50
  4. [MySQL] Enregistrer dans une base de données à partir d'une liste déroulante
    Par snakejl dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 17/05/2006, 16h32
  5. inscription via le web et enregistrement dans une base de données
    Par titoenis dans le forum Balisage (X)HTML et validation W3C
    Réponses: 11
    Dernier message: 17/05/2006, 09h20

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