Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с TQuery, Запрос на удаление (ред.) текущей записи 
:(
    Опции темы
Virus
Дата 22.8.2003, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 3.8.2003

Репутация: нет
Всего: нет



Здравствуйте.
Как составить запрос на удаление (редактирование) текущей записи?
И еще вопрос.
Пытался использовать компонент DBNavigator для работы с TQuery, но,
похоже, он годится только для навигации по таблице. Можно ли использовать его для редактирования данных? Что для этого нужно сделать (обработчики событий переписать или что - то иное)?
Спасибо.
PM MAIL   Вверх
Kurt
Дата 23.8.2003, 01:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


Профиль
Группа: Участник Клуба
Сообщений: 1662
Регистрация: 22.8.2003
Где: Краснодар

Репутация: нет
Всего: 36



Цитата(Virus @ 22.8.2003, 23:54)

Пытался использовать компонент DBNavigator для работы с TQuery, но,
похоже, он годится только для навигации по таблице. Можно ли использовать его для редактирования данных?

А то! Конечно годится!
Даже по кнопкам видно:
nbInsert
nbDelete
nbEdit
nbPost
nbCancel
nbRefresh

Надо расписывать, что есть что?

По поводу удаления/редактирования...

Удаление строки из таблицы:
Код

DELETE FROM Имя_Таблицы
[WHERE Условие_отбора]


Редактирование:
Код

UPDATE Имя_таблицы
SET Имя_поля = Выражение,
 .........
 Имя_поля = выражение
[WHERE Условие_отбора]


Пожалуйста. biggrin.gif


--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
Virus
Дата 23.8.2003, 01:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 3.8.2003

Репутация: нет
Всего: нет



Это все я еще в хелпах видел.
Мне же нужно знать, как составить условие отбора для текущей (!) записи.
Ну например.
У меня есть BDGrid, Query, UpdateSQL, DataSet и DBNavigator.
Связываю все эти компоненты как полагается.
Теперь надо написать запросы для свойств InsertSQL, DeleteSQL, UpdateSQL.
Вот как их написать, чтобы все работало?
Пусть у меня простая таблица MyTable.dbf с одним текстовым полем MyField.
Мне очень хочется, чтобы у меня была простая программа для просмотра и редактирования данной таблицы.
В DBGrid встал на определенную запись, нажал на кнопку удалить, и эта запись удалилась, нажал на кнопку редактировать, и эту запись можно редактировать.

Помоги написать хотя бы такую прогу, а дальше я сам постараюсь разобраться.

PM MAIL   Вверх
Kurt
Дата 23.8.2003, 02:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


Профиль
Группа: Участник Клуба
Сообщений: 1662
Регистрация: 22.8.2003
Где: Краснодар

Репутация: нет
Всего: 36



Прости за тугодумство ( withstupid.gif ), но я не понимаю проблемы! Т.е. смысл чего ты хочешь понятен, а вот в чем сложность вопроса - нет...
Слушай, а зачем тебе вообще здесь SQL? (дурацкий, наверно, вопрос, но все же...)


--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
Virus
Дата 23.8.2003, 08:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 3.8.2003

Репутация: нет
Всего: нет



Хорошо, объясняю суть поставленной передо мной задачи.
Мне требуется создать приложение для работы с таблицей.
Данная прога должна поддерживать различные варианты сортировки, поиска. Кроме того, должна быть предусмотрена возможность не только навигации по таблице, но и редактирования.
Вот, собствено, и вся задача.

Сортировка обычно делается с помощью SQL, поэтому надо использовать компонент TQuery, а не TTable. Эту часть задачи я сделал.
Остается навигация и редактирование.
Я решил использовать компонент TDBNavigator. И вот тут начинаются сложности.
Если запустить программу, то у навигатора оказываются доступными только кнопки для перемещения по таблице, а редактировать не получается. Я так понял, что таблица у меня находится в состоянии ReadOnly.
Так вот, как сделать так, чтобы с помощью навигатора можно было бы редактировать таблицу (т.е. как сделать доступными кнопки для редактирования)?
PM MAIL   Вверх
Medved
Дата 24.8.2003, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: 1
Всего: 154



вообще отказаться от навигатора для таких целей. ИМХО плохой стиль. Два варианта:

1. Все манипулирование данными осуществлять с помощью хранимых процедур. - ИМХО это предпочтительней и надежней. Если только:
а) это клиент-серверная БД;
б) если ХП предусмотрены в этой БД;

