Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Не могу удалить запись из БД через TQuery в С++Builder!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
KAMBI
Гость





СообщениеДобавлено: Сб Фев 22 2003 17:43    Заголовок сообщения: Не могу удалить запись из БД через TQuery в С++Builder!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Ответить с цитатой

У меня така проблема:
Есть база данных MS Access 2000.
В приложении пытаюсь через компоненту TQuery удалить запись из БД ,на что
система мне отвечает такую фигню -"Table is read only".
В свойствах файла базы данных нет и намека на то, что он Read Only. Также и в параметрах источника данных созданного мною в ODBC Administrator параметр "Только для чтения" = (ReadOnly=0).
В BDE Administrator параметр OpenMode=READ/WRITE.
Так в чем может быть дело ?
(я работаю в C++Builder5.0).
Времени вобрез, помогите кто может(плиз)!!!!
Заранее благодарю.
Вернуться к началу
and3008



Зарегистрирован: 12.10.2001
Сообщения: 14893
Откуда: Н.Новгород

СообщениеДобавлено: Вс Фев 23 2003 19:33    Заголовок сообщения: Re: Не могу удалить запись из БД через TQuery в С++Builder!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Ответить с цитатой

Доки иногда почитывать надо.

Удалять записи через TQuery можно только в том случае, если запрос обновляемый. Бывает что запрос не может быть обновляемым (выборка идет из кучи таблиц и различных баз).

Удаляй запись либо через TTable, Либо динамически сгенери SQL-запрос и запусти через отдельный TQuery.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
KAMBI
Гость





СообщениеДобавлено: Вт Фев 25 2003 00:10    Заголовок сообщения: Re: Не могу удалить запись из БД через TQuery в С++Builder!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Ответить с цитатой

Запрос у меня был такой(в TQuery2):

SELECT *
FROM Materials
WHERE SYSTEMCODE=:SYSTEMCODE
AND TYPECODE = (
SELECT TYPECODE
FROM MaterialType
WHERE TYPENAME = :TypeNAME
)

здесь параметр :SYSTEMCODE берется из TQuery1
(т.е. TQuery2->DataSource=DataSource1)
а параметр :TypeNAME заполняю сам .
Вроде все записи в результате берутся из одной таблицы Materials...

На счет твоего совета -"...Удаляй запись либо через TTable, Либо динамически сгенери SQL-запрос и запусти через отдельный TQuery.
"
1) Я попробовал удалять через отдельный TQuery(DModule1->DeleterQuery) и сделал так:
//здесь я сохранил код удаляемого материала
AnsiString delArticle = DModule1->Query2->FieldByName("ARTICLE")->AsString;

DModu le1->DeleterQuery->Close(); DModule1->DeleterQuery->SQL->Clear();
DModule1->DeleterQuery->SQL->Add("DELETE FROM Materials WHERE ARTICLE=" + delArticle);
DModule1->DeleterQuery->ExecSQL();
DModule1->DeleterQuery->Close();

Появляется ошибка GeneralSQLError типа слишком мало параметров, требуется 1.
Чего у меня в запросе не хватает?


2) А через TTable получилось!

...
DModule1->DeleterTable->TableName=Materials;
...

if(DModule1->DeleterTable->Locate("ARTICLE",Variant(delArtic le), Opts))
DModule1->DeleterTable->Delete();
...
Но мне хотелось бы чтобы через TQuery!!!

Благодарю за уделенное тобой мне время.
Вернуться к началу
Konstantin



Зарегистрирован: 28.04.2003
Сообщения: 33
Откуда: Сызрань

СообщениеДобавлено: Ср Фев 26 2003 10:11    Заголовок сообщения: Re: Не могу удалить запись из БД через TQuery в С++Builder!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Ответить с цитатой

Poprobuj postavj property:
Query->RequestLife=true;
i udaljaj cherez
Query->Delete
posle
Query->Open
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
KAMBI
Гость





СообщениеДобавлено: Чт Фев 27 2003 18:48    Заголовок сообщения: Всё, у меня получилось!!!... Ответить с цитатой

Я её нашёл. Ошибку то есть.
Я писал вроде
...
Query->SQL->Add("DELETE FROM Materials");
Query->SQL->Add("WHERE ARTICLE=" + delArticle);
...

а надо было
...
Query->SQL->Add("DELETE FROM Materials");
Query->SQL->Add("WHERE ARTICLE= '" + delArticle + "'");
...
(я апострофы пропустил Smile )
Сравниваемая строка delArticle в результирующем запросе перед вызовом
оказывался без апострофа вот система и говорила, что не хватает одного параметра.

Всем спасибо за советы Smile)) .
Всего хорошего.
Вернуться к началу
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...