[ Dejan tf @ 23.11.2015. 14:45 ] @
Potrebno mi je da se konektujem iz c++ na oracle bazu.

Skinuo sam Oracle c++ call interface za visual studio 2010.

Da li je potrebno ucitati ovaj OCCI, i posle toga pisati samo klasu za konekciju ili...

Ili je mozda bolje naci ODBC driver insatalirati ga i pozvati preko konekcionog stringa.

Kao npr. u Javi gde instaliram JDBC drajver pozovem klasu, upisem potrebne parametre u konekcioni string i to je to.

Ako ima neko iskustvo za konektovanje iz C++ na oracle neka pise.

Unapred hvala.
[ Dejan tf @ 24.11.2015. 11:04 ] @

Ja sam skinuo sa oraclovog sajta dve biblioteke. Smestio sam ih u odredjeni folder. U okviru visual studia c++ navedem putanju, medjutim on mi ne prepoznaje occi. Problem je sto ja nemam kod sebe instaliranu na lokalu oracle bazu, vec pristupam udaljenoj bazi. Samo sam skinuo potrebne biblioteke.

evo koda:

Code:


#include <iostream>
#include "stdafx.h"
#include <occi.h>---OVDE IMAM PROBLEM

using namespace std;
using namespace oracle::occi;
int _tmain(int argc, _TCHAR* argv[])
{

    oracle::occi::Environment* environment;
    oracle::occi::Connection *con;
    oracle::occi::Statement* stmt;
    oracle::occi::ResultSet* res;
  
    try{
  
    environment = oracle::occi::Environment::createEnvironment(oracle::occi::Environment::DEFAULT);
        
  
    con = environment->createConnection("d....","......", "192.168.xx.x:1521/xxx");

    stmt = con->createStatement("

    SELECT SUM(s.kolicina) kolicina
    FROM ttr_sadrzaj s, ttr_tsj_tok tt
    WHERE tt.sifskl = '1'
    and tt.datiz is null
    and s.tsj = tt.tsj
    and s.vlasnik_mp = 'DR'
    and s.ibrmat='23';

 ");
        res = stmt->executeQuery();
  
        while (res->next())

        std::cout << res->getInt(1) << "  " << res->getString(2) <<" "<< res->getString(3) << std::endl;
        stmt->closeResultSet(res);
        con->terminateStatement(stmt);
        environment->terminateConnection(con);
  
    }
    catch (oracle::occi::SQLException &e){

    

        std::cout << e.what();
    }
  
    return 0;
}

[ Dejan tf @ 24.11.2015. 11:16 ] @
Greska:

\konekcijaoracle\konekcijaoracle\konekcijaoracle.cpp(5): fatal error C1083: Cannot open include file: 'occi.h': No such file or directory
[ djoka_l @ 24.11.2015. 11:53 ] @
Nemaš fajl occi.h
Ili ga imaš ali nije na pravom mestu.
[ Dejan tf @ 26.11.2015. 08:27 ] @
Hvala na pomoci.


Sada dobijam novu gresku :

Konek.obj : error LNK2019: unresolved external symbol "public: static class oracle::occi::Environment * __cdecl oracle::occi::Environment::createEnvironment(enum oracle::occi::Environment::Mode,void *,void * (__cdecl*)(void *,unsigned int),void * (__cdecl*)(void *,void *,unsigned int),void (__cdecl*)(void *,void *))" ([email protected]@[email protected]@@[email protected]@[email protected]@[email protected]@[email protected]) referenced in function _wmain
1>C:\Users\Razvoj02\documents\visual studio 2010\Projects\Konek\Debug\Konek.exe : fatal error LNK1120: 1 unresolved external
[ djoka_l @ 26.11.2015. 08:33 ] @
Pa ovo ti sada kaže da nema pojma gde ti je biblioteka.

Ne znam šta si instalirao. Ajde lepo kreni ispočetka, instaliraj Instant Client i imaš sve što ti treba. Onda lepo proveri da li si za C++ lepo setovao include path i library path.

Sve ove tvoje greške nemaju veze sa occi nego sa setovanjem kompajlera.

http://www.oracle.com/technetw...stant-client/index-097480.html
[ Dejan tf @ 26.11.2015. 08:37 ] @
A kada dodam u linke -> Input oraocci.lib

Dobijam sledecu poruku o gresci

fatal error LNK1104: cannot open file 'oraocci.lib'
[ Dejan tf @ 26.11.2015. 09:07 ] @
Hvala na pomoci.

Ja sam radio na sledeci nacin: skinuo sam instantclient_11_2, postavio ga u E.

Otisao u projekat propertis->VC++ directories->include directories->E:\oracle\instantclient_11_2\sdk\include;$(IncludePath)


VC++ directories->Libary directories->E:\oracle\instantclient_11_2\sdk\lib\msvc\vc8;$(LibraryPath)

linkedr -> input-> additional dependencies -> oraocci.lib.


Kod se nalazi na pocetku.
[ Dejan tf @ 26.11.2015. 09:11 ] @
Na ovaj nacin je radjeno, ali to ne funkcionise. Sada cu pokusati sve ispocetka. Da li ima mozda veze sa verzijom oracle baze 11.202, 11.203,11.204.

Ja sam koristio 11.202 instant client?
[ djoka_l @ 26.11.2015. 09:48 ] @
Pa kakve veze ima verzija baze ili klijenta kada tebi kompajler ne zna gde je biblioteka?

Hajde, protumači ovu grešku:
fatal error LNK1104: cannot open file 'oraocci.lib'
[ Dejan tf @ 26.11.2015. 10:40 ] @
Ne prepoznaje 'oraocci.lib'.

Ovu gresku dobijam kada stavim u linker -> input-> additional dependencies -> oraocci.lib.

Prethodnu gresku dobijam kada izbrisem iz linkera oraocci.lib.
[ Mihajlo Cvetanović @ 26.11.2015. 17:00 ] @
Linker ne može da otvori fajl verovatno jer ne može da ga pronađe. Potrebno je reći linkeru gde može da pronađe fajl. U Solution Explorer prozoru selektuj odgovarajući projekat (to jest ne solution, nego projekat), pa iz menija (ili samo desni klik na projekat) > Project > Properties > Configuration Properties > Linker > General > Additional Library Directories i tu dodaj direktorijum u kome se nalazi oraocci.lib. Moraš da povedeš računa da se taj lib fajl slaže sa tvojom konfiguracijom. Ako je to .lib koji ide uz .dll fajl onda najverovatnije mora da se slaže samo arhitektura (x86 ili x64), ali ako je pravi standalone .lib onda moraju da se usklade još neke druge opcije u kompajleru i linkeru. Ti detalji obično pišu u nekom uputstvu koje se dobija tamo odakle si preuzeo .lib biblioteku.
[ Dejan tf @ 27.11.2015. 07:31 ] @
Ja sam vec pokusavao ovo, ali program puca (Has stopped working) cim krene sledeca linija koda..

Code:
environment = oracle::occi::Environment::createEnvironment(oracle::occi::Environment::DEFAULT);


Upitaju je Microsoft Visual Studio 2010, windows 64, oracle 11.2.0.2.


Ja sam skinuo instantclient-sdk windows 64,Oracle_Call_Interface.

U okviru foldera instaantclient sdk se u okviru foldera v9 nalazi se samo oraocci11.lib. A u okviru Oracle_Call_Interface occivc nalaze se lib i dll file.

Ako stavim i jednu i drugu putanju dobijam isti rezultat.

Ja sam stavljao sledece putanje:

a) VC++ Directories->Include Directories->E:\oracle\instantclient_11_2\sdk\include;$(IncludePath)

b)VC++ Directories-Libary Directories ->E:\oracle\instantclient_11_2\sdk\lib\msvc\vc8;$(LibraryPath)

c)Linker-> Input->oraocci11.lib

d)Linker->General-> Additional Library Directories->E:\oracle\occivc;%(AdditionalLibraryDirectories)-> (ovde se nalaze i lib i dll file).

Kada su mi ovakva podesavanja program puca.

Kada u linker inputu izbacim oraocci11.lib, dobijam gresku = error LNK2019: unresolved external symbol "public: static class oracle::occi::Environment *...




[Ovu poruku je menjao Dejan tf dana 27.11.2015. u 11:23 GMT+1]
[ Mihajlo Cvetanović @ 27.11.2015. 09:23 ] @
Umesto iskaza "program puca" potrebno nam je više informacija. Kako izgleda kad puca? Da li u Output prozoru piše nešto povodom tog pucanja?
[ djoka_l @ 27.11.2015. 10:01 ] @
Meni ništa nije jasno. Ne znam da li si uspeo da linkuješ oci biblioteku ili ne, da li umeš da postaviš okruženje za projekat ili ne.
Kažeš da koristiš VS 2010, a pokušavaš da upotrebiš stare biblioteke.

Da li ti je bin katalog od Oracle instant klijenta u PATH-u. Tamo se nalaze dll-ovi koji ti trebaju kada se aplikacija startuje. Da li si uopšte otvorio dokumentaciju i pogledao šta treba da podesiš?
[ Dejan tf @ 27.11.2015. 10:18 ] @
Ako mozes da mi pomognes pomozi, kao covek Mihailo Cvetanovic. A ne da mi se drze neka bezpotrebna predavanja.

