// MySQL_Test.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#if defined __WIN32__ || _MSC_VER
#include <windows.h>
#endif
#include "include/mysql.h"
#include <time.h>
#include <iostream>
#include <conio.h>
using namespace std;
//Prototypen deklarieren
void check_error(void);
void verbinden(void);
HANDLE open_com(void);
void verbindung_schliessen(void);
void db_waehlen(char *);
void daten_anfuegen(int);
void daten_loeschen(void);
int get_value(HANDLE);
int get_rand_value(int);
MYSQL *mysql;
int main (int argc, char **argv) {
//Zur Datenbank verbinden
int value=0;
printf("Baue verbindung zur Datenbank auf ...\n\n");
verbinden();
db_waehlen("femue");
HANDLE hCom = open_com();
/* Hier befindet sich der Code für die Arbeit mit MySQL */
while (!kbhit())
{
value = get_value(hCom);
//value = get_rand_value(value);
daten_loeschen();
//value = 0;
daten_anfuegen(value);
Sleep (3000);
}
/* Verbindung trennen */
verbindung_schliessen();
system("PAUSE");
return EXIT_SUCCESS;
}
/* Bricht bei Fehler (mysql_error != 0) das Programm ab */
void check_error(void) {
if (mysql_errno(mysql) != 0) {
fprintf(stderr, "Fehler: %s\n", mysql_error(mysql));
system("PAUSE");
exit(EXIT_FAILURE);
}
}
/* Baut eine Verbindung zum Datenbankserver auf.
* Passen Sie ggf. Usernamen und Passwort und, sofern
* andere Parameter benötigt werden, diese Ihren
* Umständen selbst an
*/
void verbinden(void) {
mysql=mysql_init(mysql);
check_error();
mysql_real_connect(mysql, "localhost", "root",
NULL, NULL, 0, NULL, 0);
check_error();
}
/* Serververbindung wieder schließen und den Speicher für die
* Struktur MYSQL wieder freigeben */
void verbindung_schliessen(void) {
mysql_close(mysql);
}
/* Daten mit mysql_real_query() in die Datenbank schreiben */
void daten_anfuegen(int value) {
int i, size=0;
char *str[3], *query;
/* Jetzt wird der Anfragestring erstellt */
str[0] = "INSERT INTO `feld` ( `Datum` , `Value` ) VALUES (UNIX_TIMESTAMP() , '";
str[1] =(char *) malloc(6);
sprintf(str[1], "%6d", value);
str[2] = "')";
/* Speicherplatz für den Anfragestring reservieren */
for (i=0;i<3;i++)size+=strlen(str[i]);
query =(char *) malloc(size);
strcpy(query, str[0]);
for(i = 1; i < 3; i++)
strcat(query, str[i]);
/* Zum Testen für die Konsole */
printf("Anfrage 1: %s\n",query);
/* Jetzt die Anfrage an den Datenbankserver */
mysql_real_query(mysql, query, strlen(query));
check_error();
for (i=0;i<3;i++)free(str[i]);
free(query);
}
/* Falls die Datenbank bei der Funktion verbinden() nicht
* angegeben wurde oder Sie die Datenbank wechseln wollen, dann
* verwenden Sie diese Funktion */
void db_waehlen(char *db) {
mysql_select_db(mysql, db);
check_error();
}
void daten_loeschen(void) {
MYSQL_RES *mysql_res;
MYSQL_ROW row;
int i, size = 0;
char *str[3], *query;
str[0] = "SELECT * FROM `feld` ORDER BY `Datum` ASC LIMIT 0 , 1";
/* Jetzt die Anfrage an den Datenbankserver */
mysql_real_query(mysql, str[0], strlen(str[0]));
check_error();
/* Daten der Anfrage abholen */
mysql_res = mysql_store_result(mysql);
check_error();
row = mysql_fetch_row (mysql_res);
str[0] = "DELETE FROM feld WHERE `Datum` = '";
str[1] =(char *) malloc(19);
sprintf(str[1],"%19s",row[0]);
str[2] = "' LIMIT 1";
for (i=0;i<3;i++)size+=strlen(str[i]);
query =(char *) malloc(size);
strcpy(query, str[0]);
for(i = 1; i < 3; i++)
strcat(query, str[i]);
//printf("8.%s\n", query2);
/* Zum Testen für die Konsole */
printf("Anfrage 2: %s\n",query);
/* Jetzt die Anfrage an den Datenbankserver */
mysql_real_query(mysql, query, strlen(query));
check_error();
for (i=0;i<3;i++)free(str[i]);
free(query);
}
HANDLE open_com(){
DCB dcb;
HANDLE hCom;
BOOL fSuccess;
char *pcCommPort="Com1"; //Hier die Schnittstelle auswählen
// Mit CreateFile die Schnittstelle als File generieren
hCom = CreateFile( pcCommPort,
GENERIC_READ | GENERIC_WRITE,
0, // must be opened with exclusive-access
NULL, // no security attributes
OPEN_EXISTING, // must use OPEN_EXISTING
0, // not overlapped I/O
NULL // hTemplate must be NULL for comm devices
);
//Nun den DCB Block modifizieren
// Fill in DCB: 9,600 bps, 8 data bits, no parity, and 1 stop bit.
// DCB ermitteln ;d.h. Standardeinstellungen laden und diese verändern
fSuccess=GetCommState(hCom,&dcb);
if(!fSuccess)printf("%d Fehler beim Ermitteln des DCB Blocks \n",fSuccess);
dcb.BaudRate = CBR_9600; // set the baud rate
dcb.ByteSize = 8; // data size, xmit, and rcv
dcb.Parity = NOPARITY; // no parity bit
dcb.StopBits = ONESTOPBIT; // one stop bit
//Nun die Daten zurückschreiben auf den DCB zurückschreiben,
//so dass diese Eisntellungen auch gültigkeit erlangen
fSuccess=SetCommState(hCom,&dcb);
if(!fSuccess)printf("%d Fehler beim Uebermitteln des DCB Blocks \n",fSuccess);
else printf ("Serieller Port %s erfolgreich eingestellt und geöffnet.\n\n\n", pcCommPort);
return hCom;
}
int get_rand_value(int old){
int value = 0;
/* Daten per Zufallsgenerator erzeugen */
// =C23521++ZUFALLSBEREICH(-5;5)*10
int random = (int)(((double)rand() / RAND_MAX) * (10 + 1 - -10) + -10);
value = old+random;
printf ("Zufallswert: %4d\n", value);
return value;
}
int get_value(HANDLE hCom){
int value = 0;
/* Daten aus als 8-Bit-Zahl vom COM-Port einlesen
und umwandeln */
void DiscardInBuffer ();
sleep(2000);
fSuccess = ReadFile(hCom,&ausgabe,1,&dwBytesRead,0);
//char_traits<char>::char_type ch3 = 'a';
printf("erhaltene Zeichenkette: %s entspricht %d \n",ausgabe, ausgabe[0]);
value = ausgabe[0];*/
return value;
}
;