![]() |
|
|
![]()
|
|
| Virus |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 3.8.2003 Репутация: нет Всего: нет |
Здравствуйте.
Как составить запрос на удаление (редактирование) текущей записи? И еще вопрос. Пытался использовать компонент DBNavigator для работы с TQuery, но, похоже, он годится только для навигации по таблице. Можно ли использовать его для редактирования данных? Что для этого нужно сделать (обработчики событий переписать или что - то иное)? Спасибо. |
|||
|
||||
| Kurt |
|
||||||
|
Увлеченный ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1662 Регистрация: 22.8.2003 Где: Краснодар Репутация: нет Всего: 36 |
А то! Конечно годится! Даже по кнопкам видно: nbInsert nbDelete nbEdit nbPost nbCancel nbRefresh Надо расписывать, что есть что? По поводу удаления/редактирования... Удаление строки из таблицы:
Редактирование:
Пожалуйста. -------------------- Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед) ... Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн) |
||||||
|
|||||||
| Virus |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 3.8.2003 Репутация: нет Всего: нет |
Это все я еще в хелпах видел.
Мне же нужно знать, как составить условие отбора для текущей (!) записи. Ну например. У меня есть BDGrid, Query, UpdateSQL, DataSet и DBNavigator. Связываю все эти компоненты как полагается. Теперь надо написать запросы для свойств InsertSQL, DeleteSQL, UpdateSQL. Вот как их написать, чтобы все работало? Пусть у меня простая таблица MyTable.dbf с одним текстовым полем MyField. Мне очень хочется, чтобы у меня была простая программа для просмотра и редактирования данной таблицы. В DBGrid встал на определенную запись, нажал на кнопку удалить, и эта запись удалилась, нажал на кнопку редактировать, и эту запись можно редактировать. Помоги написать хотя бы такую прогу, а дальше я сам постараюсь разобраться. |
|||
|
||||
| Kurt |
|
|||
|
Увлеченный ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1662 Регистрация: 22.8.2003 Где: Краснодар Репутация: нет Всего: 36 |
Прости за тугодумство (
Слушай, а зачем тебе вообще здесь SQL? (дурацкий, наверно, вопрос, но все же...) -------------------- Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед) ... Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн) |
|||
|
||||
| Virus |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 3.8.2003 Репутация: нет Всего: нет |
Хорошо, объясняю суть поставленной передо мной задачи.
Мне требуется создать приложение для работы с таблицей. Данная прога должна поддерживать различные варианты сортировки, поиска. Кроме того, должна быть предусмотрена возможность не только навигации по таблице, но и редактирования. Вот, собствено, и вся задача. Сортировка обычно делается с помощью SQL, поэтому надо использовать компонент TQuery, а не TTable. Эту часть задачи я сделал. Остается навигация и редактирование. Я решил использовать компонент TDBNavigator. И вот тут начинаются сложности. Если запустить программу, то у навигатора оказываются доступными только кнопки для перемещения по таблице, а редактировать не получается. Я так понял, что таблица у меня находится в состоянии ReadOnly. Так вот, как сделать так, чтобы с помощью навигатора можно было бы редактировать таблицу (т.е. как сделать доступными кнопки для редактирования)? |
|||
|
||||
| Medved |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 7209 Регистрация: 15.9.2002 Где: Kazakhstan, Astan a Репутация: 1 Всего: 154 |
вообще отказаться от навигатора для таких целей. ИМХО плохой стиль. Два варианта:
1. Все манипулирование данными осуществлять с помощью хранимых процедур. - ИМХО это предпочтительней и надежней. Если только: а) это клиент-серверная БД; б) если ХП предусмотрены в этой БД; 2. Все манипуляции (вставка, удаление, редактирование) с данными осуществлять с помощью того-же SQL. И соответственно логику программы строишь в соответствии с этим. -------------------- |
|||
|
||||
| Cashey |
|
|||
![]() Бессмертный ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3441 Регистрация: 13.11.2002 Где: в столице Репутация: нет Всего: 60 |
Сортировка обычно делается с помощью индексов и для этого лучше использовать компонент TTable, с его помощью также легко и удобно фильтровать записи. -------------------- библия учит любить ближнего, а камасутра обучает как именно |
|||
|
||||
| Medved |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 7209 Регистрация: 15.9.2002 Где: Kazakhstan, Astan a Репутация: 1 Всего: 154 |
Есть ситуации когда лучше использовать TQuery, а есть и такие ситуации когда лучше все таки TTable. Этот вопрос освящен в статье Вита про работу с БД.
Но TQuery в большинстве случаев предпочтительней, так как в случае его использования у Вас в руках вся мощность, гибкость и изящество SQL. -------------------- |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
Вот несколько примеров добавления, удаления и редактирования
DM - модуль данных qPhone - TQuery phonet - физическая таблица
|
|||
|
||||
| Piton |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 27.8.2003 Репутация: нет Всего: нет |
Есть очень простое решение:
Свойство RequestLife=true для TQuery, а дальше работаем с TQuery, как с TTable. Т.е. стандартные комманды: Table.Edit; Table.Insert; Table.Post; Удинственное условие: Запрос должен быть простым, а не составным (никаких JOIN). |
|||
|
||||
| Medved |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 7209 Регистрация: 15.9.2002 Где: Kazakhstan, Astan a Репутация: 1 Всего: 154 |
Не совсем правильно, вернее будет сказать, что выборка должна осуществляться только из одной таблицы. Потому что таблицы можно соединять как внешним соединением (Join), так и внутренним. -------------------- |
|||
|
||||
| Anastazi25252525 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 13.6.2009 Репутация: нет Всего: нет |
как можно удалить данные из таблицы,где поле состояние = заказано, если эта таблица связана с другой по трём полям.
|
|||
|
||||
| Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 35 Всего: 130 |
1. Это вопрос или утверждение? 2. Зачем дублировать топики? 3. Какая СУБД? 4. Что именно не получается? -------------------- There's nothing left but silent epitaphs. |
|||
|
||||
| Anastazi25252525 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 13.6.2009 Репутация: нет Всего: нет |
надо удалить из таблицы БИЛЕТ все записи, где состояние равно заказано. БИЛЕТ связан с таблицей ПОКАЗ по 3 полям (дата, название и № сеанса). создала sql, где выбираются все заказанные билеты. но мне надо чтобы удалились на определенную дату,название и .... знаю, что просто очень. но додуматься уже сил нет. Delphi7. вот мой код
Это сообщение отредактировал(а) Anastazi25252525 - 13.6.2009, 21:44 |
|||
|
||||
| Anastazi25252525 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 13.6.2009 Репутация: нет Всего: нет |
Вот так всё работает ))))))))) спасибо )))))) |
|||
|
||||
| Anastazi25252525 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 13.6.2009 Репутация: нет Всего: нет |
не работает...... удаляет или все билеты (проданные и заказанные), либо по частям... Может я циклы не правильно сделала?
|
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
||||
|
||||
| Anastazi25252525 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 13.6.2009 Репутация: нет Всего: нет |
простите, конечно, я только 3 года изучаю Delphi 7 в колледже. и не умею точно формулировать вопрос.....
Это сообщение отредактировал(а) Anastazi25252525 - 13.6.2009, 22:48 |
|||
|
||||
| Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 35 Всего: 130 |
Там что-то begin'ов очень много, аж глаза разбегаются.
? Добавлено через 3 минуты и 16 секунд Эмм.... -------------------- There's nothing left but silent epitaphs. |
|||
|
||||
| Anastazi25252525 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 13.6.2009 Репутация: нет Всего: нет |
эта строка считает количество записей в квери3. а этот квери3 выполняет выборку всех заказанных билетов из таблицы БИЛЕТ, связанной по трем полям с таблицей ПОКАЗ.
|
|||
|
||||
| Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 35 Всего: 130 |
Эта строка возвращает (только в никуда) текущую строку Query3, т.е. её номер. -------------------- There's nothing left but silent epitaphs. |
|||
|
||||
| Anastazi25252525 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 13.6.2009 Репутация: нет Всего: нет |
так у меня везде стоит... но дело - то не в ней.......Так?
Это сообщение отредактировал(а) Anastazi25252525 - 13.6.2009, 23:03 |
|||
|
||||
| Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 35 Всего: 130 |
Осталось выяснить, что именно. Быстро редактируешь посты. Это сообщение отредактировал(а) Данкинг - 13.6.2009, 23:05 -------------------- There's nothing left but silent epitaphs. |
|||
|
||||
| Anastazi25252525 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 13.6.2009 Репутация: нет Всего: нет |
даже не знаю... волшебник ты, или только учишься.... но без этого with всё работает!!!!!!!!!
СПАСИБО ОГРОМНОЕ!!!! а счас нет... вообще не удаляет ничего.... ((((((((( может просто сделать запрос на удаление по четырем параметрам?.... Это сообщение отредактировал(а) Anastazi25252525 - 13.6.2009, 23:53 |
|||
|
||||
| Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 35 Всего: 130 |
В каком смысле? Грохнуть нужное в каждой таблице? Можно попробовать. Но от with всё равно избавляйся. -------------------- There's nothing left but silent epitaphs. |
|||
|
||||
| Anastazi25252525 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 13.6.2009 Репутация: нет Всего: нет |
вроде этого... связаться по трем полям с другой и удалить из билета все заказанные билеты...... SQL может удалять так? |
|||
|
||||
| Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 35 Всего: 130 |
SQL? Ты хочешь сказать, Query? Может удалять, т.е. он так и должен удалять, ты же запрос на удаление пишешь. Только если есть ExecSQL, то Active уже не нужно. А вообще мы какую СУБД-то всё же разбираем?! -------------------- There's nothing left but silent epitaphs. |
|||
|
||||
| Anastazi25252525 |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 13.6.2009 Репутация: нет Всего: нет |
СУБД - Delphi 7. Запрос написала, не удаляет..... при нажатии на кнопку ругается на текст запроса. сначала такую же процедуру написала на самом квери, потом сделала его неактивным и пересылала процедуру по нажатию кнопки. потом сделала цикл на удаление, а в нем выбор всех этих полей. во всех случаях нету результата. либо на запрос ругается, либо ничего не делает. сейчас вот этот код(прописан только на кнопке). при выполнении он говорит, что Table(1) does not exist.
при нажатии на эту кнопку , удаляет заказанные места в том случае, если они были только что добавлены. при повторном открытии базы, кнопка не работает или просто удаляет все билеты , и проданные и заказанные.
|
||||
|
|||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
я думаю, что за три года можно было узнать различия между RecNo и RecordCount Добавлено через 2 минуты и 8 секунд Предлагаю прочесть книженцию хотя бы по начальным знаниям баз данных, а всё, что изучила за три года - ЗАБУДЬ, ЗАБУДЬ КАК СТРАШНЫЙ СОН |
|||
|
||||
| Данкинг |
|
||||||||||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 35 Всего: 130 |
Не знаю такой СУБД. При нажатии на эту кнопку вообще нечто страшное должно происходить, типа локальный армагедец.
Что конкретно удаляет этот код? Первую (текущую) строчку table1 ? Тогда зачем там "table1.Edit;"? Удаление произойдёт и без этого.
Зачем в коде какой-то select, если речь идёт об удалении? После .delete уже не нужно ставить .post. Значит, так оно и есть: транслятор не обманешь.
Эх, молодость, зря загубленная... -------------------- There's nothing left but silent epitaphs. |
||||||||||
|
|||||||||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
||||
|
||||
| Anastazi25252525 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 13.6.2009 Репутация: нет Всего: нет |
забыть вот вряд ли получится... да и изучать поздно. защита завтра уже. а тот "страшный код" выбирает нужные для удаления записи. необходимо соблюдение 4х условий. три из коротых должны совпадать с другой таблицей. сначала какой должен цикл идти? С запросом из Квери, или с таблицей1?
|
|||
|
||||
| Anastazi25252525 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 13.6.2009 Репутация: нет Всего: нет |
забыла написать, чем дело кончилось....
всё оказалось намного проще ))))
|
|||
|
||||
| morpheyushka |
|
|||
![]() Зеленый человек ![]() ![]() Профиль Группа: Участник Сообщений: 563 Регистрация: 26.2.2008 Где: Киев Репутация: нет Всего: 8 |
Может все таки это "йа блондинко", но до меня так и не доходит...почему нельзя все это сделать одним запросом к базе через Query...зачем таблицы гонять туда-сюда? А если в таблице записей под миллион...это же повеситься можно
|
|||
|
||||
| Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 35 Всего: 130 |
Я вообще забыл, чем оно начиналось. Значит, ты не блондинко. Anastazi25252525, есть такой SQL-запрос (в общем виде):
-------------------- There's nothing left but silent epitaphs. |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
||||
|
||||
| Anastazi25252525 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 13.6.2009 Репутация: нет Всего: нет |
тут вообще такая сложная штука....
на форме в запущенном виде все данные отображаются в уже отсортированном(по трем параметрам) виде. и при нажатии на кнопку с этой процедурой удаляются только те записи, которые = Заказано. еще раз выполнять сортировку данных из 3х таблиц по трем параметрам не нужно.... как-то так... Добавлено через 4 минуты и 11 секунд а запросом смысла нет удалять. т.к. пользователь сам решает, удалить ему эти заказанные билеты или нет... вообще-то планировалось сделать это удаление с привязкой ко времени... то есть если до n-го времени осталось 15 минут, то программа автоматически удаляет эти самые места.... но решили не заморачиваться и сделать простой кнопкой, а на форме выставить часы, чтоб пользователь сам , глядя на время, удалял.... ))) |
|||
|
||||
| Akella |
|
||||||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
идеальный вариант запросом
Добавлено через 1 минуту и 15 секунд
в любом случае удалять нужно с конца таблицы, так меньше проблем Это сообщение отредактировал(а) Akella - 30.10.2009, 14:08 |
||||||
|
|||||||
| Anastazi25252525 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 13.6.2009 Репутация: нет Всего: нет |
то есть сделать запрос и на него кнопку?....
|
|||
|
||||
![]()
|
| Правила форума "Delphi: Базы данных и репортинг" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |