Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> SQL - запрос 
:(
    Опции темы
roman
  Дата 26.1.2003, 07:20 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Как написать SQL – запрос, что - бы он выполнялся при работе программы, т.е. не
писать его в свойстве “SQL” компонента “Query”? На “Delphi” я делаю так:

procedure TForm1.Button1Click(Sender: TObject);
var
search :String[10];
begin
search := Edit1.Text;

if search <> '' then
begin
with Form1.Query1 do
begin
Close;
SQL.Clear;
// New запрос
SQL.Add('SELECT Name, Surname, Groop, Predmet, Ocenka');
SQL.Add('FROM ":vedomost:vedomost.db"');
SQL.Add('WHERE');
SQL.Add('(Name = "'+ search + '")')
else DataSource1.DataSet := Table1;
SQL.Add('ORDER BY Surname');
Open;
end;
end;

// Выводим найденное
if Query1.RecordCount <> 0 then
DataSource1.DataSet := Query1
else
begin
ShowMessage('НЕТУ');
DataSource1.DataSet := Table1;
end;
end;

А как написать то же само, что – бы работало в CBuilder?

  Вверх
Medved
Дата 26.1.2003, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: нет
Всего: 154



Весь твой код переводить с Delphi на C++ я не буду, так как ничего сложного тут нет.
вот, из стандартной справки билдера:

Код

Query1->Close();
Query1->SQL->Clear();
Query1->SQL->Add("Delete from Country where Name = 'Argentina'");
Query1->ExecSQL();





--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
roman
Дата 28.1.2003, 07:01 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(Pegas @ 26.1.2003, 04:06)
Весь твой код переводить с Delphi на C++ я не буду, так как ничего сложного тут нет.
вот, из стандартной справки билдера:

Код

Query1->Close();
Query1->SQL->Clear();
Query1->SQL->Add("Delete from Country where Name = 'Argentina'");
Query1->ExecSQL();

Благодарю за помощь
У меня заработало только
Query1->Open();
а не
Query1->ExecSQL();

Почему , не знаю!
  Вверх
Baa
Дата 28.1.2003, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: 8
Всего: 12



Все зависит от того, какие ты действия собрался выполнять... ExecSQL используют в случаях, когда не возвращается курсор...

Цитата

Call ExecSQL to execute the SQL statement currently assigned to the SQL property. Use ExecSQL to execute queries that do not return a cursor to data (such as INSERT, UPDATE, DELETE, and CREATE TABLE).

ExecSQL returns an integer value reflecting the number of rows affected by the executed SQL statement.

Note: For SELECT statements, call Open instead of ExecSQL or set the Active property to true.



--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
Vit
Дата 29.1.2003, 00:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: нет
Всего: 207



Если грубо, но более понятно то

Open для кверей типа "Select"
ExecSQL для всех остальных


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
roman
Дата 29.1.2003, 05:01 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(Baa @ 28.1.2003, 10:21)
Все зависит от того, какие ты действия собрался выполнять... ExecSQL используют в случаях, когда не возвращается курсор...

Цитата

Call ExecSQL to execute the SQL statement currently assigned to the SQL property. Use ExecSQL to execute queries that do not return a cursor to data (such as INSERT, UPDATE, DELETE, and CREATE TABLE).

ExecSQL returns an integer value reflecting the number of rows affected by the executed SQL statement.

Note: For SELECT statements, call Open instead of ExecSQL or set the Active property to true.

А как написать вложенный запрос SQL , что бы сначала выполнялось одно условие и
тут же вместе с ним, другое ? На пример:
Выбираем предмет, и выбираем группу, и выводим список студентов этой группы с оценками по этому предмету. Что нибудь одно вывожу без проблем, а вот вместе не могу. Вот как сделать именно ДВОЙНОЙ запрос?
Вот мой код на CBuilder:

AnsiString predmet, group;
predmet = Edit1->Text;
group = Edit2->Text;
if (predmet != ' ' && group != ' ')
{
Query1->Close(); Query1->SQL->Clear();
Query1->SQL->Add("Select *");
Query1->SQL->Add("FROM ':jurnalcb:Student.DB'");
Query1->SQL->Add("WHERE");
Query1->SQL->Add("(Predmet= '" + predmet +"')");
^^^^^^^^^^^ вот здесь надо еще вставить
фильтрацию по переменной “group”
Query1->SQL->Add("ORDER BY Student");
Query1->Open();
// Выводим найденое
DataSource1->DataSet = Query1;
}

  Вверх
Vit
Дата 29.1.2003, 06:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: нет
Всего: 207



1) Приведите текст запроса который вы хотите сделать
2) Если вы хотите запустить 2 квери одним запросом типа:
SQL
Select * From MyTable1 Select * from MyTable2

То BDE такие запросы не поддерживает, а в ADO есть методы типа NextRecordset
3) Сложные квери типа
SQL
Select Count(*), a From MyTable1 Where num in (Select Num2 from MyTable2) Oreder by 1
Group by a
Having Count(*)>10

Должны выполнятся точно так же как и обычные




--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
roman
  Дата 29.1.2003, 07:56 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(Vit @ 28.1.2003, 22:21)
1) Приведите текст запроса который вы хотите сделать
2) Если вы хотите запустить 2 квери одним запросом типа:
SQL
Select * From MyTable1 Select * from MyTable2

То BDE такие запросы не поддерживает, а в ADO есть методы типа NextRecordset
3) Сложные квери типа
SQL
Select Count(*), a From MyTable1 Where num in (Select Num2 from MyTable2) Oreder by 1
Group by a
Having Count(*)>10

Должны выполнятся точно так же как и обычные

т.е. как текст запроса ? Мне нужно (выше указанный код)
вывести студенов по определённому предмету(эт я умею),
ну так как смотреть несколько групп не удобно, то мне нужно тут же
выбрать из найденного студентов какоё нибудь группы. У меня всего одна таблица.
  Вверх
Vit
Дата 29.1.2003, 07:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: нет
Всего: 207



Делайте это другой кверёй.


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
ShAlexNik
Дата 3.2.2003, 22:56 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











1.
select Student, Group, Subject from Table
where Group = :Group and Subject = :Subject
Значение Group и Subject передаем как параметры TQuery через свойство Params (см. help)

2.
select Student, Group, Subject from Table
Теперь фильтруем выборку с помощью свойства TQuery->Filter (см. help)

  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0571 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.