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

MkFramework Discussion :

Sauvegarde de la base


Sujet :

MkFramework

  1. #1
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2013
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2013
    Messages : 201
    Points : 75
    Points
    75
    Par défaut Sauvegarde de la base
    Bonjour,

    Dans mon application j'ai une partie administration dans lequel je prévoie la possibilité de sauvegarder et de restaurer la base.

    Comment me conseillez-vous de m'y prendre?

    Peut-être que ça pourrait faire l'objet d'un plugin?

  2. #2
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 100
    Points
    19 100
    Billets dans le blog
    17
    Par défaut
    La procédure de sauvegarde/restauration de base dépend de chaque sgbd.

    Par exemple pour mysql, il faut utiliser mysqldump
    Mais pour sqlserver, on passe par le client lourd ou avec une requete particulière
    Oracle je ne sais pas, postgresql doit avoir un binaire également
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  3. #3
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2013
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2013
    Messages : 201
    Points : 75
    Points
    75
    Par défaut
    Je veux gérer une base mysql.

    Je doit donc créer un module avec la class pour faire la la sauvegarde.

    J'ai récupérer une classe simple qui me convient pour l'instant
    elle est de szaboolcs

    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
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    <?php 
        class sql_dump{
            private $tables = array();
     
            private $options = array(
                'MySQL_HOST' => '',
                'MySQL_USERNAME' => '',
                'MySQL_PASSWORD' => '',
                'MySQL_DATABASE' => '',
                'CHARSET' => 'UTF8',
                'PATH' => '/',
                'FTP' => false,
                'FTP_HOST' => '',
                'FTP_USERNAME' => '',
                'FTP_PASSWORD' => '',
                'FTP_PATH' => '/'
     
            );
     
            private $string = "SET SQL_MODE=\"NO_AUTO_VALUE_ON_ZERO\";\n\n";
     
            private $connect;
     
            public function __construct($options = array()){
                foreach($options as $k => $v){
                    $this->options[$k] =  $v;
                }
     
                $this->connect();
                $this->charset();
                $this->tables();
                $this->create_tables();
                $this->columns();
                $this->inserts();
                $this->toString();
                $this->save();
            }
     
            private function connect(){
                $this->connect = new mysqli(
                    $this->options['MySQL_HOST'], 
                    $this->options['MySQL_USERNAME'], 
                    $this->options['MySQL_PASSWORD'], 
                    $this->options['MySQL_DATABASE']
                    );
                if($this->connect->connect_error){
                    throw new Exception('Connection error: '.$this->connect->connect_error);
                }
            }
     
            private function charset(){
                if(!$this->connect->set_charset($this->options['CHARSET'])){
                    throw new Exception('Error in the next function: '.__FUNCTION__.'. Error message: '.$this->connect->error);
                }
            }
     
            private function tables(){
                if($result = $this->connect->query('SHOW TABLES')){
                    while($row = $result->fetch_row()){
                         $this->tables[]['NAME'] = $row[0];
                    }
                    $result->close();
                }else{
                    throw new Exception('Error in the next function: '.__FUNCTION__.'. Error message: '.$this->connect->error);
                }
            }
     
            private function create_tables(){
                foreach($this->tables as $k => $v){
                    if($row = $this->connect->query("SHOW CREATE TABLE ".$v['NAME'])->fetch_row()){
                        $this->tables[$k]['CREATE'] = 'DROP TABLE '.$v['NAME'].";\n\n".$row[1];
                    }else{
                        throw new Exception('Error in the next function: '.__FUNCTION__.'. Error message: '.$this->connect->error);    
                    }
                }
            }
     
            private function columns(){
                foreach($this->tables as $k => $v){
                    if($result = $this->connect->query("SHOW COLUMNS FROM ".$v['NAME'])){
                        while($row = $result->fetch_row()){
                            $this->tables[$k]['FIELDS'][] = '`'.$row[0].'`';
                        }
                    }else{
                        $result->close();
                        throw new Exception('Error in the next function: '.__FUNCTION__.'. Error message: '.$this->connect->error);
                        return;
                    }
                }
                $result->close();
            }
     
            private function inserts(){
                foreach($this->tables as $k => $v){
                    if($result = $this->connect->query("SELECT * FROM `".$v['NAME']."`")){
                        $insert = "INSERT INTO `".$v['NAME']."` (".implode(',', $v['FIELDS']).") VALUES ";
                        $values = array();
                        while($row = $result->fetch_array()){
                            $val = array();
                            foreach($v['FIELDS'] as $f){
                                $f = str_replace('`', '', $f);
                                $val[] = '\''.$row[$f].'\'';
                            }
                            $values[] = "\n(".implode(",",$val).")";
                        }
                        $this->tables[$k]['INSERT'] = $insert.implode(',',$values);
                    }else{
                        throw new Exception('Error in the next function: '.__FUNCTION__.'. Error message: '.$this->connect->error);
                        $result->close();
                        return;
                    }
                }
                $result->close();
            }
     
            private function toString(){
                foreach($this->tables as $k => $v){
                    $this->string .= $v['CREATE'].";\n\n";
                    $this->string .= $v['INSERT'].";\n\n";
                }
            }
     
            private function copyToFtp($file){
                $ftpfile = substr($this->options['FTP_PATH'], -1) == '/' ? 'db_backup_'.$date.'.sql' : '/db_backup_'.$date.'.sql';
     
                if($ftp = ftp_connect($this->options['FTP_HOST'])){
                    if(ftp_login($ftp, $this->options['FTP_USERNAME'], $this->options['FTP_PASSWORD'])){
                        if(!ftp_put($ftp, $ftpfile, $file, FTP_ASCII)){
                            throw new Exception('FTP put file error');      
                        }
                    }else{
                        throw new Exception('FTP login error');  
                    }
                    ftp_close($ftp);  
                }else{
                    throw new Exception('FTP connection error');  
                }
     
            }
     
            private function save(){
                $date = date('Y-m-d-H-i-s');
                $file = substr($this->options['PATH'], -1) == '/' ? 'db_backup_'.$date.'.sql' : '/db_backup_'.$date.'.sql';
     
                if(@file_put_contents($file, $this->string)){
                    if($this->options['FTP'] === true){
                        $this->copyToFtp($file);
                    }    
                }else{
                    throw new Exception('Error in the next function: '.__FUNCTION__.'. Error message: File save failed!');    
                }
            }
     
            public function __destruct(){
                $this->connect->close();
            }
        }
    ?>
    Pour le lancer je fait ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php 
        require_once('sql_dump.php');
     
        try{
            new sql_dump(array(
                'MySQL_HOST' => 'localhost', 
                'MySQL_USERNAME' => 'root', 
                'MySQL_PASSWORD' => '', 
                'MySQL_DATABASE' => 'secu02',
                ));
        }catch(exception $e){
            echo $e->getMessage();
        }
    ?>
    Comment faire pour que les infos soit automatiquement les mêmes que celle du conf/connexion.ini.php

  4. #4
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 100
    Points
    19 100
    Billets dans le blog
    17
    Par défaut
    Il faut utiliser la methode _root::getConfigVar()
    Elle permet de récupérer une variable des fichiers de config
    Sous la forme _root::getConfigVar('section.variable')

    Par exemple pour une variable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    [db]
    mysqlExple.username=login
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    _root::getConfigVar('db.mysqlExple.username')
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  5. #5
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2013
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2013
    Messages : 201
    Points : 75
    Points
    75
    Par défaut
    Bonjour,

    J'ai créer un module gestionBase avec 2 actions save et restore.
    Dans la méthode save j'appelle la class sql_dump.
    Dois-la copier dans la méthode save ou dois-je la mettre dans le dossier lib/?

    Du coup dois-je faire le renseigner dans mon template?

    Dans mes class restore et save je dois me connecter à la base
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    // Connect to MySQL server
    mysql_connect($mysql_host, $mysql_username, $mysql_password) or die('Error connecting to MySQL server: ' . mysql_error());
    // Select database
    mysql_select_db($mysql_database) or die('Error selecting MySQL database: ' . mysql_error());
    Je doit la construire variable par variable comme vous m'avez informé plus haut?
    ou existe-t-il une fonction de connections?

    Pour faire la restore() j'ai besoin d'un select dans la liste les fichiers de sauvegarde qui serons dans un dossier dump. Comment puis-je faire ce formulaire?

  6. #6
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 100
    Points
    19 100
    Billets dans le blog
    17
    Par défaut
    Si vous avez déjà une classe modèle connecté à votre base de donnée, utilisez la methode getSgbd

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $oPdo=model_article::getInstance()->getSgbd()->getPdo()
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  7. #7
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2013
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2013
    Messages : 201
    Points : 75
    Points
    75
    Par défaut
    Dois-je comprendre que je dois créer un fichier "model_gestionBase.php" avec la class dumpsql dedans?

    que dois-je modifier dans la class poru qu'elle soit compatible?
    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
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    <?php 
        class sql_dump{
            private $tables = array();
     
            private $options = array(
                'MySQL_HOST' => '',
                'MySQL_USERNAME' => '',
                'MySQL_PASSWORD' => '',
                'MySQL_DATABASE' => '',
                'CHARSET' => 'UTF8',
                'PATH' => '/',
                'FTP' => false,
                'FTP_HOST' => '',
                'FTP_USERNAME' => '',
                'FTP_PASSWORD' => '',
                'FTP_PATH' => '/'
     
            );
     
            private $string = "SET SQL_MODE=\"NO_AUTO_VALUE_ON_ZERO\";\n\n";
     
            private $connect;
     
            public function __construct($options = array()){
                foreach($options as $k => $v){
                    $this->options[$k] =  $v;
                }
     
                $this->connect();
                $this->charset();
                $this->tables();
                $this->create_tables();
                $this->columns();
                $this->inserts();
                $this->toString();
                $this->save();
            }
     
            private function connect(){
                $this->connect = new mysqli(
                    $this->options['MySQL_HOST'], 
                    $this->options['MySQL_USERNAME'], 
                    $this->options['MySQL_PASSWORD'], 
                    $this->options['MySQL_DATABASE']
                    );
                if($this->connect->connect_error){
                    throw new Exception('Connection error: '.$this->connect->connect_error);
                }
            }
     
            private function charset(){
                if(!$this->connect->set_charset($this->options['CHARSET'])){
                    throw new Exception('Error in the next function: '.__FUNCTION__.'. Error message: '.$this->connect->error);
                }
            }
     
            private function tables(){
                if($result = $this->connect->query('SHOW TABLES')){
                    while($row = $result->fetch_row()){
                         $this->tables[]['NAME'] = $row[0];
                    }
                    $result->close();
                }else{
                    throw new Exception('Error in the next function: '.__FUNCTION__.'. Error message: '.$this->connect->error);
                }
            }
     
            private function create_tables(){
                foreach($this->tables as $k => $v){
                    if($row = $this->connect->query("SHOW CREATE TABLE ".$v['NAME'])->fetch_row()){
                        $this->tables[$k]['CREATE'] = 'DROP TABLE '.$v['NAME'].";\n\n".$row[1];
                    }else{
                        throw new Exception('Error in the next function: '.__FUNCTION__.'. Error message: '.$this->connect->error);    
                    }
                }
            }
     
            private function columns(){
                foreach($this->tables as $k => $v){
                    if($result = $this->connect->query("SHOW COLUMNS FROM ".$v['NAME'])){
                        while($row = $result->fetch_row()){
                            $this->tables[$k]['FIELDS'][] = '`'.$row[0].'`';
                        }
                    }else{
                        $result->close();
                        throw new Exception('Error in the next function: '.__FUNCTION__.'. Error message: '.$this->connect->error);
                        return;
                    }
                }
                $result->close();
            }
     
            private function inserts(){
                foreach($this->tables as $k => $v){
                    if($result = $this->connect->query("SELECT * FROM `".$v['NAME']."`")){
                        $insert = "INSERT INTO `".$v['NAME']."` (".implode(',', $v['FIELDS']).") VALUES ";
                        $values = array();
                        while($row = $result->fetch_array()){
                            $val = array();
                            foreach($v['FIELDS'] as $f){
                                $f = str_replace('`', '', $f);
                                $val[] = '\''.$row[$f].'\'';
                            }
                            $values[] = "\n(".implode(",",$val).")";
                        }
                        $this->tables[$k]['INSERT'] = $insert.implode(',',$values);
                    }else{
                        throw new Exception('Error in the next function: '.__FUNCTION__.'. Error message: '.$this->connect->error);
                        $result->close();
                        return;
                    }
                }
                $result->close();
            }
     
            private function toString(){
                foreach($this->tables as $k => $v){
                    $this->string .= $v['CREATE'].";\n\n";
                    $this->string .= $v['INSERT'].";\n\n";
                }
            }
     
            private function copyToFtp($file){
                $ftpfile = substr($this->options['FTP_PATH'], -1) == '/' ? 'db_backup_'.$date.'.sql' : '/db_backup_'.$date.'.sql';
     
                if($ftp = ftp_connect($this->options['FTP_HOST'])){
                    if(ftp_login($ftp, $this->options['FTP_USERNAME'], $this->options['FTP_PASSWORD'])){
                        if(!ftp_put($ftp, $ftpfile, $file, FTP_ASCII)){
                            throw new Exception('FTP put file error');      
                        }
                    }else{
                        throw new Exception('FTP login error');  
                    }
                    ftp_close($ftp);  
                }else{
                    throw new Exception('FTP connection error');  
                }
     
            }
     
            private function save(){
                $date = date('Y-m-d-H-i-s');
                $file = substr($this->options['PATH'], -1) == '/' ? 'db_backup_'.$date.'.sql' : '/db_backup_'.$date.'.sql';
     
                if(@file_put_contents($file, $this->string)){
                    if($this->options['FTP'] === true){
                        $this->copyToFtp($file);
                    }    
                }else{
                    throw new Exception('Error in the next function: '.__FUNCTION__.'. Error message: File save failed!');    
                }
            }
     
            public function __destruct(){
                $this->connect->close();
            }
        }
    ?>

  8. #8
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 100
    Points
    19 100
    Billets dans le blog
    17
    Par défaut
    A la base, il faut juste ajouter ceci:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php 
    class model_sqldump extends abstract_model{
     
    	//profil de connexion
    	protected $sConfig='mysqlExple';

    Mais dans votre code vous faites des requetes en execution et des requetes de recupération de données

    Pour les executions ce serait
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->getSgbd()->getPdo->execute('ma reuqte')

    Pour celle de récupération
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $tRow=$this->findMany('SELECT mon champ from maTable')
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  9. #9
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2013
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2013
    Messages : 201
    Points : 75
    Points
    75
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $result = $this->connect->query('SHOW TABLES')
    je met
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $result = $this->getSgbd()->getPdo->execute('SHOW TABLES')
    et pour la méthode charset()?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->connect->set_charset($this->options['CHARSET'])
    methode destruct()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->connect->close();
    et pour ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    throw new Exception('Connection error: '.$this->connect->connect_error);

  10. #10
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 100
    Points
    19 100
    Billets dans le blog
    17
    Par défaut
    La couche modèle s'appuie sur pdo
    http://php.net/manual/fr/book.pdo.php
    donc à la place de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $result = $this->connect->query('SHOW TABLES')
    je met
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $result = $this->getSgbd()->getPdo->execute('SHOW TABLES')
    oui

    et pour la méthode charset()?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->connect->set_charset($this->options['CHARSET'])
    A priori non, changez simplement le charset dans le fichier de connexion
    $db = new PDO('dblib:host=your_hostname;dbname=your_db;charset=UTF-8', $user, $pass);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pdoMysql.dsn="mysql:dbname=blog;host=localhost";charset=UTF-8
    methode destruct()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->connect->close();
    et pour ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    throw new Exception('Connection error: '.$this->connect->connect_error);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    throw new Exception('Connection error: '.$this->getSgbd()->getPdo()->errorInfo())
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  11. #11
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2013
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2013
    Messages : 201
    Points : 75
    Points
    75
    Par défaut
    je comprend pas votre citation. C'est un exemple c'est ça? ou dois-je modifier le fichier connexion.php avec.

    Actuellement mon fichier connexion est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ;<?php die()?>
    [db]
    pdoMysql.dsn="mysql:dbname=**;host=**";charset=UTF-8
    pdoMysql.sgbd=pdo_mysql
    pdoMysql.hostname=**
    pdoMysql.database=**
    pdoMysql.username=**
    pdoMysql.password=**

    Dans mon model du coup je vire la methode charset()?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    private function charset(){
                if(!$this->connect->set_charset($this->options['CHARSET'])){
                    throw new Exception('Error in the next function: '.__FUNCTION__.'. Error message: '.$this->getSgbd()->getPdo()->errorInfo());
                }
            }
    et pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public function __destruct(){
                $this->connect->close();
    Je met ça ou c'est pas la peine et je l'enlève?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public function __destruct(){
               $this->getSgbd()->getPdo->close();

  12. #12
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 100
    Points
    19 100
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par pitu69 Voir le message
    je comprend pas votre citation. C'est un exemple c'est ça? ou dois-je modifier le fichier connexion.php avec.

    Actuellement mon fichier connexion est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ;<?php die()?>
    [db]
    pdoMysql.dsn="mysql:dbname=**;host=**";charset=UTF-8
    pdoMysql.sgbd=pdo_mysql
    pdoMysql.hostname=**
    pdoMysql.database=**
    pdoMysql.username=**
    pdoMysql.password=**
    il faut juste changer votre variable ".dsn" de votre profil de connexion


    Citation Envoyé par pitu69 Voir le message
    Dans mon model du coup je vire la methode charset()?
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    private function charset(){
                if(!$this->connect->set_charset($this->options['CHARSET'])){
                    throw new Exception('Error in the next function: '.__FUNCTION__.'. Error message: '.$this->getSgbd()->getPdo()->errorInfo());
                }
            }
    Exact

    Citation Envoyé par pitu69 Voir le message
    et pour
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public function __destruct(){
                $this->connect->close();
    Je met ça ou c'est pas la peine et je l'enlève?
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public function __destruct(){
               $this->getSgbd()->getPdo->close();
    Pas nécessaire en effet, la connexion se fermera à la fin de la page
    Sinon il y a la méthode closeCursor mais c'est pour réutilisée une requête
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  13. #13
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2013
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2013
    Messages : 201
    Points : 75
    Points
    75
    Par défaut
    Merci,

    Pour faire une sauvegarde j’appelais la classe j'avais 2 fichiers
    la classe et le fichier d'appel.
    La classe je l'ai mis dans model/model gestionBase.php
    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
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    <?php 
    class model_sqldump extends abstract_model{
     
    //profil de connexion
    protected $sConfig='pdoMysql';
     
     
     
    private $tables = array();
    private $options = array(
        'MySQL_HOST' => '',
        'MySQL_USERNAME' => '',
        'MySQL_PASSWORD' => '',
        'MySQL_DATABASE' => '',
        'CHARSET' => 'UTF8',
        'PATH' => '/',
        'FTP' => false,
        'FTP_HOST' => '',
        'FTP_USERNAME' => '',
        'FTP_PASSWORD' => '',
        'FTP_PATH' => '/'
     
    );
     
    private $string = "SET SQL_MODE=\"NO_AUTO_VALUE_ON_ZERO\";\n\n";
    private $connect;
     
        public static function getInstance(){
        return self::_getInstance(__CLASS__);
        }
     
        public function __construct($options = array()){
            foreach($options as $k => $v){
                $this->options[$k] =  $v;
            }
     
            $this->connect();
            $this->charset();
            $this->tables();
            $this->create_tables();
            $this->columns();
            $this->inserts();
            $this->toString();
            $this->save();
        }
     
     
        private function tables(){
            if($result = $this->getSgbd()->getPdo->execute('SHOW TABLES')){
                while($row = $result->fetch_row()){
                     $this->tables[]['NAME'] = $row[0];
                }
                $result->close();
            }else{
                throw new Exception('Error in the next function: '.__FUNCTION__.'. Error message: '.$this->getSgbd()->getPdo()->errorInfo());
            }
        }
     
        private function create_tables(){
            foreach($this->tables as $k => $v){
                if($row = $this->getSgbd()->getPdo->execute("SHOW CREATE TABLE ".$v['NAME'])->fetch_row()){
                    $this->tables[$k]['CREATE'] = 'DROP TABLE '.$v['NAME'].";\n\n".$row[1];
                }else{
                    throw new Exception('Error in the next function: '.__FUNCTION__.'. Error message: '.$this->getSgbd()->getPdo()->errorInfo());    
                }
            }
        }
     
        private function columns(){
            foreach($this->tables as $k => $v){
                if($result = $this->getSgbd()->getPdo->execute("SHOW COLUMNS FROM ".$v['NAME'])){
                    while($row = $result->fetch_row()){
                        $this->tables[$k]['FIELDS'][] = '`'.$row[0].'`';
                    }
                }else{
                    $result->close();
                    throw new Exception('Error in the next function: '.__FUNCTION__.'. Error message: '.$this->getSgbd()->getPdo()->errorInfo());
                    return;
                }
            }
            $result->close();
        }
     
        private function inserts(){
            foreach($this->tables as $k => $v){
                if($result =$this->findMany("SELECT * FROM `".$v['NAME']."`")){
                    $insert = "INSERT INTO `".$v['NAME']."` (".implode(',', $v['FIELDS']).") VALUES ";
                    $values = array();
                    while($row = $result->fetch_array()){
                        $val = array();
                        foreach($v['FIELDS'] as $f){
                            $f = str_replace('`', '', $f);
                            $val[] = '\''.$row[$f].'\'';
                        }
                        $values[] = "\n(".implode(",",$val).")";
                    }
                    $this->tables[$k]['INSERT'] = $insert.implode(',',$values);
                }else{
                    throw new Exception('Error in the next function: '.__FUNCTION__.'. Error message: '.$this->getSgbd()->getPdo()->errorInfo());
                    $result->close();
                    return;
                }
            }
            $result->close();
        }
     
        private function toString(){
            foreach($this->tables as $k => $v){
                $this->string .= $v['CREATE'].";\n\n";
                $this->string .= $v['INSERT'].";\n\n";
            }
        }
     
        private function copyToFtp($file){
            $ftpfile = substr($this->options['FTP_PATH'], -1) == '/' ? 'db_backup_'.$date.'.sql' : '/db_backup_'.$date.'.sql';
     
            if($ftp = ftp_connect($this->options['FTP_HOST'])){
                if(ftp_login($ftp, $this->options['FTP_USERNAME'], $this->options['FTP_PASSWORD'])){
                    if(!ftp_put($ftp, $ftpfile, $file, FTP_ASCII)){
                        throw new Exception('FTP put file error');      
                    }
                }else{
                    throw new Exception('FTP login error');  
                }
                ftp_close($ftp);  
            }else{
                throw new Exception('FTP connection error');  
            }
     
        }
     
        private function save(){
            $date = date('Y-m-d-H-i-s');
            $file = substr($this->options['PATH'], -1) == '/' ? 'db_backup_'.$date.'.sql' : '/db_backup_'.$date.'.sql';
     
            if(@file_put_contents($file, $this->string)){
                if($this->options['FTP'] === true){
                    $this->copyToFtp($file);
                }    
            }else{
                throw new Exception('Error in the next function: '.__FUNCTION__.'. Error message: File save failed!');    
            }
        }
     
    }
    Mon fichier qui appelais la classe j'avais
    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
    <?php 
        require_once('sql_dump.php');
     
        try{
            new sql_dump(array(
                'MySQL_HOST' => 'localhost', 
                'MySQL_USERNAME' => '_root::getConfigVar('db.mysqlExple.username')', 
                'MySQL_PASSWORD' => '', 
                'MySQL_DATABASE' => 'secu02',
                ));
            echo "sauvegarde faite";
        }catch(exception $e){
            echo $e->getMessage();
        }
    ?>
    Comment dois-je l’écrire dans le module gestionBase/main.php méthode sauve()
    J'ai des milliers de tests sans y parvenir.
    mon point de départ est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	public function _sauve(){
     
    		$oView=new _view('gestionBase::sauve');
    		$this->oLayout->add('main',$oView);
    	}

  14. #14
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 100
    Points
    19 100
    Billets dans le blog
    17
    Par défaut
    Votre classe modèle s appelle model_sqldump.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $oSqldump=new model_sqldump;
    $oSqldump->votreMethode();
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  15. #15
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2013
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2013
    Messages : 201
    Points : 75
    Points
    75
    Par défaut
    Bonjour,

    donc ma méthode sauve serait ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public function _sauve(){
    	        $oSqldump=new model_sqldump;
                    $oSqldump->sql_dump();
    		$oView=new _view('gestionBase::sauve');
    		$this->oLayout->add('main',$oView);
    	}

  16. #16
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 100
    Points
    19 100
    Billets dans le blog
    17
    Par défaut
    oui
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  17. #17
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2013
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2013
    Messages : 201
    Points : 75
    Points
    75
    Par défaut
    J'ai une erreur et je comprend pas comment la resoudre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Undefined property: sgbd_pdo_mysql::$getPdo
    #0 /opt/lampp/htdocs/tests/mkframework/data/genere/secu06/model/model_sqldump.php(48): exception_error_handler(8, 'Undefined prope...', '/opt/lampp/htdo...', 48, Array)
    #1 /opt/lampp/htdocs/tests/mkframework/data/genere/secu06/model/model_sqldump.php(36): model_sqldump->tables()
    le fichier model_sqldump.php
    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
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
     
    <?php 
    class model_sqldump extends abstract_model{
     
    //profil de connexion
    protected $sConfig='pdoMysql';
     
     
     
    private $tables = array();
    private $options = array(
        'MySQL_HOST' => '',
        'MySQL_USERNAME' => '',
        'MySQL_PASSWORD' => '',
        'MySQL_DATABASE' => '',
        'CHARSET' => 'UTF8',
        'PATH' => '/',
        'FTP' => false,
        'FTP_HOST' => '',
        'FTP_USERNAME' => '',
        'FTP_PASSWORD' => '',
        'FTP_PATH' => '/'
     
    );
     
    private $string = "SET SQL_MODE=\"NO_AUTO_VALUE_ON_ZERO\";\n\n";
    private $connect;
     
        public static function getInstance(){
        return self::_getInstance(__CLASS__);
        }
     
        public function __construct($options = array()){
            foreach($options as $k => $v){
                $this->options[$k] =  $v;
            }
            $this->tables();
            $this->create_tables();
            $this->columns();
            $this->inserts();
            $this->toString();
            $this->save();
        }
     
     
        private function tables(){
            if($result = $this->getSgbd()->getPdo->execute('SHOW TABLES')){
                while($row = $result->fetch_row()){
                     $this->tables[]['NAME'] = $row[0];
                }
                $result->close();
            }else{
                throw new Exception('Error in the next function: '.__FUNCTION__.'. Error message: '.$this->getSgbd()->getPdo()->errorInfo());
            }
        }
     
        private function create_tables(){
            foreach($this->tables as $k => $v){
                if($row = $this->getSgbd()->getPdo->execute("SHOW CREATE TABLE ".$v['NAME'])->fetch_row()){
                    $this->tables[$k]['CREATE'] = 'DROP TABLE '.$v['NAME'].";\n\n".$row[1];
                }else{
                    throw new Exception('Error in the next function: '.__FUNCTION__.'. Error message: '.$this->getSgbd()->getPdo()->errorInfo());    
                }
            }
        }
     
        private function columns(){
            foreach($this->tables as $k => $v){
                if($result = $this->getSgbd()->getPdo->execute("SHOW COLUMNS FROM ".$v['NAME'])){
                    while($row = $result->fetch_row()){
                        $this->tables[$k]['FIELDS'][] = '`'.$row[0].'`';
                    }
                }else{
                    $result->close();
                    throw new Exception('Error in the next function: '.__FUNCTION__.'. Error message: '.$this->getSgbd()->getPdo()->errorInfo());
                    return;
                }
            }
            $result->close();
        }
     
        private function inserts(){
            foreach($this->tables as $k => $v){
                if($result =$this->findMany("SELECT * FROM `".$v['NAME']."`")){
                    $insert = "INSERT INTO `".$v['NAME']."` (".implode(',', $v['FIELDS']).") VALUES ";
                    $values = array();
                    while($row = $result->fetch_array()){
                        $val = array();
                        foreach($v['FIELDS'] as $f){
                            $f = str_replace('`', '', $f);
                            $val[] = '\''.$row[$f].'\'';
                        }
                        $values[] = "\n(".implode(",",$val).")";
                    }
                    $this->tables[$k]['INSERT'] = $insert.implode(',',$values);
                }else{
                    throw new Exception('Error in the next function: '.__FUNCTION__.'. Error message: '.$this->getSgbd()->getPdo()->errorInfo());
                    $result->close();
                    return;
                }
            }
            $result->close();
        }
     
        private function toString(){
            foreach($this->tables as $k => $v){
                $this->string .= $v['CREATE'].";\n\n";
                $this->string .= $v['INSERT'].";\n\n";
            }
        }
     
        private function copyToFtp($file){
            $ftpfile = substr($this->options['FTP_PATH'], -1) == '/' ? 'db_backup_'.$date.'.sql' : '/db_backup_'.$date.'.sql';
     
            if($ftp = ftp_connect($this->options['FTP_HOST'])){
                if(ftp_login($ftp, $this->options['FTP_USERNAME'], $this->options['FTP_PASSWORD'])){
                    if(!ftp_put($ftp, $ftpfile, $file, FTP_ASCII)){
                        throw new Exception('FTP put file error');      
                    }
                }else{
                    throw new Exception('FTP login error');  
                }
                ftp_close($ftp);  
            }else{
                throw new Exception('FTP connection error');  
            }
     
        }
     
        private function save(){
            $date = date('Y-m-d-H-i-s');
            $file = substr($this->options['PATH'], -1) == '/' ? 'db_backup_'.$date.'.sql' : '/db_backup_'.$date.'.sql';
     
            if(@file_put_contents($file, $this->string)){
                if($this->options['FTP'] === true){
                    $this->copyToFtp($file);
                }    
            }else{
                throw new Exception('Error in the next function: '.__FUNCTION__.'. Error message: File save failed!');    
            }
        }
     
    }
    Le problème est à la fonction tables() ligne 46

  18. #18
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 100
    Points
    19 100
    Billets dans le blog
    17
    Par défaut
    Il manque les parenthèse, c'est une function:
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  19. #19
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2013
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2013
    Messages : 201
    Points : 75
    Points
    75
    Par défaut
    Bonsoir,
    Là j'ai besoin d'aide je vois ce que je dois mettre. : Cry:

    Est-ce les paramètres: connexions, base, utilisateur, PW?
    Mais il sont renseigné dans connexion.ini.php.

  20. #20
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 100
    Points
    19 100
    Billets dans le blog
    17
    Par défaut
    Je parlais de la ligne 46
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     private function tables(){
            if($result = $this->getSgbd()->getPdo->execute('SHOW TABLES')){
    Il faut mettre les parenthèses à getPdo()

    ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     private function tables(){
            if($result = $this->getSgbd()->getPdo()->execute('SHOW TABLES')){
    idem pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     private function create_tables(){
            foreach($this->tables as $k => $v){
                if($row = $this->getSgbd()->getPdo()->execute("SHOW CREATE TABLE ".$v['NAME'])->fetch_row()){

    remplacez tous les par
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. Sauvegarde d'une base de données
    Par dcollart dans le forum Informix
    Réponses: 8
    Dernier message: 28/05/2006, 00h23
  2. Sauvegarde et securite base oracle 9i sous linux
    Par shaun_the_sheep dans le forum Administration
    Réponses: 2
    Dernier message: 16/10/2004, 19h24
  3. Réponses: 3
    Dernier message: 09/09/2004, 11h31
  4. comparaison de 2 sauvegardes de la base de registres
    Par cprogil dans le forum Composants VCL
    Réponses: 4
    Dernier message: 26/05/2004, 18h53
  5. sauvegarde d'une base ailleurs qu'en local
    Par jbat dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 13/01/2004, 11h25

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