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.
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.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); } }
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?
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
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
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.
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
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!
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
Links: Tobias Bauer - IT- und Funkdienstleistungen - Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen - Funkforum
Lesezeichen