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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.04.2015, 13:00   #1
Grers
Новичок
Джуниор
 
Регистрация: 03.04.2015
Сообщений: 4
По умолчанию Удаление строки из Dataset

С Вашего позволения перепощу свой вопрос , заданный на другом ресурсе на этот форум.

Delphi 7.
Добрый день.
Если кого-то не затруднит.
Сам я не программист ни разу, но приходится иногда решать те или иные задачи в своей работе, вот и приходится корявыми пальцами что-то делать.
На форме есть dbgrid в котором отражены результаты SQL запроса.
Запрос через TApolloQuerry.
Результатом запроса является набор записей, содержащих три поля. Одно из полей memo.
Из набора записей нужно программно удалить те, memo поле ('FIELD_DATA') которых не содержит эталонной строки.
Алгоритм, собственно такой:
Dbgrid.Datasource.Dataset.First (установил курсор на первую запись)
создаю переменную m:Tmemo
считываю в m значение memo поля из Dataset: m.Lines.Text:= Form1.DBGrid2.DataSource.DataSet.Fi eldValues['FIELD_DATA']
проверяю содержимое по строкам.
Если эталонная строка в m есть, то Form1.DBGrid2.DataSource.DataSet.Ne xt;

Если эталонная строка в строках m отсутствует, то удаляю запись.
Form1.DBGrid2.DataSource.DataSet.De lete;

Все это в цикле.
По идее, если первая строка не содержит эталона и подлежит удалению, то она должна быть удалена и после удаления, курсор должен переместиться на следующую запись. Так в справке прочитал.
Но , во-первых, удаляется не первая запись (на которую я переместился в начале) а последняя (совершенно не понимаю почему);
во-вторых, он не перемещается на следующую запись.

Что в моем подходе не так?
Grers вне форума Ответить с цитированием
Старый 03.04.2015, 13:17   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Запрос через Query? Т.е. SQL?
Тогда
Код:
With ТотQuery Do begin
 Sql.Text:='Delete from Табличка where not МемоПоле like :p';
 ParamByName('p').AsString:='%эталонной строки%';
 ShowMessage('Удалено '+intToStr(ExecSql)+' Записонов. Ура! товагищщи!');
end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.04.2015, 13:30   #3
Grers
Новичок
Джуниор
 
Регистрация: 03.04.2015
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Запрос через Query? Т.е. SQL?
Тогда
Код:
With ТотQuery Do begin
 Sql.Text:='Delete from Табличка where not МемоПоле like :p';
 ParamByName('p').AsString:='%эталонной строки%';
 ShowMessage('Удалено '+intToStr(ExecSql)+' Записонов. Ура! товагищщи!');
end;
Спасибо.
Это удалит записи из исходной таблицы?
Grers вне форума Ответить с цитированием
Старый 03.04.2015, 13:50   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Да. Должен удалить.
может быть я конечно в условии малось ошибся. но сам смысл - использовать SQL для удаления.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.04.2015, 14:22   #5
Grers
Новичок
Джуниор
 
Регистрация: 03.04.2015
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Да. Должен удалить.
может быть я конечно в условии малось ошибся. но сам смысл - использовать SQL для удаления.
В исходной таблице ничего удалять нельзя.
SQL запрос к трем таблицам. Пробовал использовать like в селективном запросе, для того чтобы на этом этапе сразу отсечь ненужные записи. Не получилось. Теперь хочу эти ненужные записи просто удалить в полученном Dataset.
Grers вне форума Ответить с цитированием
Старый 03.04.2015, 14:31   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Пробовал использовать like в селективном запросе
Покажи.
Цитата:
хочу эти ненужные записи просто удалить в полученном Dataset.
Это неудачная идея, поскольку открытый датасет связан с самой базой. Удаляя из него ты фактически удаляешь из базы.
Да, если удаление не подтвердить то данные никуда не исчезнут, но в транзакции они то помечаются на удаление. И даже если нет то нет гарантий что удаление из датасета не отразится по велению провайдера на самой базе.
Например в ODBC иногда ставят auto commit после каждого действия с набором, что автоматически отражается в БД физически. Поэтому эта идея далеко не безопасная.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.04.2015, 15:05   #7
Grers
Новичок
Джуниор
 
Регистрация: 03.04.2015
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Покажи.
Ндааа.
Чудеса.
Вчерашний нерабочий запрос сегодня работает.

Спасибо.
Grers вне форума Ответить с цитированием
Старый 03.04.2015, 15:10   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

За что? )
Я ниче не сделал...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление строки Alexandr- Помощь студентам 5 15.11.2013 13:00
Строку из одного DataSet в другой DataSet Abbath1349 Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 0 22.05.2011 19:26
Добавление строки в существующий DataSet Kveldulv Общие вопросы .NET 2 20.01.2011 10:11
Из DataSet работающего по циклу в DataSet maroder22 БД в Delphi 1 05.09.2010 23:22
Удаление элементов строки s2 из строки s1 Ueshua Общие вопросы C/C++ 4 20.12.2009 13:06