crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Подключение к БД из динамической библиотеки
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Litkevich Yuriy Дата 1.8.2008, 19:50
 
Цитата(sanya @ 1.8.2008, 23:43) *
скобки забыл...

скобки тут не причем, сначала ты проверяешь указатель, валидный или нет и только если валидный, тогда вызываешь функцию через указатель.
sanya Дата 1.8.2008, 19:43
  да, все работает, спасибки

скобки забыл... :fool:
Litkevich Yuriy Дата 1.8.2008, 16:26
  касяк где-то в соединении т.к. у меня тоже пишет
==> main.cpp - libdb ok
==> main.cpp - connect ok
хотя у меня нет ни базы ни постгреэскуэль
поковыраю еще может что найду

похоже косяк найден, у меня БД нет проверяй сам:
    Fct fct = (Fct)(libdb.resolve("createConnections"));
    if (fct)
    {
        fct();    // <<<<  Вызов самой функции

        qDebug() << "==> main.cpp - connect ok";
    }
    else
    {
        qDebug() << "==> main.cpp - connect bad";
    }


Функцию вызвать забыл!!!

кусок кода надо тепрь модифицировать с учетом возвращаемого значения, например так:
    typedef bool (*Fct) ();
    Fct fct = (Fct)(libdb.resolve("createConnections"));
    if (fct)
    {
        if (fct())
        {
            qDebug() << "==> main.cpp - connect ok";
        }
        else
        {
            qDebug() << "==> main.cpp - connect bad";
        }
    }
    else
    {
        return 1;
    }
sanya Дата 1.8.2008, 15:24
 
Цитата(Litkevich Yuriy @ 1.8.2008, 14:54) *
если приведенный код не полный, выкладывай полный тестовый код библиотеки и основной программы с pro-файлами

приведенный код полный, но вот архив со всеми оставшимися файлами...
Прикрепленный файл  test.tar.gz ( 3.22 килобайт ) Кол-во скачиваний: 422
Litkevich Yuriy Дата 1.8.2008, 14:54
  если приведенный код не полный, выкладывай полный тестовый код библиотеки и основной программы с pro-файлами
sanya Дата 1.8.2008, 14:06
 
Цитата(Litkevich Yuriy @ 1.8.2008, 13:22) *
запусти демку %QTDIR%\demos\sqlbrowser и посмотри подключается она к твоей БД или нет (о результатах отпишись)


Запустил. Подключился к БД, вижу таблички, запросы выполняются... :scratch_one-s_head:
Litkevich Yuriy Дата 1.8.2008, 13:22
  запусти демку %QTDIR%\demos\sqlbrowser и посмотри подключается она к твоей БД или нет (о результатах отпишись)
sanya Дата 1.8.2008, 11:18
  Прошу прощения, но не совсем понимаю... (новичек я в С...)

пробую таким образом:
исходники
main.cpp
#include <QtGui>
#include <QtSql>

int main(int argc, char* argv[]) {
    QApplication app (argc, argv);

    QLibrary libdb("../db/bin/libdb");
    if (libdb.load()) {
        qDebug() << "==> main.cpp - libdb ok";
    } else {
        qDebug() << "==> main.cpp - libdb bad" << libdb.errorString();
    }
    
    typedef bool (*Fct) ();
    Fct fct = (Fct)(libdb.resolve("createConnections"));
    if (fct) {
        qDebug() << "==> main.cpp - connect ok";
    } else {
        qDebug() << "==> main.cpp - connect bad";
    }
    
    QSqlDatabase db = QSqlDatabase::database("psql");
    if ( !db.open() ) {
        qDebug() << "Failed to open database: " << db.lastError().driverText();
    }
}


db.cpp
#include "db.h"

bool createConnections()
{
    QSqlDatabase db = QSqlDatabase::addDatabase( "QPSQL", "psql" );
    db.setDatabaseName( "ArisPSQLBase" );
    db.setUserName( "sanya" );
    db.setPassword( "*****" );
    db.setHostName( "192.168.87.1" );
    if ( !db.open() ) {
        qDebug() << "Failed to open database: " << db.lastError().driverText();
        return FALSE;
    }
    return TRUE;
}


db.h
#ifndef __DB_H__
#define __DB_H__
#include <QtSql>

extern "C" {
    bool createConnections();
}

#endif // __DB_H__


а в консоле вижу:
==> main.cpp - libdb ok
==> main.cpp - connect ok
Failed to open database: "Driver not loaded"

то есть, в библиотечке коннект происходит, а в основной программе нет... в чем я не прав и как быть?
Litkevich Yuriy Дата 31.7.2008, 15:39
  а как бы ты юзал БД еслиб подключение создавалось, например, в файле connect.h а использовать надо в файле app.cpp, при этом первый приинклюден только к main.cpp?
sanya Дата 31.7.2008, 15:01
  Добрый день,
Подскажите где читать (или примерчиком): надо все действия с подключением к БД вынести в динамическую библиотечку, как тогда юзать эту БД?
спасибо...
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 28.3.2024, 17:30