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

Delphi Discussion :

clientdataset et memorystream


Sujet :

Delphi

  1. #1
    Membre Expert Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Par défaut clientdataset et memorystream
    j'ai cette procedure pour test de transfer des donnée entre deux clientdataset, via memorystream
    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
    procedure TForm4.Button1Click(Sender: TObject);
    var
         strm:TMemoryStream;
    begin
         ClientDataSet1.DisableControls;
         strm:=TMemoryStream.Create;
         try
            LocalCD.SaveToStream(strm);  //LocalCD un autre TCLientDataset
            showmessage(inttostr(strm.Size));
            sleep(1);
            ClientDataSet1.LoadFromStream(strm);
            ClientDataSet1.Active:=true;
            ClientDataSet1.EnableControls;
         finally
           strm.Free;
         end;
    end;
    et j'ai eu ce message d'erreur:
    notification d'une exception du débogeur:
    le projet1.exe a provoqué une clsse d'exception EDatabaseerror avec le message 'Clientdataset1: fournisseur de données ou paquet de données manquant', Processus stoppé,
    svp aidé moi, merci

  2. #2
    Membre Expert Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Par défaut
    j'ai modifier le code, la pas d'erreur , mais clientdataset1 reste vide;voila le code:
    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
    procedure TForm4.Button1Click(Sender: TObject);
    var
         strm:TMemoryStream;
         i:integer;
    begin
         ClientDataSet1.DisableControls;
         strm:=TMemoryStream.Create;
         try
            LocalCD.SaveToStream(strm);
            showmessage(inttostr(strm.Size));//=2800554
            sleep(1);
            ClientDataSet1.FieldDefs.Clear;
            for i:=0 to LocalCD.FieldCount-1 do
                  with ClientDataSet1 do
                  begin
                    with FieldDefs.AddFieldDef do
                    begin
                      DataType := LocalCD.Fields[i].DataType;
                      Name := LocalCD.Fields[i].FieldName;
                      if LocalCD.Fields[i].DataType=ftString then
                      Size:=LocalCD.Fields[i].DataSize;
                    end;
                  end;
            ClientDataSet1.CreateDataSet;
            ShowMessage('Table crée');
            ClientDataSet1.Active:=true;
            ClientDataSet1.LoadFromStream(strm);
            ClientDataSet1.EnableControls;
            showmessage(inttostr(ClientDataSet1.RecordCount));//=0
         finally
           strm.Free;
         end;
    end;

  3. #3
    Membre Expert Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Par défaut
    j'ai réussi avec:
    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
     
    procedure TForm4.Button1Click(Sender: TObject);
    var
         strm:TMemoryStream;
         i:integer;
         s:string;
    begin
         ClientDataSet1.DisableControls;
         s:='d:\jj.jam';
         strm:=TMemoryStream.Create;
         try
            LocalCD.SaveToFile(s);
            strm.LoadFromFile(s);
            ClientDataSet1.LoadFromStream(strm);
            ClientDataSet1.EnableControls;
            showmessage(inttostr(ClientDataSet1.RecordCount));
         finally
           strm.Free;
         end;
    end;
    mais je comrend pas pouqoi??
    je doit passé par un fichier, et j'aime bien touvé une autre solution, je creuse toujour le sujet

  4. #4
    Membre Expert Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Par défaut
    alors aucune idée??
    mon vrai probléme est de transféré le contenut d'un clientdataset d'un post a un autre en utilisant TCP\IP
    alors, c'est la réception qui marche pas en utlisant;
    clientdatset.loadfromstream

  5. #5
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Bonjour,

    Il est possible que le savetotream d'un dataset ne sauvegarde que les caractèristiques de l'accès au dataset et non les enreistrements du SGBD.

    Peut-être passer par un save en XML.

  6. #6
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Bonjour,

    Il est possible que le savetotream d'un dataset ne sauvegarde que les caractéristiques de l'accès au dataset et non les enregistrements du SGBD.

    Peut-être passer par un save en XML.

  7. #7
    Membre Expert Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Par défaut
    non
    Citation Envoyé par edam
    j'ai réussi avec:
    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
     
    procedure TForm4.Button1Click(Sender: TObject);
    var
         strm:TMemoryStream;
         i:integer;
         s:string;
    begin
         ClientDataSet1.DisableControls;
         s:='d:\jj.jam';
         strm:=TMemoryStream.Create;
         try
            LocalCD.SaveToFile(s);
            strm.LoadFromFile(s);
            ClientDataSet1.LoadFromStream(strm);
            ClientDataSet1.EnableControls;
            showmessage(inttostr(ClientDataSet1.RecordCount));
         finally
           strm.Free;
         end;
    end;
    mais c'est sur le meme poste
    peut etre que lenvoit est faux:
    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
         
    type
      TypeResep=record
        Typ,Tail:integer;
      end;
      TPMYSocket=^TMYSocket;
      TMYSocket=record
        Entet:TypeResep;
        Resu:Integer;
        Socket:TCustomWinSocket;
        Strm:TMemoryStream;
        Delait:DWORD;
      end;
    Function  TForm4.EnvoitArticle;
    var
         sock:TPMYSocket;
         strm:TMemoryStream;
    begin
         strm:=TMemoryStream.Create;
         try
           LocalCD.SaveToStream(strm);
           sock.Entet.Typ:=1;
           sock.Entet.Tail:=strm.size;
           sock.Socket.SendBuf(t,sizof(sock.Entet));
           Sleep(1);
           sock.Socket.SendStream(strm);
         finally
           strm.Free;
         end;
    end;
    //*******************
    //***** cote reception
    //*********
    procedure TForm4.ClientSocket1Read(Sender: TObject;
      Socket: TCustomWinSocket);
    var
         buf:TBuff;  //TBuff=PIntegerArray;
         i,j,p:Integer;
         t:SYSTEMTIME;
         s,m:string;
    begin
    
         if Local.Entet.Typ<0 then
           begin
             Socket.ReceiveBuf(local.Entet,sizeof(local.Entet));
                 Local.Strm:=TMemoryStream.Create;
             exit;
           end;
         if local.Entet.Typ=0 then
           begin
             ShowMessage('OK');
             Initialise;
             exit;
           end;
         if local.Entet.Typ=20 then
           begin
             socket.ReceiveBuf(t,sizeof(t));
             inc(t.wHour);
             SetLocalTime(t);
             Initialise;
             exit;
           end;
         local.Delait:=GetTickCount;
         i:=socket.ReceiveLength;
         if i>0 then
           begin
         if i>0 then
           begin
             j:=Socket.ReceiveBuf(buf^,i);
             Local.Strm.Read(buf^,j);
             FreeMem(buf,i);
             local.resu:=local.resu+j;
           end;
         if local.Entet.Tail=local.Resu then
           begin
             ClientDataSet1.LoadFromStream(local.Strm);         ClientDataSet1.EnableControls;
             Initialise;
           end;
    end;
    bien sur il y a TNMStrm, mais meme avec ce composant, j'ai pas réussit
    et je sais pas encore ou est le probléme, dans l'envoit ou la réception

  8. #8
    Membre Expert Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Par défaut
    je suis fatigué à creusé, alors j'ai adopté les entient méthode qui marche toujour;
    1-j'enregistre clientdataset sur serveur dasn un fichier
    2-j'envoit le fichier au client
    3-réception des données et les enregistré dans un fichier
    4-lecture du fichier par clientdataset du client
    bah bien sur c'est un lengt, mais comme j'ai pas trouvé mieux et j'ai pas du temp, alors,,,, merci

Discussions similaires

  1. DbExpress + ClientDataSet
    Par BONNEFOI Patrick dans le forum Bases de données
    Réponses: 3
    Dernier message: 12/05/2005, 10h29
  2. Importer un fichier CSV dans un clientdataset ?
    Par mls dans le forum Bases de données
    Réponses: 7
    Dernier message: 15/04/2005, 12h35
  3. RemoteDataModule,DBExpress et ClientDataSet en Delphi
    Par BadRedMane dans le forum Bases de données
    Réponses: 1
    Dernier message: 12/12/2004, 20h21
  4. [MySQL][DbExpress][D7] clientdataset.applyupdates
    Par nanomag dans le forum Bases de données
    Réponses: 2
    Dernier message: 17/06/2004, 16h48
  5. [ClientDataSet] ApplyUpdates
    Par VincentR dans le forum Bases de données
    Réponses: 4
    Dernier message: 27/05/2004, 13h36

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