powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Использование OLE DB Provider
11 сообщений из 11, страница 1 из 1
Использование OLE DB Provider
    #34956609
Paxel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дорброе время суток!
Пытаюсь освоить использование OLE DB провайдера для MS SQL Server. Помогите, знающие люди, как в этой ситуации быть (использую VC++ 6.0), если надо выполнить скрипт для создания базы данных на сервере. Какова должна быть последовательность действий при использовании объектов классов CDataSource, CSession, CCommand?
...
Рейтинг: 0 / 0
Использование OLE DB Provider
    #34956622
Paxel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Или подскажите ссылку, где об этом толково написано.
...
Рейтинг: 0 / 0
Использование OLE DB Provider
    #34956740
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Paxel пишет:

> должна быть последовательность действий при использовании объектов
> классов CDataSource, CSession, CCommand?

Открыаешь коннекцию, парсишь скрипт до разделителя,
кормишь Command очередной порцией скрипта, выполняешь,
парсишь следующую порцию, кормишь, выполняешь.
И так до конца.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Использование OLE DB Provider
    #34974697
Paxel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А по-подробней можно? Если лень, дайте ссылочку...
...
Рейтинг: 0 / 0
Использование OLE DB Provider
    #34974808
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Начните отсюда
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Использование OLE DB Provider
    #34981451
Paxel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv
Открыаешь коннекцию, парсишь скрипт до разделителя,
кормишь Command очередной порцией скрипта, выполняешь,
парсишь следующую порцию, кормишь, выполняешь.
И так до конца.


А какие у Command должны быть свойства, чтоб он съел скрипт. Вообще без свойств не ест. :(
...
Рейтинг: 0 / 0
Использование OLE DB Provider
    #34983801
Paxel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Использую VC++ 6.0, SQL Server 2000, Ole DB provider for SQL Server

Код: 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.
class CmyAccessor      //Создал акцессор
{
public:
	LONG m_column1;	//	Поля данных
         LONG m_column2;
         ...

BEGIN_COLUMN_MAP(CmyAccessor)
	COLUMN_ENTRY( 1 , m_column1)
	COLUMN_ENTRY( 2 , m_column2)
        ...
END_COLUMN_MAP()
	// You may wish to call this function if you are inserting a record and wish to
	// initialize all the fields, if you are not going to explicitly set all of them.
	void ClearRecord()
	{
		memset(this,  0 , sizeof(*this));
	}
};

HRESULT CmyData::OpenDB()      // Открываю datasource и session
{
		HRESULT		hr;
		CDBPropSet	dbinit(DBPROPSET_DBINIT);

		dbinit.AddProperty(DBPROP_AUTH_PERSIST_SENSITIVE_AUTHINFO, false);
		dbinit.AddProperty(DBPROP_AUTH_USERID, OLESTR("sa"));
		dbinit.AddProperty(DBPROP_INIT_CATALOG, OLESTR("data"));
		dbinit.AddProperty(DBPROP_INIT_DATASOURCE, OLESTR("(local)"));
		dbinit.AddProperty(DBPROP_INIT_LCID, (long) 1049 );
		dbinit.AddProperty(DBPROP_INIT_PROMPT, (short) 4 );
		hr = m_db.Open(_T("SQLOLEDB.1"), &dbinit);
		if (FAILED(hr))
			return hr;

		return m_session.Open(m_db);
}

HRESULT CmyData::fnWrite()      // Пытаюсь писать в БД
{
	CTable<CAccessor<CmyAccessor> > table;

	CDBPropSet	propset(DBPROPSET_ROWSET);
	propset.AddProperty(DBPROP_IRowsetChange, true);
	propset.AddProperty(DBPROP_UPDATABILITY, DBPROPVAL_UP_CHANGE | DBPROPVAL_UP_INSERT | DBPROPVAL_UP_DELETE);
	table.Open(m_session, "myTable", &propset);
	table.m_column1 = val1;
	table.m_column2 = val2;
         ...

	return table.Insert();     // insert возвращает DB_E_ERRORSOCCURRED
}
Подскажите, пожалуйста, что делаю не так? (table.Delete() работает)
...
Рейтинг: 0 / 0
Использование OLE DB Provider
    #34984049
Paxel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С преыдущим вопросом разобрался. Ошибка была из-за того, что поле таблицы, соответствующее m_column1, является автоинкрементным. В связи с этим вопрос:
В классе CmyAccessor не должно быть перемнных, соответствующих автоматически заполняемым полям таблицы БД? Если нет, то какое значение им надо присваивать, чтоб происходило автозаполнение?

И еще подскажите:
Как сконвертировать CTime в DBTIMESTAMP чтоб произвести запись даты и времени в таблицу, акцессор для которой приведен ниже?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
class CmyTableAccessor
{
public:
	LONG m_column1;
	LONG m_column2;
	DBTIMESTAMP m_column3;

BEGIN_COLUMN_MAP(CmyTableAccessor)
	COLUMN_ENTRY( 1 , m_column1)
	COLUMN_ENTRY( 2 , m_column2)
	COLUMN_ENTRY( 3 , m_column3)
END_COLUMN_MAP()

	// You may wish to call this function if you are inserting a record and wish to
	// initialize all the fields, if you are not going to explicitly set all of them.
	void ClearRecord()
	{
		memset(this,  0 , sizeof(*this));
	}
};

Заранее благодарю за помощь!
...
Рейтинг: 0 / 0
Использование OLE DB Provider
    #34986054
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PaxelВ классе CmyAccessor не должно быть перемнных, соответствующих автоматически заполняемым полям таблицы БД? Если нет, то какое значение им надо присваивать, чтоб происходило автозаполнение?Нет, переменных быть не должно. Если ты присваиваешь значение автозаполняемому полю, то большинство серверов примет это значение и запомнит его, но в принципе может и ругнуться, стандартами это не оговорено и каждая СУБД в этом вопросе может вести себя по разному.
Не используй класс CTable. Никогда. Лучше привыкай формировать sql команды - намного меньше проблем и неоднозначности будет в будущем.
...
Рейтинг: 0 / 0
Использование OLE DB Provider
    #34986810
Paxel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl[quot Paxel]Не используй класс CTable. Никогда. Лучше привыкай формировать sql команды - намного меньше проблем и неоднозначности будет в будущем.

Т.е. вы имеете ввиду, что вместо всяческих транзакций, инсертов и апдэйтов для записи в БД лучше всего использовать SQL запрос типа (для таблицы из моего поста):
Код: plaintext
INSERT INTO myTable (column1,column2,column3) VALUES (DEFAULT,<значение>,<значение даты/времени>)
?

Если так, то подскажите, как правильно подобный запрос отправить на выполнение?

Спасибо за помощь!
...
Рейтинг: 0 / 0
Использование OLE DB Provider
    #34987393
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если в column1 в БД стоит default-значение или автоинкрементация, то его в запросе вообще не надо писать.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Использование OLE DB Provider
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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