anatoliys |
Отправлено: 16.12.2003, 16:01 |
|
Не зарегистрирован
|
ЗАПИСЬ НЕ ФИКСИРУЕТСЯ В БД. Что делать не пойму никак, уже 3й день. Помогите.
Может у кого есть исходники для примера. reut@land.ru
В связке:
- IBDatabase1 (направленный на БД)
- IBTransaction1 (направленный на IBDatabase1)
- IBDataSet1 (направленный на IBDatabase1)
- DataSource1(направленный на IBDataSet1)
В компопнете IBDataSet1
- в параметре "Модифи" написано: update DOCUMENTS set EDOCNAME =:EDOCNAME, PATHDOC =:PATHDOC where EDOCNAME = "nname" and PATHDOC = "npat"
- в параметре Select: select * from DOCUMENTS
В программе на кнопке:
AnsiString nname = ExtractFileName(FMain->OpenDialog->FileName);
AnsiString npat = FMain->OpenDialog->FileName;
if (DataModule1->IBDataSet1->State == dsBrowse ) {
DataModule1->IBDataSet1->Edit();
DataModule1->IBDataSet1->FieldByName("PATHDOC")->AsString = npat;
if(DataModule1->IBDataSet1->FieldValues["EDOCNAME"] != nname)
DataModule1->IBDataSet1->FieldByName("EDOCNAME")->AsString = nname;
DataModule1->IBDataSet1->Post();
DataModule1->IBTransaction1->Commit();
|
|
Nick |
Отправлено: 16.12.2003, 16:48 |
|
Машинист паровоза
Группа: Участник
Сообщений: 247
|
if(FMain->OpenDialog->Execute()) {
// вот сдесь ты не понял
// если состояние не dsBrowse -просмотр
if (DataModule1->IBDataSet1->State == dsBrowse ) DataModule1->IBDataSet1->Edit(); // переводим в состояние Edit
DataModule1->IBDataSet1->FieldByName("PATHDOC")->AsString = FMain->OpenDialog->FileName;
if(DataModule1->IBDataSet1->FieldValues["EDOCNAME"] != ExtractFileName(FMain->OpenDialog->FileName))
DataModule1->IBDataSet1->FieldByName("EDOCNAME")->AsString = ExtractFileName(FMain->OpenDialog->FileName);
DataModule1->IBDataSet1->Post();
// убрать DataModule1->IBTransaction1->CommitRetaining();
} |
|
Guest |
Отправлено: 16.12.2003, 17:18 |
|
Не зарегистрирован
|
Так у меня и стоит так. Когда жмен на кнопку:
if (DataModule1->IBDataSet1->State == dsBrowse ) {
DataModule1->IBDataSet1->Edit();
DataModule1->IBDataSet1->FieldByName("PATHDOC")->AsString = npat;
if(DataModule1->IBDataSet1->FieldValues["EDOCNAME"] != nname)
DataModule1->IBDataSet1->FieldByName("EDOCNAME")->AsString = nname;
DataModule1->IBDataSet1->Post();
Если "IBDataSet1" в статусе просмотра, то перевести в режим редактирования, и полям присвоить значение из переменных, затем сохранить все. Или я не правильно мыслю????
Меня смущает:
В компопнете IBDataSet1
- в параметре "Модифи" написано: update DOCUMENTS set EDOCNAME =:EDOCNAME, PATHDOC =:PATHDOC where EDOCNAME = "nname" and PATHDOC = "npat"
Правильно ли это написано? ( Кавычки пробывал и (') так и так ("))
Или я не указал чтот в настройках компонента IBDataSet1 или IBTransaction1.
Транзакцию не завершу, мне кажется тут проблема у меня.
Открывается она автоматически насколько я понял, когда при открытии формы выполняется код "DataModule1->IBDataSet1->Active = true;" . Пробывал стартовать ее сам, ругается что уже открыта.
|
|
Nick |
Отправлено: 16.12.2003, 18:24 |
|
Машинист паровоза
Группа: Участник
Сообщений: 247
|
update DOCUMENTS set EDOCNAME =:EDOCNAME, PATHDOC =:PATHDOC where EDOCNAME = "nname" and PATHDOC = "npat"
Изменяется запись у которой конкретно
EDOCNAME = "nname" and PATHDOC = "npat"
если изменить на
EDOCNAME = :nname and PATHDOC = :npat
нужно будет присваивать параметрам запроса перед Post
у тебя что нет ключевого поля.
Пойду посмотрю на начало твоих мучений вроде ты приводил структуры таблиц и запросы.
Перед компиляцией лучше делать Connected = false у компонента IBDataBase.
При открытии приложения Connected = true // подключение базы
if ( ! Transaction->Active ) Transaction->StartTransaction();
|
|
Nick |
Отправлено: 16.12.2003, 18:36 |
|
Машинист паровоза
Группа: Участник
Сообщений: 247
|
Посмотрел
Если Update запрос
update DOCUMENTS set EDOCNAME =:EDOCNAME, PATHDOC =:PATHDOC where EDOCNAME = "'+nname+'" and PATHDOC = '"+npat+"'
ты заполнил при проектировании
то изменяются записи с
"+nname+" — EDOCNAME
"+npat+" — PATHDOC
записей таких естественно нет.
Советую сделать ключевое поле, хотябы из-за того что если мы совместными усилиями что нибудь добьемся при наличии нескольких записей с полями EDOCNAME и PATHDOC равными текущей записи Запрос изменит все эти записи.
Начнем.
Добавляем в таблицу Docs_Id Integer.
Создаем генератор Gen_Docs_ID
В DataSet указываем этот генератор.
Update Select =
update DOCUMENTS set EDOCNAME =:EDOCNAME, PATHDOC =:PATHDOC where Docs_ID = :Docs_ID
Не получится пришли проект Soltami@yandex.ru
|
|