Вы находитесь на странице: 1из 4

Protocolo (Exemplo) para Inclusão de Dados no MySQL

Usar as seguintes bibliotecas:


#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
#include <locale.h>
#include <windows.h>
#include <mysql.h>
#include <time.h>

Definir as variáveis de entrada via teclado:

char: chave, descrição, medida


float: percentual, preco_unitario, preco_total
int: quantidade, estoque

Considerações na entrada via teclado

1) Variáveis tipo “char” não utilizarão “scanf” porque o tipo “char” poderá ou precisará receber espaços em branco.
No lugar de scanf usar fgets() – pesquisar os parâmetros necessários para uso do fgets()
OU usar scanf(“%[^\n]s”,&variável); (este é mais interessante)

2) Após um campo com fgtes() será necessário limpar o buffer de teclado com setbuf() – pesquisar os parâmetros para setbuf()

Depois de concluída essa parte, já poderemos montar a rotina de gravar no MySQL:

1) Será preciso converter os valores monetários que estão com VÍRGULA nas casas decimais, substituindo por PONTO, pois o MySQL não aceita
vírgula e sim ponto par separar decimais.

a) Para conseguir fazer esta conversão, poderemos montar um pequena função para facilitar este trabalho.

b) A função deverá se chamar func_converte_decimal( float valor ) { .... }


/* =================================================================
função troca vírgula por PONTO de variáveis decimais
PARA SALVAR NO BANCO DE DADOS MySQL
USO: char variavel[19];
strcpy(variavel,func_converte_decimal( valor_enviado ));
================================================================= */
char *func_converte_decimal( float valor ) {
#define SIZE 19 /* precisa ser um tamanho seguro para a truncagem / arredondamento do valor */
static char buffer[SIZE];
static int tamanho=0;
tamanho = snprintf(buffer, SIZE, "%f", valor); /* converte de float para string para a contagem e retorna o tamanho */
/* processo para substituir a VÍRGULA por um PONTO */
static int i=0;
static char novo_valor[SIZE];
snprintf(novo_valor, SIZE, "%f", valor); /* converte de float para string */
for (i=0; i<tamanho; i++) {
if (novo_valor[i] == ',') {
novo_valor[i] = '.'; /* substitui a vírgula pela ponto */
break;
}
}
return( novo_valor );
/* lembre-se: depois do retorno fazer strcpy(var_recebe,esta_funcao); */
}
/* ========================================================================
função troca ponto por VÍRGULA de variáveis decimais
PARA LER DO BANCO DE DADOS MySQL
USO: variavel_float = func_leitura_decimal( campo_char_mysql[coluna] );
======================================================================== */
float func_leitura_decimal( char *valor ) {
#define SIZE 19 /* precisa ser um tamanho seguro para a truncagem / arredondamento do valor */
int tamanho = (unsigned int)strlen(valor);
/* processo para substituir o PONTO por VÍRGULA */
static int i=0;
static char novo_valor[SIZE];
strcpy(novo_valor, valor); /* converte de float para string */
for (i=0; i<tamanho; i++) {
if (novo_valor[i] == '.') {
novo_valor[i] = ','; /* substitui a vírgula pela ponto */
break;
}
}
return( atof(novo_valor) ); /* converte de string para float */
}

c) A função deverá receber o valor tipo float (que está com vírgula), transformar esse valor como tipo char (string) que retornará com o ponto na
casa decimal (ou seja trocar a vírgula por ponto!).

d) Com certeza na função constará o comando: snprintf() – converte de float para string.
DICA: depois de convertido, varremos com FOR a variável para substituir a vírgula por ponto !!

e) Direto na função ou mesmo no retorno do chamado à função, com certeza teremos que usar strcpy() – para copiar o tipo *char para char[19]
por que a função retornará *char e será preciso que ela aceite esse conteúdo como string.

Podendo ficar desse jeito: (de graça para colocar direto no “mp_incluir.c” chamando a função que vc vai construir!)

char s_percentual[19]; // usando 19 por ser mais seguro para tratar o valor
strcpy( s_percentual,func_converte_decimal( percentual ) );

2) Se a conversão ficou ok, chamar a função conecta() – que faz a conexão com o Banco de Dados MySQL.
Veja abaixo:

A sequência de ação para salvar no MySQL: (bem simples)

int instancia;
instancia = conecta();
if (instancia>0) {
#define TAMANHO_QUERY 1024
char instrucao[TAMANHO_QUERY];
// concatena a string com os campos preenchidos
sprintf(instrucao, "INSERT INTO materia_prima (chave, descricao, percentual, \
unidade_medida, quantidade, \
preco_unitario, preco_total, estoque) \
VALUES ('%s', '%s', '%s', '%s', '%i', '%s', '%s', '%i')", \
chave, descricao, s_percentual, medida, quantidade, \
s_preco_unitario, s_preco_total, estoque);

if (mysql_real_query( instancia, instrucao, (unsigned int)strlen(instrucao) ) == 0) { // INSERIMOS na tabela


MessageBox(NULL, "Gravado!", "Sucesso", MB_OK);
} else {
MessageBox(NULL, "Registro não foi salvo!", "Falhou", MB_OK);
}
mysql_close( instancia ); // fecha a instância
}
close( instancia );
system("cls");

return;
}

Pronto!

Вам также может понравиться