Конференция "Начинающим" » Не получается удалить строку из таблицы [D7, Access]
 
  • Дмитрий (15.05.10 17:13) [0]
    Добрый день,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;
    Помогите пожалуст, а то всю голову сломал))
  • YurikGL © (15.05.10 17:16) [1]
    Для начала
    1) в базе переименуй все на английский
    2) Если правильно помню, русские названия в запросах в Access нужно в квадратные скобки брать.
    3) ('FROM (select* from Спецификация) Спецификация'); что этим хотел сказать?
    4) Предварительно отрабатывай запросы в самом Accesse
  • Palladin © (15.05.10 17:27) [2]
    поправка
    2) в кв. скобки брать все названия объектов которые содержат, несовместимые с SQL92, символы (для mssql, jet)
    4) глупость хотел сказать ) и получилось
  • YurikGL © (15.05.10 17:30) [3]

    > 4) глупость хотел сказать ) и получилось

    Не понял?
    Имелось в виду, что тексты запросов проще отрабатывать в Access.
  • Palladin © (15.05.10 17:31) [4]
    обшибся нумбером
    "4) глупость хотел сказать ) и получилось"
    читать как
    "3) глупость хотел сказать ) и получилось"
  • Германн © (15.05.10 17:54) [5]

    > DataModule2.ADOQuery1.Active:=true;

    А это вообще бред.
  • Anatoly Podgoretsky © (15.05.10 18:08) [6]
    > Дмитрий  (15.05.2010 17:13:00)  [0]

    Используй АdoCommand

    Используй парамеры

    Чему равен DataModule2.ADOQuery1.SQL.Text?
  • Anatoly Podgoretsky © (15.05.10 18:11) [7]

    > А это вообще бред.

    А что здесь не бред? Вроде ничего.
  • turbouser © (15.05.10 18:23) [8]

    > Германн ©   (15.05.10 17:54) [5]
    >
    >
    > > DataModule2.ADOQuery1.Active:=true;
    >
    > А это вообще бред.

    Это с какого перепугу бред?
    Вполне нормально. В сеттере на Active тот же Open делается, на сколько помню.
  • turbouser © (15.05.10 18:24) [9]
    А :) там delete :)
  • Smile (15.05.10 18:26) [10]
    > Германн ©   (15.05.10 17:54) [5]

    А, собственно, что "криминального" ты нашел в
    DataModule2.ADOQuery1.Active:=true;


    ну и тем более "бредового"
    :)
    Интерес, действительно, представляет уточнение от
    Anatoly Podgoretsky ©   (15.05.10 18:08) [6], а именно
    Чему равен DataModule2.ADOQuery1.SQL.Text?
  • turbouser © (15.05.10 18:28) [11]

    > Smile   (15.05.10 18:26) [10]

    delete же. Exec нужно.
  • Smile (15.05.10 18:34) [12]
    в данном случае, конечно же, но мне показалось, что Германн просто органически не принимает такую конструкцию
    :)
    пардон за вальяжность, и прошу извинения
    :(
  • Германн © (15.05.10 18:39) [13]

    > но мне показалось

    Когда кажется, креститься надо!
    Народная мудрость. :)
  • Smile (15.05.10 18:42) [14]
    возразить нечем, согласен
    :)
  • Anatoly Podgoretsky © (15.05.10 19:46) [15]
    > Smile  (15.05.2010 18:42:14)  [14]

    Тут возражай не возражай, а все равно переписать все нафиг.
  • Дмитрий (15.05.10 20:18) [16]
    ответов много ноя так ни че и не понял))). Не много подправил теперь не ругается но и не удаляет.
    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];
    Не могу понять что не так. Объясните пожалуста и если можно на примере.
    Заранее благодарен.
  • turbouser © (15.05.10 20:20) [17]

    > ComboBox1.items.Strings[ComboBo x1.ItemIndex];

    Жжуть..
    ComboBox1.items[ComboBox1.ItemIndex];
    Но всеравно Жжуть..
  • Плохиш © (15.05.10 20:22) [18]
    DELETE
    FROM (select* from Спецификация) Спецификация
    WHERE Гост= 'чё-то'


    > Гост- название таблицы

    Вот это полёт фантазии. Это я уважаю
    Отсыпте грибочков.
  • Плохиш © (15.05.10 20:23) [19]

    > Дмитрий   (15.05.10 20:18) [16]

    Что такое звёздочка в вашем сверхудивительном запросе?
  • Дмитрий (15.05.10 20:24) [20]
    Опечатка))
  • Плохиш © (15.05.10 20:25) [21]

    > Дмитрий   (15.05.10 20:24) [20]
    >
    > Опечатка))

    Ну так исправляйте и другии опечатки в вашем суперкоде.
  • Дмитрий (15.05.10 20:27) [22]
    А где конкретнее они присутствуют?
  • Дмитрий (15.05.10 20:28) [23]
    И если не затруднит вас Плохиш, покажите на примере как вы это реализовываете, если это конечно не затруднит?
  • turbouser © (15.05.10 20:33) [24]
    лови..
    with ADOQuery1 do
     begin
       SQL.Text:='DELETE FROM ТаблицаГост WHERE Название=:poisk');
       Parameters.ParamByName('poisk').Value:=ComboBox1.items[ComboBox1.ItemIndex];
       ExecSQL;
     end

  • turbouser © (15.05.10 20:34) [25]
    еще бы try except finally, но это домашнее задание.
  • Плохиш © (15.05.10 20:36) [26]

    > turbouser ©   (15.05.10 20:33) [24]

    Подаёшь немощным?
  • Дмитрий (15.05.10 20:38) [27]
    Большое спасибо. Все заработало)))
  • Anatoly Podgoretsky © (15.05.10 21:09) [28]

    > Не могу понять что не так.

    Отсутствует вызов, на удаление.
 
Конференция "Начинающим" » Не получается удалить строку из таблицы [D7, Access]
Есть новые Нет новых   [134434   +28][b:0][p:0.001]