Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Как узнать результат команды SELECT (http://forum.oszone.net/showthread.php?t=253452)

Apock 07-02-2013 23:35 2084933

Как узнать результат команды SELECT
 
Взялся за изучение БД, прикрутил к 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 2084957

Apock,
1) SELECT ... FROM ... WHERE ... ORDER BY и т.д.
2) По идее должна вернуть список кортежей.
3) А черть его знает :) Наверно список.
До программных взаимодействия с базами я еще не добрался. (Скорей всего будет питон).
MySQL Workbench
Очень полезный инструмент.
Как получите работающий SQL запрос, можно будет думать над C++ запросом/ответом/обработкой.

Busla 08-02-2013 10:42 2085161

Apock, 1. добавление записи и изменение существующей реализуется разными командами, поэтому сразу пытаемся добавить и анализируем ответ сервера.

LilLoco 09-02-2013 15:51 2086343

Цитата:

Цитата Apock
Как вообще узнать результат выполнения SELECT? Нашла она что-то или нет? »

Для этого лучше использовать, что то с агрегатной функцией. Например,
Код:

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

Цитата:

Цитата Apock
Если вдруг окажется, что строк с passw=37 несколько, куда они пойдут и как с ними работать? »

Не совсем понятен вопрос.
При таком запросе возвращается набор данных. Работать можно с ним в цикле, как с "таблицей".


Так же неплохо использовать хранимые процедуры. Чтобы реже отправлять запросы.
Например.
Цитата:

Цитата Apock
Если я собираюсь добавить новую запись, но при этом проверить, нет ли уже такой записи в ключевом поле »

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

Apock 09-02-2013 23:23 2086667

Дошло наконец-то))
Просто в поиске очень много ссылок на примеры взаимодействия SQL с PHP и там запрос выглядит примерно так:
Код:

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

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


Время: 12:04.

Время: 12:04.
© OSzone.net 2001-