Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Connection string для DB файла.  (Прочитано 5647 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Tenzor
Интересующийся

ru
Offline Offline

« : 19-08-2012 01:09 » 

Здравствуйте. Есть файл с расширение DB (Файл данных Ansys). Представляет из себя (как я понял) Текстовую БД. Хотелось бы написать программку которая через запрос вытаскивала бы оттуда данные. Вопрос как к ней подключится? Excel открывает ее на раз.
Код: (C++)
        СoInitialize(NULL);
        try
        {
                _ConnectionPtr con("ADODB.Connection");
                con->CursorLocation=adUseClient;
                con->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Lisega\\PRJINF81.DB;Extended Properties=Text; Persist Security Info=False","","",0); //Что выбрать  Extended Proertes?
                _RecordsetPtr rset("ADODB.Recordset");
                rset->Open("C:\\Lisega\\PRJINF81.DB",(IDispatch*)con, adOpenDynamic, adLockOptimistic, adCmdTable);
...
                rset->Close();
                con->Close();
        }

        catch (_com_error& e)
        {
                cout<<e.Error()<<"  "<<e.Description()<<endl;
        }
        CoUninitialize();
        return 0;
Выдает, что строка C:\\Lisega\\PRJINF81.DB  задат неверный путь.

* PRJINF81.DB (7.94 Кб - загружено 129 раз.)
Записан
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #1 : 20-08-2012 04:25 » 

чтобы открыть БД, нужно точно знать, что это за БД
вот здесь есть строки подключения для некоторых баз
Записан

I Have Nine Lives You Have One Only
THINK!
Tenzor
Интересующийся

ru
Offline Offline

« Ответ #2 : 20-08-2012 18:51 » 

Это PARADOX

Код: (C++)
CoInitialize(NULL);
        _ConnectionPtr pConn("ADODB.Connection");
        try
        {
                pConn.CreateInstance(__uuidof(Connection));
                pConn->CursorLocation = adUseClient;
                pConn->Open(""Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Lisega;Extended Properties=Paradox 5.x";" , "", "",0);
                _RecordsetPtr pRst;
                pRst.CreateInstance(__uuidof(Recordset));
                pRst->Open("SELECT  SHRIFT_1 FROM PRJINF81.DB", _variant_t((IDispatch*)pConn, true), adOpenDynamic, adLockReadOnly, adCmdUnknown);
 
                int nNumFields = pRst->Fields->Count;
                while(!pRst->ADOEOF)
                {
                        for(short index=0; index<nNumFields; index++)
                        {
                                _bstr_t strName = pRst->Fields->Item[(_variant_t)index]->Name;
                                _bstr_t strValue = pRst->Fields->Item[(_variant_t)index]->Value;
                                cout << strName << " " << strValue << " " << pRst->Fields->Item[(_variant_t)index]->Type << endl;
                        }
                        pRst->MoveNext();
                }
                pRst->Close();
                pRst->Close();
                cout<<"cLOSE"<<endl;
        }
        catch(_com_error e)
        {
                cout << e.ErrorMessage() << endl;
        }
        if(pConn != NULL)
                pConn->Close();
        pConn->Close();
        CoUninitialize();
        return 1;
Если Не открывать рекордсет, то получается ошибка  в файле msado15.til
Код: (C++)
inline HRESULT Connection15::Close ( ) {
    HRESULT _hr = raw_Close();
    if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));
    return _hr; //вот здесь ошибка
}
В окне Output :
First-chance exception at 0x75b5b727 in Support_For_SP.exe: Microsoft C++ exception: _com_error at memory location 0x002bf6f4..
Unhandled exception at 0x75b5b727 in Support_For_SP.exe: Microsoft C++ exception: _com_error at memory location 0x002bf6f4..

Если добавить  код открытиу рекордсета то ловится исключение idispatch error #3127
Накидал вот такой код в VB6 и все работает как часы
Код: (Visual Basic)
Option Explicit
Dim rs As ADODB.Recordset
Dim Conn As ADODB.Connection
Dim ConnectionString As String

Private Sub Form_Load()
    Set Conn = CreateObject("ADODB.Connection")
    ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Lisega;Extended Properties=Paradox 5.x;"
    Conn.CursorLocation = adUseClient
    Conn.Open ConnectionString
    Dim i As Integer
    Set rs = Conn.Execute("SELECT SHRIFT_1 FROM  KONSTR8.DB")
    MsgBox rs.RecordCount
    rs.Close
    Conn.Close
End
Как бы его в С++ перевести?)
Записан
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #3 : 21-08-2012 04:19 » 

здесь я ничем не смогу помочь, т.к нет дров для paradox
1. у Вас в коде VB идет обращение к другой таблице - это опечатка или и с этой таблицей сишный код не работает?
2. попробуйте не писать расширение файла в запросе. По коду ошибки встречались сообщения о том, что имя таблицы длиннее 8 символов

как-то так
Записан

I Have Nine Lives You Have One Only
THINK!
Tenzor
Интересующийся

ru
Offline Offline

« Ответ #4 : 21-08-2012 05:11 » 

В VB как раз все работает. В файле одна таблица.
Записан
RXL
Технический
Администратор

ru
Online Online
Пол: Мужской

WWW
« Ответ #5 : 21-08-2012 05:35 » 

Tenzor, ты на чем пишешь? VC++, BCB?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.

Хз, я не очень просто не очень во всё это верю, во всякие там сатурны и прочую поебень.
Tenzor
Интересующийся

ru
Offline Offline

« Ответ #6 : 21-08-2012 06:47 » 

Пишу на VC++ (на VB6 просто и раньше подключался к базам, поэтому привел пример).
Изменил строку на умолчальные значения
Код: (C++)
 pRst->Open("SELECT  SHRIFT_1 FROM PRJINF81.DB", _variant_t((IDispatch*)pConn, true), adOpenUnspecified, adLockUnspecified, adCmdUnspecified);

Теперь считывает и выводит в консоль значения полей. Но при закрытии pConn происходит та же ошибка
Код: (C++)
inline HRESULT Connection15::Close ( ) {
    HRESULT _hr = raw_Close();
    if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));
    return _hr; //вот здесь ошибка
}
И все так же неопознанная ошибка

Добавлено через 4 часа, 45 минут и 1 секунду:
Все нашел ошибку. Банальная невнимательность
Код: (C++)
        if(pConn != NULL)
                pConn->Close(); //Если соединение не закрыто , то закрываем
              pConn->Close(); //Пытаемся закрыть закрытое соединение и нарываемся на вышеописанную ошибку  :-&
Спасибо всем, кто откликнулся)
« Последнее редактирование: 21-08-2012 11:32 от Tenzor » Записан
RXL
Технический
Администратор

ru
Online Online
Пол: Мужской

WWW
« Ответ #7 : 21-08-2012 13:32 » new

Tenzor, у тебя та же фигня с рекордсетом.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.

Хз, я не очень просто не очень во всё это верю, во всякие там сатурны и прочую поебень.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines