Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с 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   Вверх
Страницы: (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.0586 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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