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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.09.2011, 14:40   #1
delphicoding
Заблокирован
 
Регистрация: 04.07.2011
Сообщений: 261
Вопрос Простые вопросы по Dataset

Здравствуйте!
Подскажите, пожалуйста, по нескольким простым вопросам по Dataset:
а) Каталог из него открывается Редактор. После правки или добавлении записи в редакторе (Edit/Insert) постится в БД всё правильно, но так и не обновляется список записей в Каталоге, если не делать Refresh. Если сделать Refresh - то вместо записи, которую правили/добавляли появляется дубликат первой записи Dataset. Баг скорее всего в настройках FIBDataset или TcxGrid - как исправить баг, какие именно настройки могут давать такой баг???
б) Как в процессе выполнения программы очистить Form,FIBDataset,FIBQuery до состояния "как был настроен при компиляции" без удаления и без пересоздания (например сбросить строки SQL)? nil? или nil только данные обнуляет, но не настройки/параметры?
в) Можно ли как-то одной командой назначить во всём Dataset определённой колонке одно значение для всех строк?
г) Можно ли в Dataset InsertSQL писать код insert с неким условием, например where A=1? То есть чтобы в БД были запостены только записи у которых параметр A=1. Или where со стороны Dataset ничего не значит и не будет понят?
д) Как заставить Dataset записи в котором появились по сложной схеме - одним действием (без перебора в цикле) запостить все свои записи в БД?
е) При уничтожении формы содержащей Dataset - Dataset обнуляется? уничтожается? чот происходит, если Dataset в этот момент работает данными/БД?
delphicoding вне форума Ответить с цитированием
Старый 11.09.2011, 14:45   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Можно ли как-то одной командой назначить во всём Dataset определённой колонке одно значение для всех строк?
Если запросом то
Код:
update таблица set колонка=значение
. Если не запросом то в цикле проходи.
Цитата:
писать код insert с неким условием, например where A=1?
Нет. вставке условия не нужны. Они там бессмысленны.
Цитата:
То есть чтобы в БД были запостены только записи у которых параметр A=1.
А вот это уже проверяется триггерами или в своем клиенте пропиши такое условие.
Цитата:
чот происходит
Ниче не происходит. Если не закоммитил транзакцию, данные в БД не попадут, так что при осфобождении делай COMMIT
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.09.2011, 14:57   #3
delphicoding
Заблокирован
 
Регистрация: 04.07.2011
Сообщений: 261
По умолчанию

в) не в БД, а именно в Dataset.
г) жалко, что where со стороны Dataset никак не понимается
е) вопрос не в том, куда данные, а в том - что с Dataset будет? Он будет уничтожен вместе с формой? Или останется как "невизуальный объект" где-то в памяти программы?
delphicoding вне форума Ответить с цитированием
Старый 11.09.2011, 16:46   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Он будет уничтожен вместе с формой?
Скорее всего да, если он ей принадлежит. Если ты его руками создавал по ходу работы то нужно смотреть как ты его создавал.
Цитата:
а именно в Dataset.
Тоесть? Dataset всего лишь посредник между тобой и провайдером.
Цитата:
жалко, что where со стороны Dataset никак не понимается
А ему это и не нужно. Where это оператор SQL, который никак не относится к клиенту. Даже провайдеру после ДатаСета не нужно знать про него ничего. Этим занимается сама СУБД.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.09.2011, 09:56   #5
delphicoding
Заблокирован
 
Регистрация: 04.07.2011
Сообщений: 261
По умолчанию

По поводу последнего предложения - так и не понял, если в Dataset в строке Insert добавить условие "where A=1" и сделать Post - будет ли это условие как-то обработано и учтено в каком-либо месте цепи передачи (Программа-Dataset-СУБД) ???

По остальным вопросам ответов никто не знает?
delphicoding вне форума Ответить с цитированием
Старый 12.09.2011, 10:09   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от delphicoding
если в Dataset в строке Insert добавить условие "where A=1" и сделать Post - будет ли это условие как-то обработано и учтено в каком-либо месте цепи передачи (Программа-Dataset-СУБД)
Ну Вам же Stilet однозначно написал:
Цитата:
Нет. вставке условия не нужны. Они там бессмысленны.
Т.е. при попытке выполнить подобный запрос (ExecSQL) Вы получите ошибку от движка БД о недопустимых (нераспознанных) символах в запросе!
Да и вообще, я считаю, что подобный запрос бессмысленен. Если это Вам нужно по логике, тогда либо, как предложил Stilet реализуйте это на серверной логике (триггера и хранимые процедуры), либо, банально выполняйте предварительно запрос на клиенте select count(*) from tttableee1 where A=1 и дальше, если счётчик не равен нулю - выполняйте Insert ... into ...

по остальных вопросам (особенно б) ) - извините, но Вы хотите странного, выходящего за пределы нормального применения компонентов, поэтому Вам никто и не отвечает...

Последний раз редактировалось Serge_Bliznykov; 12.09.2011 в 10:17.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.09.2011, 10:12   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

б) восстановить программно, присвоив нужные значения необходимым свойствам
в) нельзя
г) SQL команда INSERT не имеет опции WHERE
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 12.09.2011, 10:52   #8
delphicoding
Заблокирован
 
Регистрация: 04.07.2011
Сообщений: 261
По умолчанию

Жалко, что столько ограничений и недоделок ещё в компонентах, тк использование Where в Insert - это элементарная функция фильтрации и сильно упрощала бы задачу Post в БД только выбранных записей без лишних триггеров, циклов итд. Также очевидно удобная функция обнуления состояния компонент до состояния "при запуске" - также удобное решение было, но приходится пересоздавать, что в процессорном временем очевидно в разы тяжелее. Ну и конечно возможность назначить всем строкам одно значение для одной колонки - тоже очевидно удобно, опять такие за сколько там Delphi 15лет не появилось - тупо.

Хоть по А и Д может что-то подскажете?
delphicoding вне форума Ответить с цитированием
Старый 12.09.2011, 11:51   #9
delphicoding
Заблокирован
 
Регистрация: 04.07.2011
Сообщений: 261
По умолчанию

а) решил.

Остался вопрос д)...
delphicoding вне форума Ответить с цитированием
Старый 12.09.2011, 13:47   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

на вопрос Д) во пост #2 Stilet уже исчерпывающе ответил.


Цитата:
Where в Insert - это элементарная функция фильтрации и сильно упрощала бы задачу
глупость.

Цитата:
Ну и конечно возможность назначить всем строкам одно значение для одной колонки - тоже очевидно удобно, опять такие за сколько там Delphi 15лет не появилось - тупо.
афигеть.. Вы вообще адекватны?!

Хорошо, приведите пример, где это появилось (C / C++ / Java / C# / ????? )
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
RadioButton простые вопросы delphicoding Общие вопросы Delphi 6 22.07.2011 13:29
Строку из одного DataSet в другой DataSet Abbath1349 Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 0 22.05.2011 19:26
Из DataSet работающего по циклу в DataSet maroder22 БД в Delphi 1 05.09.2010 23:22
Простые вопросы по C++ ERASERROR Помощь студентам 3 24.03.2008 16:58
DataSet nimf БД в Delphi 3 28.01.2008 23:03