powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Подскажите как работать в С++Buildere и IBase. Мне нужно сделать следующее...
23 сообщений из 23, страница 1 из 1
Подскажите как работать в С++Buildere и IBase. Мне нужно сделать следующее...
    #32348276
Sales
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чтоб по правому клику мыши открывался диалог "выбора нового файла" и при выборе файла новый путь записывался в БД.
Делаю так:

При открытии формы выполняется код:
//-------------------
DataModule1->IBQuery1->Active = false;
DataModule1->IBQuery1->SQL->Clear();
DataModule1->IBQuery1->SQL->Add("select * from DOCUMENTS where PERVICH = '0'");
DataModule1->IBQuery1->Active = true;
//-------------------


клик "мышки" вешаю код:

//-------------------
if(FMain->OpenDialog->Execute()) {

AnsiString npat = FMain->OpenDialog->FileName;

DataModule1->IBQuery1->FieldByName("PATHDOC")->AsString = npat;

DataModule1->IBUpdateSQL1->ModifySQL->Add("update DOCUMENTS set EDOCNAME =:EDOCNAME, PATHDOC =:PATHDOC where"
"EDOCNAME = :OLD_EDOCNAME and PATHDOC = '"+npat+"'");


DataModule1->IBUpdateSQL1->RefreshSQL->Add(
"Select DATEREG,OWNER,PATHDOC,PRIM,PRIM2,PRIM3,ISKL_DATE,VOSTANNOVL,TYPEDOC,GROUPS,PATHFOLDER,NUM,PERVICH,EDOCNAME"
"from DOCUMENTS where DATEREG = :DATEREG and OWNER = :OWNER and PATHDOC = :PATHDOC and PRIM = :PRIM and PRIM2 = :PRIM2 and"
"PRIM3 = :PRIM3 and ISKL_DATE = :ISKL_DATE and VOSTANNOVL = :VOSTANNOVL and TYPEDOC = :TYPEDOC and GROUPS = :GROUPS and"
"PATHFOLDER = :PATHFOLDER and NUM = :NUM and PERVICH = :PERVICH and EDOCNAME = :EDOCNAME");

DataModule1->IBTransaction1->Commit();

}
//-------------------

НЕЧЕГО не меняется, но и ошибок нет.

Как мне исправить??

Может что в компонентах нужно "отметить".
...
Рейтинг: 0 / 0
Подскажите как работать в С++Buildere и IBase. Мне нужно сделать следующее...
    #32348305
Фотография Dnico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно просто обновить база, используя TIBSQL.


Best regards,
Dnico.
...
Рейтинг: 0 / 0
Подскажите как работать в С++Buildere и IBase. Мне нужно сделать следующее...
    #32348333
Иероглиф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может надо ExecSQL для запроса на UPDATE...
...
Рейтинг: 0 / 0
Подскажите как работать в С++Buildere и IBase. Мне нужно сделать следующее...
    #32348526
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я же тебе уже писал что нужно делать.... а ты опять...
объект IBUpdateSQL1 надо заполнить задолго до клика....
после execute следует вызвать метод DataModule1->IBUpdateSQL1->Edit()
а еще лучше, почитай книги.... ну не перепечтывать же тебе все подряд сюда?
...
Рейтинг: 0 / 0
Подскажите как работать в С++Buildere и IBase. Мне нужно сделать следующее...
    #32348646
1man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
после execute следует вызвать метод DataModule1->IBUpdateSQL1->Edit() 
Был бы очень благодарен, если бы Вы объяснили - зачем. Извиняюсь, что встрял. Где это обсуждалось - не нашел.
...
Рейтинг: 0 / 0
Подскажите как работать в С++Buildere и IBase. Мне нужно сделать следующее...
    #32348667