2. Все манипуляции (вставка, удаление, редактирование) с данными осуществлять с помощью того-же SQL. И соответственно логику программы строишь в соответствии с этим.


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
Cashey
Дата 24.8.2003, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бессмертный
****


Профиль
Группа: Завсегдатай
Сообщений: 3441
Регистрация: 13.11.2002
Где: в столице

Репутация: нет
Всего: 60



Цитата
Сортировка обычно делается с помощью SQL, поэтому надо использовать компонент TQuery, а не TTable.

Сортировка обычно делается с помощью индексов и для этого лучше использовать компонент TTable, с его помощью также легко и удобно фильтровать записи.



--------------------
библия учит любить ближнего, а камасутра обучает как именно
PM Jabber   Вверх
Medved
Дата 24.8.2003, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: 1
Всего: 154



Есть ситуации когда лучше использовать TQuery, а есть и такие ситуации когда лучше все таки TTable. Этот вопрос освящен в статье Вита про работу с БД.

Но TQuery в большинстве случаев предпочтительней, так как в случае его использования у Вас в руках вся мощность, гибкость и изящество SQL.


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
Akella
Дата 26.8.2003, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Вот несколько примеров добавления, удаления и редактирования
DM - модуль данных
qPhone - TQuery
phonet - физическая таблица
Код
procedure TfmMain.tbAddClick(Sender: TObject);
begin
with DM, qPhone do begin
 Close;
 RequestLive:=True;
 SQL.Clear;
 SQL.Add('SELECT * FROM phonet');
 Open;
 Append;
 fmEdit:=TfmEdit.Create(self);
 if fmEdit.Showmodal=mrOK then begin
   Post;
 end else
 begin
   Cancel;
 end;//else
 fmEdit.Free;
 Close;
 RequestLive:=False;
 SQL.Clear;
 SQL.Add('SELECT * FROM phonet ORDER BY famil');
 Open;
end;//with
end;

procedure TfmMain.tbEditClick(Sender: TObject);
Var
 vRecEd: Integer;
begin
with DM, qPhone do begin
 vRecEd:=qPhone['ID'];
 qPhone.Close;
 qPhone.SQL.Clear;
 qPhone.SQL.Add('SELECT * FROM phonet');
 RequestLive:=True;
 qPhone.Open;
 qPhone.Locate('ID',vRecEd,[]);
 Edit;
 fmEdit:=TfmEdit.Create(self);
 if fmEdit.Showmodal=mrOK then begin
   fmWait.Show;
   application.ProcessMessages;
   Post;
 end else
 begin
   Cancel;
 end;//else
 fmEdit.Free;
 qPhone.Close;
 RequestLive:=False;
 qPhone.SQL.Clear;
 qPhone.SQL.Add('SELECT * FROM phonet ORDER BY famil');
 qPhone.Open;
 Locate('ID',vRecEd,[]);
end;//with
if fmWait.Showing then
fmWait.Hide;
end;

procedure TfmMain.tbDelClick(Sender: TObject);
begin
with dm, qPhone do begin
 if (Application.MessageBox('Данные восстановить будет не возможно! Вы уверены?', 'Удаление',
       MB_OKCANCEL)=IDOK) and not (qPhone.IsEmpty) then
 begin
  vRecDel:=qPhone['ID'];
  Close;
  SQL.Clear;
  SQL.Add('SELECT * FROM phonet');
  RequestLive:=True;
  Open;
  Locate('ID',vRecDel,[]);
  Delete;
  Close;
  RequestLive:=False;
  SQL.Clear;
  SQL.Add('SELECT * FROM phonet ORDER BY famil');
  Open;
 end//if
end;//with
end;

PM MAIL   Вверх
Piton
Дата 27.8.2003, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 27.8.2003

Репутация: нет
Всего: нет



