Форум программистов, компьютерный форум CyberForum.ru

Работа с базами данных в Wxwidgets - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Как получить доступ в пикселю 5px width/5px height на изображении? http://www.cyberforum.ru/cpp-beginners/thread710658.html
Как получить доступ к пикселю 5px width/5px height на изображении?
C++ Перегрузка декремента Само условие звучит так. Написать функцию декремента единственного параметра. Написать функцию возвращающую ссылку на элемент глобального массива. Изменить его при вызове функции. Что, если все ссылки сделать const? Насколько я понял, простыми словами нужно сделать перегрузку -- которая будет изменять элемент глобального массива, а также написать функцию с помощью указателя которая должна... http://www.cyberforum.ru/cpp-beginners/thread710654.html
Напечатать слова текста в алфавитном порядке C++
3. Задан текст. Слова разделены пробелом. Напечатать слова этого текста в алфавитном порядке.
Посмотрите пару программ, может кто поможет?(2) C++
2.Задана матрица целых чисел. Выполнить сортировку элементов в каждом столбце заданной матрицы.
C++ Удалить элемент массива, который меньше среднего арифметического http://www.cyberforum.ru/cpp-beginners/thread710642.html
1.Задан массив вещественных чисел. Удалить элемент, который меньше среднего арифметического элементов массива. Если таких элементов несколько, удалить последний из найденных.
C++ Ошибка при выборе типа данных Всем доброго времени суток, начал самостоятельно изучать плюсы и делать лабы из учебника Павловской и сразу столкнулся с проблемой. Написал код, приведенный ниже, но выходящий результат видимо не тот, который нужен. Есть сомнения что неправильно выбрал типы переменных, но при выборе того же int среда отсылает меня подальше. В чем проблема? #include <iostream> #include <math.h> using namespace... подробнее

Показать сообщение отдельно
Malidinu
 Аватар для Malidinu
0 / 0 / 0
Регистрация: 15.12.2011
Сообщений: 58
27.11.2012, 12:06     Работа с базами данных в Wxwidgets
Нужно скомпилировать вот это.. что то не получается у меня.. Я в программировании конечно не особо..

Скомпилируйте и скинте exe файл со всем добром.. или же помогите.. Работаю через CodeBlocks..

Добавлено через 13 секунд
Файл "Headers.h"
C++
1
2
3
4
5
6
7
8
9
10
11
12
#ifndef _HEADERS_H
#define _HEADERS_H
 
#include <wx/wx.h>
#include <wx/db.h>
#include <wx/grid.h>
#include <wx/sizer.h>
#include <wx/dbgrid.h>
#include <wx/numdlg.h>
#include <wx/dbtable.h>
 
#endif
Файл "Structures.h"
C++
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
#ifndef _STRUCTURES_H
#define _STRUCTURES_H
 
#include "Headers.h"
 
class ConnectionParams : public wxObject
{
public:
    wxChar    ODBCSource[SQL_MAX_DSN_LENGTH+1];
    wxChar    UserName[SQL_MAX_USER_NAME_LEN+1];
    wxChar    Password[SQL_MAX_AUTHSTR_LEN+1];
    wxChar    DirPath[MAX_PATH+1];
    ConnectionParams();
};
 
class DB_Position : public wxObject
{
public:
    int m_PositionID;
    wxChar m_PositionName[50+1];    
};
 
WX_DECLARE_OBJARRAY(DB_Position, DB_Positions);
 
#endif
Файл "Structures.cpp"
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include "Structures.h"
#include <wx/arrimpl.cpp>
 
WX_DEFINE_OBJARRAY(DB_Positions);
 
ConnectionParams::ConnectionParams()
{
    ODBCSource[0] = 0;
    UserName[0] = 0;
    Password[0] = 0;
    DirPath[0] = 0;
}
Файл "Application.h"
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#ifndef _APPLICATION_H
#define _APPLICATION_H
 
#include "Headers.h"
#include "Structures.h"
 
class DBTestApp : public wxApp
{
    ConnectionParams m_ConnectionParams;
    wxDbConnectInf * m_DbConnectInf;
    wxDb * m_Db;
public:
    virtual bool OnInit();
    virtual int OnExit();
    void ApplyParameters();
    ConnectionParams & GetConnectionParams() {return m_ConnectionParams;}
    wxDbConnectInf * GetConnectInf() {return m_DbConnectInf;}
    bool OpenDB();
    wxDb * GetDB() {return m_Db;}
};
 
