Создание Системного Dsn

  • Автор темы Irisha
  • Дата начала
I

Irisha

#1
Помогите разобраться. Пытаюсь программно создать системный источник данных.
При компиляции вижу:

.\LiskovaServerDlg.cpp(277) : error C2065: ODBC_ADD_SYS_DSN: необъявленный идентификатор
.\LiskovaServerDlg.cpp(277) : error C3861: SQLConfigDataSource: идентификатор не найден

подключенные библиотеки:
C++:
#include "windows.h"
#include "odbcinst.h"
#include "stdafx.h"
#include "sql.h"
в коде пишу:

C++:
SQLConfigDataSource(NULL,ODBC_ADD_SYS_DSN, 
"SQL Server", 
"DSN=OOP\0" 
"Description=OOP\0" 
"Servername=(local)\SQLEXPRESS\0"
"Database=D:\база\Trade.mdf"
)
может не хватает каких-то библиотек?
что еще требуется, чтобы запуститься?
 

lazybiz

Well-known member
03.11.2010
1 339
0
#2
Может и библиотек не хватает... Может не хватает odbccp32.lib ?.... А может и еще чего.. Например заголовочного файла!?

Добавлено: Ан нет... заголовочный файл тута...
 

lazybiz

Well-known member
03.11.2010
1 339
0
#6
А в файле LiskovaServerDlg.cpp подключен заголовочный файл #include <odbcinst.h> ?
Если да и не работает - тогда показывай код, иначе я тебе не верю.
 
I

Irisha

#7
C++:
#include "windows.h"
#include "odbcinst.h"
#include "stdafx.h"
#include "LiskovaServer.h"
#include "LiskovaServerDlg.h"
#include "MyCrec.h"
#include "sql.h"


#ifdef _DEBUG
#define new DEBUG_NEW
#endif

// диалоговое окно CLiskovaServerDlg

CLiskovaServerDlg::CLiskovaServerDlg(CWnd* pParent /*=NULL*/)
: CDialog(CLiskovaServerDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CLiskovaServerDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//DDX_Control(pDX,STOPBUTTON,_stop);
}

BEGIN_MESSAGE_MAP(CLiskovaServerDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_BN_CLICKED(STARTBUTTON, &CLiskovaServerDlg::OnStartbutton)
ON_UPDATE_COMMAND_UI(STOPBUTTON, Act_Stop)
ON_UPDATE_COMMAND_UI(STARTBUTTON, Deact_Start)
ON_UPDATE_COMMAND_UI(SAVEBUTTON, Act_Save)
ON_BN_CLICKED(STOPBUTTON, &CLiskovaServerDlg::OnStopbutton)
END_MESSAGE_MAP()


// обработчики сообщений CLiskovaServerDlg

BOOL CLiskovaServerDlg::OnInitDialog()
{
CDialog::OnInitDialog();

// Добавление пункта ''О программе...'' в системное меню.

// IDM_ABOUTBOX должен быть в пределах системной команды.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}

// Задает значок для этого диалогового окна. Среда делает это автоматически,
// если главное окно приложения не является диалоговым
SetIcon(m_hIcon, TRUE);			// Крупный значок
SetIcon(m_hIcon, FALSE);		// Мелкий значок

// TODO: добавьте дополнительную инициализацию
Set_Bool(FALSE);

return TRUE; // возврат значения TRUE, если фокус не передан элементу управления
}

void CLiskovaServerDlg::Deact_Start(CCmdUI *pCmdUI)
{	
if (Get_Bool()==TRUE)
pCmdUI->Enable(FALSE);
else
pCmdUI->Enable(TRUE);
}
void CLiskovaServerDlg::Act_Stop(CCmdUI *pCmdUI)
{
if (Get_Bool()==TRUE)
pCmdUI->Enable(TRUE);
else
pCmdUI->Enable(FALSE);

}
void CLiskovaServerDlg::Act_Save(CCmdUI *pCmdUI)
{
if (Get_Bool()==TRUE)
pCmdUI->Enable(TRUE);
else
pCmdUI->Enable(FALSE);
}

void CLiskovaServerDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}

void CLiskovaServerDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // контекст устройства для рисования

SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

// Выравнивание значка по центру клиентского прямоугольника
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;

// Нарисуйте значок
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}

// Система вызывает эту функцию для получения отображения курсора при перемещении
// свернутого окна.
HCURSOR CLiskovaServerDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}


void CLiskovaServerDlg::OnStartbutton()
{
Set_Bool(TRUE);

SQLConfigDataSource(NULL,ODBC_ADD_SYS_DSN, 
"SQL Server", 
"DSN=OOP\0" 
"Description=OOP\0" 
"Servername=(local)\SQLEXPRESS\0"
"Database=D:\база\Trade.mdf"); 
UpdateDialogControls(this, TRUE);
}

void CLiskovaServerDlg::OnStopbutton()
{
Set_Bool(FALSE);
UpdateDialogControls(this, TRUE);
}
Пропущен фрагмент кода.. (реализация "О программе", созданная визардом)
 

lazybiz

Well-known member
03.11.2010
1 339
0
#10
Попробуй подключи заголовок так:
C++:
#include <odbcinst.h>
, т.е. используя не ковычки, а скобки. Не факт что поможет, но так будет правильней.