Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как найти запись в базе и переименовать, если она удовлетворяет условию?

12K
24 апреля 2007 года
yura-007
45 / / 03.04.2007
Всем привет! Как мне найти запись в базе(парадокс(.db)) и переименовать её, если она удовлетворяет условию? У меня есть DBCheckBox1, DataField которого связано с логическим полем, и когда я создаю новую запись, по умолчанию он выключен, т.е. в базу автоматически записывается false.
Вопрос: как сделать чтоб при включении моего DBCheckBox1, тот который бал включен раньше, выключился, т.е. таблица может содержать только одну запись true, но в пределах ключевого поля, а все остальные false! Это мне нужно для выбора главной строки в таблице, а главной должна быть одна. Я хотел использовать RadioButton, но его
использование, на мой взгляд, в данной ситуации, не возможно. Использование именно этих компонентов и логического поля для меня не принципиально, мне главное сделать так чтоб в дочерней таблице я создавал записи, а в родительской отображалась выбранная главная запись из дочерней таблице, здесь даже не нужен цикл, т.к. запись true может быть только одна(не во всей табл., а в пределах ключевого поля). И всё это должно работать при добавлении или изменении записи(т.е. Table1.Append , Table1.Edit). Помогите пожалуйста! Заранее благодарен!
263
24 апреля 2007 года
koltaviy
816 / / 16.12.2004
1) Выучить язык SQL перед тем, как работать с базами данных
2) Прийти после этого к использованию TQuery
3) Использовать следующий запрос:
 
Код:
UPDATE table_name SET my_field = false WHERE my_field = true

4) Выполнять его перед изменениями в TDBCheckBox.
12K
25 апреля 2007 года
yura-007
45 / / 03.04.2007
Спасибо за ответ.
1) SQL я учил целый семестр, не скажу что успешно, но препод напрягал и в результате кое-что знаю. Мы с ним мучались в Oracle, потому, как в Делфи он работает, я мало что знаю.
2) С TQuery я не очень, но думаю с запросом написанным тобой я разберусь. Вообще я пользовался всегда Table.Lookup и у меня постоянно возникали косяки с автаматическим сохранением записи после поиска, приходилось в очередной раз изобретать колесо, я и тут хотел этим лукапом воспользоваться.
Кароче сейчас начну осваивать TQuery! Еще раз спасибо!
12K
25 апреля 2007 года
yura-007
45 / / 03.04.2007
Запрос работает, только ошибка вылетает что ей нужно, не пойму!
Ошибку прилагаю.
257
25 апреля 2007 года
kosfiz
1.6K / / 18.09.2005
а погуглить? ссылка. а вообще-то лучше использовать поиск по форуму и получить вот эту ссылку
12K
26 апреля 2007 года
yura-007
45 / / 03.04.2007
Спасибо большое, в форуме действительно был такой вопрос, такая же точно ошибка, я понял где собака зарыта, вот только пока не знаю что сделать, но щас буду книжку читать, мож чё и вычитаю!
12K
26 апреля 2007 года
yura-007
45 / / 03.04.2007
Написав вот так:
Query1.SQL.Text:='UPDATE C_H SET Glava=True WHERE Glava=False';
Query1.ExecSQL;
Всё заработало, но не долго, точнее до следующего запуска программы и при запуске стала выпрыгивать ошибка: типа Table1 не в режиме вставки или редактирования(первая ошибка.jpg, прикрепляю) и после нажатия ОК (на ошибке) открывалось окно проекта (project1, как и обычно в подобных случаях), и выделялась строка: Application.CreateForm(TForm9, Form9);
как я понял Table1, являющийся причиной ошибки, находиться на этой форме(ну это я так подумал)) и я начал всячески издеваться над ним, в конечном итоге удалил его совсем, но от ошибки это не спасло. Проблему удалось решить(но не на долго), когда я создав DataModule, переместил в него Query и DataSource, исправил немного код:
DataModule8.Query1.SQL.Text:='UPDATE C_H SET Glava=True WHERE Glava=False';
DataModule8.Query1.ExecSQL;
И всё якобы заработало, работало работало и опять ошибка, но на сей раз другая: что-то там ……..memory ……(вторая ошибка.jpg, тоже прикрепляю). Кстати похожие ошибки у меня часто бывают, но они исчезают после сохранения проекта и перезагрузки Делфи, но в этот раз это не сработало! Что сделать, чтоб ошибки не стало и может есть какой-нибудь хороший справочник по ошибкам, чтоб даже я разобрался? Заранее благодарствую!
8
26 апреля 2007 года
mfender
3.5K / / 15.06.2005
Странно всё как-то...

Перед изменением запроса, датасет нужно закрыть, очистить текст запроса, а потом написать новый, и только после этого открывать или исполнять запрос (Open или ExeqSQL).
12K
26 апреля 2007 года
yura-007
45 / / 03.04.2007
Цитата: mfender
Странно всё как-то...

Перед изменением запроса, датасет нужно закрыть, очистить текст запроса, а потом написать новый, и только после этого открывать или исполнять запрос (Open или ExeqSQL).



И в правду, перед этим:
Query1.SQL.Text:='UPDATE C_H SET Glava=True WHERE Glava=False';
Query1.ExecSQL;
Нужно было вставить это:
Query1.Close;
Query1.SQL.Clear;
И всё стало на свои места.
Огромное спасибо!

263
27 апреля 2007 года
koltaviy
816 / / 16.12.2004
Цитата: mfender
Странно всё как-то...

Перед изменением запроса, датасет нужно закрыть, очистить текст запроса, а потом написать новый, и только после этого открывать или исполнять запрос (Open или ExeqSQL).


Это необходимо только в том случае, если используется такая конструкция:

 
Код:
..
Query1.SQL.Add("UPDATE C_H ");
Query1.SQL.Add("SET Glava=True ");
Query1.SQL.Add("WHERE Glava=False");
..

При такой конструкции:
 
Код:
..
Query1.SQL.Text:="UPDATE C_H SET Glava=True WHERE Glava=False";
..

по моему понятно почему 'очистка' не обязательна. ;)
12K
27 апреля 2007 года
yura-007
45 / / 03.04.2007
br /> ..
Query1.SQL.Add("UPDATE C_H ");
Query1.SQL.Add("SET Glava=True ");
Query1.SQL.Add("WHERE Glava=False");
..
QUOTE]


Ну всёж когда я так написал, все заработало без проблем.
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Text:='UPDATE C_H SET Glava=True WHERE Glava=False';
Query1.ExecSQL;
Так что запрос очещать может и не обязательно, а вот датасет, полюбому нужно закрывать!;)
8
27 апреля 2007 года
mfender
3.5K / / 15.06.2005
Цитата: koltaviy
по моему понятно почему 'очистка' не обязательна. ;)


Ну, вобщем-то да. Но закрывать-то датасет нужно ;)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог