Пример #1
0
 /**
  * Método que Abri/Gera a Conexão com o Banco de Dados
  * 
  * Esse método que gera a String de Conexão para o PDO e gera a conexão PDO
  * passando para o PDO a String de Conexão mais o Usuário e Senha 
  * armazenados nos atributos desta classe, que vão conter na realidade
  * aquilo que foi configurado no Config.php do Banco Da Dados.
  * 
  * @return \PDO -> Conexão com o Banco de Dados do Tipo PDO
  */
 public function AbrirConexao()
 {
     //Montando String de Conexão
     /*
      * Cuidado com a String de Conexão ela tem que estar devidamente escrita
      * nessa ordem, não pode ter espaço entre o 'mysql:', os parâmetros têm
      * que estar desse jeitinho sem os espaços entre eles sem o espaço entre
      * os iguais, os pontos e vírgula no final, tudo direitinho. Pode usar 
      * esse exemplo para todos! Por que isso não muda, segui esse padrão.
      */
     $StringConexao = 'mysql:host=' . $this->Host . ';port=' . $this->Porta . ';dbname=' . $this->BancoDeDados . ';charset=' . $this->CharsetDoBanco . ';';
     //Tentando realizar a conexão
     try {
         //Gerando conexão
         $Link_De_Conexao = new PDO($StringConexao, $this->Usuario, $this->Senha);
         //Retornando Conexão para o método solicitante.
         return $Link_De_Conexao;
     } catch (Exception $ex) {
         //Instanciando Classe para tratamento de erro.
         $Mensagem = new TratamentoMensagens();
         //Problema com a conexão, informando erro.
         $Mensagem->MsgErro('Não foi possivel realizar a conexão com o Banco de Dados, cheque o arquivo de configuração de conexão com o Banco de Dados, Descrição do erro : ' . $ex->getMessage(), NULL, NULL);
     }
 }
 /**
  * Método que cria os arquivos DAO das Tabelas do Banco de dados.
  * Esse método lê o vetor que armazenou todas as tabelas do Banco e posição
  * por posição obtem a estrutura da tabela e cria a Classe DAO a partir 
  * dessa leitura. 
  * 
  * @param String $CaminhoDestino Caminho de Destino dos Arquivos DAO gerados.
  * @param /Array $ArrayTabelas Array com as tabelas do banco de dados.
  * @return Boolean TRUE ou FALSE dependendo do sucesso ou falha da operação.
  */
 public function GeradorDAO($CaminhoDestino, $ArrayTabelas)
 {
     for ($IArrayTabela = 0; $IArrayTabela < count($ArrayTabelas); $IArrayTabela++) {
         $Conexao = new Conexao();
         //Comando que obtem a estrutura da Tabela no Banco de Dados apontado. DESC Nome_Tabela;
         $Sql = 'DESC ' . $ArrayTabelas[$IArrayTabela];
         $Consulta = $Conexao->AbrirConexao()->prepare($Sql);
         $StatusConsulta = $Consulta->execute();
         if ($StatusConsulta == FALSE) {
             $TratamentoMensagens = new TratamentoMensagens();
             $TratamentoMensagens->MsgErro('Erro na obtenção da Estrutura da tabela : ' . $ArrayTabelas[$IArrayTabela], NULL, NULL);
         } else {
             $TratamentoMensagens = new TratamentoMensagens();
             $TratamentoMensagens->MsgSucesso('Estrutura da tabela : ' . $ArrayTabelas[$IArrayTabela] . ' obtida com sucesso!', NULL, NULL);
             if (file_exists($CaminhoDestino . '/' . $ArrayTabelas[$IArrayTabela] . 'DAO.Class.php') == TRUE) {
                 $TratamentoMensagens = new TratamentoMensagens();
                 $TratamentoMensagens->MsgAlerta('O Arquivo : ' . $CaminhoDestino . '/' . $ArrayTabelas[$IArrayTabela] . 'DAO.Class.php' . ' já existe na pasta, excluindo arquivo DAO para geração de um novo arquivo DAO atualizado.', NULL, NULL);
                 $StatusExclusaoArquivo = unlink($CaminhoDestino . '/' . $ArrayTabelas[$IArrayTabela] . 'DAO.Class.php');
                 if ($StatusExclusaoArquivo == TRUE) {
                     $TratamentoMensagens->MsgInformacao('Arquivo : ' . $CaminhoDestino . '/' . $ArrayTabelas[$IArrayTabela] . 'DAO.Class.php' . ' Excluido com sucesso!', NULL, NULL);
                     $ArquivoDAO = fopen($CaminhoDestino . '/' . $ArrayTabelas[$IArrayTabela] . 'DAO.Class.php', 'w+');
                     if ($ArquivoDAO == FALSE) {
                         $TratamentoMensagens->MsgErro('Não foi possivel criar o arquivo DAO.', NULL, NULL);
                     }
                 } else {
                     $TratamentoMensagens->MsgErro('Não conseguimos excluir o Arquivo : ' . $CaminhoDestino . '/' . $ArrayTabelas[$IArrayTabela] . 'DAO.Class.php' . 'Isso pode acarretar erros na geração dos arquivos DAO.', NULL, NULL);
                 }
             } else {
                 $ArquivoDAO = fopen($CaminhoDestino . '/' . $ArrayTabelas[$IArrayTabela] . 'DAO.Class.php', 'w+');
             }
             if ($ArquivoDAO == FALSE) {
                 $TratamentoMensagens->MsgErro('Não foi possivel criar o arquivo DAO.', NULL, NULL);
             } else {
                 $Tab = '    ';
                 //Espaçamento de um TAB.
                 /*
                  * ATENÇÃO PARA MELHOR COMPATIBILIDADE COM AS IDE'S NÃO USAMOS 
                  * ACENTUAÇÃO NAS EXPREÇÕES MESMO NOS COMENTÁRIOS.
                  * NÓS NÃO COLOCAMOS ACENTO EM NADA!
                  */
                 $TratamentoMensagens->MsgSucesso('Arquivo DAO : ' . $CaminhoDestino . '/' . $ArrayTabelas[$IArrayTabela] . 'DAO.Class.php' . ' Criado com Sucesso, Gerando estrutura DAO...', NULL, NULL);
                 $Escrevendo = fwrite($ArquivoDAO, '<?php' . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoDAO, '/**' . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoDAO, ' * Descricao para ' . $ArrayTabelas[$IArrayTabela] . 'DAO.Class.php' . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoDAO, ' *' . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoDAO, ' * Data Access Object para a Tabela : ' . $ArrayTabelas[$IArrayTabela] . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoDAO, ' * ' . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoDAO, ' * @author GeneratorADO_PHP By: Thiago Teodoro Rodrigues' . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoDAO, ' */' . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoDAO, 'class ' . $ArrayTabelas[$IArrayTabela] . 'DAO {' . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoDAO, PHP_EOL);
                 $Escrevendo = fwrite($ArquivoDAO, $Tab . '//Atributos da Classe' . PHP_EOL);
                 while ($Fields = $Consulta->fetch(PDO::FETCH_ASSOC)) {
                     $Escrevendo = fwrite($ArquivoDAO, $Tab . 'private $' . $Fields['Field'] . ';' . PHP_EOL);
                 }
                 $Escrevendo = fwrite($ArquivoDAO, PHP_EOL);
                 $Escrevendo = fwrite($ArquivoDAO, PHP_EOL);
                 $Escrevendo = fwrite($ArquivoDAO, $Tab . '//Metodos de acesso GET|SET' . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoDAO, PHP_EOL);
                 $Escrevendo = fwrite($ArquivoDAO, PHP_EOL);
                 $Consulta->execute();
                 //Executando a Consulta novamente pois o último FETCH_ASSOC inutiliza a consulta depois de terminado.
                 while ($Fields = $Consulta->fetch(PDO::FETCH_ASSOC)) {
                     $Escrevendo = fwrite($ArquivoDAO, $Tab . '/**' . PHP_EOL);
                     $Escrevendo = fwrite($ArquivoDAO, $Tab . ' * Retorna o ' . $Fields['Field'] . ' do Objeto ' . $ArrayTabelas[$IArrayTabela] . 'DAO' . PHP_EOL);
                     $Escrevendo = fwrite($ArquivoDAO, $Tab . ' * ' . PHP_EOL);
                     $Escrevendo = fwrite($ArquivoDAO, $Tab . ' * @return ' . $Fields['Type'] . PHP_EOL);
                     $Escrevendo = fwrite($ArquivoDAO, $Tab . ' */' . PHP_EOL);
                     $Escrevendo = fwrite($ArquivoDAO, $Tab . 'public function get' . $Fields['Field'] . '() {' . PHP_EOL);
                     $Escrevendo = fwrite($ArquivoDAO, PHP_EOL);
                     $Escrevendo = fwrite($ArquivoDAO, $Tab . $Tab . 'return $this->' . $Fields['Field'] . ';' . PHP_EOL);
                     $Escrevendo = fwrite($ArquivoDAO, PHP_EOL);
                     $Escrevendo = fwrite($ArquivoDAO, $Tab . '}' . PHP_EOL);
                     $Escrevendo = fwrite($ArquivoDAO, PHP_EOL);
                 }
                 $Consulta->execute();
                 //Executando a Consulta novamente pois o último FETCH_ASSOC inutiliza a consulta depois de terminado.
                 while ($Fields = $Consulta->fetch(PDO::FETCH_ASSOC)) {
                     $Escrevendo = fwrite($ArquivoDAO, $Tab . '/**' . PHP_EOL);
                     $Escrevendo = fwrite($ArquivoDAO, $Tab . ' * "Seta" o(a) ' . $Fields['Field'] . ' do Objeto ' . $ArrayTabelas[$IArrayTabela] . 'DAO' . PHP_EOL);
                     $Escrevendo = fwrite($ArquivoDAO, $Tab . ' * ' . PHP_EOL);
                     $Escrevendo = fwrite($ArquivoDAO, $Tab . ' * @param ' . $Fields['Type'] . ' $' . $Fields['Field'] . PHP_EOL);
                     $Escrevendo = fwrite($ArquivoDAO, $Tab . ' */' . PHP_EOL);
                     $Escrevendo = fwrite($ArquivoDAO, $Tab . ' public function set' . $Fields['Field'] . '($' . $Fields['Field'] . ') {' . PHP_EOL);
                     $Escrevendo = fwrite($ArquivoDAO, PHP_EOL);
                     $Escrevendo = fwrite($ArquivoDAO, $Tab . $Tab . '$this->' . $Fields['Field'] . ' = $' . $Fields['Field'] . ';' . PHP_EOL);
                     $Escrevendo = fwrite($ArquivoDAO, PHP_EOL);
                     $Escrevendo = fwrite($ArquivoDAO, $Tab . '}' . PHP_EOL);
                     $Escrevendo = fwrite($ArquivoDAO, PHP_EOL);
                 }
                 $Escrevendo = fwrite($ArquivoDAO, '}' . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoDAO, PHP_EOL);
                 $Escrevendo = fwrite($ArquivoDAO, PHP_EOL);
                 $Escrevendo = fwrite($ArquivoDAO, '?>' . PHP_EOL);
             }
             fclose($ArquivoDAO);
             $TratamentoMensagens->MsgSucesso('Arquivo DAO : ' . $ArrayTabelas[$IArrayTabela] . 'DAO.Class.php gerado com Sucesso!', NULL, NULL);
         }
     }
 }
        $TratamentoMensagens->MsgErro('Erro na criação do diretório : ResultFiles/' . BANCODEDADOS, NULL, NULL);
    }
}
if (file_exists('ResultFiles/' . BANCODEDADOS . '/DAO') == TRUE) {
    $TratamentoMensagens = new TratamentoMensagens();
    $TratamentoMensagens->MsgAlerta('Diretório : ResultFiles/' . BANCODEDADOS . '/DAO já existe.', NULL, NULL);
} else {
    $StatusCriacaoDiretorio = mkdir('ResultFiles/' . BANCODEDADOS . '/DAO');
    if ($StatusCriacaoDiretorio == TRUE) {
        $TratamentoMensagens = new TratamentoMensagens();
        $TratamentoMensagens->MsgSucesso('Diretório : ResultFiles/' . BANCODEDADOS . '/DAO criado com sucesso!', NULL, NULL);
    } else {
        $TratamentoMensagens = new TratamentoMensagens();
        $TratamentoMensagens->MsgErro('Erro na criação do diretório : ResultFiles/' . BANCODEDADOS . '/DAO', NULL, NULL);
    }
}
if (file_exists('ResultFiles/' . BANCODEDADOS . '/CRUD') == TRUE) {
    $TratamentoMensagens = new TratamentoMensagens();
    $TratamentoMensagens->MsgAlerta('Diretório : ResultFiles/' . BANCODEDADOS . '/CRUD já existe.', NULL, NULL);
} else {
    $StatusCriacaoDiretorio = mkdir('ResultFiles/' . BANCODEDADOS . '/CRUD');
    if ($StatusCriacaoDiretorio == TRUE) {
        $TratamentoMensagens = new TratamentoMensagens();
        $TratamentoMensagens->MsgSucesso('Diretório : ResultFiles/' . BANCODEDADOS . '/CRUD criado com sucesso!', NULL, NULL);
    } else {
        $TratamentoMensagens = new TratamentoMensagens();
        $TratamentoMensagens->MsgErro('Erro na criação do diretório : ResultFiles/' . BANCODEDADOS . '/CRUD', NULL, NULL);
    }
}
$GeneratorDAO = new GeneratorDAO('ResultFiles/' . BANCODEDADOS . '/DAO');
$GeneratorCRUD = new GeneratorCRUD('ResultFiles/' . BANCODEDADOS . '/CRUD');
 /**
  * Método que lê as estruturas das tabelas do banco de dados, e monta um
  * arquivo de classe do Tipo CRUD com as operações básicas de banco de dados
  * 
  * As operações geradas aqui são :
  * 
  * Insert;
  * Update;
  * ConsultaUnica {Por Chave Primaria};
  * ConsultaGeral {Array com Objetos DAO da Tabela};
  * Delete {Por Chave Primaria}; 
  * 
  * @param String $CaminhoDestino Descrição : Caminho de Destino dos Arquivos CRUD
  * @param /Array $ArrayTabelasBanco Descrição : Array com as Tabelas do Banco de Dados
  */
 public function GeraCRUD($CaminhoDestino, $ArrayTabelasBanco)
 {
     for ($iArrayTabelas = 0; $iArrayTabelas < count($ArrayTabelasBanco); $iArrayTabelas++) {
         $Conexao = new Conexao();
         //Comando que obtem a estrutura da Tabela no Banco de Dados apontado. DESC Nome_Tabela;
         $Sql = 'DESC ' . $ArrayTabelasBanco[$iArrayTabelas];
         $Consulta = $Conexao->AbrirConexao()->prepare($Sql);
         $StatusExecucaoConsulta = $Consulta->execute();
         if ($StatusExecucaoConsulta == TRUE) {
             $TratamentoMensagens = new TratamentoMensagens();
             $TratamentoMensagens->MsgSucesso('Estrutura da tabela : ' . $ArrayTabelasBanco[$iArrayTabelas] . ' obtida com sucesso!', NULL, NULL);
             //Verificando a existencia do arquivo NomeDaTabelaCRUD.Class.php na pasta de destino apontada.
             if (file_exists($CaminhoDestino . '/' . $ArrayTabelasBanco[$iArrayTabelas] . 'CRUD.Class.php')) {
                 $TratamentoMensagens = new TratamentoMensagens();
                 $TratamentoMensagens->MsgAlerta('O arquivo : ' . $ArrayTabelasBanco[$iArrayTabelas] . 'CRUD.Class.php já existe na pasta, efetuando exclusão do arquivo CRUD, para geração de um novo Arquivo CRUD atualizado.', NULL, NULL);
                 $StatusExclusaoArquivo = unlink($CaminhoDestino . '/' . $ArrayTabelasBanco[$iArrayTabelas] . 'CRUD.Class.php');
                 if ($StatusExclusaoArquivo == TRUE) {
                     $TratamentoMensagens = new TratamentoMensagens();
                     $TratamentoMensagens->MsgInformacao('Arquivo : ' . $ArrayTabelasBanco[$iArrayTabelas] . 'CRUD.Class.php excluido com sucesso. Criando novo arquivo CRUD.', NULL, NULL);
                     $ArquivoCRUD = fopen($CaminhoDestino . '/' . $ArrayTabelasBanco[$iArrayTabelas] . 'CRUD.Class.php', 'w+');
                     if ($ArquivoCRUD == FALSE) {
                         $TratamentoMensagens = new TratamentoMensagens();
                         $TratamentoMensagens->MsgErro('Houve um erro na criação do arquivo : ' . $ArrayTabelasBanco[$iArrayTabelas] . 'CRUD.Class.php, O arquivo não foi criado em : ' . $CaminhoDestino . '/' . $ArrayTabelasBanco[$iArrayTabelas] . 'CRUD.Class.php', NULL, NULL);
                     }
                 } else {
                     $TratamentoMensagens = new TratamentoMensagens();
                     $TratamentoMensagens->MsgErro('Houve um erro ao excluir o arquivo : ' . $ArrayTabelasBanco[$iArrayTabelas] . 'CRUD.Class.php, isso poderá afetar o resultado final da classe.', NULL, NULL);
                 }
             } else {
                 $ArquivoCRUD = fopen($CaminhoDestino . '/' . $ArrayTabelasBanco[$iArrayTabelas] . 'CRUD.Class.php', 'w+');
                 if ($ArquivoCRUD == FALSE) {
                     $TratamentoMensagens = new TratamentoMensagens();
                     $TratamentoMensagens->MsgErro('Houve um erro na criação do arquivo : ' . $ArrayTabelasBanco[$iArrayTabelas] . 'CRUD.Class.php, O arquivo não foi criado em : ' . $CaminhoDestino . '/' . $ArrayTabelasBanco[$iArrayTabelas] . 'CRUD.Class.php', NULL, NULL);
                 }
             }
             $Tab = '    ';
             //Espaçamento de um TAB.
             /*
              * ATENÇÃO PARA MELHOR COMPATIBILIDADE COM AS IDE'S NÃO USAMOS 
              * ACENTUAÇÃO NAS EXPREÇÕES MESMO NOS COMENTÁRIOS.
              * NÓS NÃO COLOCAMOS ACENTO EM NADA!
              */
             $TratamentoMensagens = new TratamentoMensagens();
             $TratamentoMensagens->MsgSucesso('Arquivo CRUD : ' . $CaminhoDestino . '/' . $ArrayTabelasBanco[$iArrayTabelas] . 'CRUD.Class.php' . ' Criado com Sucesso, Gerando estrutura CRUD...', NULL, NULL);
             $Escrevendo = fwrite($ArquivoCRUD, '<?php' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, '/**' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, ' * Descricao para ' . $ArrayTabelasBanco[$iArrayTabelas] . 'CRUD.Class.php' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, ' * ' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, ' * Classe do Tipo CRUD com as principais operacoes de Banco de Dados para a Tabela ' . $ArrayTabelasBanco[$iArrayTabelas] . '.' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, ' * ' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, ' * Operacoes Disponiveis : ' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, ' * ' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, ' * Insert;' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, ' * Update;' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, ' * ConsultaUnica {Por Chave Primaria};' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, ' * ConsultaGeral {Array Com Objetos DAO da Tabela};' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, ' * Delete {Por Chave Primaria};' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, ' * ' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, ' * @author GeneratorADO_PHP By: Thiago Teodoro Rodrigues' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, ' */ ' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, 'class ' . $ArrayTabelasBanco[$iArrayTabelas] . 'CRUD {' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, PHP_EOL);
             //Gerando Insert
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . '/**' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . ' * Metodo que realiza o Insert na tabela : ' . $ArrayTabelasBanco[$iArrayTabelas] . '.' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . ' * ' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . ' * Caso o Insert aconteca de maneira adequada eh retornado TRUE, caso ocorra algum problema eh retornado FALSE.' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . ' * ' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . ' * Quando for executar insert, nao preencha a chave primaria do objeto, ou se for preencher tenha a certeza de enviar uma chave ' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . ' * primaria que nao exista no banco de dados, se voce nao preencher a chave primaria ele vai executar o AUTO_INCREMENT do banco ' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . ' * de dados inserindo o dado enviado na ultima posicao. MAS ISSO SOH VAI ACONTECER se a tabela do banco de dados tiver um Chave ' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . ' * Primaria de AUTO_INCREMENT' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . ' * ' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . ' * @param \\' . $ArrayTabelasBanco[$iArrayTabelas] . 'DAO $' . $ArrayTabelasBanco[$iArrayTabelas] . 'DAO Descricao : Dados a serem inseridos na Tabela por objeto do tipo ' . $ArrayTabelasBanco[$iArrayTabelas] . 'DAO.' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . ' * @return boolean Descricao : Informa se a operacao foi bem sucedida ou nao.' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . ' */ ' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . 'public function Insert' . $ArrayTabelasBanco[$iArrayTabelas] . '($' . $ArrayTabelasBanco[$iArrayTabelas] . 'DAO) {' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, PHP_EOL);
             $StringCamposTabelaInsert = '';
             while ($Fields = $Consulta->fetch(PDO::FETCH_ASSOC)) {
                 if ($StringCamposTabelaInsert == '') {
                     $StringCamposTabelaInsert = $Fields['Field'];
                 } else {
                     $StringCamposTabelaInsert = $StringCamposTabelaInsert . ', ' . $Fields['Field'];
                 }
             }
             $Consulta->execute();
             //Executando a Consulta novamente pois o último FETCH_ASSOC inutiliza a consulta depois de terminado.
             $StringParametrosCamposTabelaInsert = '';
             while ($Fields = $Consulta->fetch(PDO::FETCH_ASSOC)) {
                 if ($StringParametrosCamposTabelaInsert == '') {
                     $StringParametrosCamposTabelaInsert = ':' . $Fields['Field'];
                 } else {
                     $StringParametrosCamposTabelaInsert = $StringParametrosCamposTabelaInsert . ', :' . $Fields['Field'];
                 }
             }
             // A barra (/) dentro da string permit escrever a aspa simples sem precisar concatenar ela sinaliza que é para escrever a aspa
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . '$Sql = \'INSERT INTO ' . $ArrayTabelasBanco[$iArrayTabelas] . '(' . $StringCamposTabelaInsert . ') VALUES (' . $StringParametrosCamposTabelaInsert . ');\';' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . '$Conexao = new Conexao();' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . '$Insert = $Conexao->AbrirConexao()->prepare($Sql);' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . PHP_EOL);
             $Consulta->execute();
             //Executando a Consulta novamente pois o último FETCH_ASSOC inutiliza a consulta depois de terminado.
             while ($Fields = $Consulta->fetch(PDO::FETCH_ASSOC)) {
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . '$Insert->bindValue(\':' . $Fields['Field'] . '\', $' . $ArrayTabelasBanco[$iArrayTabelas] . 'DAO->get' . $Fields['Field'] . '());' . PHP_EOL);
             }
             $Escrevendo = fwrite($ArquivoCRUD, PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . '$StatusExecucaoInsert = $Insert->execute();' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . 'if($StatusExecucaoInsert == TRUE) {' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . 'return TRUE;' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . '} else {' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . '$ArrayErro = $Insert->errorInfo(); //A posição 2 do ArrayErro vai armezenar a Descrição do Erro.' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . '$TratamentoMensagens = new TratamentoMensagens();' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . '$TratamentoMensagens->MsgErro(\'Erro no processamento do Insert no Banco de Dados. Descrição do Erro : \' . $ArrayErro[2], NULL, NULL);' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . 'return FALSE;' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . '}' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . '}' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, PHP_EOL);
             //Fim da Geração do Insert
             //Gerando Update
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . '/**' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . ' * Metodo que realiza o Update na tabela : ' . $ArrayTabelasBanco[$iArrayTabelas] . '.' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . ' * ' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . ' * Caso o Update aconteca de maneira adequada eh retornado TRUE, caso ocorra algum problema eh retornado FALSE.' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . ' * ' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . ' * @param \\' . $ArrayTabelasBanco[$iArrayTabelas] . 'DAO $' . $ArrayTabelasBanco[$iArrayTabelas] . 'DAO Descricao : Dados a serem atualizados na Tabela por objeto do tipo ' . $ArrayTabelasBanco[$iArrayTabelas] . 'DAO.' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . ' * @return boolean Descricao : Informa se a operacao foi bem sucedida ou nao.' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . ' */ ' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . 'public function Update' . $ArrayTabelasBanco[$iArrayTabelas] . '($' . $ArrayTabelasBanco[$iArrayTabelas] . 'DAO) {' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, PHP_EOL);
             $Consulta->execute();
             //Executando a Consulta novamente pois o último FETCH_ASSOC inutiliza a consulta depois de terminado.
             $StringCamposJuntoComParametrosUpdate = '';
             $NumeroDeCamposObtidos = $Consulta->rowCount();
             while ($Fields = $Consulta->fetch(PDO::FETCH_ASSOC)) {
                 /*
                  * A primary Key é condição de Update então a String
                  * tem que ser montada com o Where na codição da 
                  * Primary Key no final da Instrução SQL.
                  *  
                  * Então eu identifico a Primary Key e guardo ela 
                  * depois que eu monto todos os campos e parâmetros sem
                  * a primary Key eu vou lá e adiciono a primary key 
                  * como condição do Where. 
                  *
                  * ATENÇÃO, TABELAS SEM PRIMARY KEY NÃO VÃO DAR CERTO
                  * POIS VÃO FICAR SEM CONDIÇÃO DE UPDATE. 
                  * ENTÃO SE CASO EU NÃO IDENTIFICAR UMA PRIMARY KEY
                  * EU SIMPLISMENTE NÃO MONTO O UPDATE DEIXO
                  * UM COMENTÁRIO DIZENDO... //Tabela sem Chave Primaria
                  * impossivel criar Update adequadamente.
                  *  
                  */
                 if ($Fields['Key'] == 'PRI') {
                     $CampoPrimaryKey = $Fields['Field'];
                 } else {
                     //Se esse for o último campo a ser obtido, eu não posso colocar a virgula e o espaço no final (, )
                     if ($NumeroDeCamposObtidos == 1) {
                         $StringCamposJuntoComParametrosUpdate = $StringCamposJuntoComParametrosUpdate . $Fields['Field'] . ' = :' . $Fields['Field'];
                     } else {
                         //Se não é ultimo campo eu insiro o campo e coloco a virgula e o espaço no final.
                         $StringCamposJuntoComParametrosUpdate = $StringCamposJuntoComParametrosUpdate . $Fields['Field'] . ' = :' . $Fields['Field'] . ', ';
                     }
                 }
                 //DECREMENTANDO numero de campos para encontrar o ultimo camo e escrever ele de modo diferente.
                 $NumeroDeCamposObtidos--;
             }
             //SE o Campo Primary Key não existir eu não vou montar UPDATE por que não se da Update sem Where!!!
             //Checando a existencia da variavel pois se o campo não existir a variavel nem é criada
             if (isset($CampoPrimaryKey)) {
                 //Gerando a Clausulá WHERE
                 $CampoPrimaryKey = ' WHERE ' . $CampoPrimaryKey . ' = :' . $CampoPrimaryKey;
                 //Adicionando A CLAUSULÁ WHERE
                 $StringCamposJuntoComParametrosUpdate = $StringCamposJuntoComParametrosUpdate . $CampoPrimaryKey;
                 // A barra (/) dentro da string permit escrever a aspa simples sem precisar concatenar ela sinaliza que é para escrever a aspa
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . '$Sql = \'UPDATE ' . $ArrayTabelasBanco[$iArrayTabelas] . ' SET ' . $StringCamposJuntoComParametrosUpdate . '\';' . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . '$Conexao = new Conexao();' . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . '$Update = $Conexao->AbrirConexao()->prepare($Sql);' . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . PHP_EOL);
                 $Consulta->execute();
                 //Executando a Consulta novamente pois o último FETCH_ASSOC inutiliza a consulta depois de terminado.
                 while ($Fields = $Consulta->fetch(PDO::FETCH_ASSOC)) {
                     $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . '$Update->bindValue(\':' . $Fields['Field'] . '\', $' . $ArrayTabelasBanco[$iArrayTabelas] . 'DAO->get' . $Fields['Field'] . '());' . PHP_EOL);
                 }
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . '$StatusExecucaoUpdate = $Update->execute();' . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . 'if($StatusExecucaoUpdate == TRUE) {' . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . 'return TRUE;' . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . '} else {' . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . '$ArrayErro = $Update->errorInfo(); //A posição 2 do ArrayErro vai armezenar a Descrição do Erro.' . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . '$TratamentoMensagens = new TratamentoMensagens();' . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . '$TratamentoMensagens->MsgErro(\'Erro no processamento do Update no Banco de Dados. Descrição do Erro : \' . $ArrayErro[2], NULL, NULL);' . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . 'return FALSE;' . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . '}' . PHP_EOL);
             } else {
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . '//A Tabela : ' . $ArrayTabelasBanco[$iArrayTabelas] . ' nao possui Chave primaria e por tanto nao pode ser feito um processo de Update com seguranca dos dados garantida!' . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, PHP_EOL);
             }
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . '}' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, PHP_EOL);
             //Fim da Geração do Update
             //Gerando Delete
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . '/**' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . ' * Metodo que realiza o Delete na tabela : ' . $ArrayTabelasBanco[$iArrayTabelas] . '.' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . ' * ' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . ' * Caso o Delete aconteca de maneira adequada eh retornado TRUE, caso ocorra algum problema eh retornado FALSE.' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . ' * ' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . ' * @param int $Value  Descricao : Valor da Chave primaria do dado a ser deletado.' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . ' * @return boolean Descricao : Informa se a operacao foi bem sucedida ou nao.' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . ' */ ' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . 'public function Delete' . $ArrayTabelasBanco[$iArrayTabelas] . '($Value) {' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, PHP_EOL);
             $Consulta->execute();
             //Executando a Consulta novamente pois o último FETCH_ASSOC inutiliza a consulta depois de terminado.
             while ($Fields = $Consulta->fetch(PDO::FETCH_ASSOC)) {
                 if ($Fields['Key'] == 'PRI') {
                     $PrimaryKey = $Fields['Field'];
                 }
             }
             //Se a tabela não tiver Primary Key não vou fazer Delete pois não é possivel realizar uma operação de Delete com segurança
             if (isset($PrimaryKey)) {
                 // A barra (/) dentro da string permit escrever a aspa simples sem precisar concatenar ela sinaliza que é para escrever a aspa
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . '$Sql = \'DELETE FROM ' . $ArrayTabelasBanco[$iArrayTabelas] . ' WHERE ' . $PrimaryKey . ' = :' . $PrimaryKey . ';\';' . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . '$Conexao = new Conexao();' . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . '$Delete = $Conexao->AbrirConexao()->prepare($Sql);' . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . '$Delete->bindValue(\':' . $PrimaryKey . '\', $Value );' . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . '$StatusExecucaoDelete = $Delete->execute();' . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . 'if($StatusExecucaoDelete == TRUE) {' . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . 'return TRUE;' . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . '} else {' . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . '$ArrayErro = $Delete->errorInfo(); //A posição 2 do ArrayErro vai armezenar a Descrição do Erro.' . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . '$TratamentoMensagens = new TratamentoMensagens();' . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . '$TratamentoMensagens->MsgErro(\'Erro no processamento do Delete no Banco de Dados. Descrição do Erro : \' . $ArrayErro[2], NULL, NULL);' . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . 'return FALSE;' . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . '}' . PHP_EOL);
             } else {
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . '//A Tabela : ' . $ArrayTabelasBanco[$iArrayTabelas] . ' nao possui Chave primaria e por tanto nao pode ser feito um processo de Delete com seguranca dos dados garantida!' . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, PHP_EOL);
             }
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . '}' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, PHP_EOL);
             //Fim da Geração do Delete
             //Gerando ConsultaGeral
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . '/**' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . ' * Metodo que realiza a Consulta Geral de dados na tabela : ' . $ArrayTabelasBanco[$iArrayTabelas] . '.' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . ' * ' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . ' * Caso a Consulta Geral aconteca de maneira adequada eh retornado um Array(' . $ArrayTabelasBanco[$iArrayTabelas] . 'DAO) com os dados da tabela, ' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . ' * caso ocorra algum problema ou nenhum dado seja encontrado na tabela eh retornado NULL.' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . ' * ' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . ' * @return /Array(' . $ArrayTabelasBanco[$iArrayTabelas] . 'DAO) Descricao : Retorna um Array com os dados obtidos da tabela, ' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . ' * ou retorna NULL caso aconteca algum problema, tambem eh retornado NULL caso nao seja encontrado nenhum dado na tabela.' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . ' */ ' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . 'public function ConsultaGeral' . $ArrayTabelasBanco[$iArrayTabelas] . '() {' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . '$Sql = \'SELECT * FROM ' . $ArrayTabelasBanco[$iArrayTabelas] . ';\';' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . '$Conexao = new Conexao();' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . '$Consulta = $Conexao->AbrirConexao()->prepare($Sql);' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . '$StatusExecucaoConsulta = $Consulta->execute();' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . 'if($StatusExecucaoConsulta == TRUE) {' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . 'if($Consulta->rowCount() != 0) {' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . $Tab . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . $Tab . '$ArrayConsultaGeralTabela' . $ArrayTabelasBanco[$iArrayTabelas] . ' = Array();' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . $Tab . $Tab . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . $Tab . 'while ($Dados = $Consulta->fetch(PDO::FETCH_ASSOC)) {' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . $Tab . $Tab . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . $Tab . $Tab . '//Criando ' . $ArrayTabelasBanco[$iArrayTabelas] . 'DAOAux populando e adicionando ele ao vetor. ' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . $Tab . $Tab . '$' . $ArrayTabelasBanco[$iArrayTabelas] . 'DAOAux = new ' . $ArrayTabelasBanco[$iArrayTabelas] . 'DAO();' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . $Tab . $Tab . PHP_EOL);
             $Consulta->execute();
             //Executando a Consulta novamente pois o último FETCH_ASSOC inutiliza a consulta depois de terminado.
             while ($Fields = $Consulta->fetch(PDO::FETCH_ASSOC)) {
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . $Tab . $Tab . '$' . $ArrayTabelasBanco[$iArrayTabelas] . 'DAOAux->set' . $Fields['Field'] . '($Dados[\'' . $Fields['Field'] . '\']);' . PHP_EOL);
             }
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . $Tab . $Tab . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . $Tab . $Tab . '$ArrayConsultaGeralTabela' . $ArrayTabelasBanco[$iArrayTabelas] . '[] = $' . $ArrayTabelasBanco[$iArrayTabelas] . 'DAOAux;' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . $Tab . $Tab . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . $Tab . $Tab . '//Destruindo $' . $ArrayTabelasBanco[$iArrayTabelas] . 'DAOAux para que possar ser criado no inicio do While novamente [Economia de uso de memória]' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . $Tab . $Tab . '$' . $ArrayTabelasBanco[$iArrayTabelas] . 'DAOAux = NULL;' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . $Tab . $Tab . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . $Tab . '}' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . $Tab . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . $Tab . 'return $ArrayConsultaGeralTabela' . $ArrayTabelasBanco[$iArrayTabelas] . ';' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . $Tab . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . '} else {' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . $Tab . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . $Tab . '$TratamentoMensagens = new TratamentoMensagens();' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . $Tab . '$TratamentoMensagens->MsgAlerta(\' A Tabela : ' . $ArrayTabelasBanco[$iArrayTabelas] . ' esta vazia, nao eh possivel realizar a ConsultaGeral.\', NULL, NULL);' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . $Tab . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . $Tab . 'return NULL;' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . '}' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . '} else {' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . '$ArrayErro = $Consulta->errorInfo(); //A posição 2 do ArrayErro vai armezenar a Descrição do Erro.' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . '$TratamentoMensagens = new TratamentoMensagens();' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . '$TratamentoMensagens->MsgErro(\'Erro no processamento do Select [ConsultaGeral] no Banco de Dados. Descrição do Erro : \' . $ArrayErro[2], NULL, NULL);' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . 'return NULL;' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . '}' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . '}' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, PHP_EOL);
             //Fim da Geração da ConsultaGeral
             //Gerando ConsultaUnica
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . '/**' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . ' * Metodo que realiza a Consulta Unica por Chave primaria dos dados na tabela : ' . $ArrayTabelasBanco[$iArrayTabelas] . '.' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . ' * ' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . ' * Caso a Consulta Unica aconteca de maneira adequada eh retornado um ' . $ArrayTabelasBanco[$iArrayTabelas] . 'DAO com os dados solicitados, ' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . ' * caso ocorra algum problema ou o dado correspondente a consulta nao seja encontrado na tabela eh retornado NULL.' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . ' * ' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . ' * @param int $Value  Descricao : Valor da Chave primaria do dado a ser consultado.' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . ' * @return /' . $ArrayTabelasBanco[$iArrayTabelas] . 'DAO Descricao : Retorna um Objeto com o dado obtido da tabela, ' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . ' * ou retorna NULL caso aconteca algum problema, tambem eh retornado NULL caso o dado correspondente a consulta nao seja encontrado.' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . ' */ ' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . 'public function ConsultaUnica' . $ArrayTabelasBanco[$iArrayTabelas] . '($Value) {' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, PHP_EOL);
             $Consulta->execute();
             //Executando a Consulta novamente pois o último FETCH_ASSOC inutiliza a consulta depois de terminado.
             while ($Fields = $Consulta->fetch(PDO::FETCH_ASSOC)) {
                 if ($Fields['Key'] == 'PRI') {
                     $PrimaryKeyConsultaUnica = $Fields['Field'];
                 }
             }
             //Se a tabela não tiver Primary Key não vou fazer Consulta Unica pois não é possivel realizar uma operação de Consulta Unica com segurança
             if (isset($PrimaryKeyConsultaUnica)) {
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . '$Sql = \'SELECT * FROM ' . $ArrayTabelasBanco[$iArrayTabelas] . ' WHERE ' . $PrimaryKeyConsultaUnica . ' = :' . $PrimaryKeyConsultaUnica . ';\';' . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . '$Conexao = new Conexao();' . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . '$Consulta = $Conexao->AbrirConexao()->prepare($Sql);' . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . '$Consulta->bindValue(\':' . $PrimaryKeyConsultaUnica . '\', $Value );' . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . '$StatusExecucaoConsulta = $Consulta->execute();' . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . 'if($StatusExecucaoConsulta == TRUE) {' . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . 'if ($Consulta->rowCount() == 1) { //A consulta eh por Chave Primaria deve retornar apenas 1 registro ou nenhum.' . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . $Tab . '$' . $ArrayTabelasBanco[$iArrayTabelas] . 'Retorno = new ' . $ArrayTabelasBanco[$iArrayTabelas] . 'DAO();' . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . $Tab . 'while ($Dados = $Consulta->fetch(PDO::FETCH_ASSOC)) {' . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . PHP_EOL);
                 $Consulta->execute();
                 //Executando a Consulta novamente pois o último FETCH_ASSOC inutiliza a consulta depois de terminado.
                 while ($Fields = $Consulta->fetch(PDO::FETCH_ASSOC)) {
                     $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . $Tab . $Tab . '$' . $ArrayTabelasBanco[$iArrayTabelas] . 'Retorno->set' . $Fields['Field'] . '($Dados[\'' . $Fields['Field'] . '\']);' . PHP_EOL);
                 }
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . $Tab . '}' . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . $Tab . 'return $' . $ArrayTabelasBanco[$iArrayTabelas] . 'Retorno;' . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . '} else {' . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . $Tab . '$TratamentoMensagens = new TratamentoMensagens();' . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . $Tab . '$TratamentoMensagens->MsgErro(\'Nao encontramos nenhum dado com ' . $PrimaryKeyConsultaUnica . ' : \' . $Value , NULL, NULL);' . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . $Tab . 'return NULL;' . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . '}' . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . '} else {' . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . '$ArrayErro = $Consulta->errorInfo(); //A posição 2 do ArrayErro vai armezenar a Descrição do Erro.' . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . '$TratamentoMensagens = new TratamentoMensagens();' . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . '$TratamentoMensagens->MsgErro(\'Erro no processamento do Select [Consulta Unica] no Banco de Dados. Descrição do Erro : \' . $ArrayErro[2], NULL, NULL);' . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . $Tab . 'return NULL;' . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . '}' . PHP_EOL);
             } else {
                 $Escrevendo = fwrite($ArquivoCRUD, $Tab . $Tab . '//A Tabela : ' . $ArrayTabelasBanco[$iArrayTabelas] . ' nao possui Chave primaria e por tanto nao pode ser feito um processo de Consulta Unica com seguranca dos dados garantida!' . PHP_EOL);
                 $Escrevendo = fwrite($ArquivoCRUD, PHP_EOL);
             }
             $Escrevendo = fwrite($ArquivoCRUD, $Tab . '}' . PHP_EOL);
             //Fim da Geração da ConsultaUnica
             $Escrevendo = fwrite($ArquivoCRUD, '}' . PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, PHP_EOL);
             $Escrevendo = fwrite($ArquivoCRUD, '?>' . PHP_EOL);
             $TratamentoMensagens = new TratamentoMensagens();
             $TratamentoMensagens->MsgSucesso('Arquivo CRUD : ' . $ArrayTabelasBanco[$iArrayTabelas] . 'CRUD.Class.php criado com sucesso!', NULL, NULL);
             $PrimaryKey = NULL;
             $CampoPrimaryKey = NULL;
             $PrimaryKeyConsultaUnica = NULL;
         } else {
             $TratamentoMensagens = new TratamentoMensagens();
             $TratamentoMensagens->MsgErro('Erro na obtenção da Estrutura da tabela : ' . $ArrayTabelasBanco[$iArrayTabelas], NULL, NULL);
         }
     }
 }