C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Модификация данных, Глюк
** avtoritet
Отправлено: 20.09.2004, 03:45


Не зарегистрирован







Утро доброе! Помогите разобраться с глюком.
Имеется: Query, grid, updatesql, datasource ... .
Значит устанавливаю свойства:
Query->SQL->Add("select*from base order by Name");
updatesql ---- генерирую все что надо(Modify, Insert, Delete...)
Естественно все между собой соединил.

Запускаю:
Запрос отображается, все удаляется, меняется, вставляется.
Но как только нажимаю кнопку другого запроса, где код такой:
Query->Close();
Query->SQL->Clear(); //
Query->SQL-> Add(select*from base order by Kol"); //
Query->Open();
Query->Edit();//-свой взор глюк останавливает на этом
Запрос отображается, но при попытке что-нибудь добавить, отред., удалить — ругается(query: cannot modify a read-only dataset).

Конкретно при попытки добавить:
Query: dataset not in edit or insert mode;

Ну вот и вся делема! Зарание всем спасибо!


AVC
Отправлено: 20.09.2004, 08:44


Ветеран

Группа: Модератор
Сообщений: 1583



По вашему куску кода совершенно не понятно где вы допускаете ощибку.
Одно могу сказать точно — это не глюк а ваши проблемы. Вы можете
1. Зарегестрироваться и прицепить к сообщению полный код с этой ошибкой (минимально необходимый кусок для получения exe). Постараемся (я или кто то еще) вам помочь.
2. Посмотреть здесь (Редактирование View) как заставить редактировать абсолютно любой запрос при использовании BDE.
3. И, наконец, сесть и спокойно почитать литературу.
avtoritet
Отправлено: 20.09.2004, 14:04


Ученик-кочегар

Группа: Участник
Сообщений: 15



Как я не хотел этого делать! Регистрация .... — ненавижу подобного рода процедуры! Прикрепил? Больно много весит( с моим поганым интернетом это займет около часа)!
А если так вопрос поставить:

Query->SQL = "select*from base order by name"

Update->Modify = update datafilms
set
Name_film = :Name_film,
Zhanr = :Zhanr,
God_vipuska = :God_vipuska,
Nalichie = :Nalichie
where
Name_film = :OLD_Name_film and
Zhanr = :OLD_Zhanr and
God_vipuska = :OLD_God_vipuska and
Nalichie = :OLD_Nalichie

Update->Insert = insert into datafilms
(Name_film, Zhanr, God_vipuska, Nalichie)
values
(:Name_film, :Zhanr, :God_vipuska, :Nalichie)

Update ->Delete = delete from datafilms
where
Name_film = :OLD_Name_film and
Zhanr = :OLD_Zhanr and
God_vipuska = :OLD_God_vipuska and
Nalichie = :OLD_Nalichie

-- все работает без упреков!

Как только меняю Query->SQL = "select*from base order by kol"
ничего не редактируется, не удаляется. Тексты ошибок уже писал.
Вообщем, как мне кажется, у меня что-то с Update->... ?
avtoritet
Отправлено: 20.09.2004, 14:06


Ученик-кочегар

Группа: Участник
Сообщений: 15



На всякий случай — БД парадоксная.
xim
Отправлено: 20.09.2004, 14:27


Станционный диспетчер

Группа: Участник
Сообщений: 143



Хотелось бы увидеть структуру таблицы base
xim
Отправлено: 20.09.2004, 14:34


Станционный диспетчер

Группа: Участник
Сообщений: 143



А лучше всю структуру (втч с индексами)
AVC
Отправлено: 20.09.2004, 14:36


Ветеран

Группа: Модератор
Сообщений: 1583



Очевидной причины не вижу. Можете выслать мне для начала таблицу base мылом на avc12@mail.ru. Поэкспериментирую. Какими компонентами пользуетесь? BDE? Таблицу желательно ту, с которой у вас не хочет работать. (Можете взять часть своей, но только убедитесь, что у вас она не работает).
avtoritet
Отправлено: 20.09.2004, 14:43


Ученик-кочегар

Группа: Участник
Сообщений: 15



Индесков нет. Все поля типа стринг.
avtoritet
Отправлено: 20.09.2004, 14:45


Ученик-кочегар

Группа: Участник
Сообщений: 15



AVC — base on mail.
avtoritet
Отправлено: 20.09.2004, 15:16


Ученик-кочегар

Группа: Участник
Сообщений: 15



я ТАК понимаю изменение TQuery->SQL = ... не должно влиять на TUpdateSQL->Modifi, Insert, Delete?
Или я не прав?
avc*
Отправлено: 20.09.2004, 15:22


Не зарегистрирован







Да. Так как у вас выборка идет из тоже самой таблицы. Максимум моги быть затронуты индексы, но вы пишете, что у вас их нет.
PS. Почты еще нет.
avtoritet
Отправлено: 20.09.2004, 15:30


Ученик-кочегар

Группа: Участник
Сообщений: 15



avc: почта в пути.
avc*
Отправлено: 20.09.2004, 17:02


Не зарегистрирован







Только получил файлы. Извините, но сегодня уже не успею заняться. Подождите до завтра.
AVC
Отправлено: 21.09.2004, 10:45


Ветеран

Группа: Модератор
Сообщений: 1583



QUOTE

...
-- все работает без упреков!

Как только меняю Query->SQL = "select*from base order by kol"
ничего не редактируется, не удаляется. Тексты ошибок уже писал.
...


Посмотрел. Вам повезло. У меня редактирует "по умолчанию" только если вообще не ставлю ни какого Order by.
Поностью рабочий вариант решения вашей проблемы отправляю мылом. Будет что не ясно — спрашивайте.

PS. Я добавил в таблицу поле "ID" (автоинкремент, PK) что значительно упрощает жизнь.

PPS. Я вам сразу советовал посмотреть тему "как редактировать любой BDE запрос".

avtoritet
Отправлено: 21.09.2004, 13:28


Ученик-кочегар

Группа: Участник
Сообщений: 15



AVC: Спасибо! Еще толком не разбирался, но сразу видно то что мне надо.
А что без поля ИД не пашит?
Как понимать запрос по "умолчанию" без ордер бай? Дак у тебя же есть запросы с ордер бай.
Обсуждения ваши читал на том сайте, но, почему -то , не нашел там то, чено искал.
AVC
Отправлено: 21.09.2004, 13:53


Ветеран

Группа: Модератор
Сообщений: 1583



QUOTE
А что без поля ИД не пашит?

Пашет, но с ID намного удобнее — каждая запись имеет свой навсегда уникальный номер.

QUOTE
Как понимать запрос по "умолчанию" без ордер бай?

Текст запроса "Select * From datafilms", в Query включаем только RequestLive и все работает (edit/insert/delete).

QUOTE
Обсуждения ваши читал на том сайте, но, почему -то , не нашел там то, чено искал

То, что я послал — воплощение обсуждений (послений пост) для твоего частного случая. Предложенная метода позволяет работать с переименованными полями и с выборками из нескольких таблиц.
avtoritet
Отправлено: 21.09.2004, 14:40


Ученик-кочегар

Группа: Участник
Сообщений: 15



Мне всегда интересовала одна вещь: этот уникальный номер — какое у него максимальное значение. Записи удаляютя, а он штампуется без прерыно по порядку. К примеру, имея три записи(1,2,3), удаляем вторую(2), вставляем новую(номер будет 4). В таком случае наступит момент когда-нибудь, база начнет ругаться.

То что ты послал действительно вещь реальная. Сижу, разбираюсь ...

avc*
Отправлено: 21.09.2004, 14:57


Не зарегистрирован







Даже если это просто 32-х разрядное положительное целое при добавлении 1 записи в секунду запаса хватит на 2147483647(7FFF.FFFF) / (24*60*60) = 24855 суток = 68 лет.

Вернуться в Работа с базами данных в C++Builder