Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.06.2011, 17:04   #1
Student-Koder
Пользователь
 
Регистрация: 24.11.2010
Сообщений: 14
По умолчанию операция не допускается если объект открыт

скажите что не так в коде:
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
If Application.MessageBox('Вы действительно хотите очистить таблицу?','Внимание!',MB_OKCANCEL)=id_OK
  then
    begin

    ADOQuery1.SQL.Clear;
    ADOQuery1.SQL.TEXT:=('DROP table data;');
    ADOQuery1.ExecSQL;

    ADOQuery1.SQL.Clear;
    ADOQuery1.SQL.add('CREATE table data(id int auto_increment primary key, dlina real not null default 0, diametr real not null default 0, moment real not null default 0, massa real not null default 0);');
    ADOQuery1.ExecSQL;

    end;
 //ADOConnection1.ConnectionString:='Provider=MSDASQL.1;Password="";Persist Security Info=True;Data Source=.\db\db;Extended Properties="DSN=db;PWD=;";Initial Catalog=db';
ADOConnection1.ConnectionString:='FILE NAME=.\db\db.udl';
ADOConnection1.Connected:=True;
ADOConnection1.Open;
ADOTable1.Active:=true;
end;
Student-Koder вне форума Ответить с цитированием
Старый 22.06.2011, 17:27   #2
Gulik
Холост/Не замужем
Форумчанин
 
Аватар для Gulik
 
Регистрация: 13.11.2007
Сообщений: 283
По умолчанию

Подскажите и нам на что жалуется Делфи
Или что-то вас лично не устраивает

А вообще если ты хочешь просто очистить таблицу от записей тебе вовсе не нужно её уничтожать, а затем создавать заново...

Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
if Application.MessageBox('Вы действительно хотите очистить таблицу?','Внимание!',MB_OKCANCEL)=id_OK  then  begin
    // ADOQuery1.SQL.Clear; < - Это тут тоже лишнее т.к. ADOQuery1.SQL.TEXT заменяет весь текст запроса на 'TRUNCATE TABLE data'
    ADOQuery1.Close ;
    ADOQuery1.SQL.TEXT := ('TRUNCATE TABLE data') ;
    ADOQuery1.ExecSQL ;
    end;
end;

Последний раз редактировалось Gulik; 22.06.2011 в 17:39.
Gulik вне форума Ответить с цитированием
Старый 22.06.2011, 17:30   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
на что жалуется Делфи
Видимо на это:
Цитата:
ADOQuery1.ExecSQL;
Посему перед нужно выполнить
Код:
ADOQuery1.Close;
Цитата:
ADOConnection1.ConnectionString:='F ILE NAME=.\db\db.udl';
ADOConnection1.Connected:=True;
ADOConnection1.Open;
Это так переоткрывается база? Зачем переконнекчиваться?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.06.2011, 17:38   #4
Student-Koder
Пользователь
 
Регистрация: 24.11.2010
Сообщений: 14
По умолчанию

делфи то молчит, а вот прога выдаёт ошибку "операция не допускается если объект открыт", но дело своё делает.

Цитата:
Посему перед нужно выполнить
Код:
ADOQuery1.Close;
перед каким именно ADOQuery1.ExecSQL по счету?

Цитата:
Это так переоткрывается база? Зачем переконнекчиваться?
ну, если вы скажете что связь с бд не потеряется, я поверю
Student-Koder вне форума Ответить с цитированием
Старый 22.06.2011, 17:42   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
перед каким именно ADOQuery1.ExecSQL по счету?
Да в самом начале
Цитата:
если вы скажете что связь с бд не потеряется
А чего ей теряться? Ты то не связь разрываешь а всего лишь набор данные другой запрашиваешь.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.06.2011, 17:44   #6
Gulik
Холост/Не замужем
Форумчанин
 
Аватар для Gulik
 
Регистрация: 13.11.2007
Сообщений: 283
По умолчанию

Цитата:
Сообщение от Student-Koder Посмотреть сообщение
ну, если вы скажете что связь с бд не потеряется, я поверю
У тебя не связь теряется, а запрос... SELECT
В конечном счете сделай так...

Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
   if Application.MessageBox('Вы действительно хотите очистить таблицу?','Внимание!',MB_OKCANCEL)=id_OK  then  begin
      ADOQuery1.Close ;
      ADOQuery1.SQL.TEXT := ('TRUNCATE TABLE data') ;
      ADOQuery1.ExecSQL ;
      ADOQuery1.Close ;
      ADOQuery1.SQL.TEXT := ('SELECT * FROM data') ;
      ADOQuery1.Open ;
   end;
end;
И подключись к базе не через ADOTable1, а через ADOQuery1 (в свойстве SQL впиши эту строку "SELECT * FROM data"), для этого в DataSource.DataSet укажи ADOQuery1 и у тебя точно будет все работать

Последний раз редактировалось Gulik; 22.06.2011 в 17:58.
Gulik вне форума Ответить с цитированием
Старый 22.06.2011, 18:28   #7
Student-Koder
Пользователь
 
Регистрация: 24.11.2010
Сообщений: 14
По умолчанию

Да, значения с БД удаляет, только таблица не обновляется. Нужен Refresh? если да, то в какую часть кода
Student-Koder вне форума Ответить с цитированием
Старый 22.06.2011, 19:14   #8
Student-Koder
Пользователь
 
Регистрация: 24.11.2010
Сообщений: 14
По умолчанию

разобралась. Refresh не пригодился. ВСЕМ СПАСИБО
Student-Koder вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Допускается до 7 уровней вложения функций IF, а если нужно больше? kapitel_bc@ukr.net Microsoft Office Excel 10 10.02.2013 12:37
Шаблоны - нужно создать объект класса abc в котором вместо aa использовался бы объект класса fff? Farrel Общие вопросы C/C++ 2 13.11.2010 17:37
Как передвигать объект если он не под формой.VB somebody94 Помощь студентам 1 29.06.2010 10:07
Если в классе объявить объект другого класса,будет ли видно переменные первого класса из объекта второго? TwiX Общие вопросы Delphi 3 15.11.2009 00:54
Запрет запуска программы на VBA в случае если Excel уже открыт kovalevskivf Microsoft Office Excel 4 01.09.2009 11:22