|
Вопрос # 5 266/ вопрос решён / |
|
Доброго времени суток, уважаемые эксперты! Как обратиться к базе по нажатию кнопки, если я хочу удалить множество записей, например столбец «курс» равен 4 курсу, и все записи с этим значением удалить, а всем записям со значением 3 курс присвоить значение 4 курса?! Подскажите «плиз»! Это надо делать через SQL или как то можно по-другому???
 |
Вопрос задал: alexlafa (статус: Посетитель)
Вопрос отправлен: 7 мая 2011, 18:58
Состояние вопроса: решён, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 6; последнее сообщение — 10 мая 2011, 21:04; участников в обсуждении: 2.
|
alexlafa (статус: Посетитель), 7 мая 2011, 22:02 [#1]:
procedure TForm6.sButton1Click(Sender: TObject);
begin
try
datamodule3.ADOQuery1.SQL.Clear;
datamodule3.ADOQuery1.SQL.Add('SELECT * FROM +Таблица1+ WHERE Курс LIKE %edit1.text%');
datamodule3.ADOQuery1.Active:=True;
except
on e:Exception do
end;
end; Делаю запрос на поиск в столбце курс в базе, схожие по написанию с введенным значением в "Эдит", но поиск не получаеться и выдает ошибку, ошибка синтаксеса! не могу понять где подскажите пожалуйста!
|
|
Чернышев (статус: 1-ый класс), 8 мая 2011, 11:42 [#2]:
ошибка вот в этой строчке
datamodule3.ADOQuery1.SQL.Add('SELECT * FROM +Таблица1+ WHERE Курс LIKE %edit1.text%');
во-первых, выражение стоящее после LIKE должно быть в ковычках.
во-вторых, у тебя получается, что запрос ищет не по значению Edit1, а по строке 'edit1.text'
надо вот так:
datamodule3.ADOQuery1.SQL.Add('SELECT * FROM +Таблица1+ WHERE Курс LIKE ''%'+edit1.text+'%''');
|
|
Чернышев (статус: 1-ый класс), 8 мая 2011, 11:51 [#3]:
а по поводу твоего основного вопроса...
нужно использовать компонент ADOCommand
подключить его к твоего ADOConnection
а код получиться где-то такой вот
procedure TForm1.Button1Click(Sender: TObject);
begin
//удаление записей
ADOCommand.CommandText:='DELETE FROM имяТаблицы WHERE КУРС=4';
ADOCommand.Execute;
//обновление записей
ADOCommand.CommandText:='UPDATE имяТаблицы SET КУРС=4 WHERE КУРС=3';
ADOCommand.Execute;
end;
|
|
alexlafa (статус: Посетитель), 9 мая 2011, 22:12 [#4]:
Огромное вам спасибо, за помощь! Скажите, я понял, как сделать запрос по определенному столбцу, а можно ли как то сделать, что бы столбец выбирался, например из «Комбобокса», что бы Delphi сам формировал запрос на столбец и искал запись, введенную в «Едит». Будьте добры помогите с этим вопросом! Код запроса выглядит так.
Если я пытаюсь прописать параметр и присвоить «Комбобоксу», как я это проделал с «Едитом» то программа выдает ошибку на параметр. Подскажите, пожалуйста, как это сделать. Заранее благодарю!
procedure TForm6.sButton1Click(Sender: TObject);
begin
datamodule3.ADOQuery1.SQL.Clear;
datamodule3.ADOQuery1.SQL.Text:='SELECT * FROM Таблица1 WHERE Курс LIKE W';
datamodule3.ADOQuery1.Parameters.ParamByName('W').Value:=form6.sEdit1.Text;
datamodule3.ADOQuery1.Active:=true;
end;
|
|
alexlafa (статус: Посетитель), 9 мая 2011, 22:16 [#5]:
Или поиск сразу по всем столбцам таблици, то есть полностью в таблице!?
|
|
Чернышев (статус: 1-ый класс), 10 мая 2011, 21:04 [#6]:
если ты создаешь запрос во время выполнения программы, то нет нужды использовать параметры, формарируй запрос как я писал уже раньше
как я понял у тебя есть ComboBox с названиями столбцов, а в Edit ты вводишь значение по которому ты будешь искать
тогда все будет выглядеть вот так:
procedure TForm6.sButton1Click(Sender: TObject);
begin
datamodule3.ADOQuery1.SQL.Clear;
datamodule3.ADOQuery1.SQL.Text:='SELECT * FROM Таблица1 WHERE '+ComboBox.Items[ComboBox.ItemIndex]+' LIKE
''%'+Edit.text+'%''';
datamodule3.ADOQuery1.Active:=true;
end;
а по поводу последнего я не очень понял...
в SQL запросе ты можешь указать несколько условий после WHERE, например:
SELECT * FROM Таблица WHERE field1 LIKE '%хор' AND (field2='студент' OR field2='преподаватель')
почитай про SQL запросы в инете, очень много статей, все хорошо и понятно описано как и что
|
11 мая 2011, 10:56: Статус вопроса изменён на решённый (изменил автор вопроса — alexlafa)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|