Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

GESTION BDD CHEZ UN HEBERGEUR INTERNET QUI NE VOUS NE PERMET PAS D'Y ACCEDER DIRECTEMENT


Information sur la source

Catégorie :Base de Donnees Classé sous : indy, sql, requete, base, donnee Niveau : Initié Date de création : 09/03/2007 Date de mise à jour : 13/10/2007 17:33:01 Vu / téléchargé: 5 404 / 1 361

Note :
Aucune note

Commentaire sur cette source (14)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
Ce programme va vous permettre par une petite astuce et un composant indy de gérer une base de donnée stocké chez un herbergeur qui ne vous permet pas d'y accéder directement avec un logiciel. Pratique si vous ne voulez pas utiliser internet et/ou le php pour la gérer. Le principe est trés simple.
Avec ce soft vous pourrez récupere des données et tout ce qui est possible de faire avec mysql.

J'attends vos commentaires, suggestions et avis.

J'ai remarqué que pas mal de personne ont eu des problemes avec mon ancienne version en voici donc une nouvelle meilleur(surtout au niveau de la vitesse) et qui fonctionne pour vu que vous vous y preniez correctement.

Renommer GestBase.-x- en GestBase.exe pour avoir la version compilé.
 

Source

  • Oui c'est du php !
  • Avant toute chose vous devez mettre ça dans votre fichier gestiondb.php :
  • Ce fichier doit être uploader chez l'hebergeur.
  • Remarque que ces variables doivent être les memes que celle que vous avez mise dans le fichier post.txt
  • Et finalement il est fournit dans le zip !
  • <?
  • //Detection de la requette.
  • if(isset($_POST["sql"]))
  • $sql=$_POST["sql"]; else $sql="";
  • /*
  • pour ne permettre que la lecture seul vous pouvez ajouter,
  • par exemple ceci :
  • $lsql=explode(";",$sql);
  • $newsql="";
  • for($i=0;$i<count($lsql);$i++)
  • {
  • //On s'assure que la premiere instruction de la requete est un select.
  • //Si c'est le cas on ajoute la requete
  • if(strpos(strtolower(" ".$lsql[$i]),"select")==1)
  • $newsql.=$lsql[$i].";";
  • }
  • *********************************************************************************
  • Peut est améliorée, dans la mesure ou peut encore générer des erreures
  • Je m'explique :
  • Essayons "insert into commentaire values('JE ne suis pas d\'accord; ok !');"
  • dans ce cas c'est le second ";" qui marque la fin de l'instruction et non le premier
  • donc forcément on génerera une erreur.
  • *********************************************************************************
  • //Finalement on réaffecte la requete sql.
  • $sql=$newsql;
  • */
  • //Teste des mot de passe et login pour valider la requete.
  • //Si possible cryptez les !
  • if(($_POST["mdp"]=="leking")&&($_POST["log"]=="mokost")) execreq($sql);
  • //Cette fonction va formater la sortie pour pouvoir utiliser le resultat correctement.
  • function execreq($Req){
  • //informations concernant la base de donnée.
  • $host="localhost";
  • $user="root";
  • $mdp="";
  • //Base de données sur laquelle on doit agire.
  • $db="matable";
  • //Séparateure de données concrettes.
  • $sep1="ž";//alt + 0158
  • $sep2="š";//alt + 0154
  • //Définit la zone de donnée(s) utile(s) évitant ainsi les publicitées.
  • $sepd="Š";//alt+ 0138;
  • /*
  • Pour ces séparateure utiliser des chaines non contenue dans vos données et de préférence un caractère.
  • Cepandant assurez vous qu'ils soient les mêmes que ceux de votre variable TReq dans votre appli delphi.
  • *********************************************************************************
  • TReq est contenu dans l'unité specproc ainsi que la fonction strtoreq().
  • *********************************************************************************
  • Exemple :(c'est du delphi);
  • [...]
  • var
  • MesDonnees : TReq;
  • begin
  • with MesDonnees do begin
  • sep1:='ž';//alt + 0158
  • sep2:='š';//alt + 0154
  • sepd:='Š';//alt+ 0138
  • end;
  • strtoreq(donneesnonformatees,MesDonnees);
  • [...];
  • */
  • //le "a" assure qu'il y ait au moin 1 charactere avant.
  • echo "a".$sepd;
  • $cntx= mysql_connect($host, $user, $mdp);
  • if ($cntx) {
  • $link=mysql_select_db($db);
  • if ($link) {
  • $ret=mysql_query($Req);
  • if ($ret) {
  • $nbrow=mysql_num_fields($ret);
  • $str=$nbrow.$sep1.mysql_num_rows($ret).$sep1;
  • for($i=0;$i<$nbrow;$i++)
  • $str=$str.mysql_field_name($ret,$i).$sep1;
  • echo $str.$sep2;
  • while($res=mysql_fetch_row($ret)) {
  • $str="";
  • for($i=0;$i<$nbrow;$i++)
  • $str=$str.$res[$i].$sep1;
  • //$str=substr($str,2,strlen($str)-1);
  • echo $str."<br>";
  • }
  • }
  • }
  • }
  • else return 0;
  • echo mysql_error();
  • mysql_close($cntx);
  • //Le "z" assure qu'il y ait au moin 1 charactere aprés.
  • echo $sepd."z";
  • }
  • ?>
