XesperantoX
Mitglied
Hallo,
also ich habe ein Problem mit einem Embedded SQL Code und zwar habe ich eine kleine PostgreSQL Datenbank erstellt und möchte/muss nun über ein C-Programm auf die DB zugreifen. Soweit sogut... um das Ganze zu testen habe ich erstmal nur soweit geschrieben das die DB geöffnet, ein kurzer Text ausgegeben wird und die DB dann wieder geschlossen wird.
Den C-Code habe ich dann mit "ecpg" kompiliert und habe dann auch meine .c-Datei erhalten. Bis hierhin alles okay, aber wenn ich die Datei jetzt in Visual C++ 6.0 öffne und dort kompilieren bzw ausführen will bekomme ich folgende Fehler gemeldet:
Bei den Fehlern handelt es sich ja um unbekannte Funktionsaufrufe, also schließe ich daraus das Libaries und Include-Files fehlen. Habe inzwischen angefangen .dll und .lib Dateien aus den Postgre-Verzeichnis zu kopieren, aber irgendwie muss das ganze doch auch anders gehen, bzw an was anderem liegen...
Die von ecpg kompilierte Datei sieht folgendermaßen aus:
Wäre dankbar wenn mir jemand einen Tipp geben könnte!
Grüße
Esperanto
also ich habe ein Problem mit einem Embedded SQL Code und zwar habe ich eine kleine PostgreSQL Datenbank erstellt und möchte/muss nun über ein C-Programm auf die DB zugreifen. Soweit sogut... um das Ganze zu testen habe ich erstmal nur soweit geschrieben das die DB geöffnet, ein kurzer Text ausgegeben wird und die DB dann wieder geschlossen wird.
Den C-Code habe ich dann mit "ecpg" kompiliert und habe dann auch meine .c-Datei erhalten. Bis hierhin alles okay, aber wenn ich die Datei jetzt in Visual C++ 6.0 öffne und dort kompilieren bzw ausführen will bekomme ich folgende Fehler gemeldet:
Code:
--------------------Konfiguration: EmbeddedC - Win32 Debug--------------------
Linker-Vorgang läuft...
main.obj : error LNK2001: Nichtaufgeloestes externes Symbol _ECPGdisconnect
main.obj : error LNK2001: Nichtaufgeloestes externes Symbol _sqlprint
main.obj : error LNK2001: Nichtaufgeloestes externes Symbol _ECPGget_sqlca
main.obj : error LNK2001: Nichtaufgeloestes externes Symbol _ECPGconnect
Debug/EmbeddedC.exe : fatal error LNK1120: 4 unaufgeloeste externe Verweise
Fehler beim Ausführen von link.exe.
EmbeddedC.exe - 5 Fehler, 0 Warnung(en)
Bei den Fehlern handelt es sich ja um unbekannte Funktionsaufrufe, also schließe ich daraus das Libaries und Include-Files fehlen. Habe inzwischen angefangen .dll und .lib Dateien aus den Postgre-Verzeichnis zu kopieren, aber irgendwie muss das ganze doch auch anders gehen, bzw an was anderem liegen...
Die von ecpg kompilierte Datei sieht folgendermaßen aus:
Code:
/* Processed by ecpg (4.1.1) */
/* These include files are added by the preprocessor */
#include "c:\Programme\postgreSQL\8.1\include\ecpgtype.h"
#include "c:\Programme\postgreSQL\8.1\include\ecpglib.h"
#include "c:\Programme\postgreSQL\8.1\include\ecpgerrno.h"
#include "c:\Programme\postgreSQL\8.1\include\sqlca.h"
/* End of automatic include section */
#line 1 "c:\main.pgc"
#include <stdio.h>
#include <stdlib.h>
/* exec sql begin declare section */
/* exec sql end declare section */
#line 5 "c:\main.pgc"
#line 1 "C:/Programme/PostgreSQL/8.1/include/sqlca.h"
#ifndef POSTGRES_SQLCA_H
#define POSTGRES_SQLCA_H
#ifndef DLLIMPORT
#if defined(WIN32) || defined(__CYGWIN__)
#define DLLIMPORT __declspec (dllimport)
#else
#define DLLIMPORT
#endif /* __CYGWIN__ */
#endif /* DLLIMPORT */
#define SQLERRMC_LEN 70
#ifdef __cplusplus
extern "C"
{
#endif
struct sqlca_t
{
char sqlcaid[8];
long sqlabc;
long sqlcode;
struct
{
int sqlerrml;
char sqlerrmc[SQLERRMC_LEN];
} sqlerrm;
char sqlerrp[8];
long sqlerrd[6];
/* Element 0: empty */
/* 1: OID of processed tuple if applicable */
/* 2: number of rows processed */
/* after an INSERT, UPDATE or */
/* DELETE statement */
/* 3: empty */
/* 4: empty */
/* 5: empty */
char sqlwarn[8];
/* Element 0: set to 'W' if at least one other is 'W' */
/* 1: if 'W' at least one character string */
/* value was truncated when it was */
/* stored into a host variable. */
/*
* 2: if 'W' a (hopefully) non-fatal notice occurred
*/ /* 3: empty */
/* 4: empty */
/* 5: empty */
/* 6: empty */
/* 7: empty */
char sqlstate[5];
};
struct sqlca_t *ECPGget_sqlca(void);
#ifndef POSTGRES_ECPG_INTERNAL
#define sqlca (*ECPGget_sqlca())
#endif
#ifdef __cplusplus
}
#endif
#endif
#line 6 "c:\main.pgc"
/* exec sql whenever sqlerror sqlprint ; */
#line 7 "c:\main.pgc"
int main(int argc, char *argv[])
{
/* exec sql begin declare section */
/* exec sql end declare section */
#line 12 "c:\main.pgc"
{ ECPGconnect(__LINE__, 0, "olympia" , NULL,NULL , NULL, 0);
#line 14 "c:\main.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 14 "c:\main.pgc"
printf("Mit DB Olympia verbunden!");
{ ECPGdisconnect(__LINE__, "CURRENT");
#line 18 "c:\main.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 18 "c:\main.pgc"
system("PAUSE");
return 0;
}
Wäre dankbar wenn mir jemand einen Tipp geben könnte!
Grüße
Esperanto