Есть очень простое решение:
Свойство RequestLife=true для TQuery, а дальше работаем с TQuery, как с TTable. Т.е. стандартные комманды:
Table.Edit;
Table.Insert;
Table.Post;

Удинственное условие: Запрос должен быть простым, а не составным (никаких JOIN).
PM MAIL   Вверх
Medved
Дата 28.8.2003, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: 1
Всего: 154



Цитата(Piton @ 27.8.2003, 17:02)
Удинственное условие: Запрос должен быть простым, а не составным (никаких JOIN).

Не совсем правильно, вернее будет сказать, что выборка должна осуществляться только из одной таблицы.


Потому что таблицы можно соединять как внешним соединением (Join), так и внутренним.


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
Anastazi25252525
Дата 13.6.2009, 21:05 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 13.6.2009

Репутация: нет
Всего: нет



как можно удалить данные из таблицы,где поле состояние = заказано, если эта таблица связана с другой по трём полям.
PM MAIL   Вверх
Данкинг
Дата 13.6.2009, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Цитата(Anastazi25252525 @ 13.6.2009,  22:05)
как можно удалить данные из таблицы,где поле состояние = заказано, если эта таблица связана с другой по трём полям.

1. Это вопрос или утверждение?
2. Зачем дублировать топики?
3. Какая СУБД?
4. Что именно не получается?


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Anastazi25252525
Дата 13.6.2009, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 13.6.2009

Репутация: нет
Всего: нет



надо удалить из таблицы БИЛЕТ все записи, где состояние равно заказано. БИЛЕТ связан с таблицей ПОКАЗ по 3 полям (дата, название и № сеанса). создала sql, где выбираются все заказанные билеты. но мне надо чтобы удалились на определенную дату,название и ....   знаю, что просто очень. но додуматься уже сил нет. Delphi7.  вот мой код 
Код

procedure Tprodada3.Button11Click(Sender: TObject);
var r,m,n:integer;
begin

ty:=prodada3.Query3.RecordCount;
prodada3.table1.First;

  prodada3.Query3.First; 
      while not prodada3.Query3.Eof do 
        begin
     with prodada3.Table1 do BEGIN
    for n:=1 to ty  DO     BEGIN
      begin

      if (prodada3.Table1.Locate('Sostoyanie', VarArrayOf([prodada3.DBEdit9.Text]), [])) then
     begin
       edit;
    
  FieldByName('Sostoyanie').AsString:=prodada3.Query3Sostoyanie.AsString;
     end;

 prodada3.Table1.Delete;
 prodada3.Table1.Refresh;
 prodada3.Query3.RecNo;
 prodada3.Table8.Delete;
 prodada3.Table8.Refresh;
        end; prodada3.Query3.Next;
  end;
       END;
       END;


end;



Это сообщение отредактировал(а) Anastazi25252525 - 13.6.2009, 21:44
PM MAIL   Вверх
Anastazi25252525
Дата 13.6.2009, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 13.6.2009

Репутация: нет
Всего: нет



Код

procedure Tprodada3.Button11Click(Sender: TObject);
var r,m,n:integer;
begin

ty:=prodada3.Query3.RecordCount;
prodada3.table1.First;

  prodada3.Query3.First; 
      while not prodada3.Query3.Eof do 
        begin
     with prodada3.Table1 do BEGIN
    for n:=1 to ty  DO     BEGIN
      begin

    if (prodada3.Table1Sostoyanie.Text='Заказано') then     begin
       edit;
    
  FieldByName('Sostoyanie').AsString:=prodada3.Query3Sostoyanie.AsString;
     end;

 prodada3.Table1.Delete;
 prodada3.Table1.Refresh;
 prodada3.Query3.RecNo;
 prodada3.Table8.Delete;
 prodada3.Table8.Refresh;
        end; prodada3.Query3.Next;
  end;
       END;
       END;


end;


Вот так всё работает ))))))))) спасибо ))))))
PM MAIL   Вверх
Anastazi25252525
Дата 13.6.2009, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 13.6.2009

Репутация: нет
Всего: нет



