powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Оцените формирование SQL запроса в VC++ 6
17 сообщений из 17, страница 1 из 1
Оцените формирование SQL запроса в VC++ 6
    #34448753
Baikaly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здраствуйте
Мне надо сформировать запрос с условиями, я делаю это таким способом, может есть способ проше?
Код: 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.
void CWorkBench::Find(CString *pIdDP, CString *pAddress, CString* pIdEM)
{
	CString strSQL;
	CString strZPT;
	int nTemp;
	if (IsOpen()){Close();}
	if ((pIdDP->IsEmpty()) && (pAddress->IsEmpty()) && (pIdEM->IsEmpty()))
	{
		Initial();
		return;
	}
	strZPT.Empty();
	strSQL = "select * from workbench where ";
	nTemp = strSQL.GetLength();
	if (!pIdDP.IsEmpty())
	{
		nTemp = strSQL.Insert(nTemp, strZPT);
		nTemp = strSQL.Insert(nTemp, "sidDP='");
		nTemp = strSQL.Insert(nTemp, *pIdDP);
		nTemp = strSQL.Insert(nTemp, "'");
		strZPT = " and ";
	}
	if (!pAddress.IsEmpty())
	{
		nTemp = strSQL.Insert(nTemp, strZPT);
		nTemp = strSQL.Insert(nTemp, "strAddress='");
		nTemp = strSQL.Insert(nTemp, *pAddress);
		nTemp = strSQL.Insert(nTemp, "'");
		strZPT = " and ";
	}
	if (!pIdEM.IsEmpty())
	{
		nTemp = strSQL.Insert(nTemp, strZPT);
		nTemp = strSQL.Insert(nTemp, "sidEM='");
		nTemp = strSQL.Insert(nTemp, *pIdEM);
		nTemp = strSQL.Insert(nTemp, "'");
		strZPT = " and ";
	}
	if (strZPT.IsEmpty())
	{
		Initial();
		return;
	}
	nTemp = strSQL.Insert(nTemp, ";");
}
...
Рейтинг: 0 / 0
Оцените формирование SQL запроса в VC++ 6
    #34450243
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Baikaly пишет:
> Автор: "Baikaly"
> Здраствуйте
> Мне надо сформировать запрос с условиями, я делаю это таким способом,
> может есть способ проше?

Конечно есть. Один вызов String::Format().
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Оцените формирование SQL запроса в VC++ 6
    #34454679
Baikaly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
c CString::Format() не получиться, допустим если pIdDP пустой то в формате все равно останиться строчка sIdDP='' и резултат запроса будет другой.
...
Рейтинг: 0 / 0
Оцените формирование SQL запроса в VC++ 6
    #34483081
Baikaly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
up
...
Рейтинг: 0 / 0
Оцените формирование SQL запроса в VC++ 6
    #34486081
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сделай массивы
Код: plaintext
1.
2.
char *fields[]={"sidDP","strAddress","sidEM"};
CString *values[]={pIdDP,pAddress,pIdEM};
с ними можно единообразно в цикле работать. И я бы использовал параметризованный запрос.
...
Рейтинг: 0 / 0
Оцените формирование SQL запроса в VC++ 6
    #34488324
Baikaly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Параметризированый запрос это как?
...
Рейтинг: 0 / 0
Оцените формирование SQL запроса в VC++ 6
    #34488455
BaikalyПараметризированый запрос это как?
Упрощенно:
Параметризованный запрос это запрос вида:
Код: plaintext
1.
Select <fields> from <tables> where <field>=?param [and ...]
где ? - признак параметра. Этот знак зависит от используемой СУБД и может быть: ":", "?","@" и др.;
param-имя параметра (~имя переменной с областью видимости текущее SQL-выражение, которая содержит значение);
[] - необязательная часть...

При использовании параметризованных запросов должен быть создан экземпляр класса CParameter, ему передано значение. Исходное параметризованное SQL-выражение должно быть подготовлено (вызван метод Prepare) до его исполнения (до вызова метода Exec(ute)).

