Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Оцените формирование SQL запроса в VC++ 6 / 17 сообщений из 17, страница 1 из 1
10.04.2007, 05:38
    #34448753
Baikaly
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оцените формирование SQL запроса в VC++ 6
Здраствуйте
Мне надо сформировать запрос с условиями, я делаю это таким способом, может есть способ проше?
Код: 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
10.04.2007, 15:10
    #34450243
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оцените формирование SQL запроса в VC++ 6
Baikaly пишет:
> Автор: "Baikaly"
> Здраствуйте
> Мне надо сформировать запрос с условиями, я делаю это таким способом,
> может есть способ проше?

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

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

Преимущества параметризованных запросов перед обычными - те же, что и преимущества подпрограмм/процедур перед многократным копированием текста в теле программы...
...
Рейтинг: 0 / 0
26.04.2007, 09:09
    #34488493
Baikaly
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оцените формирование SQL запроса в VC++ 6
Может я что то неправльно понял у меня есть MSDN April 2003 я там в иерархии классов MFC не нашел такого класса(CParameter)???
...
Рейтинг: 0 / 0
26.04.2007, 09:23
    #34488528
Оцените формирование SQL запроса в VC++ 6
BaikalyМожет я что то неправльно понял у меня есть MSDN April 2003 я там в иерархии классов MFC не нашел такого класса(CParameter)???
Sorry, что ввел в заблуждение. "Не виноватая я..."(с)
Например, в Билдере есть TParameter.
В Визуальной Студии аналога нет, но параметры есть в CADOCommand (CADOCommand->Parameters->Parameter). Предварительно надо вызвать функцию CreateParameter ...(У меня MSDN Jul 2000)
...
Рейтинг: 0 / 0
26.04.2007, 09:34
    #34488550
Оцените формирование SQL запроса в VC++ 6
Станислав С BaikalyМожет я что то неправльно понял у меня есть MSDN April 2003 я там в иерархии классов MFC не нашел такого класса(CParameter)???
Sorry, что ввел в заблуждение. "Не виноватая я..."(с)
Например, в Билдере есть TParameter.
В Визуальной Студии аналога нет, но параметры есть в CADOCommand (CADOCommand->Parameters->Parameter). Предварительно надо вызвать функцию CreateParameter ...(У меня MSDN Jul 2000)
Блин, опять облажался...
В общем, не CADOCommand, а просто ADOCommand
...
Рейтинг: 0 / 0
26.04.2007, 10:43
    #34488803
Baikaly
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оцените формирование SQL запроса в VC++ 6
Спасибо всем. Особенно 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
26.04.2007, 12:48
    #34489407
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оцените формирование SQL запроса в VC++ 6
Baikaly пишет:

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

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

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

Зря.

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

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

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

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


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