не работает...... удаляет или все билеты (проданные и заказанные), либо по частям... Может я циклы не правильно сделала?
PM MAIL   Вверх
Akella
Дата 13.6.2009, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(Anastazi25252525 @  13.6.2009,  21:05 Найти цитируемый пост)
как можно удалить данные из таблицы,где поле состояние = заказано, если эта таблица связана с другой по трём полям. 

А что сия метаморфоза значит? (с)
PM MAIL   Вверх
Anastazi25252525
Дата 13.6.2009, 22:45 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 13.6.2009

Репутация: нет
Всего: нет



простите, конечно, я только 3 года изучаю Delphi 7 в колледже. и не умею точно формулировать вопрос.....

Это сообщение отредактировал(а) Anastazi25252525 - 13.6.2009, 22:48
PM MAIL   Вверх
Данкинг
Дата 13.6.2009, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Там что-то begin'ов очень много, аж глаза разбегаются. smile И ещё: что значит эта строчка:
Код

prodada3.Query3.RecNo;

?

Добавлено через 3 минуты и 16 секунд
Цитата(Anastazi25252525 @  13.6.2009,  23:45 Найти цитируемый пост)
простите, конечно, я только 3 года изучаю Delphi 7

Эмм.... smile Всего три года...  smile Ну да, вот ещё лет 30 пройдёт, и будешь тогда уже профессиональным дельфи-кодером. smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Anastazi25252525
Дата 13.6.2009, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 13.6.2009

Репутация: нет
Всего: нет



эта строка считает количество записей в квери3. а этот квери3 выполняет выборку всех заказанных билетов из таблицы БИЛЕТ, связанной по трем полям с таблицей ПОКАЗ.
PM MAIL   Вверх
Данкинг
Дата 13.6.2009, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Цитата(Anastazi25252525 @  13.6.2009,  23:52 Найти цитируемый пост)
эта строка считает количество записей в квери3

Эта строка возвращает (только в никуда) текущую строку Query3, т.е. её номер.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Anastazi25252525
Дата 13.6.2009, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 13.6.2009

Репутация: нет
Всего: нет



так у меня везде  стоит... но дело - то не в ней.......Так?

Это сообщение отредактировал(а) Anastazi25252525 - 13.6.2009, 23:03
PM MAIL   Вверх
Данкинг
Дата 13.6.2009, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Цитата(Anastazi25252525 @ 14.6.2009,  00:01)
так у меня везде  стоит... но дело - то не в ней.......Так?

Осталось выяснить, что именно. smile  smile Точнее, что именно она делает - я написал в предыдущем посте, а выяснить осталось, для чего сия строка нужна в твоём коде. smile

Быстро редактируешь посты. smile Да, дело не в ней. Попробуй для начала структурировать код и убрать with... : мне кажется, они тут только мешают.

Это сообщение отредактировал(а) Данкинг - 13.6.2009, 23:05


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Anastazi25252525
Дата 13.6.2009, 23:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 13.6.2009

Репутация: нет
Всего: нет



даже не знаю... волшебник ты, или только учишься.... но без этого  with  всё работает!!!!!!!!!
СПАСИБО ОГРОМНОЕ!!!!


а счас нет... вообще не удаляет ничего.... (((((((((


может просто сделать запрос на удаление по четырем параметрам?....

Это сообщение отредактировал(а) Anastazi25252525 - 13.6.2009, 23:53
PM MAIL   Вверх
Данкинг
Дата 14.6.2009, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Цитата(Anastazi25252525 @  14.6.2009,  00:46 Найти цитируемый пост)
может просто сделать запрос на удаление по четырем параметрам?....

В каком смысле? Грохнуть нужное в каждой таблице? Можно попробовать. Но от with всё равно избавляйся.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Anastazi25252525
Дата 14.6.2009, 00:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 13.6.2009

Репутация: нет
Всего: нет



Код

qUERY3.aCTIVE:=False;
qUERY3.SQL.Clear;
qUERY3.SQL.Add('delete bilet_n, Nazv_filma, N_seansa, Data, rad, mesto, Cena, Sostoyanie');
qUERY3.SQL.Add('FROM "bil.DB" bil');
qUERY3.SQL.Add('Where Nazv_filma = '''+DBLookupComboBox1.Text+''' and N_seansa= '''+DBLookupComboBox2.Text+'''');
qUERY3.SQL.Add('and rad = '''+Edit1.Text+''' and mesto = '''+Edit2.Text+''' and Data = '''+DBEdit3.Text+'''');
qUERY3.SQL.Add('and Sostoyanie = '''+DBEdit9.Text+'''');
qUERY3.ExecSQL;
qUERY3.aCTIVE:=True;


вроде этого... связаться по трем полям с другой и удалить из билета все заказанные билеты...... 
SQL может удалять так?
PM MAIL   Вверх
Данкинг
Дата 14.6.2009, 01:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Цитата(Anastazi25252525 @  14.6.2009,  01:24 Найти цитируемый пост)
SQL может удалять так? 

SQL? Ты хочешь сказать, Query? Может удалять, т.е. он так и должен удалять, ты же запрос на удаление пишешь. Только если есть ExecSQL, то Active уже не нужно. smile 
 А вообще мы какую СУБД-то всё же разбираем?!


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Anastazi25252525
Дата 14.6.2009, 03:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 13.6.2009

Репутация: нет
Всего: нет



СУБД - Delphi 7.   Запрос написала, не удаляет..... при нажатии на кнопку ругается на текст запроса. сначала такую же процедуру написала на самом квери, потом сделала его неактивным и пересылала процедуру по нажатию кнопки. потом сделала цикл на удаление, а в нем выбор всех этих полей. во всех случаях нету результата. либо на запрос ругается, либо ничего не делает.  сейчас вот этот код(прописан только на кнопке). при выполнении он говорит, что Table(1) does not exist. 


Код

procedure Tprodada3.Button12Click(Sender: TObject);
begin


table1.Open;
table1.First;
table1.Edit;
 while not prodada3.Table1.Eof do
with table1 do    // Cae?anei oeacaiiua ianoa aieoaui
  delete;
    begin

qUERY4.aCTIVE:=False;
qUERY4.SQL.Clear;
qUERY4.SQL.Add('select Bilet_N, Nazv_filma, N_seansa, Data, Rad, Mesto, Cena, Sostoyanie');
qUERY4.SQL.Add('FROM "bil.DB" bil');
qUERY4.SQL.Add('Where Nazv_filma = '''+DBLookupComboBox1.Text+''' and N_seansa= '''+DBLookupComboBox2.Text+'''');
qUERY4.SQL.Add('and Data = '''+DBEdit3.Text+'''');
qUERY4.SQL.Add('and Sostoyanie ='''+Edit12.Text+'''');
qUERY4.ExecSQL;
qUERY4.aCTIVE:=True;
end;
table1.Post;
end;



при нажатии на эту кнопку , удаляет заказанные места в том случае, если они были только что добавлены. при повторном открытии базы, кнопка не работает или просто удаляет все билеты , и проданные и заказанные.

Код

procedure Tprodada3.Button11Click(Sender: TObject);
var r,m,n:integer;
begin
Query3.Close;
Query3.Open;
ty:=prodada3.Query3.RecordCount;
prodada3.table1.First;

  prodada3.Query3.First;  // Âûõîäèì íà ïåðâóþ çàïèñü â òàáëèöå ïðîäàííûõ áèëåòîâ
      while not prodada3.Query3.Eof do  // ïåðåáèðàåì çàïèñè â òàáëèöå îò íà÷àëà äî êîíöà
        begin
     {with prodada3.Table1 do BEGIN  }
    for n:=1 to ty  DO     BEGIN
      begin

      if (prodada3.Table1Sostoyanie.Text='Çàêàçàíî') then
     begin
       prodada3.Table1.edit;
  prodada3.Table1.FieldByName('Sostoyanie').AsString:=prodada3.Query3Sostoyanie.AsString;
 prodada3.Table1.Delete;
 prodada3.Table1.Refresh;
 prodada3.Query3.RecNo;
    // ïåðåõîäèì íà ñëåäóþùóþ çàïèñü â òàáëèöå
        end; prodada3.Query3.Next;
  end;
       END;
       END;
       END;

PM MAIL   Вверх
Akella
Дата 14.6.2009, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(Anastazi25252525 @  13.6.2009,  22:52 Найти цитируемый пост)
эта строка считает количество записей в квери3. 


Цитата(Данкинг @  13.6.2009,  22:46 Найти цитируемый пост)
prodada3.Query3.RecNo;


я думаю, что за три года можно было узнать различия между RecNo и RecordCount smile

Добавлено через 2 минуты и 8 секунд
Цитата(Anastazi25252525 @  14.6.2009,  03:16 Найти цитируемый пост)
       prodada3.Table1.edit;
  prodada3.Table1.FieldByName('Sostoyanie').AsString:=prodada3.Query3Sostoyanie.AsString;
 prodada3.Table1.Delete;
 prodada3.Table1.Refresh;
 prodada3.Query3.RecNo;

 smile  smile это что за страшная последовательность?
Предлагаю прочесть книженцию хотя бы по начальным знаниям баз данных, а всё, что изучила за три года - ЗАБУДЬ, ЗАБУДЬ КАК СТРАШНЫЙ СОН  smile 
PM MAIL   Вверх
Данкинг
Дата 14.6.2009, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Цитата(Anastazi25252525 @  14.6.2009,  04:16 Найти цитируемый пост)
СУБД - Delphi 7

Не знаю такой СУБД. smile Видимо, "йа блондинко". (с) smile

Цитата(Anastazi25252525 @  14.6.2009,  04:16 Найти цитируемый пост)
при нажатии на эту кнопку , удаляет заказанные места 

При нажатии на эту кнопку вообще нечто страшное должно происходить, типа локальный армагедец. smile 

Цитата(Anastazi25252525 @  14.6.2009,  04:16 Найти цитируемый пост)
Код

with table1 do    // Cae?anei oeacaiiua ianoa aieoaui
  delete;

Что конкретно удаляет этот код? Первую (текущую) строчку table1 ? Тогда зачем там "table1.Edit;"? Удаление произойдёт и без этого.

Цитата(Anastazi25252525 @  14.6.2009,  04:16 Найти цитируемый пост)
Код

qUERY4.SQL.Add('select Bilet_N, Nazv_filma, N_seansa, Data, Rad, Mesto, Cena, Sostoyanie');

Зачем в коде какой-то select, если речь идёт об удалении?

Цитата(Anastazi25252525 @  14.6.2009,  04:16 Найти цитируемый пост)
Код

table1.Post;

После .delete уже не нужно ставить .post.

Цитата(Anastazi25252525 @  14.6.2009,  04:16 Найти цитируемый пост)
able(1) does not exist. 

Значит, так оно и есть: транслятор не обманешь. smile 


Цитата(Anastazi25252525 @  14.6.2009,  04:16 Найти цитируемый пост)
Код

for n:=1 to ty  DO     BEGIN
      begin

 smile Предлагаю такой код:
Код

for n:=1 to ty  DO 
 begin
  begin
   begin
    begin
     begin
      begin
       prodada3.Query3.Next;
      end;
     end;
    end;
   end;
  end;
 end;

 smile  smile 

Цитата(Akella @  14.6.2009,  10:55 Найти цитируемый пост)
а всё, что изучила за три года - ЗАБУДЬ, ЗАБУДЬ КАК СТРАШНЫЙ СОН 

Эх, молодость, зря загубленная... smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Akella
Дата 14.6.2009, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(Данкинг @  14.6.2009,  11:30 Найти цитируемый пост)
Цитата(Anastazi25252525 @  14.6.2009,  04:16 Найти цитируемый пост)
СУБД - Delphi 7

Не знаю такой СУБД. smile Видимо, "йа блондинко". (с) smile

 smile 
PM MAIL   Вверх
Anastazi25252525
Дата 14.6.2009, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 13.6.2009

Репутация: нет
Всего: нет



забыть вот вряд ли получится... да и изучать поздно. защита завтра уже. а тот "страшный код" выбирает нужные для удаления записи. необходимо соблюдение 4х условий. три из коротых должны совпадать с другой таблицей. сначала какой должен цикл идти? С запросом из Квери, или с таблицей1?
PM MAIL   Вверх
Anastazi25252525
Дата 27.10.2009, 14:54 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 13.6.2009

Репутация: нет
Всего: нет



забыла написать, чем дело кончилось....
всё оказалось намного проще ))))

Код

Table1.First;
for i:=1 to Table1.RecordCount do
begin
if Table1Sostoyanie.Value='Заказано' then
Table1.Delete;
Table1.Next;

PM MAIL   Вверх
morpheyushka
Дата 27.10.2009, 16:30 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зеленый человек
**


Профиль
Группа: Участник
Сообщений: 563
Регистрация: 26.2.2008
Где: Киев

Репутация: нет
Всего: 8



Может все таки это "йа блондинко", но до меня так и не доходит...почему нельзя все это сделать одним запросом к базе через Query...зачем таблицы гонять туда-сюда? А если в таблице записей под миллион...это же повеситься можно smile 


--------------------
user posted image
Спасибо делается вот так!!!
PM MAIL WWW   Вверх
Данкинг
Дата 27.10.2009, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Цитата(Anastazi25252525 @  27.10.2009,  14:54 Найти цитируемый пост)
забыла написать, чем дело кончилось....

Я вообще забыл, чем оно начиналось. smile 

Цитата(morpheyushka @  27.10.2009,  16:30 Найти цитируемый пост)
Может все таки это "йа блондинко", но до меня так и не доходит...почему нельзя все это сделать одним запросом к базе через Query...зачем таблицы гонять туда-сюда?

Значит, ты не блондинко. smile Я вот тоже не понимаю. smile 

Anastazi25252525,  есть такой SQL-запрос (в общем виде):
Код

delete from table where Sostoyanie='Заказано'

 smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Akella
Дата 27.10.2009, 20:12 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(Anastazi25252525 @  27.10.2009,  14:54 Найти цитируемый пост)
Table1.First;
for i:=1 to Table1.RecordCount do
begin
if Table1Sostoyanie.Value='Заказано' then
Table1.Delete;
Table1.Next;


1. Удалять нужно с конца таблицы.
2. А лучше удалять SQL запросом
PM MAIL   Вверх
Anastazi25252525
Дата 29.10.2009, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 13.6.2009

Репутация: нет
Всего: нет



тут вообще такая сложная штука.... smile 
на форме в запущенном виде все данные отображаются в уже отсортированном(по трем параметрам) виде.
и при нажатии на кнопку с этой процедурой удаляются только те записи, которые = Заказано.  еще раз выполнять сортировку данных из 3х таблиц  по трем параметрам не нужно.... как-то так...

Добавлено через 4 минуты и 11 секунд
а запросом смысла нет удалять. т.к. пользователь сам решает, удалить ему эти заказанные билеты или нет...
вообще-то планировалось сделать это удаление с привязкой ко времени... то есть если до n-го времени осталось 15 минут, то программа автоматически удаляет эти самые места.... но решили не заморачиваться и сделать простой кнопкой, а на форме выставить часы, чтоб пользователь сам , глядя на время, удалял.... )))
PM MAIL   Вверх
Akella
Дата 30.10.2009, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(Anastazi25252525 @  29.10.2009,  20:28 Найти цитируемый пост)
при нажатии на кнопку с этой процедурой удаляются только те записи, которые = Заказано. 

идеальный вариант запросом
Код

delete from tabke1 where status = 'Заказано'


Добавлено через 1 минуту и 15 секунд
Цитата(Anastazi25252525 @  29.10.2009,  20:28 Найти цитируемый пост)
 еще раз выполнять сортировку данных из 3х таблиц  по трем параметрам не нужно.... как-то так...

в любом случае удалять нужно с конца таблицы, так меньше проблем

Это сообщение отредактировал(а) Akella - 30.10.2009, 14:08
PM MAIL   Вверх
Anastazi25252525
Дата 31.10.2009, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 13.6.2009

Репутация: нет
Всего: нет



то есть сделать запрос и на него кнопку?....
PM MAIL   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0931 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.