Sales
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
StarWind \r
\r
- Всёж не догоню я как :(, странно просто.\r
\r
- Отложу до прочтения книги, просто жаль время терять, книгу смогу купить не раньше конца месяца (зарплаты).\r
\r
\r
1man \r
>>...Где это обсуждалось - не нашел\r
\r
- Обсуждалось это тут:\r
/topic/62510
...
Рейтинг: 0 / 0
Подскажите как работать в С++Buildere и IBase. Мне нужно сделать следующее...
    #32348692
1man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй
DataModule1->IBQuery1->CacheUpdates=false;
DataModule1->IBQuery1->FieldByName("PATHDOC")->AsString = npat;
DataModule1->IBQuery1->ApplyUpdates();
DataModule1->IBTransaction1->CommitRetaining();
и ВСЕ! остальное - забей нафиг.
...
Рейтинг: 0 / 0
Подскажите как работать в С++Buildere и IBase. Мне нужно сделать следующее...
    #32348803
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
переводим датасет в режим редактирования
обсуждалось это на форуме C++
...
Рейтинг: 0 / 0
Подскажите как работать в С++Buildere и IBase. Мне нужно сделать следующее...
    #32348848
1man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StarWind
Мне кажется, что у IBUpdateSQL нет метода Edit. Или я савсем плахой стал?
Видимо ты имел ввиду не IBUpdateSQL, а IBQuery, ему соответствующий?
Мой вопрос: зачем переводить Query в режим редактирования ПОСЛЕ execute?
...
Рейтинг: 0 / 0
Подскажите как работать в С++Buildere и IBase. Мне нужно сделать следующее...
    #32348852
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тьфу, точно очепятался )))))))))))))
потому что execute показывает только диалог с выбором файла и если результат true то только тогда мы заносим данные в датасет
...
Рейтинг: 0 / 0
Подскажите как работать в С++Buildere и IBase. Мне нужно сделать следующее...
    #32348876
1man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну,... ты даешь...
От очепятки Бывалых у Чайников же крышу сорвать может Я уж думал ... все... хана... 8)
...
Рейтинг: 0 / 0
Подскажите как работать в С++Buildere и IBase. Мне нужно сделать следующее...
    #32349243
Sales
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1man

- Я попробывал пример как Вы написали, все отображается, но не сохраняется в БД при закрытии формы.

Попробывал вроде бы использовать и Edit c Post порядке не помогает, выдает на ошибки "cannot update. No update".

P.S.
А что у компонента "BUpdateSQL1" нет Edit-а, я знаю, я применял его у себя в компоненте Query.
...
Рейтинг: 0 / 0
Подскажите как работать в С++Buildere и IBase. Мне нужно сделать следующее...
    #32349309
1man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извини, уточняю:
DataModule1->IBQuery1->CacheUpdates=false;
должен быть ДО редактирования грида, например сразу при открытии проги, лучше прямо пропиши это св-во в Object Inspector-е.
...
Рейтинг: 0 / 0
Подскажите как работать в С++Buildere и IBase. Мне нужно сделать следующее...
    #32350140
Sales
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1man

- У меня в инспекторе объектов и стоит параметр "CashedUpdates=false"

пробывал как "истину" ставить и как "лож".

Мне кажется что нужно где то всеж переводить компонент Ouery в режим редактирования.

