Uso do mysql em c++ [RESOLVIDO]

1. Uso do mysql em c++ [RESOLVIDO]

Isac Marques da Silva
isacmarques

(usa Debian)

Enviado em 02/02/2015 - 16:57h

Boa tarde,

Pessoal gostaria de tirar uma duvida com vocês. Estou usando o Mysql em c++ e não to conseguindo converter o valor retornado pelo mysql para unsigned char. veja parte do codigo abaixo para terem uma ideia:

 while ((linhas=mysql_fetch_row(resp)) != NULL)
{

tcflush(pt2,TCIOFLUSH);
std::cout <<"Aguardando resposta do sensor :"<<linhas[3]<<" COIID"<<linhas[4] <<"Sensor"<< linhas[5]<<std::endl;
//###########################################################################
enviadadosgrav2[0]= 0xF1;
enviadadosgrav2[1]= 0x06;
enviadadosgrav2[2]= 0xF7;

enviadadosgrav2[3]=linhas[5];
numero =(int) linhas[4];


Linhas[5] é a posição de um campo do meu banco de dados eu consigo ler esse valor e printar na tela só não estou conseguindo lançar o mesmo em uma variavel do tipo char.

Sou novo aqui e esse é meu primeiro post. Obrigado pela ajuda de vocês.



  


2. Re: Uso do mysql em c++ [RESOLVIDO]

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 03/02/2015 - 09:34h

Já tentou :


unsigned char * teste;

teste = (unsigned char *)linha[5];


Espero ter ajudado

[]'s

T+


3. Re: Uso do mysql em c++ [RESOLVIDO]

Isac Marques da Silva
isacmarques

(usa Debian)

Enviado em 03/02/2015 - 10:05h


Tentei desta forma anteriormente efetuei o teste como você me falou e me retornou o seguinte erro:

functions.cpp:172:57: error: invalid conversion from 'char*' to 'unsigned char' [-fpermissive]

Obrigado.


4. Re: Uso do mysql em c++

Airton Lastori
alastori

(usa Outra)

Enviado em 03/02/2015 - 11:27h

Olá!

O mais comum é usar statements SQL, veja o exemplo: http://dev.mysql.com/doc/connector-cpp/en/connector-cpp-examples-complete-example-1.html


Tem este outro exemplo com mysql_fetch_row():

MYSQL_ROW row;
unsigned int num_fields;
unsigned int i;

num_fields = mysql_num_fields(result);
while ((row = mysql_fetch_row(result)))
{
unsigned long *lengths;
lengths = mysql_fetch_lengths(result);
for(i = 0; i < num_fields; i++)
{
printf("[%.*s] ", (int) lengths[i],
row[i] ? row[i] : "NULL");
}
printf("\n");
}


ref: http://dev.mysql.com/doc/refman/5.6/en/mysql-fetch-row.html



5. Re: Uso do mysql em c++ [RESOLVIDO]

Isac Marques da Silva
isacmarques

(usa Debian)

Enviado em 03/02/2015 - 13:34h


Olá alastori obrigado pela atenção. Neste caso do exemplo que você me mostrou eu consigo converter para inteiro ou char por exemplo. preciso pegar o valor que esta no meu banco de dados em varchar e passar para unsigned char pois vou enviar via rs485 para uma outra placa essa informação. No java tem uma opção assim row[i].getString(), Seguindo este exemplo sera que é possivel converter ou terei que usar o Statement?

Obrigado.


6. Re: Uso do mysql em c++ [RESOLVIDO]

Airton Lastori
alastori

(usa Outra)

Enviado em 03/02/2015 - 17:13h


Se eu entendi sua dúvida, sim você pode fazer a conversão.

No exemplo o que é retornado pela função mysql_fetch_row() é um array posicional que representa a linha na tabela. Veja http://dev.mysql.com/doc/refman/5.6/en/c-api-data-structures.html#idm140156977613264

Como no exemplo, para saber o tamanho de cada coluna você usa mysql_fetch_lengths()... Uma vez que você sabe onde começa e onde termina a coluna desejada, você pode fazer um loop, pegar cada caracter do VARCHAR e fazer o casting necessário.


7. Re: Uso do mysql em c++ [RESOLVIDO]

Isac Marques da Silva
isacmarques

(usa Debian)

Enviado em 04/02/2015 - 09:00h


Bom dia Alastori

Mais uma vez obrigado pela ajuda que esta me dando era essa a minha duvida mesmo.

No exemplo que você me passou acima tem a parte do codigo abaixo

  printf("[%.*s] ", (int) lengths[i],
row[i] ? row[i] : "NULL");


Aqui os valores são mostrados na tela, só que não entendi essa parte do codigo
row[i]?row[i]  
dei uma olhada no material mas não consegui captar como fazer a conversão teria como você me dar um exemplo?


Grato pela ajuda.


8. Re: Uso do mysql em c++ [RESOLVIDO]

Airton Lastori
alastori

(usa Outra)

Enviado em 04/02/2015 - 13:04h


Esse código
row[i] ? row[i] : "NULL" 
é equivalente a um if ... then ... else.

Para seu caso, pode fazer algo como (não testei, só capture a idéia):

unsigned char valores[];
for(j=0 ; i<row[i].length ; j++)
valores[j] = (unsigned char) row[i][j];




9. Re: Uso do mysql em c++ [RESOLVIDO]

Isac Marques da Silva
isacmarques

(usa Debian)

Enviado em 05/02/2015 - 10:32h


Obrigado Alastori.


Cheguei perto do que eu queria, fiz umas modificações no sistema de armazenamento também para me ajudar e ficou legal . Esta funcionando o que você me passou mas esta mostrando o ultimo valor apenas. Mas agora só falta eu acertar a logica ai fica legal.

fiz assim

 for(i = 0; i < num_fields; i++)
{
printf("[%.*s] ", (int) lengths[i],
linhas[i] ? linhas[i] : "NULL");

for(int j=0 ; j<lengths[4] ; j++)
{
Valor= (unsigned char)linhas[4][j];
}
recebedadosgrav2[3]=Valor;
//Valor = enviadadosgrav2[3];

}


ele apenas esta mostrando o ultimo valor do campo 4 no caso to dando uma olhada para ver onde esta o segredo kkk Mas obrigado pela ajuda. Valeu...






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts