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); }