Oui c'est du php !
Avant toute chose vous devez mettre ça dans votre fichier gestiondb.php :
Ce fichier doit être uploader chez l'hebergeur.
Remarque que ces variables doivent être les memes que celle que vous avez mise dans le fichier post.txt
Et finalement il est fournit dans le zip !

<?

//Detection de la requette.
if(isset($_POST["sql"]))
	$sql=$_POST["sql"]; else $sql="";
/*

pour ne permettre que la lecture seul vous pouvez ajouter,
par exemple ceci :

$lsql=explode(";",$sql);
$newsql="";
for($i=0;$i<count($lsql);$i++)
{
//On s'assure que la premiere instruction de la requete est un select.
//Si c'est le cas on ajoute la requete
	if(strpos(strtolower(" ".$lsql[$i]),"select")==1)
		$newsql.=$lsql[$i].";";
}

*********************************************************************************
Peut est améliorée, dans la mesure ou peut encore générer des erreures
Je m'explique :
Essayons "insert into commentaire values('JE ne suis pas d\'accord; ok !');"
dans ce cas c'est le second ";" qui marque la fin de l'instruction et non le premier
donc forcément on génerera une erreur.
*********************************************************************************



//Finalement on réaffecte la requete sql.
$sql=$newsql;
*/

//Teste des mot de passe et login pour valider la requete.
//Si possible cryptez les !
if(($_POST["mdp"]=="leking")&&($_POST["log"]=="mokost")) execreq($sql);

//Cette fonction va formater la sortie pour pouvoir utiliser le resultat correctement.
function execreq($Req){

//informations concernant la base de donnée.
$host="localhost";
$user="root";
$mdp="";
//Base de données sur laquelle on doit agire.
$db="matable";

//Séparateure de données concrettes.
$sep1="ž";//alt + 0158
$sep2="š";//alt + 0154

//Définit la zone de donnée(s) utile(s) évitant ainsi les publicitées.
$sepd="Š";//alt+ 0138;

/*
Pour ces séparateure utiliser des chaines non contenue dans vos données et de préférence un caractère.
Cepandant assurez vous qu'ils soient les mêmes que ceux de votre variable TReq dans votre appli delphi.
 *********************************************************************************
 TReq est contenu dans l'unité specproc ainsi que la fonction strtoreq().
*********************************************************************************
Exemple :(c'est du delphi);
[...]
var 
	MesDonnees : TReq;
begin
with MesDonnees do  begin
	sep1:='ž';//alt + 0158
	sep2:='š';//alt + 0154
	sepd:='Š';//alt+ 0138
end;

strtoreq(donneesnonformatees,MesDonnees);

[...];

*/

//le "a" assure qu'il y ait au moin 1 charactere avant.
echo "a".$sepd;

	$cntx= mysql_connect($host, $user, $mdp);
	if ($cntx) {
		$link=mysql_select_db($db);
		if ($link) {
			$ret=mysql_query($Req);
			if ($ret) {
				$nbrow=mysql_num_fields($ret);
				$str=$nbrow.$sep1.mysql_num_rows($ret).$sep1;
				for($i=0;$i<$nbrow;$i++)
				$str=$str.mysql_field_name($ret,$i).$sep1;
				echo $str.$sep2;
				while($res=mysql_fetch_row($ret)) {
					$str="";
					for($i=0;$i<$nbrow;$i++)
						$str=$str.$res[$i].$sep1;
					//$str=substr($str,2,strlen($str)-1);
					echo $str."<br>";				
				}
			}
		}
	}
	else return 0;
echo mysql_error();
mysql_close($cntx);
//Le "z" assure qu'il y ait au moin 1 charactere aprés.
echo $sepd."z";

} 

