![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
обновление в таблице ? [D7]
Василь Быков © (2006-02-20 17:32:00)[code]ADOTable1.append; //переводим таблицу в режим добавления новой записи
ADOTable1.fieldbyname('fldФамилия').asString:=edit2.Text;//присваиваем значение полей
ADOTable1.post;//сохраняем изменения'
adotable1.Close ;
adotable1.Open ;[/code]
но когда я закрываю форму редактирования данных и нажимаю на кнопку "просмотр" то данные не меняются ! они изменяются только при последующем запуске программы !
как зделать так чтоб данные сразу же обновлялись ?
ЮЮ (2006-02-21 03:49:00) [1]Мотому что QuickRep1 выводит отчет по всему НаборуДанных, начиная с первой записи. Если бы ты положил QRDBText1, как положено, в Detail-секцию отчета, то увидел бы все записи таблицы. Если хочешь получить отчет по одной записи, то и Набор Данных должен содерать одну запись, т.е. либо фильтровать исходный Набор Данных, либо использовать другой, который бы содержал только одну -нужную -запись
Василь Быков (2006-02-20 23:58:00) [2]Спасибо тебе Добрый человек!!!!!!!!
кинь ссылочки!
неплохо бы по отчетам почитать ! а то немогу гикак разобраться!
Кладу на форму компонент QuickRep1(отчет)
на него кладу QRDBText1 связываю через Adotable с таблицей,
выбираю поле которое должно отображаться,но он показывает первую запись в таблице,
как ему указать чтоб он показывал выбранную запись в DBGride ?
Рустем (2006-02-20 21:53:00) [3]Извини, ошибся. Строку:
form3.ADOTable1.Requery;
следует добавить после Close в обработчике события нажатия кнопки Button1 формы Form2, т.е.:
procedure TForm2.Button1Click(Sender: TObject);
begin
with ADOTable1 do
begin
Append; //переводим таблицу в режим добавления новой записи
FieldByName('Фамилия').AsString := Edit1.Text ;//присваиваем значение полей
FieldByName('Имя').AsString := Edit2.Text ;
FieldByName('Отчество').AsString := Edit3.Text ;
Post;//сохраняем изменения
Requery;
end;
form3.ADOTable1.Requery;
Close;
end;
Рустем (2006-02-20 21:44:00) [4]Код проекта получил. Теперь давай разбирать твои ошибки.
Дабы открыть тайну, покрытую мраком, и закрыть ветку, отвечу прямо на форуме.
На второй и третьей формах у тебя компонент TADOTable, который ссылается на одну и туже таблицу. Этого делать, в твоем случае, абсолютно не требуется. Помести его на первую форму и больше никуда. Компонент TDataSource можешь поместить либо на первую форму, либо на форму, на которой расположен DBGrid. Вообще для этих целей желательно использовать DataModule и туда поместить оба компонента, дабы избавиться от перекрестных ссылок.
Т.е. у тебя получается так: во второй форме ты добавляешь данные в таблицу и переоткрываешь ее, закрываешь эту форму. После чего открываешь третью форму, на которой находится такой же компонент ADOTable с сылкой на ту же таблицу и пытаешься в DBGride увидеть добавленную запись, не переоткрыв ее.
Твой проект заработает, если ты в процедуру нажатия кнопки добавишь следующее (выделено жирным):
procedure TForm1.Button2Click(Sender: TObject);
begin
form3.ADOTable1.Requery;
form3.ShowModal ;
end;
Но это не есть хорошо (см. выше). И прав был Desdechado [14].
Кроме того, давай будем учиться писать тексты программ лаконично. Например твой код:
procedure TForm2.Button1Click(Sender: TObject);
begin
ADOTable1.append; //переводим таблицу в режим добавления новой записи
ADOTable1.fieldbyname('Фамилия').asString:= edit1.Text ;//присваиваем значение полей
ADOTable1.fieldbyname('Имя').asString:= edit2.Text ;
ADOTable1.fieldbyname('Отчество').asString:= edit3.Text ;
ADOTable1.post;//сохраняем изменения
AdoTable1.Close;
AdoTable1.Open;
close;
end;
лучше и, наверное, правильнее писать так:
procedure TForm2.Button1Click(Sender: TObject);
begin
with ADOTable1 do
begin
Append; //переводим таблицу в режим добавления новой записи
FieldByName('Фамилия').AsString := Edit1.Text ;//присваиваем значение полей
FieldByName('Имя').AsString := Edit2.Text ;
FieldByName('Отчество').AsString := Edit3.Text ;
Post;//сохраняем изменения
Requery;
end;
Close;
end;
И конечно же, рекомендую почитать литературу. Если интересует, могу скинуть ссылочки...
Василь Быков (2006-02-20 20:00:00) [5]Dbgrid у меня связан с DataSet который в свою очередь связан с AdoTable1
Рустем (2006-02-20 19:58:00) [6]
> по кнопке просмотр пишу AdoTable1.open
Зачем? Таблица у тебя уже открыта. Перепроверь связку, чтобы DBGrid был связан именно с ADOTable1...
> а дальше что?
В каком смысле?
Василь Быков (2006-02-20 19:44:00) [7]по кнопке просмотр пишу AdoTable1.open
а дальше что?
Desdechado (2006-02-20 19:13:00) [8]на форме просмотра, небось, другой Table стоит, который надо переоткрыть/перечитать
Рустем (2006-02-20 19:03:00) [9]Парадокс прямо какой-то!
Скинь на rusty@list.ru свой проект - посмотрю на него...
Василь Быков (2006-02-20 18:31:00) [10]
form3.Show;
form1.Hide ;
у меня на 3-й форме расположен DBGrid в котором я и просматриваю эту таблицу!
Рустем (2006-02-20 18:24:00) [11]А напиши код нажатия на кнопку "просмотр"...
Василь Быков (2006-02-20 18:10:00) [12]что я могу недоговаривать?
чтоб ивидеть изменения приходиться перезапускать программу вот и все!
Рустем (2006-02-20 18:05:00) [13]
> а на что влияет это свойство ?
F1 иногда помогает...
Судя по коду такого не должно происходить... Может ты чего-то не договариваешь?
Василь Быков (2006-02-20 17:59:00) [14]а на что влияет это свойство ?
Василь Быков (2006-02-20 17:58:00) [15]ltOptimistic
Василь Быков (2006-02-20 17:57:00) [16]имеенно такое !!!!!!!!!!
Рустем (2006-02-20 17:43:00) [17]
> Василь Быков
А какое свойство LockType у компонента ADOTable1? Не ltBatchOptimistic случайно?
Василь Быков (2006-02-20 17:39:00) [18]непомогает!
Ega23 (2006-02-20 17:35:00) [19]По-идее после Post.
Ega23 (2006-02-20 17:34:00) [20]applyUpdates поди забыл сделать...