Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Allgemeines (OffTopic) » C++ und Oracle

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
22.05.2003, 14:19 Uhr
~Schorschi
Gast


Hallo,
habe ein Problem:

Habe auf meinen Win2000 Rechner MS Visual C++6.0 und Oracle 9i installiert.
Nun möchte ich aus meinen C-Programm mittels eingebetteten SQL-Anweisungen Zugriff auf meine Oracle-Datenbank nehmen.
Anmeldung:

strncpy ((char*)username.arr, "blablabla",20);
username.len= strlen ((char*) username.arr);
strncpy ((char*)password.arr, "blabla",10);
password.len= strlen ((char*) password.arr);

da fängt der Compiler schon an mit heulen: "arr" sowie "len" muß eine Klassee/Struktur/Union sein
dann bei dem Aufruf des Präprozessors mir EXEC SQL : "EXEC nicht deklarierter Bezeichner" und so weiter.

Habe unter Oracle den Präprozessor RRO*C++9.2.0.1.0 installiert.
Muß ich noch was installieren/konfigurieren/fehlen mir Bibliotheken oder Headerdateien?
Kann mir jemand weiterhelfen... vielleicht mit einen kleinen Beispiel um eine Tabelle zu ertstellen oder ähnliches?

vielen Dank
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
22.05.2003, 14:48 Uhr
~0xdeadbeef
Gast


Was für eine Variable ist 'username'?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
22.05.2003, 14:52 Uhr
virtual
Sexiest Bit alive
(Operator)


Ich würde mal eher sagen, daß password und username Strukturen sein sollten...
Außerdem: wenn Du ESQL verwendest, dann mußt Du ja den Source erst mit proc vorprozessieren. Wenn nach dem präprozessordurchlauf noch ein EXEC SQL übrigbleibt, liegt der Fehler bereits im ESQL teil, denn normalerweise müßte der proc die EXEC SQL Anweisungen in Aufrufe der nativen Oracle Library übersetzen, was offenkundig nicht geschehen ist. Der VC darf ein EXEC SQL gar nichjt zu gesicht bekommen.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
22.05.2003, 15:36 Uhr
~Schorschi
Gast


Habe leider davon noch nicht so viel Ahnung und klammere mich an Bücher.
password und username wurden nach den includes als varchar definiert. Ich denke, daß das sog. Hostvariablen sind.
Connect erfolgt dann über: EXEC SQL CONNECT :username IDENTIFIED BY :password;

...mit dem proc hab ich auch schon was im Netz gelesen-muß dort nicht noch ne Dateiangabe folgen??? proc dateiname ?

über ein kleinen Bsp-Quelltext wär ich sehr dankbar.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
22.05.2003, 15:52 Uhr
virtual
Sexiest Bit alive
(Operator)


Was du machen willst nennt sich "Embedded SQL", also kurz ESQL. Die Prinzipielle Idde dabei ist, daß man einen Source schreibt, der zwar sehr nach C aus sieht, aber erstmal kein C ist. zB sehen bei dem Source die Deklarationen von usrname und password so aus:

C++:
    EXEC SQL BEGIN DECLARE SECTION;
    VARCHAR userid[128];    /* Note: service name may be added ! */
    VARCHAR passwd[DBINT_PASSWD_LEN];
    char *dbname;       /* DB-Name                          */
    EXEC SQL END   DECLARE SECTION;
    [...]
    strcpy( (char *) passwd.arr, pwd );
    passwd.len = strlen( (char *) passwd.arr );
    strcpy( (char *) userid.arr, uid );
    userid.len = strlen( (char *) userid.arr );
    [...]
    EXEC SQL CONNECT :userid IDENTIFIED BY :passwd ;


Den ganzen EXEL SQL Kram kennt der C Compiler nicht. Deshalb liefert Dir oracle mit dem proc ein tool, welches das in gültigen C Code umsetzt. Also muß Du die Datei, wie sie oben steht, erst Du den proc jagen. Der macht eine .c Datei daraus, wo an Stelle von dem EXEC SQL anweisungen ganz wilde Dinge stehen, aber immerhin compilierbares C. (Du kannst unter "Custom Build Step" im Visual C den ProC ziemlich bequem in Dein Projekt direkt mit einbinden). Die so generierte Datei schickst Du dann dem Visual C.

Ich habe lange nicht mehr mit ESQL gearbeitet, weil ich mich direkt mit dem nativen Interface von Oracle unterhalte (dadurch, daß ich auf vielen platformen entwickel, hab ich keinen Bock überall den proc mit hinzuschleppen, vielleicht auch für dich eine Überlegung, wenn Du portierungen machen mußt).

Also: Datei -> proc -> eine .c Datei -> Visual C -> .obj Datei -> Linker -> .exe/.dll.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
23.05.2003, 14:26 Uhr
~Schorschi
Gast


vielen Dank virtual,
das hat mir schon mal weitergeholfen.
Habe es geschafft mittels proc eine .pre und dann eine .c Datei zu erstellen.
Mein C-Programm läuft jetzt schon mal ohne Fehler, aber erzeugt noch keinen Eintrag in meine Datenbank.
Ich denke, das liegt daran, daß beim CONNECT der Dienstname nicht angegeben wurde(Anmeldung bei Oracle mit Benutzernamen, Kennwort und Dienst)
Oben bei der variablendefinition ist von " char *dbname;" die Rede. Wozu wird dieser Zeiger genutzt?
Wie sieht der komplette connect-Befehl aus?
Oder kennt der Proc folgenden SQL-Befehl nicht:

EXEC SQL insert into person(id, name) values(5,'maier');
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
23.05.2003, 15:15 Uhr
virtual
Sexiest Bit alive
(Operator)


Hi,

Das mit dem dbname ist IMHO irrelvant im obigen Code. Ich glaube, du must einfach die Umgebungsvariablen ORACLE_SID und ORACLE_HOME gesetzt haben. In der ORACLE_SID setzt man für gewöhnlich den Datenbankservice ein. Du kannst ihn auch an den User namen dranhängen, also "user@service".
Und schau mal hier: www.cs.pitt.edu/~panos/teaching/d1555.02/system_docs/ESQLExample1.html
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
27.05.2003, 14:04 Uhr
~Schorschi
Gast


Habe eine .pc-Datei erstellt in der die Anmeldung an die Datenbank erfolgen soll. Der Präkompiler gibt mir folgende Fehlermeldung:

Semantischer Fehler in Zeile 81, Spalte 23, Datei C:\User\Probe\a.pc:
EXEC SQL CONNECT :username IDENTIFIED BY :password;
......................1
PCC-S-02322, Undefinierter Bezeichner gefunden
Semantischer Fehler in Zeile 81, Spalte 47, Datei C:\User\Probe\a.pc:
EXEC SQL CONNECT :username IDENTIFIED BY :password;


Die ganzen Beispieldateien im Ordner ...\oracle\...\demo\proc lassen sich auch nicht compiliern.

Weiß jemand warum?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
27.05.2003, 16:22 Uhr
virtual
Sexiest Bit alive
(Operator)


Hört sich für mich nach einem Installationsproblem vom proc an. Wissen tu ich das aber icht. Ist das denn die ertste Fehlermeldung/Warnung, die Du bekommst, oder stehen da noch ein paar davor?
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ Allgemeines (OffTopic) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: