Ergebnis 1 bis 8 von 8

Thema: Ausführung eines SELECT-Befehls in C-Programm

  1. #1
    Elephantino ist offline Neuer Benutzer
    Registriert seit
    18.06.2010
    Beiträge
    2

    Standard Ausführung eines SELECT-Befehls in C-Programm

    Liebe PostgreSQL-Nutzer,

    Der SELECT-Befehl in meinem C-Programm wird aufgrund eines Fehlers nicht ausgeführt. Ersetze ich diesen Befehl durch einen INSERT-Befehl (im folgenden Code auskommentiert), so funktioniert das Programm.
    Code:
    #include <stdlib.h>
    #include <stdio.h>
    #include "libpq-fe.h"
    
    int main(void)
    {
        PGconn  *conn;
        PGresult *res;
        conn = PQconnectdb("hostaddr='127.0.0.1' port='5432' dbname='test_db' user='postgres' password='secret' connect_timeout='10'");
        if (PQstatus(conn) != CONNECTION_OK)
          {
              fprintf(stderr, "Connection to database failed: %s", PQerrorMessage(conn));
              PQfinish(conn);
              exit(1);
          }
    //  res = PQexec(conn, "INSERT INTO test VALUES ('new',3)");
        res = PQexec(conn, "SELECT * FROM test");
        if (PQresultStatus(res) != PGRES_COMMAND_OK)
          {
              fprintf(stderr, "Command failed\n");
              PQclear(res);
              PQfinish(conn);
          }
    }
    Deshalb vermute ich, dass der Fehler im SELECT-Befehl liegt oder die rückgegebenen Datentypen aus Datenbank (TEXT und INT) nicht mit der Verwendung im C-Programm kompatibel sind.
    Letztlich soll mein Programm Werte aus der Datenbank holen und diese in der Konsole ausgeben.
    Welche weiteren Schritte könnte jetzt unternehmen, um den Fehler einzugrenzen und zu lösen?

  2. #2
    Gisman ist offline Erfahrener Benutzer
    Registriert seit
    20.01.2006
    Ort
    Pfalz
    Beiträge
    751

    Standard

    Zitat Zitat von Elephantino Beitrag anzeigen
    Welche weiteren Schritte könnte jetzt unternehmen, um den Fehler einzugrenzen und zu lösen?
    Uns die Fehlermeldung mitteilen?

    Gruß Uwe
    Have a lot of fun!

  3. #3
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Nähe Dresden
    Beiträge
    5.337

    Standard

    Zitat Zitat von Elephantino Beitrag anzeigen
    Welche weiteren Schritte könnte jetzt unternehmen, um den Fehler einzugrenzen und zu lösen?
    Erstens die Spalten richtig definieren (auch beim Insert) und zweitens die Fehlermeldung, die zurück kommt, anzeigen.

    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  4. #4
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.020

    Standard

    Der passende Rückgabewert für einen SELECT ist: SPI_OK_SELECT.
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

  5. #5
    Elephantino ist offline Neuer Benutzer
    Registriert seit
    18.06.2010
    Beiträge
    2

    Standard Rückgegebene Fehlermeldung

    Vielen Dank für eure Antworten.
    Die zurückgegebene Fehlermeldung lautet "Command failed", was ich auch im Hinblick auf den Quelltext erwarten würde. Leider weiß ich nicht, wie die entsprechende Funktion für die Rückgabe einer ausführlichen Fehlermeldung lautet.
    Zudem weiß ich nicht, wie man die Spalten beim INSERT-Befehl ordentlich definiert, weil ich bisher noch nicht viel Erfahrung mit SQL gesammelt habe.
    Ich wäre sehr dankbar, wenn ihr mir dafür, sowie für die SPI_OK_SELECT Funktion Codeschnippsel geben könntet.

  6. #6
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Nähe Dresden
    Beiträge
    5.337

    Standard

    Zitat Zitat von Elephantino Beitrag anzeigen
    Zudem weiß ich nicht, wie man die Spalten beim INSERT-Befehl ordentlich definiert, weil ich bisher noch nicht viel Erfahrung mit SQL gesammelt habe.
    Nun, insert into table (col1, col2, col3) values (1,2,3) mal so als Beispiel. Es könnte ja sein, daß sich die Struktur der Tabelle mal ändert, z.B. durch ALTER TABLE Spalten dazukommen oder entfernt werden.

    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  7. #7
    Gisman ist offline Erfahrener Benutzer
    Registriert seit
    20.01.2006
    Ort
    Pfalz
    Beiträge
    751

    Standard

    Nur mal so geraten, weil ich von C so gar keine Ahnung habe. Sind denn Daten in der Tabelle?

    Gruß Uwe
    Have a lot of fun!

  8. #8
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.020

    Standard

    Oh, mein Fehler, SPI_SELECT_OK wird nur bei Stored Procedures verwendet.

    Was du suchst:

    PGRES_COMMAND_OK wird für Operationen ohne Ergebnis (also z. B. INSERT, UPDATE, ...) als Rückgabewert geliefert.
    PGRES_TUPLES_OK wird für SELECT-Operationen als Rückgabewert geliefert.

    Jeweils wenn die Anfrage ohne Fehler durchgeführt werden konnte.

    Außerdem solltest du dich noch mit PGRES_EMPTY_QUERY, PGRES_BAD_RESPONSE, PGRES_NONFATAL_ERROR und PGRES_FATAL_ERROR auseinandersetzen.
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum