C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
проверка на наличие записи в таблице
Topik
Отправлено: 12.07.2004, 16:46


Дежурный стрелочник

Группа: Участник
Сообщений: 45



Люди хелп, чего то голова не пашет( а может это врожденное biggrin.gif ).
Есть таблица в которой хранится инфо о продавцах.
Надо перед добавлением нового продавца проверять, есть ли уже такая запись, по имени продавца.
Форма занесения инфы
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



Очень интересно, практически все понятно, а теперь если можно скажите как это перевести в С++? ohmy.gif
Делфи увы не учил sad.gif
AVC
Отправлено: 12.07.2004, 17:13


Ветеран

Группа: Модератор
Сообщений: 1583



QUOTE
Делфи увы не учил

Это ни когда не поздно
Приведенный пример написан на 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 при такой записи легко комментировать не нужные условия.

biggrin.gif
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;

Вернуться в Работа с базами данных в C++Builder