DECLARE_APP(DBTestApp);
 
#endif
Файл "Application.cpp"
C++
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
#include "Application.h"
#include "MainFrame.h"
#include <wx/image.h>
 
IMPLEMENT_APP(DBTestApp)
 
bool DBTestApp::OnInit()
{
    m_Db = NULL;
    m_DbConnectInf = NULL;
    wxImage::AddHandler(new wxXPMHandler());
    wxImage::AddHandler(new wxPNGHandler());
 
    // Создаем объект "Параметры соединения с БД"
    m_DbConnectInf = new wxDbConnectInf(NULL, m_ConnectionParams.ODBCSource, m_ConnectionParams.UserName,
                                      m_ConnectionParams.Password, m_ConnectionParams.DirPath);
    if (!m_DbConnectInf || !m_DbConnectInf->GetHenv())
    {
        wxMessageBox(wxT("Unable to define data source connection info."));
        wxDELETE(m_DbConnectInf);
    }
    MainFrame * frame = new MainFrame(NULL);
    SetTopWindow(frame);
    frame->Show();
    return TRUE;
}
 
int DBTestApp::OnExit()
{
    // Удаляем объект "Параметры соединиения с БД"
    if(m_DbConnectInf) wxDELETE(m_DbConnectInf);
    // Если база открыта
    if(m_Db) 
    {
        //Закрываем соединение
        if(m_Db->IsOpen()) m_Db->Close();
        wxDbCloseConnections();
    }
    return 0;
}
 
void DBTestApp::ApplyParameters()
{
    // Применяем параметры соединения
    m_DbConnectInf->SetDsn(m_ConnectionParams.ODBCSource);
    m_DbConnectInf->SetUserID(m_ConnectionParams.UserName);
    m_DbConnectInf->SetPassword(m_ConnectionParams.Password);
    m_DbConnectInf->SetDefaultDir(m_ConnectionParams.DirPath);
}
 
bool DBTestApp::OpenDB()
{
    // Создаем объект "База данных"
    m_Db = wxDbGetConnection(m_DbConnectInf);
    if (m_Db == NULL)
    {        
        return false;
    }
    return true;
}
Файл "MainFrame.h"
C++
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
#ifndef _MAIN_FRAME_H
#define _MAIN_FRAME_H
 
#include "Headers.h"
#include "Structures.h"
 
class MainFrame : public wxFrame
{        
    wxListBox * m_DBListBox;
    wxTextCtrl * m_UserNameTextCtrl;
    wxTextCtrl * m_PasswordTextCtrl;
    wxGrid * m_PositionsGrid;
    wxDbTable * m_Positions;
    DB_Position m_CurPosition;
    wxButton * m_AddPositionButton;
public:
    MainFrame(wxWindow * parent);
    ~MainFrame();
    void CreateTables();
    DECLARE_EVENT_TABLE()        
    void OnExit(wxCommandEvent & event);    
    void OnToggleStatusBar(wxCommandEvent & event);
    void OnConnect(wxCommandEvent & event);
    void OnDBListBoxDClick(wxCommandEvent & event);
    void OnAddPosition(wxCommandEvent & event);
};
 
#endif
Файл "MainFrame.cpp"
C++
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
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
#include "MainFrame.h"
#include "Application.h"
 
enum
{
    ID_TOGGLE_STATUSBAR = 10001,    
    ID_CONNECT,
    ID_DB_LIST_BOX,
    ID_USER_NAME_TEXT_CTRL,
    ID_PASSWORD_TEXT_CTRL,
    ID_POSITIONS_GRID,
    ID_WORKERS_GRID,
    ID_ADD_POSITION,
 
    // Unused
    ID_UNUSED
};
 
BEGIN_EVENT_TABLE(MainFrame, wxFrame)
EVT_MENU(wxID_EXIT, MainFrame::OnExit)
EVT_MENU(ID_TOGGLE_STATUSBAR, MainFrame::OnToggleStatusBar)
EVT_MENU(ID_CONNECT, MainFrame::OnConnect)
EVT_LISTBOX_DCLICK(ID_DB_LIST_BOX, MainFrame::OnDBListBoxDClick)
EVT_BUTTON(ID_ADD_POSITION, MainFrame::OnAddPosition)
END_EVENT_TABLE()
 
