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 :

XE4 , Firedac et datasnap


Sujet :

Bases de données Delphi

  1. #1
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 045
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 045
    Points : 40 963
    Points
    40 963
    Billets dans le blog
    62
    Par défaut XE4 , Firedac et datasnap
    Bonjour,

    je fais un essai de mon nouvel EDI , objectif créer un serveur Datasnap (simple) et son client associé
    coté serveur une simple méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    function TServerMethods1.Appositions: TDataSet;
    begin
    ADTable1.Open;  // adtable1 est une "table" FireDac 
    // ps. j'ai remarqué qu'il fallait mettre Open plutôt que Active:=True
    // dans ce dernier cas la connexion est fermée   
    result:=ADTable1;
    end;
    Coté client
    j'ai d'abord essayé avec des composants DBExpress
    une DBConnexion ,une génération des Classes, puis un DataSet etc ...
    après quelques frayeurs (due a ADTable1.active:=true) nickel , j'ai la liaison à mon serveur , j'affiche mes données

    j'ai essayé ensuite avec Firedac
    -premiers essais le simple fait d'essayer de se connecter plantait l'IDE
    puis j'ai remarqué que les paramètres de connexion se remplissaient pas !!
    seul le driver était renseigné (un petit bug ?)
    après renseignement des server et port
    Server=localhost
    Port=211
    nickel la connexion fonctionne !
    pour la suite , je lis qu'il faut mettre un ADStoredProc1 et pas une ADTable ou autre , ok , je fais .....
    bonne nouvelle je vois , très facilement les méthodes accessibles (contrairement a l'utilisation de DBExpress où il faut un peu ruser)

    par contre , et c'est là que je butte
    ---------------------------
    Erreur
    ---------------------------
    Le type de valeur TDBXTypes.INT64 n'est pas accessible comme type de valeur TDBXTypes.INT32.
    j'obtiens ce joli message sybillin des pistes ?
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 045
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 045
    Points : 40 963
    Points
    40 963
    Billets dans le blog
    62
    Par défaut
    je me répond à moi-même

    c'était un bug remonté , qui va être corrigé dans la version 8.0.5 (ce qui me permet d'annoncer qu'il va y avoir une nouvelle version )

    Dmitry Arefiev , m'a indiquer en attendant la marche a suivre pour corriger ce problème

    - open uADPhysTDBXBase.pas
    - locate there TADPhysTDBXCommand.FetchMetaRow method
    - add to "var" section at top of method:

    oVal: TDBXValue;

    - found line:

    iDbxPrec :=
    FDBXReader.Value[TDBXProcedureParametersIndex.Precision].GetInt32;

    - replace with:

    oVal := FDBXReader.Value[TDBXProcedureParametersIndex.Precision];
    if oVal.ValueType.DataType = TDBXDataTypes.Int64Type then
    iDbxPrec := oVal.GetInt64
    else
    iDbxPrec := oVal.GetInt32;

    - close RAD Studio IDE
    - go to FireDAC\Bin folder
    - run there compileDXE4.bat
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 045
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 045
    Points : 40 963
    Points
    40 963
    Billets dans le blog
    62
    Par défaut la suite
    après , modifications par cette manip , cela fonctionne super pour ce qui est des 'Tables' et 'Querys' en lecture seulement pour l'instant .

    Maintenant , j'ai essayé de passer autre choses que des données (la fameuse fonction exemple ReverseString ) et là , je coince , je vois bien la méthode , mais comment je récupère sa valeur ?
    j'ai essayé comme pour une table mais bine sur ça fonctionne pas

    Datasnap coté client + Firedac:= pas trop le top pour l'instant

    je continue mes investigations .....
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    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 459
    Points : 24 873
    Points
    24 873
    Par défaut
    ReverseString ?

    En DataSnap, sur le client, fait Clic-Droit sur ton SQLConnection, tu peux regénérer le fichier de wrapper des méthodes de ton serveur, un peu comme un TLB
    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

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 045
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 045
    Points : 40 963
    Points
    40 963
    Billets dans le blog
    62
    Par défaut
    Oui , mais non , avec Firedac , pas besoin de générer comme avec DBX, en fait on pose un ADStoredProc et on retrouve la fonction du serveur .
    Le hic , c'est que si ça fonctionne pour une table ou query (coté serveur) , je vois pas comment faire coté client .

    Mais bon , j'avais laissé de coté depuis mon post . Je vais aller un peu fouillé dans les doc Anydac
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    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 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Question conne, tu as changé Server=localhost en Server=IP.Du.Serveur.Pour.Client ?

    Je suppose que tu as déjà lu Connect to DataSnap server
    et l'utilisation de TADPhysDataSnapDriverLink

    A priori, côté client, c'est aussi un TADStoredProc et un TADConnection
    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

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 045
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 045
    Points : 40 963
    Points
    40 963
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Question conne
    pas forcément

    Coté client , j'ai bien posé un TADconnexion , un TAdStoredProc , un TADPhysDataSnapDriverLink, et même un TADGUIwaitcursor .

    me connecter a un datasource coté client fonctionne (après les corrections) , en IDE , je vois bien les fonctions 'classiques' EchoString et ReverseString ainsi que celle que j'ai rajouté (voir 1° post)

    si je fais un open 'classique'
    [FireDAC][Phys][DataSnap]-308. Cannot open / define command, which does not return result sets.
    Hint: use Execute / ExecSQL method for non-SELECT commands.
    après moultes recherches, aiguillé par ce message j'essaye avec (il manque peut être des : prepare et autre subtilités )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    procedure TForm1.BtnReverseClick(Sender: TObject);
    begin
    AdStoredProc2.ParambyName('Value').asString:='mon test'; // ou params[0]
    AdStoredProc2.Execute;
    Label1.Caption:=AdStoredProc2.ParambyName('ReturnValue').AsString; // ou params[1]
    end;
    mais aujourd'hui je me heurte à
    Exception EIPAbstractError dans le module Client.exe en 0043500B.
    Aucun homologue avec l'interface ayant pour guid {9BB0BE5C-9D9E-485E-803D-999645CE1B8F} n'a été recensé.
    [Edit] au temps pour moi , un petit google plus tard et je vois qu'il me faut rajouter un IPPeerClient dans ma liste des uses

    ceci fait , je me suis heurté a une taille de paramètre non indiqué (par défaut c'était a 5 car j'avais mis une valeur initiale = 'Hello' )
    Changements effectués pour les 2 paramètres ça fonctionne

    Objectif suivant : passer une image du serveur vers le client via un Stream
    je suis pas sorti de l'auberge
    affaire a suivre , faut que je me mette en mode travail maintenant
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  8. #8
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    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 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Pour le Stream, tu vas devoir toucher au BufferKBSize
    Mais tu connais déjà : [XE3] Image par datasnap par SergioMaster
    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

  9. #9
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 045
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 045
    Points : 40 963
    Points
    40 963
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Mais tu connais déjà
    S'agissant de Datasnap via FireDac , Non

    ma tentative de faire la même chose que dans le lien que tu as cité se sont révélé désastreuse

    tout d'abord , la valeur retournée par le serveur est considérée comme un blobfield , j'ai donc essayé ainsi
    Code Coté serveur : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function TServerMethods1.LoadFile(NomFichier: String): TStream;
    begin
     Result := TFileStream.Create(NomFichier, fmOpenRead);
    end;

    Code Coté client : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ADStoredProc3.ParamByName('NomFichier').AsString:='C:\Users\Master\Pictures\Capturer.jpg';
    ADStoredProc3.Execute;
    TBlobField(AdStoredProc3.ParamByName('ReturnValue')).SaveToFile('c:\test\temp.jpg');
    ça coince sur le Savetofile !
    J'ai contrôlé la taille 'envoyée' ok. Par contre taille reçue = 0 (même en changeant la taille du paramètre )
    pour l'instant , je bloque et tourne en rond ! suite au prochain poste
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 31/03/2015, 16h42
  2. [Datasnap][FireDAC] Partie cliente
    Par Barbibulle dans le forum Bases de données
    Réponses: 3
    Dernier message: 01/11/2014, 11h43
  3. [Firedac] [XE4] ADConnection.ExecSQL avec paramètres
    Par SergioMaster dans le forum Bases de données
    Réponses: 2
    Dernier message: 21/03/2014, 08h05
  4. Datasnap Piette(Midware) Autre
    Par jambonstar dans le forum Outils
    Réponses: 1
    Dernier message: 06/08/2007, 18h53
  5. c'est quoi le datasnap
    Par rachid202446 dans le forum Bases de données
    Réponses: 2
    Dernier message: 20/09/2005, 00h02

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