void ErrorHandler (void);
#include <stddef.h> // Standardheader
#include <stdio.h> // Standardheader
int main ( int argc, char** argv, char** envp) {
EXEC SQL BEGIN DECLARE SECTION; // Deklarationen-Start
char serverDatenbank[] = "arnold.uni"; // Server + DB
char loginPasswort[] = "erika.mustermann"; // User + Passwort
// Hostvariablen
int persnr; // Personalnummer
char name[20]; // Name
char rang[3]; // Rang
int raum; // Raum
char gebdatum[17]; // Geburtsdatum
short raum_ind; // Raum-Indikator
char eingaberang[3]; // Eingabe vom User
EXEC SQL END DECLARE SECTION; // Deklarationen-Ende
EXEC SQL WHENEVER SQLERROR CALL ErrorHandler(); // Fehlermarke
EXEC SQL CONNECT TO :serverDatenbank // Verbindung aufbauen
USER :loginPasswort;
if (SQLCODE == 0) // bei Erfolg
printf("Verbindung zum SQL Server aufgebaut!\n");
else // bei Misserfolg
{
printf("Fehler: Keine Verbindung zum SQL Server!\n");
return (1);
}
printf("Bitte Rang eingeben: "); // gewuenschten Rang
scanf("%s", eingaberang); // vom user holen
printf("Mit Rang %s gespeichert:\n", eingaberang);
EXEC SQL DECLARE C1 CURSOR FOR // Cursor vereinbaren
SELECT PersNr, Name, Rang, Raum, Gebdatum // SQL-Statement
FROM Professoren
WHERE Rang = :eingaberang;
EXEC SQL OPEN C1; // Cursor oeffnen
EXEC SQL FETCH C1 INTO :persnr, :name, :rang, // Versuche eine Zeile
:raum INDICATOR :raum_ind, :gebdatum; // zu lesen
while (SQLCODE == 0) // SOLANGE erfolgreich
{
printf("%d %s %s", persnr, name, rang); // Tupel ausgeben
if(raum_ind == -1) // FALLS keine Raumnr
printf(" ???"); // Platzhalter drucken
else
printf("%4d", raum); // SONST Raumnr
printf(" %s\n", gebdatum); // letztes Attribut
EXEC SQL FETCH C1 INTO :persnr, :name, :rang, // naechste Zeile lesen
:raum:raum_ind, :gebdatum;
}
EXEC SQL CLOSE C1; // Cursor schliessen
EXEC SQL DISCONNECT ALL; // Verbindung beenden
return (0);
}
void ErrorHandler (void)
{
printf("In Error Handler:\n");
printf(" SQL Code = %li\n", SQLCODE);
printf(" SQL Server Message %li: '%Fs'\n", SQLERRD1, SQLERRMC);
}