Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: COM/DCOM/ActiveX/ATL/CORBA > MS Access


Автор: Annihilator 13.5.2008, 19:52
Товарищи, подскажите пожалуйста, как через OLE приконнектиться к аксессу и записать туда данные? Никак не могу сообразить и найти пример.

Автор: ama_kid 13.5.2008, 20:30
Цитата(Annihilator @  13.5.2008,  19:52 Найти цитируемый пост)
Никак не могу сообразить и найти пример.
Хороший пример есть http://msdn.microsoft.com/en-us/library/ms677218.aspx

Автор: Annihilator 13.5.2008, 20:39
Цитата(ama_kid @ 14.5.2008,  00:30)
Цитата(Annihilator @  13.5.2008,  19:52 Найти цитируемый пост)
Никак не могу сообразить и найти пример.
Хороший пример есть http://msdn.microsoft.com/en-us/library/ms677218.aspx

Ё-моЁ! Зачем столько. Мне б через CreateOleObject("Access.Application") что-нить типа такого

Автор: Rififi 13.5.2008, 22:12
Annihilator,
тебе нужно не Access.Application, а ADODB.Connection 

Автор: Annihilator 14.5.2008, 13:27
Цитата(Rififi @  14.5.2008,  02:12 Найти цитируемый пост)
тебе нужно не Access.Application, а ADODB.Connection

Зачем? Я хочу как с сервером OLE работать с ACCESS
Так ведь и с Word и с Excel работают.
А как с ADODB тогда будет?

Автор: Rififi 14.5.2008, 13:46
Цитата(Annihilator @  14.5.2008,  13:27 Найти цитируемый пост)
Зачем?

для того, чтобы 
Цитата
приконнектиться к аксессу и записать туда данные


Цитата(Annihilator @  14.5.2008,  13:27 Найти цитируемый пост)
А как с ADODB тогда будет?

Создаешь Connection, выполняешь INSERT INTO

Автор: Annihilator 14.5.2008, 13:52
подскажи пожалуйста как это будет по синтаксису
допустим есть массив из 8 строк
char s[8][10]
и в аксесе 8 столбцов и занести туда данные, в столбцы


Автор: Rififi 15.5.2008, 11:41
Google -> "ADO insert sample"

Автор: Annihilator 15.5.2008, 17:47
Цитата(Rififi @  15.5.2008,  15:41 Найти цитируемый пост)
Google -> "ADO insert sample" 

нашел пример
Код

#include <windows.h>
#include <stdio.h>
#import "C:\Program Files\Common Files\System\ADO\msado15.dll" \
no_namespace rename("EOF", "EndOfFile")
int main(int argc, char* argv[])
{
    /*The following variables will be initialized with necessary values and  appended to the strSQL values*/
    _bstr_t strName;
    _bstr_t strAge;
    _bstr_t strDOB;
    _bstr_t strSalary;
    _ConnectionPtr pConn = NULL;
    // Define string variables for ADO connection
    _bstr_t strCon("Provider=SQLOLEDB.1;Persist Security Info=False;User     ID=username;Password=password;Initial Catalog=databasename;Data Source=(local);Integrated Security=SSPI;");
    HRESULT hr = S_OK;

    //Initialize the COM Library
    CoInitialize(NULL);

    try
    {
        //Create the Connection pointer
        hr = pConn.CreateInstance((__uuidof(Connection)));
        if(FAILED(hr))
        {
            printf("Error instantiating Connection object\n");
            goto cleanup;
        }
        //Open the SQL Server connection
        hr = pConn->Open(strCon,"","",0);
        if(FAILED(hr))
        {
             printf("Error Opening Database object using ADO _ConnectionPtr \n");
             goto cleanup;
        }

        /*Initialize the values */
       strName = "'Codersource C++ ADO insert Sample',";
       strAge = "10,";
       strDOB = "'02/10/2004',";
       strSalary = "1010.10)";

       /* Append the values to the Insert Statement */
      _bstr_t strSQL("Insert into Table1(Name,Age,DOBirth,Salary) Values(");

       strSQL += strName + strAge + strDOB + strSalary ;

       printf("%s\n",(LPCSTR)strSQL);

       //Execute the insert statement
      pConn->Execute(strSQL,NULL,adExecuteNoRecords);

      printf("Data Added Successfully\n",(LPCSTR)strSQL);

     //Close the database
     pConn->Close();

    }
    catch(_com_error & ce)
    {
       printf("Error:%s\n",ce.ErrorInfo);
    }


cleanup:
    CoUninitialize();

    return 0;
}

на строчку 4 ругается
[C++ Error] Unit1.cpp(5): E2209 Unable to open include file ' msado15.tlh'
с чего бы??? И где этот файл тогда найти

Цитата(Rififi @  14.5.2008,  02:12 Найти цитируемый пост)
ADODB.Connection


ты имеешь ввиду CreateObject("ADODB.Connection")???
Это вроде в ASP такое работает. На С++ не видел пока ни одного примера!

Автор: mrbrooks 16.5.2008, 10:09
Имхо ради спортивного интереса любопытно,  а почему именно через OLE. Если для ворда и экселя это хоть как то обоснованно, то для акксеса не проще ли достучаться через ADO? 

Автор: Annihilator 16.5.2008, 14:06
Цитата(mrbrooks @  16.5.2008,  14:09 Найти цитируемый пост)
не проще ли достучаться через ADO

Проблему я решил, подняв в рантайме ADOConnection, но неужели других путей нету.
Цитата(mrbrooks @  16.5.2008,  14:09 Найти цитируемый пост)
а почему именно через OLE

Ну это мои догадки по поводу семейства MS Office. Да и примеры я видел, только на Делфи

Автор: mrbrooks 16.5.2008, 15:22
Не это возможно. Я не спорю. В свое время мозг ломал. Но чес слово лучше через ADO: и быстрее, и удобнее smile 

Автор: Annihilator 16.5.2008, 18:03
Цитата(mrbrooks @ 16.5.2008,  19:22)
Не это возможно. Я не спорю. В свое время мозг ломал. Но чес слово лучше через ADO: и быстрее, и удобнее smile

Т.е. ты тоже динамически ADOConnection делал??? Или как???

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)