Fehler beim Ausprobieren von libpqxx-4

Programmierung mit PostgreSQL (C#, PHP, Perl, Java, ...)
Mungo1981
Neuer Benutzer
Beiträge: 19
Registriert: Fr 17. Mai 2019, 08:54

Fehler beim Ausprobieren von libpqxx-4

Beitrag von Mungo1981 » Do 30. Mai 2019, 20:38

Hallo liebe Community,
Ich beschäftige mich gerade damit libpqxx zu lernen.
folgendes Script:

Code: Alles auswählen

#include <iostream>
#include <pqxx/pqxx>

 int main()
 {
   try
   {
     pqxx::connection c(
	    "user=papa "
            "host=localhost "
            "password=mama "
            "dbname=postgres");
     pqxx::work w(c);
for (pqxx::result::const_iterator row = r.begin();
      row != r.end();
      ++row)
  {
    for (pqxx::result::tuple::const_iterator field = row->begin();
         field != row->end();
         ++field)
      std::cout << field->c_str() << '\t';

    std::cout << std::endl;
  }
     w.commit();

     std::cout << r[0][0].as<int>() << std::endl;
   }
   catch (const std::exception &e)
   {
     std::cerr << e.what() << std::endl;
     return 1;
   }
 }
führt leider zu folgendem Fehler:

Code: Alles auswählen

g++ KapStart2.cpp -lpqxx -lpq -o zumi
KapStart2.cpp: In function ‘int main()’:
KapStart2.cpp:23:24: error: ‘pqxx::result::tuple’ has not been declared
     for (pqxx::result::tuple::const_iterator field = row->begin();
                        ^
KapStart2.cpp:24:10: error: ‘field’ was not declared in this scope
          field != row->end();
          ^
KapStart2.cpp:24:10: note: suggested alternative:
In file included from /usr/local/include/pqxx/field:19:0,
                 from /usr/local/include/pqxx/result.hxx:34,
                 from /usr/local/include/pqxx/result:19,
                 from /usr/local/include/pqxx/binarystring.hxx:26,
                 from /usr/local/include/pqxx/binarystring:18,
                 from /usr/local/include/pqxx/pqxx:17,
                 from KapStart2.cpp:2:
/usr/local/include/pqxx/field.hxx:43:22: note:   ‘pqxx::field’
 class PQXX_LIBEXPORT field
                      ^

Da ich ein Anfänger und nicht ein studierter Informatiker bin finde ich den verdammten Fehler nicht.

Ein auf dem ( Feuerwehr- ) Schlauch stehender

Mungo1981

P.S.: So wie ich die Fehlermeldung verstehe, reicht das #include <libpqxx/libpaxx> nicht aus, da ich die folgenden Kapitel erst verstehe wenn ich dieses Kapitel verstanden hab - steh ich halt auf nem Feuerwehrschlauch - und weis nicht so recht was ich tun soll.

Dravion
Benutzer
Beiträge: 35
Registriert: So 6. Nov 2016, 09:43

Re: Fehler beim Ausprobieren von libpqxx-4

Beitrag von Dravion » Do 30. Mai 2019, 22:03

Das ist ein ein Syntaxfehler und dein Program wird sich nicht kompilieren lassen bist Du diesen Programmierfehler korrigiert hast.

Der GNU C/C++ Compiler gibt Dir einen Hinweis:Der Fehler befindet sich in Zeile 24. Das Objekt ::tuple is unbekannt.Irgendein inlude header der dieses C++ Objekt definiert fehlt noch. Da Postgres selbst nur in C jedoch nicht in C++ programmiert wurde muss es sich bei der gesuchten *.h include Datei (oder Namespace) um etwas aus deinem libpg++ Paket handeln.

Schau einfach mal im libpq++ Ordner nach *.h Dateien und include die einfach mal und erstelle dann mit g++ neu, eine der inludes wird wohl der richtige sein.

Mungo1981
Neuer Benutzer
Beiträge: 19
Registriert: Fr 17. Mai 2019, 08:54

Re: Fehler beim Ausprobieren von libpqxx-4

Beitrag von Mungo1981 » Fr 31. Mai 2019, 14:47

Ok,
Ich hab zuerst versucht alle Librarys zu includen die unter "sugested alternative" forgeschlagen wurden.
Den kompletten Ordner pqxx hinzu zu fügen scheint Arbeit zu sein für jemanden der seinen Ödipus-Komplex ausargiert hat.

Hat sonst noch jemand eine Idee zur Lösung meines Problems ????

Mungo1981

Mungo1981
Neuer Benutzer
Beiträge: 19
Registriert: Fr 17. Mai 2019, 08:54

Re: Fehler beim Ausprobieren von libpqxx-4

Beitrag von Mungo1981 » Fr 31. Mai 2019, 17:39

Ok, hab noch was rumprobiert.
Ich hatte auch überlesen das "-std=c++11 " zu compilieren gesetzt sein muss.
Kann es sein das beim compilieren der Library dieser Parameter nicht gesetzt war,
Und deshalb irgendseine Komponente nicht richtig gebildet wurde und nun fehlt ???

Dravion
Benutzer
Beiträge: 35
Registriert: So 6. Nov 2016, 09:43

Re: Fehler beim Ausprobieren von libpqxx-4

Beitrag von Dravion » Fr 31. Mai 2019, 18:30

Hat das denn nun funktioniert oder nicht?

Mungo1981
Neuer Benutzer
Beiträge: 19
Registriert: Fr 17. Mai 2019, 08:54

Re: Fehler beim Ausprobieren von libpqxx-4

Beitrag von Mungo1981 » Fr 31. Mai 2019, 18:46

Nein hat nicht funktioniert.

Hatte mittlerweile schon versucht "#include <pqxx/tuple>"

Mungo1981
Neuer Benutzer
Beiträge: 19
Registriert: Fr 17. Mai 2019, 08:54

Re: Fehler beim Ausprobieren von libpqxx-4

Beitrag von Mungo1981 » Fr 31. Mai 2019, 19:08

Kann sein,
dass der Fehler so banal ist, dass er vielleicht gar nicht gesehen wird !!! :( :( :(

Dravion
Benutzer
Beiträge: 35
Registriert: So 6. Nov 2016, 09:43

Re: Fehler beim Ausprobieren von libpqxx-4

Beitrag von Dravion » Fr 31. Mai 2019, 19:27

Also ich weiß nicht warum dein test code nicht läuft (läuft auch bei mir nicht) aber ich habe mal einen ähnlichen testcode zusammengebastelt und der läuft mit deiner libpq++ lib.

#Libpq am besten mit apt installieren: sudo apt-get install libpqxx-dev

Schritt 1:
Mit psql (oder womit Du ansonsten SQL-Queries bearbeitest) und Datenbank mit dem Namen "company" anlegen z.B so
CREATE DATABASE company;

Schritt 2:
CREATE TABLE employee (id int, name varchar(255), salary int);

Schritt 3:
INSERT INTO employee (id, name, salary) VALUES (1001, 'Trump', 10);
INSERT INTO employee (id, name, salary) VALUES (1002, 'Obama', 11);

## So und nun unser libpq++ Testprogram (datei: libpq++-test.cc)

#include <iostream>
#include <pqxx/pqxx>

/// Query employees from database.
pqxx::result query()
{
pqxx::connection c{"dbname=company user=postgres"};
pqxx::work txn{c};

pqxx::result r = txn.exec("SELECT name, salary FROM employee");
for (auto row: r)
std::cout
<< row["name"].c_str()
<< " makes "
<< row[1].as<int>()
<< "."
<< std::endl;

txn.commit();
return r;
}

/// Query employees from database, print results.
int main(int, char *argv[])
{
try
{
pqxx::result r = query();

// Results can be accessed and iterated again. Even after the connection
// has been closed.
for (auto row: r)
{
std::cout << "Row: ";
// Iterate over fields in a row.
for (auto field: row) std::cout << field.c_str() << " ";
std::cout << std::endl;
}
}
catch (const pqxx::sql_error &e)
{
std::cerr << "SQL error: " << e.what() << std::endl;
std::cerr << "Query was: " << e.query() << std::endl;
return 2;
}
catch (const std::exception &e)
{
std::cerr << "Error: " << e.what() << std::endl;
return 1;
}
}

#Kompilieren mit
g++ libpq++-test.cc -lpqxx -lpq -o mylibpq++test

#Starten mit
./mylibpq++test

#Ausgabe:
Trump makes 10.
Obama makes 11.
Row: Trump 10
Row: Obama 11

Mungo1981
Neuer Benutzer
Beiträge: 19
Registriert: Fr 17. Mai 2019, 08:54

Re: Fehler beim Ausprobieren von libpqxx-4

Beitrag von Mungo1981 » Fr 31. Mai 2019, 19:41

Juston, whe have a problem:

Bei mir führt dieser ( dein ) Code zu mehr Fehlermeldungen als meine Konsole anzuzeigen vermag

Dravion
Benutzer
Beiträge: 35
Registriert: So 6. Nov 2016, 09:43

Re: Fehler beim Ausprobieren von libpqxx-4

Beitrag von Dravion » Fr 31. Mai 2019, 19:47

Dann zeig mal die Fehlermeldungen, bei mir sind es genau 0

Antworten