?>

Conclusion

il y a une limitation dans le nombre de caracteres admis pour une requete. Je n'ai pas compter mais eviter de lancer une requete du genre :

exec('insert into xxx values(yy,zz);insert into xxx values(yy,zz);'+
'insert into xxx values(yy,zz);insert into xxx values(yy,zz);'+
'insert into xxx values(yy,zz);insert into xxx values(yy,zz);'+
'insert into xxx values(yy,zz);insert into xxx values(yy,zz);'+ ...)
lancer la plutôt de cette maniere :
exec('insert into xxx values(yy,zz)');
exec('insert into xxx values(yy,zz)');
exec('insert into xxx values(yy,zz)');
exec(...);
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

09 mars 2007 22:03:17 :
J'ai juste oubliez de préciser qu'il vous faut l'unité specproc que vous trouverez sur le site. Elle contient tout les fonctions nécessaire au bon fonctionnement du programme. Merci de votre compréhension.
13 octobre 2007 17:29:47 :
Amélioration de la vitesse de traitement des données(Vraiment plus rapide). Et mise de toute les sources qu'il faut. Donc plus de raison d'hésitez utilisez le !
13 octobre 2007 17:33:01 :
Amélioration de la vitesse de traitement des données(vraiment plus rapide). Dans le zip j'ai mis tout ce qu'il vous faut pour que ça fonctionne. Donc plus de raison d'hésitez, devellopez !

Commentaires et avis

signaler à un administrateur
Commentaire de Mokost le 09/03/2007 21:56:31

Ceci n'est que le squelette de l'application a vous de l'habillez comme il faut pour lui faire faire les taches souhaitées.

signaler à un administrateur
Commentaire de Also know as le 15/03/2007 11:03:13

Tres interressant cette source, merci beaucoup.
J'ai toujours cherche cela sans aucun resultat.

Qui plus est en utilisant ton squelette il sera aussi possible de creer et modifier la base de donnee je pense.

Bien vu et bien trouve :D

signaler à un administrateur
Commentaire de Mokost le 15/03/2007 12:12:36

Merci Also Know As. Au moins une personne à qui ça à l'air de servir. Tu m'en vois ravi. En utilisant ce squelete tu peux tout faire avec une base de donné à partir du moment ou tu connais le MySql. ;)
Bonne continuation.

signaler à un administrateur
Commentaire de Also know as le 15/03/2007 13:46:56

Ouaip moi je vais pouvoir beaucoup m'en servir meme, en tout cas cela va permettre de par exemple mettre a jour des programmes plus facilement en regardant dans la base de donnee meme, donc plus besoin de telechargement de fichier annexe, de garder tout en memoire en changeant de PC, de creer un login et mot de passe pour chaque personne utilisant le logiciel aussi, les possibilites sont tres vaste dommage que d'autres personnes ne soient pas interresse pour le moment car cela est vraiment tres interressant.

@+

signaler à un administrateur
Commentaire de compos le 16/04/2007 23:37:20

J'ai peut-être loupé quelque chose, mais au chargement du projet il manque "IdBaseComponent"

Merci quand même ! ;)

signaler à un administrateur
Commentaire de Mokost le 05/05/2007 08:03:09

Tu as besoin des composant indy(fournit en standard avec delphi 7) ou sinon cherche sur le net tu le trouvera facilement.

signaler à un administrateur
Commentaire de Also know as le 06/05/2007 10:53:30

J'ai voulu me télécharger le code source car j'en ai enfin besoin, j'avais hate :)
Mais là blim blam bloum, il me manque le fichier SynEditHighlighter.dcu, je trouve sur internet sans problème SynEditHighlighter.pas qui lui même à besoin d'un fichier, ou se fichier à lui même besoin d'un autre fichier, et ce fichier ne pouvait pas compiler, etc.
J'ai essayé d'enlever "SynEditHighlighter, SynHighlighterHtml, SynEdit, ShockwaveEx" des uses.
Puis j'ai encore du enlever "specproc".

Un petit peu d'espoir...ET là poc ! :

res:treq; <== variable non reconnue.

Bon ben tant pis j'arrête là.

Faudrait réellement que tu nous mette toutes les sources nécessaires.
J'utilise Delphi 7 Entreprise, donc j'ai bien les composant indy..

@+

signaler à un administrateur
Commentaire de computer59 le 29/06/2007 10:37:23

