Войти

Показать полную графическую версию : [решено] Как узнать результат команды SELECT


Apock
07-02-2013, 23:35
Взялся за изучение БД, прикрутил к C++Builder MySQL.
Как-то все потихоньку вроде идёт, но суть выполнения запросов никак понять не могу.
Я выполняю команду SELECT к примеру так:
Query1->SQL->Add("SELECT * FROM authors WHERE passw=37");
Query1->Open();
Дальше я по имени поля вытаскиваю нужное значение или изменяю, не важно. Но возникают вопросы:
1. Если я собираюсь добавить новую запись, но при этом проверить, нет ли уже такой записи в ключевом поле. Надо использовать команду SELECT или как-то это по другому реализуется?
2. Как вообще узнать результат выполнения SELECT? Нашла она что-то или нет?
3. Если вдруг окажется, что строк с passw=37 несколько, куда они пойдут и как с ними работать?

lxa85
08-02-2013, 00:13
Apock,
1) SELECT ... FROM ... WHERE ... ORDER BY и т.д.
2) По идее должна вернуть список кортежей.
3) А черть его знает :) Наверно список.
До программных взаимодействия с базами я еще не добрался. (Скорей всего будет питон).
MySQL Workbench (http://dev.mysql.com/downloads/workbench/5.2.html)
Очень полезный инструмент.
Как получите работающий SQL запрос, можно будет думать над C++ запросом/ответом/обработкой.

Busla
08-02-2013, 10:42
Apock, 1. добавление записи и изменение существующей реализуется разными командами, поэтому сразу пытаемся добавить и анализируем ответ сервера.

LilLoco
09-02-2013, 15:51
Как вообще узнать результат выполнения SELECT? Нашла она что-то или нет? »
Для этого лучше использовать, что то с агрегатной функцией. Например,
SELECT COUNT(*) FROM table WHERE pass=xxx
Тогда запрос вернет скалярную величину, значение которой будет количество.
Для выполнения запроса есть методы (не могу сказать какие именно, не знаком с реализацией на С++), по идее которые должны возвращать:
- void, для выполнения запросов не возвращающих данных (update, unsert, delete...);
- простой тип данных, для возвращения единственного значения (select sum(xxx), select avg(xxx), select distinct xxx...);
- набор, для возвращения набора данных.

Если вдруг окажется, что строк с passw=37 несколько, куда они пойдут и как с ними работать? »
Не совсем понятен вопрос.
При таком запросе возвращается набор данных. Работать можно с ним в цикле, как с "таблицей".


Так же неплохо использовать хранимые процедуры. Чтобы реже отправлять запросы.
Например.Если я собираюсь добавить новую запись, но при этом проверить, нет ли уже такой записи в ключевом поле »
В таком случае, вам необходимо сначала отправить запрос на проверку количества таких записей. Приходит ответ с сервера. Если 0, то добавляете. Если не 0 - нет.
То же самое можно реализовать в виде хранимой процедуры. Вы вызываете хранимую процедуру, и уже на стороне сервера происходят все эти сравнения.

Apock
09-02-2013, 23:23
Дошло наконец-то))
Просто в поиске очень много ссылок на примеры взаимодействия SQL с PHP и там запрос выглядит примерно так:
$result = mysql_query("SELECT * FROM Persons");
А потом они уже уже с этой переменной result работают. Вот я и зациклился на этом - что мне за переменную такую надо объявить, чтоб из неё потом результаты тянуть.
А всё ведь гораздо проще. Компонент TQuery не просто выполняет запрос sql, но и получает результаты. Т.е. после запроса SELECT просто запрашиваем Query1->RowCount и получаем кол-во найденных строк.

Спасибо всем за помощь. Теперь дело пойдёт быстрее.




© OSzone.net 2001-2012