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 :

Base de donnees MySQL sur le web et client Windows


Sujet :

Bases de données Delphi

  1. #1
    Membre du Club
    Homme Profil pro
    Responsable R&D
    Inscrit en
    Novembre 2011
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 64
    Points : 43
    Points
    43
    Par défaut Base de donnees MySQL sur le web et client Windows
    Bonjour,
    j'ai des bases de donnees hebergees chez Infomaniak, et j'y accede via PHP.
    J'ai besoin d'acceder (lecture et ecriture) a ses bases depuis un client Delphi.
    Le probleme c'est que chez l'hebergeur je ne peux pas installer d'applications serveur, donc il me faut une solution de communications en php. Il y a t il une solution pour ce genre de probleme ?
    Je suis plus tres bien au courrant de ce qui se fait maintenant sous Delphi, la derniere version que j'utilisais etait Delphi 2007.
    Au debut je me suis dis que si j'achetais les dernieres mouture de Delphi et RADPHP, avec un truc comme DataSnap ca pourrait le faire, mais en lisant la fiche produit de RADPHP, je vois qu'on peut juste creer des clients pas des serveurs.

    Si quelqu'un a une idee pour pouvoir utiliser des datasets distants comme decrits plus haut, ca serait sympa.

    Merci

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 560
    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 560
    Points : 25 153
    Points
    25 153
    Par défaut
    Tu as DelPHP de Sub0
    C'est un module PHP accessible en simple HTTP, qui te permet de lire des tables MySQL

    Tu peux effectivement créer un WebService REST ou SOAP encoded via RADPhp pour l'utiliser dans un client Delphi, cela ne sera pas des DataSet mais des objet Remotable, tu peux te débrouiller pour échanger de XML Midas pour alimenter un TClientDataSet (la partie PHP sera peut-être pénible, j'ignore si ce format est géré en PHP, mais comme c'est un standard pour DataSnap, on peut l'espérer)

    J'ai créé et utilisé en Delphi des WebService codé en PHP4 avec NuSOAP et en PHP5 avec Zend Framework
    Tu n'as pas forcément besoin de RADPHP, si le serveur de ton hébergeur contient déjà un apache avec PHP5, tu dois pouvoir écrire un WebService et te connecter sur MySQL via MySQLI,

    DataSnap c'est une utilisation inverse, un Serveur Delphi offrant un service à des clients Delphi ou mobile en Java par exemple

    Est-ce que ton hébergeur peut fournir un accès via Tunneling SSH ?
    Personnellement, ce que j'ai utilisé pendant 5 ans, nos clients avaient des IP Fix enregistré dans le FireWall, un fontral SSH routait via un PortForwarding vers tel ou tel Serveur MySQL (lui n'acceptant que localhost et l'IP du frontal)
    Côté Delphi, un petit programme utilisant le composant TElSSHClient de Eldos Secure Blackbox

  3. #3
    Membre du Club
    Homme Profil pro
    Responsable R&D
    Inscrit en
    Novembre 2011
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 64
    Points : 43
    Points
    43
    Par défaut
    Merci ShaiLeTroll de ta reponse,

    Aujourd'hui en PHP, j'utilises MySQLI et je peux creer des clients pour lire les tables ou ecrire dedans via des donnees en JSON.(j'utilise cela nottament depuis des Smartphones).
    Le probleme c'est que ce n'est pas aussi pratique qu'un veritable Dataset.
    Le serveur supporte PHP 5, par contre le tunneling SSH est interdit (ce qui me posait des problemes pour triturer ma base complexe, j'etais oblige de travaille sur une base locale et repercuter mes modifs ensuite via des scripts).

    En fait mon besoin au depart etait de permettre a des ERP d'avoir un connecteur vers cette base. Etant plus a l'aise avec Delphi (que j'utilisais depuis sa sortie) qu'avec PHP, je me suis dit que j'allais ensuite proposer tous les import/export directement depuis une appli Delphi, voir proposer des service web particulier.
    Si j'etais un pro du PHP, je me poserai pas de question mais la il vaut mieux que je choisisse cette solution

  4. #4
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 752
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 752
    Points : 13 336
    Points
    13 336
    Par défaut
    C'est le problème des serveurs mutualisés. Perso je génère du XML (en PHP) directement utilisable dans un TSimpleDataSet.

    Une partie de code:
    Code php : 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
    //************************************************************************************************
    //* Execute une requête et renvoi un fichier XML formaté pour TSimpleDataSet
    //************************************************************************************************
    function DecodeFieldType($Type)
    {
    	$Data = preg_split("/[()]/", $Type);
     
    	switch ($Data[0])
    	{
    		case "tinyint" :
    		case "bigint" :
    			return "fieldtype=\"int\"";
     
    		case "decimal" :
    			$Precision = explode(",", $Data[1]);
    			return "fieldtype=\"fixed\" DECIMALS=\"$Precision[1]\" WIDTH=\"$Precision[0]\"";
     
    		case "varbinary" :
    		case "char" :
    		case "varchar" :
    			return "fieldtype=\"string\" WIDTH=\"$Data[1]\"";
     
    		case "text" :
    		case "tinytext" :
    		case "longtext" :
    			return "fieldtype=\"bin.hex\" SUBTYPE=\"WideText\"";
     
    		case "timestamp" :
    			return "fieldtype=\"dateTime\"";
     
    		default :
    			return "fieldtype=\"$Data[0]\"";
    	}
    }
     
    function QueryCDS($Query) 
    {
    	Header("Content-type: text/xml; charset=UTF-8");
     
    	QueryExecute("CREATE TEMPORARY TABLE TempTable " .$Query);
     
    	$XML = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\" ?>" .CR;
    	$XML .= "<DATAPACKET Version=\"2.0\">" .CR;
    	$XML .= TAB1 ."<METADATA>" .CR;
    	$XML .= TAB2 ."<FIELDS>" .CR;
     
    	$Fields = array();
    	$Result = QueryExecute("SHOW COLUMNS FROM TempTable;");
     
    	if (mysql_num_rows($Result) > 0)
    		while ($Row = mysql_fetch_assoc($Result))
    		{
    			$Fields[] = $Row["Field"];
    			$XML .= TAB3 ."<FIELD attrname=\"$Row[Field]\" " .DecodeFieldType($Row["Type"]) ." />" .CR;
    		}
     
    	$XML .= TAB2 ."</FIELDS>" .CR;
    	$XML .= TAB1 ."</METADATA>" .CR;
    	$XML .= TAB1 ."<ROWDATA>" .CR;
     
    	$Result = QueryExecute("Select * from TempTable");
    	while ($Row = mysql_fetch_array($Result))
    	{
    		$XML .= TAB2 ."<ROW ";
     
    		foreach ($Fields as $Field)
    		{
    			$s = mb_encode_numericentity ($Row[$Field], array (0x0080, 0xffff, 0, 0xffff), "UTF-8");
    			$XML .= "$Field=\"$s\" ";
    		}
     
    		$XML .= "/>" .CR;
    	}
     
    	$XML .= TAB1 ."</ROWDATA>" .CR;
    	$XML .= "</DATAPACKET>";
     
    	return $XML;
    }

  5. #5
    Membre du Club
    Homme Profil pro
    Responsable R&D
    Inscrit en
    Novembre 2011
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 64
    Points : 43
    Points
    43
    Par défaut
    Merci Andnotor pour ton code.

Discussions similaires

  1. Réponses: 0
    Dernier message: 04/10/2012, 15h42
  2. Problème avec une base Mysql sur le web
    Par mappy dans le forum Accès aux données
    Réponses: 2
    Dernier message: 08/06/2007, 08h38
  3. [SGBD] Renvoyer les enregistrements d'une base de données mysql
    Par pod1978 dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 30/01/2006, 21h01
  4. [SGBD] problème de recherche dans une base de donnée mysql
    Par Xini28 dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 23/10/2005, 23h06
  5. base de données statique sur le web
    Par LucG dans le forum Access
    Réponses: 2
    Dernier message: 23/10/2005, 15h32

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