Topik |
Отправлено: 12.07.2004, 16:46 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 45
|
Люди хелп, чего то голова не пашет( а может это врожденное ).
Есть таблица в которой хранится инфо о продавцах.
Надо перед добавлением нового продавца проверять, есть ли уже такая запись, по имени продавца.
Форма занесения инфы
Saler_Add
Содержит три поля Имя(name), Компания(company), Телефон(tel).
Таблица saler
id|name|company|tel
Индексом является id.
Как это осуществить? |
|
AVC |
Отправлено: 12.07.2004, 16:58 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
SQL | Select Count(*) Into :vcou From Saler_Add Where 1 = 1 and Upper(Name) = Upper(:pName) and Upper(Company) = Upper(:pCompany)
|
если vcou == 0 -> такой записи нет.
Если ваша СУБД позволяет выбирать N первых записей то предпочтительнее код
SQL | Select
-- Top 1
id
Into :vid From Saler_Add Where 1 = 1 and Upper(Name) = Upper(:pName) and Upper(Company) = Upper(:pCompany)
-- and RowNum < 1
|
раскомментировать то, что вам более подходит и анализ vid |
|
Topik |
Отправлено: 12.07.2004, 17:05 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 45
|
Очень интересно, практически все понятно, а теперь если можно скажите как это перевести в С++?
Делфи увы не учил |
|
AVC |
Отправлено: 12.07.2004, 17:13 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
Это ни когда не поздно
Приведенный пример написан на SQL (языке(L) структуированных(S) запросов(Q)) и вставлется в код на C++ там, где вам это удобнее.
Уточните, у вас SQL'евский сервер? Если нет, то все вышеизложенное не имеет к вам отношения. Хотя способ может быть использован и при работе с "чистыми" таблицами.
Отредактировано AVC — 12/07/2004, 17:16 |
|
Topik |
Отправлено: 12.07.2004, 17:36 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 45
|
сервер на MySQL |
|
AVC |
Отправлено: 12.07.2004, 17:45 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
Запихиваете код (примерно такой — требует уточнения синтаксиса)
CODE |
Select id
From Saler_Add
Where 1 = 1
and Upper(Name) = Upper(:pName)
and Upper(Company) = Upper(:pCompany)
|
в Query, настраиваете описание праметров.
При выполнении — присваиваете параметрам текущие значения продавца и организации. Выполняете запрос (Active = true). Считываете значение первого поля первой строки в переменную C++. Закрываете Query. Анализируете запомненное значение. 0 — нет такого. Надо проверить, что ID не может быть нулем.
|
|
Topik |
Отправлено: 12.07.2004, 17:51 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 45
|
спасибо большое |
|
Gedeon |
Отправлено: 12.07.2004, 17:57 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
QUOTE (AVC @ 12/07/2004, 18:47) | CODE |
Select id
From Saler_Add
Where 1 = 1
and Upper(Name) = Upper(:pName)
and Upper(Company) = Upper(:pCompany)
|
|
Простите а зачем 1=1?
|
|
AVC |
Отправлено: 13.07.2004, 07:48 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
2Gedeon при такой записи легко комментировать не нужные условия. |
|
Gedeon |
Отправлено: 13.07.2004, 08:02 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
QUOTE (AVC @ 13/07/2004, 08:50) | 2Gedeon при такой записи легко комментировать не нужные условия. |
|
|
Topik |
Отправлено: 13.07.2004, 09:51 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 45
|
Возник вопрос:
как передать
QUOTE | значение первого поля первой строки в переменную C++ | |
|
AVC |
Отправлено: 13.07.2004, 10:12 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
Допустим вы работаете через какоето_Query с именем Qry1
CODE |
if (Qry1->Active) Qry1->Active = false;
Qry1->SQL->Text = "Здесь текст вашего запроса";
// Здесь вы настраиваете параметры (если нужно, зависит от текста SQL)
int vint;
try
{
Qry1->Active = true;
vint = Qry1->Fields->Fields[0]->AsInteger; // !!!!!!!!!!!!!!!!!!!!!!!!
Qry1->Active = false;
}
catch (...)
{// попытка не удалась, ваши действия
Qry1->Active = false;
vint = 0;
}
return vint;
| |
|