| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > SQL - запрос |
| Автор: roman 26.1.2003, 07:20 |
| Как написать 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 | ||
| Весь твой код переводить с Delphi на C++ я не буду, так как ничего сложного тут нет. вот, из стандартной справки билдера:
|
| Автор: roman 28.1.2003, 07:01 | ||||
Благодарю за помощь У меня заработало только Query1->Open(); а не Query1->ExecSQL(); Почему , не знаю! |
| Автор: Baa 28.1.2003, 18:21 | ||
Все зависит от того, какие ты действия собрался выполнять... ExecSQL используют в случаях, когда не возвращается курсор...
|
| Автор: Vit 29.1.2003, 00:20 |
| Если грубо, но более понятно то Open для кверей типа "Select" ExecSQL для всех остальных |
| Автор: roman 29.1.2003, 05:01 | ||||
А как написать вложенный запрос 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 | ||||
| 1) Приведите текст запроса который вы хотите сделать 2) Если вы хотите запустить 2 квери одним запросом типа:
То BDE такие запросы не поддерживает, а в ADO есть методы типа NextRecordset 3) Сложные квери типа
Должны выполнятся точно так же как и обычные |
| Автор: roman 29.1.2003, 07:56 | ||||||
т.е. как текст запроса ? Мне нужно (выше указанный код) вывести студенов по определённому предмету(эт я умею), ну так как смотреть несколько групп не удобно, то мне нужно тут же выбрать из найденного студентов какоё нибудь группы. У меня всего одна таблица. |
| Автор: Vit 29.1.2003, 07:59 |
| Делайте это другой кверёй. |
| Автор: ShAlexNik 3.2.2003, 22:56 |
| 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) |