MainFrame::MainFrame(wxWindow * parent)
: wxFrame(parent, -1, _("Test"), wxDefaultPosition, wxSize(640,480))
{        
    /// Наша строка меню... создаем
    wxMenuBar * menuBar = new wxMenuBar();
    /// Ассоциируем строку меню с формой
    SetMenuBar(menuBar);
    
    wxMenu * fileMenu = new wxMenu;
    fileMenu->Append(wxID_EXIT, _("Exit\tAlt+F4"));
 
    wxMenu * viewMenu = new wxMenu;
    viewMenu->AppendCheckItem(ID_TOGGLE_STATUSBAR, _("StatusBar"), _("Shows/hides StatusBar"));
    viewMenu->Check(ID_TOGGLE_STATUSBAR, true);
 
    menuBar->Append(fileMenu, _("File"));
    menuBar->Append(viewMenu, _("View"));
 
    wxToolBar * toolBar = CreateToolBar(wxNO_BORDER|wxTB_HORIZONTAL|wxTB_FLAT);
    toolBar->AddTool(ID_ADD_POSITION, _("Добавить запись"), 
        wxBitmap(wxT("new.xpm"), wxBITMAP_TYPE_XPM), _("Добавляет новую запись в таблицу"));
    toolBar->EnableTool(ID_ADD_POSITION, false);
 
    toolBar->Realize();
 
    wxBoxSizer * sizer = new wxBoxSizer(wxVERTICAL);
    SetSizer(sizer);
 
    m_UserNameTextCtrl = new wxTextCtrl(this, ID_USER_NAME_TEXT_CTRL, _(""));
    m_PasswordTextCtrl = new wxTextCtrl(this, ID_PASSWORD_TEXT_CTRL, _(""));
    wxBoxSizer * paramsizer = new wxBoxSizer(wxHORIZONTAL);
    paramsizer->Add(m_UserNameTextCtrl, 1, wxRIGHT, 5);
    paramsizer->Add(m_PasswordTextCtrl, 1);
 
    m_DBListBox = new wxListBox(this, ID_DB_LIST_BOX, wxDefaultPosition, wxSize(300, 100));
 
    // Сюда мы будем записывать названия источников данных ОДБЦ
    wxChar Dsn[SQL_MAX_DSN_LENGTH+1];
    wxChar DsDesc[254+1];
    wxSortedArrayString strArr;
 
    // Получаем параметры источников данных
    while (wxDbGetDataSource(wxGetApp().GetConnectInf()->GetHenv(), Dsn,
                             SQL_MAX_DSN_LENGTH, DsDesc, 254))
    {
        // Записываем результаты в ListBox
        m_DBListBox->Append(Dsn);
    }
 
    wxStaticBoxSizer * positionssizer = new wxStaticBoxSizer(wxVERTICAL, this, _("Positions"));
 
    m_PositionsGrid = new wxGrid(this, ID_POSITIONS_GRID, wxDefaultPosition, wxSize(300, 120));
    m_AddPositionButton = new wxButton(this, ID_ADD_POSITION, _("Add"));
 
    positionssizer->Add(m_PositionsGrid, 1, wxEXPAND|wxALL, 5);
    positionssizer->Add(m_AddPositionButton, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5);
    m_AddPositionButton->Enable(false);
    m_PositionsGrid->SetColLabelSize(20);
    m_PositionsGrid->SetRowLabelSize(20);
    m_PositionsGrid->SetDefaultColSize(130);
    m_PositionsGrid->SetDefaultRowSize(20);
 
    sizer->Add(paramsizer, 0, wxGROW|wxALL, 5);
    sizer->Add(m_DBListBox, 0, wxGROW|wxALL, 5);
    sizer->Add(positionssizer, 0, wxGROW|wxALL, 5);
    
    
    /// Создаем строку состояния
    CreateStatusBar();
    /// Подогнать размер формы до размеров, занимаемых компонентами (чтобы все компоненты были видны)
    sizer->Fit(this);
    /// Центрируем форму на экране
    Centre();
}
 
MainFrame::~MainFrame()
{
}
 
void MainFrame::OnToggleStatusBar(wxCommandEvent & event)
{
    /// Получаем указатель на строку состояния
    wxStatusBar * statusBar = GetStatusBar();
    /// Если у окна есть строка состояния, то...
    if(statusBar)
    {
        /// Говорим что ее нет...
        SetStatusBar(NULL);
        /// Удаляем ту, что была...
        statusBar->Destroy();
    }
    /// А если строки состояния не было...
    else
    {
        /// Пересоздаем...
        CreateStatusBar();
    }
    /// Говорим окну что необходимо обновить размещение дочерних контролов
    Layout();
}
 
void MainFrame::OnExit(wxCommandEvent & event)
{
    Close();
}
 
 
 
void MainFrame::OnConnect(wxCommandEvent & event)
{    
}
 
void MainFrame::OnDBListBoxDClick(wxCommandEvent & event)
{
    int item = event.GetSelection();
    // Если есть выделенный элемент в ListBox... 
    if(item >= 0)
    {            
        // Получаем параметры соединения с БД (логин, пароль и имя источника данных)
        wxSprintf(wxGetApp().GetConnectionParams().UserName, m_UserNameTextCtrl->GetValue().GetData());
        wxSprintf(wxGetApp().GetConnectionParams().Password, m_PasswordTextCtrl->GetValue().GetData());
        wxSprintf(wxGetApp().GetConnectionParams().ODBCSource, m_DBListBox->GetString(item).GetData());
        // Применяем параметры... (см. исходник класса приложения)
        wxGetApp().ApplyParameters();
        // Пытаемся открыть БД (см. исходник класса приложения)
        if(!wxGetApp().OpenDB())
        {
            wxMessageBox(_("Connection Error"));
            Close();
        }        
        m_DBListBox->Enable(false);
        m_UserNameTextCtrl->Enable(false);
        m_PasswordTextCtrl->Enable(false);
        m_AddPositionButton->Enable(true);
        wxToolBar * toolbar = GetToolBar();
        if(toolbar)
        {
            toolbar->EnableTool(ID_ADD_POSITION, true);
        }
        CreateTables();
    }
}
 
void MainFrame::CreateTables()
{
    int numColumns = 2;
    // Создаем объект таблицы (из бд)
    m_Positions = new wxDbTable (wxGetApp().GetDB(), _("Positions"), numColumns);    
    // Устанавливаем буфер (куда записывать/получать результаты) для каждого поля 
    m_Positions->SetColDefs(0, "ID", DB_DATA_TYPE_INTEGER, &m_CurPosition.m_PositionID,
            SQL_C_LONG, sizeof(m_CurPosition.m_PositionID), true);
    m_Positions->SetColDefs(1, "PositionName", DB_DATA_TYPE_VARCHAR, &m_CurPosition.m_PositionName,
            SQL_C_CHAR, sizeof(m_CurPosition.m_PositionName), false);
 
    // Здесь хранится информация о столбцах таблицы
    wxDbGridColInfo *columns;    
    // Заполняем информацию о столбцах таблицы
    columns = new wxDbGridColInfo(0, wxGRID_VALUE_LONG, "ID", NULL);    
    columns->AddColInfo (1, wxGRID_VALUE_STRING, "PositionName");
    
    // Пытаемся открыть таблицу БД
    m_Positions->Open();        
    m_Positions->SetRowMode(wxDbTable::WX_ROW_MODE_QUERY);    
    // Выполняем выборку записей из таблицы
    m_Positions->Query();
    // Этот объект нужен для заполнения wxGrid результатами выборки
    wxDbGridTableBase *dbgrid = new wxDbGridTableBase(m_Positions, columns, wxUSE_QUERY, true);
    delete columns;   
    // Заполняем wxGrid
    m_PositionsGrid->SetTable(dbgrid, true);   
    // Обновляем
    m_PositionsGrid->Refresh();
}
 
void MainFrame::OnAddPosition(wxCommandEvent & event)
{    
    // Ввести ID
    m_CurPosition.m_PositionID = wxGetNumberFromUser(_("ID"), _("Input ID:"), _("ID"), 0);
    // Ввести название
    wxSprintf(m_CurPosition.m_PositionName, wxGetTextFromUser(_("Position name:")).GetData());
    // добавить запись
    m_Positions->Insert();
    // Переоткрыть таблицу.
    m_Positions->Open();
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 18:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru