Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Informix Новый топик    Ответить
 c++, csdk информикс (помогите начать)  [new]
deiv
Member

Откуда:
Сообщений: 18
Было-есть-будет приложение (биллинг, интерфейс опреатора) на 4gl.
Захотелось переделать его, если не весь, то хотябы частично на C++
(+GUI в перспективе).
Но для этого :-( нужно, блин, хотябы приконектиться к базе.
Оцените, объяните где не прав, или чего ещё нужно сделать, т.к.
после сборки этого текста от полученной программы
добиться :-((( - нихр.. нельзя

// ****можно т.е. ..., получаю на консоль
// Could not open database
// null
// **** А хотелось бы приконектиться, или получить код/расшифровку ошибки которая произошла
#include <stdlib.h>
#include <iostream.h>
#include <it.h>

int main(int argc, const char *argv[])
{
ITDBInfo dbinfo;
ITConnection conn;
if (!dbinfo.SetSystem("server")){
cout << "Could not set system " << endl; return (1); }
if (!dbinfo.SetDatabase("internetnew")){
cout << "Could not set database " << endl; return (1); }
if (!dbinfo.SetUser("informix")){
cout << "Could not set user " << endl; return (1); }
if (!dbinfo.SetPassword("informix")){
cout << "Could not set password " << endl; return (1); }
conn.SetDBInfo(dbinfo);
if (!conn.Open() || conn.Error()) { // выходит в этом условии
cout << "Could not open database " << endl;
cout << conn.ErrorText() << endl; // должен сказать - чего ему надо, но не говорит (сволочь)
return (1);
}
conn.Close();
cout << endl;
return 0;
}
// .sqlhost нормальный
// в окружении установил DB_LOCALE, CLIENT_LOCALE
// INFORMIXDIR, на всякий случай INFORMIXSERVER
// CSDK Version 2.30.UC1
// IDS 2000 Version 9.21.UC3
// Помогите, если не вломы,
// хотябы примерно - где копать, чего курить.
28 окт 04, 13:54    [1068345]     Ответить | Цитировать Сообщить модератору
 Re: c++, csdk информикс (помогите начать)  [new]
Andron
Member

Откуда: Cherepovets
Сообщений: 1816
Как там насчет чтения документации и примеров (они кстати есть в CSDK в каталоге demo).
1 ноя 04, 11:55    [1074481]     Ответить | Цитировать Сообщить модератору
 Re: c++, csdk информикс (помогите начать)  [new]
vad13
Member

Откуда:
Сообщений: 1
Вот конструктор класса, который инкапсулирует соединение:
IfxSQLConnection::IfxSQLConnection( const string server, const string db, const string user, const string passwd ) throw (ASQLException)
{
ITDBInfo dbinfo;
dbinfo.SetSystem(server.c_str());
dbinfo.SetDatabase(db.c_str());
dbinfo.SetUser(user.c_str());
_connection = new ITConnection();
if ( _connection->Open(dbinfo) == false) {
string errstr = "";
if ( _connection->Error() ) {
errstr = "SqlState="+string(_connection->SqlState().Data() )+" ErrorText="+_connection->ErrorText().Data();
}
if (_connection!=NULL) {
delete _connection;
_connection = NULL;
}
if ( !errstr.empty() ) {
throw IfxSQLException(errstr);
}
else {
throw IfxSQLException("unknown");
}
}
}

У меня все работает на IDX9.3 (HPUX)
11 ноя 04, 15:28    [1098870]     Ответить | Цитировать Сообщить модератору
 Re: c++, csdk информикс (помогите начать)  [new]
deiv
Member

Откуда:
Сообщений: 18
vad13
Вот конструктор класса, который инкапсулирует соединение:
...
У меня все работает на IDX9.3 (HPUX)

Спасибо за попытку помочь.
Всю эту лабуду :-) вынес прямо в майн.

#include <stdlib.h>
#include <iostream.h>
#include <it.h>
#include <string>

main () {
ITDBInfo dbinfo;
ITConnection *_connection;

dbinfo.SetSystem("rubnov"   /*server.c_str()*/);
dbinfo.SetDatabase("stores7"/*db.c_str()*/);
dbinfo.SetUser("informix"   /*user.c_str()*/);
dbinfo.SetPassword("mix2001");

_connection = new ITConnection();

if ( _connection->Open(dbinfo) == false) {
   string errstr = "";

   if ( _connection->Error() ) {
      errstr = "SqlState="+string(_connection->SqlState().Data() )+"ErrorText="+_connection->ErrorText().Data();
   }
   if (_connection!=NULL) {
      delete _connection;
      _connection = NULL;
   }
   if ( !errstr.empty() ) {
	printf(errstr.c_str());
   }
   else {
        printf("\"unknown\"\n");
   }
}
}
Прекрасно скомпилился, но результат его работы: "unknown".
Такое ощущение, что какие-то переменные окружения не выставлены.
Какие переменные должны стоять для работы такого модуля?
Возможно дело в чем-то другом, но тогда у меня вообще нет идей. :-)
12 ноя 04, 11:12    [1100858]     Ответить | Цитировать Сообщить модератору
 Re: c++, csdk информикс (помогите начать)  [new]
deiv
Member

Откуда:
Сообщений: 18
Текст который я приводил в первом сообщении скомпилил в винде и в линуксе.
Добавил ожидание нажатия клавиши перед тем как коннекция закрывается.

Запускаю в винде, смотрю онстатом (onstat -u) на серваке коннекции - висит коннект с моей машины.

Запускаю в линуксе, смотрю онстатом (onstat -u) на серваке коннекции - никаких новых не появляется. Выходит и говорит что не может приконнектится к базе и пустое сообщение об ошибке. Ну чего ему не хватает? :-(
12 ноя 04, 11:27    [1100944]     Ответить | Цитировать Сообщить модератору
 Re: c++, csdk информикс (помогите начать)  [new]
В.К.
Member

Откуда: Киев
Сообщений: 235
Подозреваю, что надо выставить переменную среды INFORMIXDIR (=полное_имя_каталога_куда_поставлено_ПО_Informix)

А также, возможно, переменные среды DB_LOCALE и CLIENT_LOCALE
12 ноя 04, 17:20    [1102927]     Ответить | Цитировать Сообщить модератору
Все форумы / Informix Ответить