-
Добрый день,bзвеняюсь что отвлекаю, но у меня не большой вопрос. Есть аксесовская база данных и у одной из ее таблиц мне надо программно удалять строку. Все строки таблици хронятся в combobox-e и я с помощью sql-запроса пытаюсь удалять, но выдает ошибку:' Параметр Гост не имеет значения по умолчанию', Гост- название таблицы. Листинг:
DataModule2.ADOQuery1.Active:=false;
DataModule2.ADOQuery1.SQL.Clear;
DataModule2.ADOQuery1.SQL.Add('DELETE');
DataModule2.ADOQuery1.SQL.Add('FROM (select* from Спецификация) Спецификация');
DataModule2.ADOQuery1.SQL.Add('WHERE Гост= '''+ComboBox1.Items.Strings[ComboBox1.ItemIndex]+'''');
DataModule2.ADOQuery1.Active:=true;
Помогите пожалуст, а то всю голову сломал))
-
Для начала
1) в базе переименуй все на английский
2) Если правильно помню, русские названия в запросах в Access нужно в квадратные скобки брать.
3) ('FROM (select* from Спецификация) Спецификация'); что этим хотел сказать?
4) Предварительно отрабатывай запросы в самом Accesse
-
поправка
2) в кв. скобки брать все названия объектов которые содержат, несовместимые с SQL92, символы (для mssql, jet)
4) глупость хотел сказать ) и получилось
-
> 4) глупость хотел сказать ) и получилось
Не понял?
Имелось в виду, что тексты запросов проще отрабатывать в Access.
-
обшибся нумбером
"4) глупость хотел сказать ) и получилось"
читать как
"3) глупость хотел сказать ) и получилось"
-
> DataModule2.ADOQuery1.Active:=true;
А это вообще бред.
-
> Дмитрий (15.05.2010 17:13:00) [0]
Используй АdoCommand
Используй парамеры
Чему равен DataModule2.ADOQuery1.SQL.Text?
-
> А это вообще бред.
А что здесь не бред? Вроде ничего.
-
> Германн © (15.05.10 17:54) [5]
>
>
> > DataModule2.ADOQuery1.Active:=true;
>
> А это вообще бред.
Это с какого перепугу бред?
Вполне нормально. В сеттере на Active тот же Open делается, на сколько помню.
-
А :) там delete :)
-
> Германн © (15.05.10 17:54) [5]
А, собственно, что "криминального" ты нашел в
DataModule2.ADOQuery1.Active:=true;
ну и тем более "бредового"
:)
Интерес, действительно, представляет уточнение от
Anatoly Podgoretsky © (15.05.10 18:08) [6], а именно
Чему равен DataModule2.ADOQuery1.SQL.Text?
-
> Smile (15.05.10 18:26) [10]
delete же. Exec нужно.
-
в данном случае, конечно же, но мне показалось, что Германн просто органически не принимает такую конструкцию
:)
пардон за вальяжность, и прошу извинения
:(
-
> но мне показалось
Когда кажется, креститься надо!
Народная мудрость. :)
-
возразить нечем, согласен
:)
-
> Smile (15.05.2010 18:42:14) [14]
Тут возражай не возражай, а все равно переписать все нафиг.
-
ответов много ноя так ни че и не понял))). Не много подправил теперь не ругается но и не удаляет.
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('DELETE*');
ADOQuery1.SQL.Add('FROM ТаблицаГост');
ADOQuery1.SQL.Add('WHERE Название=:poisk');
ADOQuery1.Parameters.ParamByName('poisk').Value:=ComboBox1.items.Strings[ComboBo x1.ItemIndex];
Не могу понять что не так. Объясните пожалуста и если можно на примере.
Заранее благодарен.
-
> ComboBox1.items.Strings[ComboBo x1.ItemIndex];
Жжуть..
ComboBox1.items[ComboBox1.ItemIndex];
Но всеравно Жжуть..
-
DELETE
FROM (select* from Спецификация) Спецификация
WHERE Гост= 'чё-то'
> Гост- название таблицы
Вот это полёт фантазии. Это я уважаю
Отсыпте грибочков.
-
> Дмитрий (15.05.10 20:18) [16]
Что такое звёздочка в вашем сверхудивительном запросе?
-
Опечатка))
-
> Дмитрий (15.05.10 20:24) [20]
>
> Опечатка))
Ну так исправляйте и другии опечатки в вашем суперкоде.
-
А где конкретнее они присутствуют?
-
И если не затруднит вас Плохиш, покажите на примере как вы это реализовываете, если это конечно не затруднит?
-
лови..
with ADOQuery1 do
begin
SQL.Text:='DELETE FROM ТаблицаГост WHERE Название=:poisk');
Parameters.ParamByName('poisk').Value:=ComboBox1.items[ComboBox1.ItemIndex];
ExecSQL;
end
-
еще бы try except finally, но это домашнее задание.
-
> turbouser © (15.05.10 20:33) [24]
Подаёшь немощным?
-
Большое спасибо. Все заработало)))
-
> Не могу понять что не так.
Отсутствует вызов, на удаление.