Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

nobre.jonathan

Problemas com "mysql_fetch_fields"

Recommended Posts

Bem pessoal, sendo novo no Fórum, estou com um problema meio estranho, estou tentando criar um programa em C que gerencie um banco de dados que criei (Para aprendizagem) que não está funcionando muito bem, principalmente quando dou o comando para ele dar o resultado da consulta de uma tabela.

 

 

Eis meu código:








#include <winsock2.h>
#include <mysql.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>

#define MAX 20
#define CMD 100
#define ENTER 13
#define BACKSPACE 8&&a

int validarTamanhoString(int tamanho);
char validarOpcao(char opcao);

int main(void)
{
// Declaracoes  
    char senha[MAX], host[MAX], usuario[MAX], database[MAX], comando[CMD], c, opcao;
    char nome[MAX], desenvolvedora[MAX];
    int id, ano, conquistas;
    int a=0, tamanho, saida=0, contador=0, erro;
    // Comandos MySQL
    MYSQL conexao;
    MYSQL_RES * resposta;
    MYSQL_ROW linhas;
    MYSQL_FIELD * campos;
    mysql_init(&conexao);
// Instrucoes
    system("TITLE Banco de dados - Xbox");
    fflush(stdin);
    printf(" Conectar ao banco de dados: \n\n");
    do
    { 
      switch (contador)
      {
        case 0 : printf(" Host: ");
                 gets(host);
                 tamanho=strlen(host);
                 saida=validarTamanhoString(tamanho);
                 if (saida != 0)
                   continue;
                 else
                   contador++;
        case 1 : printf(" Login: ");
                 gets(usuario);
                 tamanho=strlen(usuario);
                 saida=validarTamanhoString(tamanho);
                if (saida != 0)
                   continue;
                 else
                   contador++;
        case 2 : printf(" Database: "); 
                 gets(database);
                 tamanho=strlen(database);
                 saida=validarTamanhoString(tamanho);
                if (saida != 0)
                   continue;
                 else
                   contador++;
      }
      printf(" Digite sua senha: ");
      do
      { 
        c=getch();
        if(isprint(c))
        { 
          senha[a]=c;
          a++;
          printf("*");
        }
        else 
          if(c==BACKSPACE)
          { 
            senha[a]='\0';
            a--;
            printf("\b \b");
          }
      }while((c != ENTER) && (a < MAX));
      senha[a]='\0';
      system("CLS");
      // Conectando ao Banco
      if (!mysql_real_connect(&conexao,host,usuario,senha,database,0,NULL,0))
      { 
        printf("\n Erro de Conexao : %s!\n", mysql_error(&conexao));
        erro=mysql_errno(&conexao);
        strcpy(host,"");
        strcpy(usuario,"");
        strcpy(database,"");
        strcpy(senha,"");
        getch();
      }
      else
      {
        printf("\n Conectado com sucesso a %s!\n",host);
        erro=mysql_errno(&conexao);
        getch();
      }
      system("CLS");
      contador=0;
      fflush(stdin);
    } while((saida != 0) || (erro != 0));
    mysql_query(&conexao,"SELECT * FROM games");
    do 
    { 
      printf(" Escolha uma das opcoes \n\n");
      printf(" 1 - Inserir   Informacoes\n");
      printf(" 2 - Deletar   Informacoes\n");
      printf(" 3 - Atualizar Informacoes\n");
      printf(" 4 - Consultar Informacoes\n");
      printf(" 0 - SAIR \n\n");
      printf(" Opcao: ");
      opcao = validarOpcao(getch());
      system("CLS");
      switch (opcao)
      { 
        case '1' : 
             
        
        case '2' :
              
             
        case '3' :
             
             
        case '4' : resposta = mysql_store_result(&conexao);
                   if(resposta)
                   {
                     campos = mysql_fetch_fields(resposta);
                     for(contador=0;contador<mysql_num_fields(resposta);contador++)
                     { 
                       printf("%s",(campos[contador]).name);
                       if (mysql_num_fields(resposta) > 1)
                         printf("\t");
                     }
                     printf("\n");
                     
                     // Funcionando
                     while ((linhas=mysql_fetch_row(resposta)) != NULL)
                     { 
                       for(contador=0;contador<mysql_num_fields(resposta);contador++)
                         printf("%s\t",linhas[contador]);
                       printf("\n");
                     }
                   }
                   mysql_free_result(resposta);
                   saida=1;
                   getch();
                   break;  
        case '0' : saida=0; 
             
      }
      system("CLS");
    }while(saida != 0);
    
    // Desconectando
    mysql_free_result(rs); 
    mysql_close(&conexao);
    printf("\n Desconectado...\n");
    getch();
    return 0;
}

// Funcao validarTamanhoString
// Objetivo   : Verificar se o tamanho da string e valido
// Parametros : Tamanho da String
// Retorno    : Tamanho da string valido
int validarTamanhoString(int tamanho)
{ 
  if (tamanho == 0)
  {
    printf(" Campo nao pode ser vazio\n\t\b");
    system("PAUSE");
    system("CLS");
    return 1;
  }
  else
    if (tamanho >= MAX)
    {
      printf(" Limite de 20 caracter atingido\n\t\b");
      system("PAUSE");
      system("CLS");
      return 1;
    }
  return 0;    
}

// Funcao validarOpcao
// Objetivo   : Verificar se a opcao escolhida e valida
// Parametros : Opcao
// Retorno    : Opcao valida
char validarOpcao(char opcao)
{ 
  while ((opcao != '0') && (opcao != '1') && (opcao != '2') && (opcao != '3') && (opcao != '4'))
  {
    printf("\n Opcao invalida, digite novamente: ");
    opcao = getch();
  }
  return opcao;
}

 

E essas são as informações do meu banco de dados:

 

mysqlf.jpg

 

E esse é o erro que está aparecendo:

 

errozr.jpg

 

Depois da columa "nome" aparece games duas vezes e depois o nome do banco, mas era para aparecer "desenvolvedora", "ano" e "conquistas".

Alguém saberia se o erro é o código ou no banco de dados, pois eu já tentei de tudo é nada.

 

Valeu ;D

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.