Mit C auf SQL



  • Hallo zusammen.

    Also ich bin leider noch ein absoluter C anfänger, muss aber bis ende der woche (23.4.04) ein Programm geschrieben haben das folgendes kann:

    Es muss auf einen Sql server connecten (den teil habe ich schon fertig, er funtzt auch) dort muss es in die datenbank smsd kommen. in dieser datenbank git es einmal die tabelle archiv und Fahrzeuge. ich muss nun in Fahrzeuge reinkommen und alle fahrzeuge mit der ID 1 auf dem bildschirm ausgeben und die 1 in der Tabelle nin eine 2 ändern.

    Also wie gesagt den ersten Teil habe ich fertig, aber ich weis nicht wies weiter gehen muss. Kann mir einer helfen?

    DAnke schon mal im voraus. 😃



  • Hat deine Datenbankbibliothek auch eine Funktion wo "query" o. ä. drinsteht? Wichtig ist auf jeden Fall, dass du eine Funktion hast, mit der du SQL-Anweisungen an die Datenbank schicken kannst (ist bestimmt dabei) und auch Ergebnisse (Zeilen aus einer Tabelle) zurückbekommen kannst.

    Was SQL ist und wie man es verwendet, weißt du doch, oder??



  • Ja ich habe die header dateien von mysql (#include <mysql/mysql.h> ) eingebunden.

    Befehle wie query etc sollten funktionieren.

    Wie ich bereits erwähnt habe kann mittlerweile schonmal auf den server connecten. Dafür habe ich verschiedene befehele wie z.B. mysql_init (zum inzialisieren) oder mysql_connect benutzt. diese stammen soweit ich weis auch den oben gennanten header datein.

    Zu SQL:

    Leider habe ich mich noch nicht wirklich mit MySQL beschäftigen können (was auch ein Grund dafür ist das ich mich an das Forum wenden muss), Deshalb weis ich nur wenig darüber. Ich weis nur das ich mit verschiedenen begriffen wie "search from bla where bla is" (oder so in der Art, ich kenne leider nicht die genaue syntax) sachen auslesen kann. naja das wars auch schon. Ich habe im Internet versucht ein Tutor oder ähnliches zu finden, habe jedoch nur wenig erfolg gehabt. was interessant aussieht ist

    http://pronix.de/modules/C/openbook/c_programmierung_28.php

    Das ist die online version von diesem Jürgen Wolf und seinem Buch "C von A-z" welches mehrere hundert Seiten umfast.

    DAnke für deine hilfe



  • Eigentlich ist es egal welche Datenbank dahinter hängt. SQL können normalerweise alle halbwegs guten Datenbanken (mysql auf jeden Fall ;)). Du kannst auch einfach mal auf die Seite von MySQL gehen und da in der Doku nachlesen, wie du mit SQL-Befehlen umgehen musst.

    Für deine Aufgabe brauchst du dir nur die Befehle SELECT und UPDATE anschauen, aber für deinen weiteren Weg lege ich dir ans Herz, dass du dich mal genauer mit allen SQL-Befehlen beschäftigst (besonders SELECT und seine Möglichkeiten; of braucht man auch INSERT, UPDATE und DELETE; trotzdem nicht den Rest vergessen ;)). Du wirst es noch brauchen, wenn du weiterhin beim Programmieren bleibst.



  • okay ich werde mich da mal durch die doku der SQL lesen.

    Aber wie ich das jetzt in C einbinde weis ich leider immer noch nicht.
    Hast du nicht ein paar programm schnipsel fr mich?

    nochmal thx für deine hilfe.



  • Beispiel wie es sein könnte:

    mysql_query ("SELECT * FROM fahrzeuge");
    

    Leider kenne ich die Headerdatei für mysql nicht auswendig, also kann es gut möglich sein, dass es die Funktion da nicht gibt. Wahrscheinlich würde man auch irgendeinen Rückgabewert erhalten (vielleicht einen Zeiger oder ein Array 😕 ). Der Parameter ist mit Sicherheit ein ganz normaler String in dem dein SQL-Befehl steht. Bei diesem Beispiel würden alle Zeilen und Spalten der Tabelle fahrzeuge geliefert.



  • ja es stimmte nicht ganz, aber ich habe mittlerweile (durch deinen ansatz) den richtigen code gefunden. Ich denke ich kann jetzt schon einiges weiter programmieren.

    Also folgender code müsste ungefähr (wenigstens ANsatzweise) stimmen:

    printf("Fahrzeug ist: %s\n", fID);
      sprintf(mybuf, "select id from fahrzeuge where pid = '%s'", fID);
      if(mysql_real_query(&mysql, mybuf, strlen(mybuf))) dberr();
    	printf("anfrage\n");
            result = mysql_use_result(&mysql);
    

    Ich danke dir für die hilfe, war aufschlussreich und ich glaub jetzt komm ich vrowärts.

    THX m8



  • Dieser Thread wurde von Moderator/in Shade Of Mine aus dem Forum ANSI C in das Forum Rund um die Programmierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • kann mir einer sagen wieich jetzt weiter mache? ich habe alles soweit fertig das ich nun einen code brauche mit dem ich über C etwas in eine SQL datenbank eintragen kann. schaut euch mal meinen code an.

    wie mache ich weiter?

    danke an alle.

    #include <stdio.h>
    #include <stdlib.h>
    #include <mysql/mysql.h>
    #include <byteswap.h>
    #include <string.h>
    #include "structs.h"
    
    int main ()
    
    {
    
    char fID;
    char mybuf[500];
    char mybuf2[500];
    MYSQL_RES *ergebnis;
    MYSQL_ROW zeile;
    int id;
    char stri[20];
    
    /*--------------------------Initialisierung von des Handle-----------------------------*/
    
    mysql_init(&mysql);
    
    /*
    	if (sql == NULL)
    
    	{	
    		fprinf (stderr, "Ist ist ein Fehler beim initialisieren aufgetaucht \n");
    		exit (0);
    	}
    */	
    
    /*---------------------------Mit dem Server verbinden----------------------------------*/
    
    	if (mysql_real_connect (&mysql,			/*Handle*/
    				"localhost",		/*Host*/
    				"root",			/*User*/
    				"",			/*Passwort*/
    				"smsd",			/*DB-name*/
    				0,			/*Port*/
    				NULL,			/*Socket*/
    				0			/*FLags*/
    				)
    	    			== NULL
    		)	    
    	{
             fprintf (stderr, "Fehler mysql_real_connect():"
                  "%u (%s)\n",mysql_errno (&mysql), mysql_error (&mysql));
    	}
    
    	else
          	printf("Erfolgreich mit dem MySQL-Server verbunden\n");
    
          	id = 1;
          	strcpy(stri,"*");
    
          	sprintf(mybuf, "SELECT %s FROM kunden WHERE id = %d", stri, id);
    
      	if(mysql_real_query(&mysql, mybuf, strlen(mybuf)));
    	printf("anfrage\n\n");
            ergebnis = mysql_use_result(&mysql);
    
            if(zeile = mysql_fetch_row(ergebnis))
            {
                    zeile[0];
    		printf("Teil-Zeile %s\r\n",zeile[0]);
    		printf("Teil-Zeile %s\r\n",zeile[1]);
    		printf("Teil-Zeile %s\r\n",zeile[2]);
    
            }
      mysql_free_result(ergebnis);
    
    	sprintf (mybuf2, "INSERT INTO logs (dbid, nummer, txt, tstamp) values") (3, 'testFA-ID', 'test-txt', 'test-tstamp');
    
    /*-----------------------------Verbindung trennen---------------------------------------*/
    
      // mysql_close (&mysql);
       return 0;
    }
    


  • Hallo,

    du mußt doch nur mysql_query aufrufen (ein Blick in die Dokumentation hätte genügt, um diese Funktion zu finden), außerdem ist noch der INSERT falsch:

    sprintf (mybuf2, "INSERT INTO logs (dbid, nummer, txt, tstamp) VALUES (3, 'testFA-ID', 'test-txt', 'test-tstamp')";
    mysql_query(mysql, mybuf2);
    

    MfG


Anmelden zum Antworten