Salut !!
meme chose que " Also know as " manque plein de fichiers,j'ai testé la version compilé j'ai changé les parametres dans le fichiers texte et la je test une requete et voici l'erreur :
---------------------------
Gestbase
---------------------------
HTTP/1.1 404 Not Found.
---------------------------
OK  
---------------------------
donc voila etant faux debutant car je ne programme plus en delphi depuis mon diplome j'en ai oublier un peu donc comme je voudrais me remettre dans le bain alors si tu pouvais rectifier ton prog ça serais sympa @+ et bonne prog !!

signaler à un administrateur
Commentaire de Mokost le 13/10/2007 17:43:10

Désolé pour le retard mais vu que je le met à jour. J'en profite pour te répondre, donc cette erreur veut dire que le soft n'a pas pu trouver la page que tu as indiquer pour gerer ta base.

signaler à un administrateur
Commentaire de jackalunion le 24/06/2008 04:27:11

Tres interressant cette source

signaler à un administrateur
Commentaire de philc94 le 29/11/2008 21:44:49

J'ai voulu utiliser ce code pour me connecter a une base de donnes depuis mon programme delphi mais ca ne fonctionne pas. A chaque fois j'ai une erreur socket #11004.
Quelqu'un pourrait-il m'aider?
Merci

signaler à un administrateur
Commentaire de Go2EDS le 08/02/2009 11:05:02

Super ce code, im me sera d'une grande utilité!
Petit prob toutefois : si je lance GestBase.-x- (après l'avoir renomé) cela se passe très bien. Par contre si je compile la source et lance l'exécutable j'obtiens l'erreur ¨ñìL@^£1(
A l'ouverture du projet dans Delphi 2009 j'ai les deux messages suivants :
1. Erreur lors de la lecture de idHTTP1.MaxLineAction:La propriété MaxLineAction n'existe pas.
2. Erreur lors de la lecture de idHTTP1.ReadTimeout:La propriété ReadTimeout n'existe pas.

Une idée pourquoi la source compilée ne fonctionne pas alors que l'exe fournit fonctionne très bien?

signaler à un administrateur
Commentaire de Go2EDS le 11/02/2009 23:48:29

OK, j'ai contourné le problème et cela fonctionne. Maintenant je constate que dans une clause WHERE cela fonctionne très bien si le contenu du champ pour lequel on fait la clause WHERE est numérique mais cela ne fonctionne pas du tout pour du texte :
exmple :
select * from users where id=1;   cela va renvoyer un résultat.
select * from users where country='France'; ne fonctionne pas et génère le message d'erreur suivant :
"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\'France\'' at line 1"

Une idée de comment faire fonctionner la requête avec du texte?

signaler à un administrateur
Commentaire de 06Sergio le 18/06/2009 12:39:31

Salut GO2EDS,

j'ai le même problème que toi (erreur ¨ñìL@^£1)
Tu dis l'avoir contournée...
Tu peux nous dire comment ??

merci !

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

pointer une case d'une base de donnée a partir d'une requete sql [ par Maitre_Gonzo ] Bonjour tout le mondej'effectue en ce moment mon stage de premiere année de bts .Je rencontre le problème suivant : Je suis désireux d'afficher des do requete sql access [ par perou2040 ] bonjour je suis en train de travaillé avec une base de donné access en utilisant les requete mais j'ai quelque soucis... voila mon code qui consiste requete SQL et MSACCESS [ par gebu34 ] Bonjour à tous,Pour interroger une base Access j'utilise la requete SQL :SELECT COUNT(champs1) AS nombre1, COUNT(champs2) AS nombre2 FROM Table GROUP Requete SQL [ par sammon ] Bonjour,je viens de commençer le langage delphi, je voudrais faire une requete sql pour extraire des données.par exemple j'ai une table1(idref, niveau Backup d'une BD MS-SQL distante! [ par othland ] Bonjour,je travail sur une base de données MS-SQL (SQL 2000) distante, et je veux en faire un backup, j'ai testé ce bout de code sur une petite base d Pb requete sql [ par Willos78 ] hello J'ai une table que je veux consulter pour savoir si un code y est déjà. Je passe par adoquery mais cela ne passe pas. Il me renvoie une erreur base de donnee [ par saimslim ] salut tous le mondej'ai une application,et pour la mettre en client server comment faire .merci d'avance c'est urgent. modifier une requete SQL [ par islem2007 ] svp j'ai fais une requete ou le resultat est affiché sur un DBGRIDje voudrais apartir de ce DBgrid appliquer des modifications sur les enregistrements


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,796 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.