Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
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 + "'"); ... (я апострофы пропустил ) Сравниваемая строка delArticle в результирующем запросе перед вызовом оказывался без апострофа вот система и говорила, что не хватает одного параметра.
Всем спасибо за советы )) . Всего хорошего. |
|
Вернуться к началу |
|
|
|