Сейчас у меня так:
- При перед открытием формы в компонент "Ouery" (который связан с "DBGrid1"), вставляется запрос:
DataModule1->IBQuery1->SQL->Add("select * from DOCUMENTS where PERVICH = '1'
и затем открывается форма с требуемым набором данных.

И увидев записи в форме мне теперь нужно определенную запись отредактировать.
Поидее я должен перевести "IBQuery1" в режим Редактирования.
и потом уже выполнять какие либо действия. и командой "Post" или "ExecSQL" сохранить это все. В IBase я понял что нужно еще закрывать транзакцию " DataModule1->IBTransaction1->Commit()" или " DataModule1->IBTransaction1->CommitRetaining".

В Вашем коде:
Попробуй
DataModule1->IBQuery1->CacheUpdates=false;
DataModule1->IBQuery1->FieldByName("PATHDOC")->AsString = npat;
DataModule1->IBQuery1->ApplyUpdates();
DataModule1->IBTransaction1->CommitRetaining();
и ВСЕ! остальное - забей нафиг.


Я не вижу где происходит команда на редактирование и сохранение.
Команда DataModule1->IBTransaction1->CommitRetaining -выпалняется так как транзакция ведь открыта на чтение данных.


Когда я пишу так:
AnsiString npat;

if(FMain->OpenDialog->Execute()) {

npat = FMain->OpenDialog->FileName;

DataModule1->IBQuery1->Edit();
DataModule1->IBQuery1->FieldByName("PATHDOC")->AsString = npat;
DataModule1->IBQuery1->CachedUpdates=true;
DataModule1->IBQuery1->ApplyUpdates();
DataModule1->IBTransaction1->CommitRetaining();


то выдается ошибка "Cannot update. (No upddate query)"

Может нельзя делать так как я, открывать данные селектом и потом переводить в редактирование компонент Query?

P.S.
Нда, использовать таблицу гораздо проще)
...
Рейтинг: 0 / 0
Подскажите как работать в С++Buildere и IBase. Мне нужно сделать следующее...
    #32350174
Фотография Dnico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sales
Все можно, но для обновления данных необходимо
наличие компонента IBUpdateSQL связанного с IBQuery
и прописать параметр ModifySQL. См. Справочную информацию по этой компоненте.

Best regards,
Dnico.
...
Рейтинг: 0 / 0
Подскажите как работать в С++Buildere и IBase. Мне нужно сделать следующее...
    #32350331
Sales
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dnico

- У меня есть компонент "IBUpdateSQL1" и он связан с "IBQuery1".

В копоненте "IBUpdateSQL1" - ненастроено нечего, все задаю программно:

НА ОТКРЫТИИ ФОРМЫ:
DataModule1->IBQuery1->Active = false;
DataModule1->IBQuery1->SQL->Clear();
DataModule1->IBQuery1->SQL->Add("select * from DOCUMENTS where PERVICH = '1'");
DataModule1->IBQuery1->Active = true;

НА КЛИКЕ мышки.
if(FMain->OpenDialog->Execute()) {
npat = FMain->OpenDialog->FileName;

DataModule1->IBQuery1->Edit();
// DataModule1->IBQuery1->FieldByName("PATHDOC")->AsString = npat;

DataModule1->IBUpdateSQL1->ModifySQL->Add("update DOCUMENTS set EDOCNAME =:EDOCNAME, PATHDOC =:PATHDOC where"
"EDOCNAME = :OLD_EDOCNAME and PATHDOC = '"+npat+"'");
DataModule1->IBQuery1->ApplyUpdates();
DataModule1->IBTransaction1->CommitRetaining();

DataModule1->IBUpdateSQL1->RefreshSQL->Add(
"Select ВСЕ ПОЛЯ ТАБЛИЦЫ "from DOCUMENTS where DATEREG = :DATEREG and OWNER = :OWNER ............");
} //не стал переносить все поля, много.


ПРИ таком коде ошибка те же.
...
Рейтинг: 0 / 0
Подскажите как работать в С++Buildere и IBase. Мне нужно сделать следующее...
    #32350378
1man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты что, до сих пор не прописал св-во ModifySQL
Тебе же ХОРОМ говорят ВСЕ - пропиши! Не динамически!
А я описывал только сам процесс сохранения. А уж то, что ты там делаешь при работе с гридом, тебе уже многократно писали. Мне тоже присоединится к голосу StarWind и Dnico? Тебя это убедит?
...
Рейтинг: 0 / 0
Подскажите как работать в С++Buildere и IBase. Мне нужно сделать следующее...
    #32350594
Sales
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1man

в компоненте "IBUpdateSQL1" стоит код "ModifySQL":

update DOCUMENTS
set
DATEREG = :DATEREG,
OWNER = :OWNER,
PATHDOC = :PATHDOC,
ОСТАЛЬНЫЕ ПОЛЯ
where
DATEREG = :OLD_DATEREG and
OWNER = :OLD_OWNER and
PATHDOC = :npat and
ОСТАЛЬНЫЕ ПОЛЯ..
...
Рейтинг: 0 / 0
Подскажите как работать в С++Buildere и IBase. Мне нужно сделать следующее...
    #32350619
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да выкинь ты этот IBQuery - это пережитки социализма! Возьми IBDataSet и сгенери там командв на изменение автоматически - там кнопочка есть, которая всё генерит!
...
Рейтинг: 0 / 0
Подскажите как работать в С++Buildere и IBase. Мне нужно сделать следующее...
    #32350828
1man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ды ему уже объясняли в другом его топике и про IBDataSet и про правый клик мышки на нем, вызывающий редактор. Упрямый он, однако.
...
Рейтинг: 0 / 0
Подскажите как работать в С++Buildere и IBase. Мне нужно сделать следующее...
    #32350915
Sales
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо ВСЕМ за терпение и ответы.


Вернулся к компоненту IBTable и все.

За пол дня уже много написал и форм и возможностей проги, а Query просто буду использовать на формировании отчетах. В принципе я так всегда и делал.

А с "IBDataSet" попробую пожже, просто интересно как.

Не думаю, что использование в программе IBTable портит программу.?
...
Рейтинг: 0 / 0
Подскажите как работать в С++Buildere и IBase. Мне нужно сделать следующее...
    #32352186
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А я думаю что портит... и очень сильно... компоненты TTable это вообще продукты врагов народа... А разработчиков, которые втыкают эти компоненты в проекты, я обычно убиваю, не спрашивая как зовут
...
Рейтинг: 0 / 0
Подскажите как работать в С++Buildere и IBase. Мне нужно сделать следующее...
    #32352987
Sales
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Когда выхожу из прграммы и захожу снова, то ввижу что запись не изменилась.

Проблема изменения видны только пока программа не закрыта.

Код пишу так:
В компоненте "IBDataSet1" установлены параметры
ModifiSQL: update DOCUMENTS set EDOCNAME =:EDOCNAME, PATHDOC =:PATHDOC where EDOCNAME = "'+nname+'" and PATHDOC = '"+npat+"'.
RefreshSQL
Select
PATHDOC,
EDOCNAME
и т.д.
from DOCUMENTS
where
PATHDOC = :PATHDOC and
PATHFOLDER = :PATHFOLDER and
и т.д.
В инспекторе установлено: IBDataSet1->CachedUpdates=false;

Код на кнопке:
if(FMain->OpenDialog->Execute()) {
npat = FMain->OpenDialog->FileName;
nname = ExtractFileName(FMain->OpenDialog->FileName);

DataModule1->IBDataSet1->Edit();
DataModule1->IBDataSet1->CachedUpdates=false;
DataModule1->IBDataSet1->FieldByName("PATHDOC")->AsString = npat;
if(DataModule1->IBDataSet1->FieldValues["EDOCNAME"] != nname)
{ DataModule1->IBDataSet1->FieldByName("EDOCNAME")->AsString = nname; }



DataModule1->IBDataSet1->UpdateRecord();
DataModule1->IBDataSet1->ApplyUpdates();

DataModule1->IBTransaction1->CommitRetaining();

}


Предположения:

- Не правильно открывается/закрывается транзакция.
- Не происходит сохранения после открытия DataModule1->IBDataSet1->Edit();

Может примерчик кто даст. на reut@land.ru (БД высылать не нужно)
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Подскажите как работать в С++Buildere и IBase. Мне нужно сделать следующее...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]