Преимущества параметризованных запросов перед обычными - те же, что и преимущества подпрограмм/процедур перед многократным копированием текста в теле программы...
...
Рейтинг: 0 / 0
Оцените формирование SQL запроса в VC++ 6
    #34488493
Baikaly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может я что то неправльно понял у меня есть MSDN April 2003 я там в иерархии классов MFC не нашел такого класса(CParameter)???
...
Рейтинг: 0 / 0
Оцените формирование SQL запроса в VC++ 6
    #34488528
BaikalyМожет я что то неправльно понял у меня есть MSDN April 2003 я там в иерархии классов MFC не нашел такого класса(CParameter)???
Sorry, что ввел в заблуждение. "Не виноватая я..."(с)
Например, в Билдере есть TParameter.
В Визуальной Студии аналога нет, но параметры есть в CADOCommand (CADOCommand->Parameters->Parameter). Предварительно надо вызвать функцию CreateParameter ...(У меня MSDN Jul 2000)
...
Рейтинг: 0 / 0
Оцените формирование SQL запроса в VC++ 6
    #34488550
Станислав С BaikalyМожет я что то неправльно понял у меня есть MSDN April 2003 я там в иерархии классов MFC не нашел такого класса(CParameter)???
Sorry, что ввел в заблуждение. "Не виноватая я..."(с)
Например, в Билдере есть TParameter.
В Визуальной Студии аналога нет, но параметры есть в CADOCommand (CADOCommand->Parameters->Parameter). Предварительно надо вызвать функцию CreateParameter ...(У меня MSDN Jul 2000)
Блин, опять облажался...
В общем, не CADOCommand, а просто ADOCommand
...
Рейтинг: 0 / 0
Оцените формирование SQL запроса в VC++ 6
    #34488803
Baikaly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем. Особенно maXmo за прекрасную идею. У меня получилься компактный вариант формирования запроса любой длинны:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
	CString strTemp;
	CString strAnd;
	strAnd.Empty();
	m_strSQL = "insert into " + strNameTable + " (";
	for(int i = pResp->nEl;i> 0 ;i--)
	{
		m_strSQL= m_strSQL + strAnd + CString(pResp->fields[i]) ;
		strTemp = strTemp + strAnd + "'" + *pResp->values[i] + "'";
		strAnd = ", ";
	}
	m_strSQL = m_strSQL + ") values (" + strTemp + ");";

По поводу параметризированных запросов, я использую ODBC(CRecordset и CDatabase), там вроде ничего подобного не нашел в MSDN.
...
Рейтинг: 0 / 0
Оцените формирование SQL запроса в VC++ 6
    #34489407
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Baikaly пишет:

> c CString::Format() не получиться, допустим если pIdDP пустой то в
> формате все равно останиться строчка sIdDP='' и резултат запроса будет
> другой.

Мужик, ну если ты такой проблемы простой не можешь решить, то лучше оставь
так, как есть.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Оцените формирование SQL запроса в VC++ 6
    #34489412
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Baikaly пишет:

> По поводу параметризированных запросов, я использую ODBC(CRecordset и
> CDatabase),

Зря.

> там вроде ничего подобного не нашел в MSDN.

Есть параметры там.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Оцените формирование SQL запроса в VC++ 6
    #34489611
Baikaly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Почему зря ODBC использую. СУБД MySQL, а чем еще можно к ней конектица, через DAO объекты смысла не вижу.
...
Рейтинг: 0 / 0
Оцените формирование SQL запроса в VC++ 6
    #34489637
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Baikaly пишет:

> Почему зря ODBC использую. СУБД MySQL, а чем еще можно к ней конектица,
> через DAO объекты смысла не вижу.

(CRecordset и CDatabase) зря используешь.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Оцените формирование SQL запроса в VC++ 6
    #34490527
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BaikalyПараметризированый запрос это как?вот чо-то нашёл http://msdn2.microsoft.com/en-us/library/ax3w1w3z(VS.80).aspx
...
Рейтинг: 0 / 0
Оцените формирование SQL запроса в VC++ 6
    #34490538
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да… смотрю, довольно нетривиальная процедура привязки параметров
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Оцените формирование SQL запроса в VC++ 6
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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