Ako si pazljivo procitao sta sam napisao, videces sta sam uradio koja sam podesavanja izvrsio, moj deo koda se isto nalazi tu.

Koja stara biblioteka?



[ djoka_l @ 27.11.2015. 10:28 ] @
Da li ti je setovana putanja C:\Oracle\product\11.2.0\cl\oci\lib\msvc u projektu kao putanja do dodatnih biblioteka?
Da li ti je setovana putanja C:\Oracle\product\11.2.0\cl\bin u PATH-u ?
Da li ti je u Include ubačena putanja do hedera C:\Oracle\product\11.2.0\cl\oci\include ?

Dolaziš ovde sa tvrdnjom da ne radi oci, a ti ne uspevaš ni da kompajliraš program. Kako onda da te shvatim ozbiljno?

Evo moje PATH varijable (boldiran PATH to bin od klijenta):

C:\Java\jdk8_x64\bin;C:\ProgramData\Oracle\Java\javapath;C:\Oracle\product\11.2.0\cl\bin;C:\Oracle\Dev10g\jdk\jre\bin\classic;C:\Oracle\Dev10g\jdk\jre\bin;C:\Oracle\Dev10g\jdk\jre\bin\client;C:\Oracle\Dev10g\jlib;C:\Oracle\Dev10g\bin;C:\Oracle\Dev10g\jre\1.4.2\bin\client;C:\Oracle\Dev10g\jre\1.4.2\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\Java\MinGW\bin

Evo ti linka do dokumentacije:
http://docs.oracle.com/database/121/LNCPP/toc.htm
http://docs.oracle.com/database/121/LNOCI/toc.htm
Citat:

Oracle Technology Network

The Instant Client libraries are also available on the Oracle Technology Network (OTN) Web site at:

http://www.oracle.com/technology/tech/oci/instantclient/Opens a new window

If these four libraries are accessible through the directory on the Operating System Library Path variable (LD_LIBRARY_PATH on Linux and UNIX, and PATH on Windows), then OCCI operates in the Instant Client mode. In this mode, there is no dependency on ORACLE_HOME and none of the other code and data files provided in ORACLE_HOME are needed by OCCI.

If you are installing Instant Client from the Oracle Technology Network,

Download and install the Instant Client libraries to an empty directory, such as instantclient_12_1.

Set the operating system shared library path environment variable (LD_LIBRARY_PATH on Linux and UNIX and PATH on Windows) to the directory used in step 1, instantclient_12_1.

Instant Client SDK

Instant Client can also be downloaded as an SDK package. The SDK contains all necessary header files and a makefile for developing OCCI applications in an Instant Client environment. Once developed, these applications can be deployed in any client environment. The SDK has these additional features:

It contains C++ demonstration programs.

It includes libraries required to link applications on Windows, and a Make.bat file is provided to build demos.

The Makefile demo.mk is provided to build the demos for Linux and UNIX. The instantclient_12_1 directory must be on the LD_LIBRARY_PATH before linking the application. These programs require symbolic links for the Client Code Library and the OCCI library, libclntsh.so.12.1 and libocci.so.12.1 respectively, in the instantclient_12_1 directory. The demo Makefile, demo.mk, generates these before the link step. These symbolic links can also be created in a shell script:

cd instantclient_12_1
ln -s libclntsh.so.11.1 libclntsh.so
ln -s libocci.so.11.1 libocci.so

The SDK also contains the Object Type Translator (OTT) utility and its classes to generate the application header files.

Complete Client Installation

If you performed a complete client installation by choosing the Admin option,

On Linux or UNIX platforms, the libociei.so library can be copied from the $ORACLE_HOME/instantclient directory. All the other libraries can be copied from the $ORACLE_HOME/lib directory in a full Oracle installation.

On Windows, the oraociei11.dll library can be copied from the ORACLE_HOME\instantclient directory. All other Windows libraries can be copied from the ORACLE_HOME\bin directory.



[Ovu poruku je menjao djoka_l dana 27.11.2015. u 11:50 GMT+1]
[ Dejan tf @ 27.11.2015. 10:49 ] @
Ovako u pocetku kada sam poceo da radim na ovom problemu, kada sam stavio potrebna podesavanja, moja tvrdnja je bila da ne radi occi.h i to je tacna tvrdnja, jer sam

includovao occi.h, ali u okviru tog foldera koji sam bio skinuo(instant client basic, oracle call interface) se nisu nalazili potrebni header fajlovi. Kada sam resio taj

problem, kada sam sa sajta skinuo (instant client sdk), onda nalazim na sledece probleme, koje sam redom ovde iznosio.
[ Rapaic Rajko @ 27.11.2015. 11:01 ] @
Citat:
djoka_l:
Da li si uopšte otvorio dokumentaciju i pogledao šta treba da podesiš?


Elem..?

Pozz
[ djoka_l @ 27.11.2015. 11:13 ] @
Citat:
Using OCCI with Microsoft Visual C++

The Oracle Database 12c Release 1 (12.1) includes OCCI libraries for developing applications with Microsoft Visual C++ version 9.0 (.NET 2008) and Microsoft Visual C++ version 10.0 (Visual Studio 2010). Microsoft Visual C++ version 8.0 is no longer supported.

Microsoft Visual C++ version 10.0 libraries are installed in the following default locations:

ORACLE_BASE\ORACLE_HOME\bin\oraocci12.dll
ORACLE_BASE\ORACLE_HOME\oci\lib\msvc\oraocci12.lib

Copies of these two files are also installed under the directory:

ORACLE_BASE\ORACLE_HOME\oci\lib\msvc\vc10

The Microsoft Visual C++ 9.0-specific version of the libraries is installed under:

ORACLE_BASE\ORACLE_HOME\oci\lib\msvc\vc9

Applications should link with the appropriate OCCI library. You must ensure that the corresponding DLL is located in the Windows system PATH.

Applications that link to MSVCRTD.DLL, a debug version of Microsoft C-Runtime, /MDd compiler flag, should link with these specific OCCI libraries: oraocci12d.lib and oraocci12d.dll.

All Instant Client packages contain the versions of the OCCI DLLs that are compatible with Microsoft Visual C++ version 9.0 and 10.0.


Applications should link with the appropriate OCCI library. You must ensure that the corresponding DLL is located in the Windows system PATH.

[Ovu poruku je menjao djoka_l dana 27.11.2015. u 12:25 GMT+1]
[ Dejan tf @ 01.12.2015. 07:51 ] @
Nije me bilo par dana.

Skinuo sam visual studio express, uradio virtualnu masinu sa windows 7 os, instalirao na lokalu oracle i tu sve funkcionise na nacin sa kojim sam radio i do sada.

Medjutim na pravoj masini gde imam visual studio gde sam radio i pokusavao da pristupim udaljenoj masini i dalje ne funkcionise.

Na praovoj masini visual studio je 2010 postoji mogucnost za debug 32,64 aplikacija. Ja sam postavio da mi bude po defaultu x64 .

Na kraju mislim da ja u sutini imam problem oko ovih verzija sa Visual Studiom.

Kada se u CMD pozicioniram C:\Program Files\Visual Studio\VC\bin i kada pokusam da pokrenem cl exe

dobijam sledecu poruku o gresci:






[ djoka_l @ 01.12.2015. 12:46 ] @
http://lmgtfy.com/?q=mspdb100.dll
[ Mihajlo Cvetanović @ 02.12.2015. 00:19 ] @
Preporučujem za sledeći put da izbacimo posrednika, https://www.google.com/search?q=mspdb100.dll

Tako zadržavamo korisno, a oslobađamo se beskorisnog.
[ Dejan tf @ 02.12.2015. 06:29 ] @
Gospodo izbacio sam poruku o gresci, zbog ljudi koji ce mozda imati isti problem, hteo sam reci, da nisu upitanju putanje, vec da problem lezi u

poslednjoj gresci.. Bio sam spreman napisati ceo jedan tutorial o svemu ovome, ali se stvarno sada razmislajm da to ne uradim. Hvala svima koji su se

potrudili da kazu svoje misljenje i koji su zaista zeleli da pomognu. Medjutim odgovor je lezao u skoz necemu drugom. Hvala jos jednom..