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 :

Mise à jour de données sous SQL server


Sujet :

Bases de données Delphi

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2005
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Mise à jour de données sous SQL server
    Bonjour,
    développeur amateur, j'essaie de créer une application de formulaire sous Delphi pour lire/mettre à jour une base de donnée sous sql server.
    J'ai suivi le tutoriel 'création d'une application de base de données CLX' mais bien que les données de ma base apparaisse dans la grille je n'arrive pas à les mettre à jour, c'est à dire à créer des enregistrements depuis mon application Delphi: au moment de la compilation, le message suivant apparait "SQLDataSet1:impossible de modifier un ensemble de données en lecture seule" . Un des paramètres "read only" est pourtant réglé à False".
    Me manque-t-il un composant de connection? est-ce un problème de paramétrage de l'un des composants ou le problème provient-il de droits accordés sur ma base de donnée sous Sql server?
    Je vous remercie par avance de toute aide que vous pourriez m'offrir.

  2. #2
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    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 236
    Points : 8 513
    Points
    8 513
    Par défaut
    1- Est ce que tu fais un Append/Insert ou Edit avant de faire tes modifications ?
    2- Vérifie si tu as bien les droits d'accès nécessaires
    3- L'appel à tes tables se fait via un composant TxxxTable ou TxxxQuery ?
    Si par TxxxQuery, est ce que tu fais une requete multitable ?

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2005
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Mettre à jour des données SQLserver avec Delphi
    Merci Malatar,
    je suis toujours face à mon problème de ne pouvoir que lire des infos de ma base SQLserver sans pouvoir les mettre à jour par mon formulaire Delphi.
    J'ai cherché par rapport aux pistes que tu m'as donné mais rien n'y fait;

    les accès à la base en écriture semblent ok.
    j'utilise des composants de connection dbexpress (connexion,TSQLDATASET,TDATASETPROVIDER, TCLIENTDATASET, TDATASOURCE+TDBGRID, TDBNAVIGATOR)...

    A travers un évenement "mise à jour immédiate" trouvé dans le ttutoriel "création d'une application de base de données CLX de delphi 7 puis un rafraichissement des données, le message suivant apparait:
    "ClientDataSet1: vous devez valider les modifications avant de rafraîchir les données"

    voici le code crée:

    unit MAQLM;

    interface

    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, DBXpress, DB, SqlExpr, FMTBcd, DBClient, Provider, Grids, DBGrids,
    ExtCtrls, DBCtrls, StdActns, ActnList, ImgList, Menus, StdCtrls;

    type
    TForm1 = class(TForm)
    SQLConnection1: TSQLConnection;
    SQLDataSet1: TSQLDataSet;
    DataSetProvider1: TDataSetProvider;
    ClientDataSet1: TClientDataSet;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    DBNavigator1: TDBNavigator;
    ImageList1: TImageList;
    ActionList1: TActionList;
    EditCut1: TEditCut;
    EditCopy1: TEditCopy;
    EditPaste1: TEditPaste;
    Action1: TAction;
    Action2: TAction;
    MainMenu1: TMainMenu;
    Fichier1: TMenuItem;
    Quitter1: TMenuItem;
    Edition1: TMenuItem;
    Couper1: TMenuItem;
    Copier1: TMenuItem;
    Coller1: TMenuItem;
    N1: TMenuItem;
    Misejourimmdiate1: TMenuItem;
    Button1: TButton;
    Label1: TLabel;
    Image1: TImage;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Action2Execute(Sender: TObject);
    procedure Action1Execute(Sender: TObject);
    private
    { Déclarations privées }
    public
    { Déclarations publiques }
    end;

    var
    Form1: TForm1;

    implementation

    {$R *.dfm}

    procedure TForm1.Action1Execute(Sender: TObject);
    begin
    if ClientDataSet1.State in [dsEdit, dsInsert] then ClientDataSet1.Post;
    ClientDataSet1.ApplyUpdates(-1);
    end;

    procedure TForm1.Action2Execute(Sender: TObject);
    begin
    Close;
    end;

    procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    var
    Option: TMessageButton;
    begin
    Action := caFree;
    if ClientDataSet1.State in [dsEdit, dsInsert] then
    ClientDataSet1.Post;
    if ClientDataSet1.ChangeCount> 0 then
    begin
    Option := Application.MessageBox(
    'Il y a des mises à jour en attente. Voulez-vous les écrire dans la base ?',
    'Mises à jour en attente',[smbYes, smbNo, smbCancel], smsWarning, smbYes);
    case Option of
    smbYes: ClientDataSet1.ApplyUpdates(-1);
    smbCancel: Action := caNone;
    end;
    end;
    end;

    end.


    débutant sur Delphi, j'imagine que mon problème est celui.... d'un débutant !!!

    Merci 1000 fois si vous pouvez m'expliquer comment le résoudre... à l'aise avec access, j'essaie désesperement de migrer une application professionnelle access de mon cru sur le duo Delphi-base de donnée SQLserver... et là je reste humble !

    je m'engage en retour à mettre à disposition sur ce site mon application de gestion d'analyses de laboratoire, une petite application bien pratique pour tous les manager qualité...

  4. #4
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    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 236
    Points : 8 513
    Points
    8 513
    Par défaut
    Ton TSQLDataSet tu l'utilises comment ? Connexion direct par table ou une requete ?
    Si c'est une requete, peux tu nous la montrer ?

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2005
    Messages : 8
    Points : 6
    Points
    6
    Par défaut delphi - Sqlserver: TSQLdataSet
    Bonjour,

    en fait, pour essai de connection Delphy avec une base de donnée SQLserver toute simple, j'utilise un ctQuery pour joindre une table simplissime "Table" de 2 champs/ une clé ID et un champs "Nom":
    la formule est donc:

    select * from "Table"

    Je n'ai fait que suivre à la lettre le tutoriel.

    Devais-je définir autre chose du style pour chaque champs de la table un Keyfields sur ClientDataSet1ou lookupDatadet ou autre chose?

    Manque-t-il quelque chose de fonctionnel à ce tutoriel pour mettre à jour la table depuis le formulaire delphi?

    Encore merci pour ton aide.

  6. #6
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    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 236
    Points : 8 513
    Points
    8 513
    Par défaut
    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
    unit MAQLM;
    
    interface
    
    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, DBXpress, DB, SqlExpr, FMTBcd, DBClient, Provider, Grids, DBGrids,
    ExtCtrls, DBCtrls, StdActns, ActnList, ImgList, Menus, StdCtrls;
    
    type
    TForm1 = class(TForm)
    SQLConnection1: TSQLConnection;
    SQLDataSet1: TSQLDataSet;
    DataSetProvider1: TDataSetProvider;
    ClientDataSet1: TClientDataSet;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    DBNavigator1: TDBNavigator;
    ImageList1: TImageList;
    ActionList1: TActionList;
    EditCut1: TEditCut;
    EditCopy1: TEditCopy;
    EditPaste1: TEditPaste;
    Action1: TAction;
    Action2: TAction;
    MainMenu1: TMainMenu;
    Fichier1: TMenuItem;
    Quitter1: TMenuItem;
    Edition1: TMenuItem;
    Couper1: TMenuItem;
    Copier1: TMenuItem;
    Coller1: TMenuItem;
    N1: TMenuItem;
    Misejourimmdiate1: TMenuItem;
    Button1: TButton;
    Label1: TLabel;
    Image1: TImage;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Action2Execute(Sender: TObject);
    procedure Action1Execute(Sender: TObject);
    private
    { Déclarations privées }
    public
    { Déclarations publiques }
    end;
    
    var
    Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    procedure TForm1.Action1Execute(Sender: TObject);
    begin
    if ClientDataSet1.State in [dsEdit, dsInsert] then 
      ClientDataSet1.ApplyUpdates(-1);
    // ClientDataSet1.Post; // Ca sert a rien si y a un ApplyUpdate de fait après
    end;
    
    procedure TForm1.Action2Execute(Sender: TObject);
    begin
    Close;
    end;
    
    procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    var
    Option: TMessageButton;
    begin
    Action := caFree;
    if ClientDataSet1.State in [dsEdit, dsInsert] then
    // ClientDataSet1.Post; // Ca sert a rien si y a un ApplyUpdate de fait après
    if ClientDataSet1.ChangeCount> 0 then
    begin
    Option := Application.MessageBox(
    'Il y a des mises à jour en attente. Voulez-vous les écrire dans la base ?',
    'Mises à jour en attente',[smbYes, smbNo, smbCancel], smsWarning, smbYes);
    case Option of
    smbYes: ClientDataSet1.ApplyUpdates(-1);
    smbNo : ClientDataSet1.Cancel; // manque ça
    smbCancel: Action := caNone;
    end;
    end;
    end;
    
    end.
    Voir les corrections dans le code à tester.

    PS: Pour ma part je trouve que DBExpress est trop compliquer pour un débutant, ADO est beaucoup plus simple et accessible que DBExpress.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2005
    Messages : 8
    Points : 6
    Points
    6
    Par défaut ADO plus simple que DBexpress et ...
    ... en plus ça MARCHE !!!!
    après environ 3 mois de recherche de ce simple lien entre un formulaire delphi et une base de donnée SQLserver et grâce à ton aide la mise à jour se fait dans les deux sens.
    Effectivement, ADO est d'une simplicité déconcertante.
    Le tutoriel DBexpress sous delphi7 ne me le permettait pas.
    ... je me sens comme Amstrong sur la lune... tout est à découvrir mais tout est désormais possible...
    1000 mercis pour les tuyaux.

Discussions similaires

  1. Mises à jour base Oracle -> base SQL server
    Par fbo33 dans le forum Oracle
    Réponses: 21
    Dernier message: 20/11/2006, 12h05
  2. formulaire access et donnée sous sql server
    Par liliprog dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 09/09/2005, 21h20
  3. Mettre à jour une base sous SQL SERVER 2000
    Par FilipeVV dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 11/02/2005, 13h24
  4. Automatiser la mise à jour de la bD SQL SERVER from Access
    Par Nadaa dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 11/11/2003, 16h23
  5. Convertir un type de donnée sous SQL Server
    Par Fleep dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 19/08/2003, 16h15

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