powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / ADO & VS C++ 7
9 сообщений из 9, страница 1 из 1
ADO & VS C++ 7
    #32464269
leTaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня следующая проблема - нужно сделать тестовое задание, такого плана - в Visual C++ 7 по технологии ADO (без использования ActiveX компонентов Microsoft ADO Data Control) с использованием только библиотек. Итак задание:
1. Подключится к SQL Server и считать данные из таблицы T_Test
(в ней там 3 поля - ID(int), F1(float), F3(varchar)) в ListBox.
2. Организовать вставку и удаление записей.

Я хотел спросить, может кто подскажет хоть схематически что за чем делать? Ну какие библиотеки подключать, какие объекты создавать (Recordset, Connection etc.)
Все заранее спасибо.
...
Рейтинг: 0 / 0
ADO & VS C++ 7
    #32464304
ZrenBy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это игрушка для изучения. Учись

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
//Main.cpp
#include <stdio.h>
#include <conio.h>
#include  "ZC_ADO.hpp" 

int main(){
   {
   if(FAILED(::CoInitialize(NULL)))return - 1 ;
   }
   try {
     _bstr_t ConnStr =  "Provider=SQLOLEDB;\
                        Data Source=(local);\
                        Initial Catalog=Pubs;\
                        Integrated Security=SSPI" ;

     ZC_ADOConnection zcConn;
     zcConn.zm__Open(ConnStr, "","  ");

     ZC_ADORecordSet zcRS(zcConn);
     ZC_ADOCommand   zcSP(zcConn);

     try {
       zcRS.zm__Open(" select au_id, au_lname from authors ");

       while(FALSE==zcRS.zm__EOF()){
          fprintf(stderr," %-12s%-s\n ",
            (LPCSTR)(_bstr_t)zcRS.zm__FV(" au_id ")
           ,(LPCSTR)(_bstr_t)zcRS.zm__FV(1 )
          );
          zcRS.zm__Next();
       }
   
       zcSP.zm__AP("@P1 ", adParamInput,  adInteger, 0 ,  123 );
       zcSP.zm__AP("@P2 ", adParamOutput, adInteger, 0 ,    0 );
       zcSP.zm__Exec("MySP ");

       /*
       CREATE PROCEDURE [dbo].[MySP]
          @P1 int,
          @P2 int out
       AS
          set nocount on
          set @P2 = @P1+100
          return(@P2+1000000)
       GO
       */ 

       fprintf(stderr,"\nMySP\n ");
       fprintf(stderr," @RETURN = %d\n ",(int)zcSP.zm__PV(" @RETURN "));
       fprintf(stderr," @P1     = %d\n ",(int)zcSP.zm__PV(" @P1 "));
       fprintf(stderr," @P2     = %d\n ",(int)zcSP.zm__PV(2 ));
     }
     catch(_com_error& e){
        fprintf(stderr,"%s\n ",(LPCSTR)e.Description());
     }
     zcConn.zm__Close();
     zcSP.zm__ClearParameter();
   }
   catch(...){
      fprintf(stderr," Unhandled Exception\n");
   }

   ::CoUninitialize();
   getch();
   return  0 ;

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
//ZC_ADO.hpp
#import  "C:\Program Files\Common Files\System\ADO\msado15.dll"  \
        no_namespace rename( "EOF" ,  "adoEOF" )

const _bstr_t C_RollBackOpenTran =  "if(@@trancount>0 )rollback";

class ZC_ADOConnection {
  friend class ZC_ADORecordSet;
  friend class ZC_ADOCommand;
  public:
     ZC_ADOConnection();
    ~ZC_ADOConnection();
  private:
     _ConnectionPtr f_objConnection;
     _bstr_t        f_strConnString;
  public:
     void zm__Open  (const _bstr_t&,
                     const _bstr_t&,
                     const _bstr_t&
                    );
     void zm__Close ();
};

class ZC_ADORecordSet {
  public:
     ZC_ADORecordSet(const ZC_ADOConnection&);
    ~ZC_ADORecordSet();
  private:
    _RecordsetPtr  f_objRecordSet;
    _ConnectionPtr f_objConnection;
  public:
    void       zm__Open  (const _bstr_t&);
    void       zm__Close ();
    void       zm__Next  ();
    bool       zm__EOF   ();
    _variant_t zm__FV    (const _bstr_t&);
    _variant_t zm__FV    (const long&);
};

class ZC_ADOCommand {
  public:
    ZC_ADOCommand(const ZC_ADOConnection&);
   ~ZC_ADOCommand();
  private:
    _CommandPtr    f_objCommand;
    _ConnectionPtr f_objConnection;
    ParametersPtr  f_objParameters;
  public:
    void       zm__ClearParameter();
    void       zm__AP   (const _bstr_t&,
                         const ParameterDirectionEnum&,
                         const DataTypeEnum&,
                         const int&,
                         const _variant_t&
                        );
    _variant_t zm__PV   (const _bstr_t&);
    _variant_t zm__PV   (const long&);
    void       zm__Exec (const _bstr_t&);
};

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
//ZC_ADO.cpp
#include  "ZC_ADO.hpp" 

ZC_ADOConnection::ZC_ADOConnection(){
  f_strConnString =  "";

  f_objConnection.CreateInstance(__uuidof(Connection));
  f_objConnection->CommandTimeout = 300 ;
  f_objConnection->CursorLocation = adUseServer;
  f_objConnection->IsolationLevel = adXactReadCommitted;
  f_objConnection->Attributes     =  0 ;
}

ZC_ADOConnection::~ZC_ADOConnection(){
  zm__Close();
  f_objConnection =  0 ;
}

void ZC_ADOConnection::zm__Open(const _bstr_t& ConnStr,
                                const _bstr_t& UserID,
                                const _bstr_t& Passw
                               ){
  f_objConnection->Open(ConnStr,UserID,Passw,adConnectUnspecified);
}

void ZC_ADOConnection::zm__Close(){
  if(f_objConnection->State != adStateClosed)f_objConnection->Close();
}
 /******************************************************************************/ 
ZC_ADORecordSet::ZC_ADORecordSet(const ZC_ADOConnection& Conn){
  f_objConnection = Conn.f_objConnection;
  f_objRecordSet  =  0 ;
}

ZC_ADORecordSet::~ZC_ADORecordSet(){
  zm__Close();
}

void ZC_ADORecordSet::zm__Open(const _bstr_t& SQL){
  zm__Close();
  _CommandPtr cmd;
  cmd.CreateInstance(__uuidof(Command));
  try {
    cmd->ActiveConnection = f_objConnection;
    cmd->CommandType      = adCmdText;
    cmd->CommandTimeout   =  300 ;
    cmd->CommandText      = SQL;
    f_objRecordSet        = cmd->Execute( 0 , 0 ,adCmdText);
  }catch(_com_error &e){
    f_objConnection->Execute(C_RollBackOpenTran, 0 , 0 );
    throw e;
} }

void ZC_ADORecordSet::zm__Close(){
  if(f_objRecordSet){
    if(f_objRecordSet->State != adStateClosed)f_objRecordSet->Close();
    f_objRecordSet =  0 ;
} }

void ZC_ADORecordSet::zm__Next(){
  if(f_objRecordSet)if(f_objRecordSet->State != adStateClosed)f_objRecordSet->MoveNext();
}

bool ZC_ADORecordSet::zm__EOF(){
  if( 0  == f_objRecordSet)return TRUE;
  if(adStateClosed == f_objRecordSet->State)return TRUE;
  return(VARIANT_TRUE==f_objRecordSet->adoEOF);
}

_variant_t ZC_ADORecordSet::zm__FV(const _bstr_t& Name){
  return f_objRecordSet->Fields->Item[Name]->Value;
} 

_variant_t ZC_ADORecordSet::zm__FV(const long& Index){
  return f_objRecordSet->Fields->Item[Index]->Value;
} 
 /******************************************************************************/ 
ZC_ADOCommand::ZC_ADOCommand(const ZC_ADOConnection& Conn){
  f_objConnection = Conn.f_objConnection;
  
  f_objCommand.CreateInstance(__uuidof(Command));
  f_objCommand->CommandType    = adCmdStoredProc;
  f_objCommand->CommandTimeout =  300 ;

  f_objParameters = f_objCommand->Parameters;
  f_objParameters->Append(
    f_objCommand->CreateParameter(
       "@RETURN",
       adInteger,
       adParamReturnValue,
        0 ,
        0 
    )
  );
}

ZC_ADOCommand::~ZC_ADOCommand(){
  zm__ClearParameter();
  if(f_objParameters->Count> 0 )f_objParameters->Delete((long) 0 );
  f_objParameters =  0 ;
  f_objCommand    =  0 ;
}

void ZC_ADOCommand::zm__Exec(const _bstr_t& CmdText){
  f_objCommand->CommandText      = CmdText;
  f_objCommand->ActiveConnection = f_objConnection;
  try {
    f_objCommand->Execute( 0 , 0 ,adCmdStoredProc);
    f_objCommand->ActiveConnection =  0 ;
  }catch(_com_error &e){
    f_objConnection->Execute(C_RollBackOpenTran, 0 , 0 );
    throw e;
} }

void ZC_ADOCommand::zm__AP(const _bstr_t& Name,
                           const ParameterDirectionEnum& Direction,
                           const DataTypeEnum& Type,
                           const int& Size,
                           const _variant_t& Value){
  f_objParameters->Append(
     f_objCommand->CreateParameter(
       Name,
       Type,
       Direction,
       Size,
       Value
     )
  );
}

void ZC_ADOCommand::zm__ClearParameter(){
  while( f_objParameters->Count> 1  )f_objParameters->Delete((long) 1 );
}

_variant_t ZC_ADOCommand::zm__PV(const _bstr_t& Name){
  return f_objParameters->Item[Name]->Value;
}

_variant_t ZC_ADOCommand::zm__PV(const long& Index){
  return f_objParameters->Item[Index]->Value;
}
...
Рейтинг: 0 / 0
ADO & VS C++ 7
    #32464447
leTaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо большое, только все равно мало что понял (мне нужно это все сделать в MDI приложении) ладно буду разбиратся еще. Все эти функции вызывать на событие OnClick моих кнопок?
...
Рейтинг: 0 / 0
ADO & VS C++ 7
    #32465024
leTaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все сделал как в примере, но немогу подключится к серверу,
в этом месте - zcConn.zm__Open(ConnStr,"","");

выдается ошибка -
Unhandled exception at 0x77e73887 in TestTask1.exe: Microsoft C++ exception: _com_error @ 0x0012f39c.
...
Рейтинг: 0 / 0
ADO & VS C++ 7
    #32465218
ZrenBy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смотри ошибку

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
void CssApp::OnAppAbout(){
   ::CoInitialize(NULL);

   try {
//Специально делаю ошибку - вместо pubs пишу pubs$$$
     _bstr_t ConnStr =  "Provider=SQLOLEDB;\
                        Data Source=(local);\
                        Initial Catalog=pubs$$$;\ 
                        Integrated Security=SSPI" ;

     ZC_ADOConnection zcConn;
     ZC_ADORecordSet  zcRS(zcConn);
     ZC_ADOCommand    zcSP(zcConn);

     try {
       zcConn.zm__Open(ConnStr, " " , " " );//Я тут пробелы вставил, чтобы не зеленилось.

       zcRS.zm__Open( "select au_id, au_lname from authors" );

       _bstr_t Tmp = zcRS.zm__FV( "au_id" );
       AfxMessageBox(Tmp, 0 , 0 );
     }
     catch(_com_error& e){
        AfxMessageBox((LPCSTR)e.Description(), 0 , 0 );
     }
     zcConn.zm__Close();
     zcSP.zm__ClearParameter();
   }
   catch(...){
     AfxMessageBox( "Unhandled" , 0 , 0 );
   }
   ::CoUninitialize();
}
...
Рейтинг: 0 / 0
ADO & VS C++ 7
    #32465236
ZrenBy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е. понятно, что

zcConn.zm__Open(ConnStr,"","");

надо тоже под try внести
...
Рейтинг: 0 / 0
ADO & VS C++ 7
    #32465302
leTaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так я под try и вносил и не вносил, все рвано приконнестится к серверу немогу...
Если под try то просто exception перехватывается и выдается диалог
...
Рейтинг: 0 / 0
ADO & VS C++ 7
    #32465332
ZrenBy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>Если под try то просто exception перехватывается и выдается диалог

Что за ошибка-то выдается ?
...
Рейтинг: 0 / 0
ADO & VS C++ 7
    #32465366
leTaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да точно такая же ошибка... если я без try запускаю, то прогрмамма вылетает как раз в этом месте, но уже в базовом классе АДО. Я посмотрел, там еще нужно параметры указывать может из-за этого? Все равно спасибо за помощь.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / ADO & VS C++ 7
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]