Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.06.29;
Скачать: CL | DM;

Вниз

Обновление данных на форме   Найти похожие ветки 

 
chargos ©   (2008-05-30 15:25) [0]

Здравствуйте!
Подскажите, пожалуйста, в чем может быть проблема.
У меня есть 2 программы, которые работают с одной таблицей ADOTable одновременно.В первой программе по кнопке(в бесконечном цикле) проверяются нажатия клавиш и вносятся в таблицу в определенную строчку.
ADOTable.Edit;
......
ADOTable.Post;
ADOTable.Edit;
Во второй программе (тоже в бесконечном цикле) происходит чтение из этой же таблицы(с задержкой в секунду) и данные заносятся в соответствующие метки(TLabel), причем каждый раз таблица открывается и закрывается. Но данные на форме в метках не изменяются. Сначала подумал на Post(в первой программе). Добавил после него Close/ Open. Но это не помогло. Подскажите, в чем может быть дело?


 
Reindeer Moss Eater ©   (2008-05-30 15:33) [1]

У меня есть 2 программы, которые работают с одной таблицей ADOTable одновременно.

Врешь ты все


 
Плохиш ©   (2008-05-30 15:38) [2]


> и вносятся в таблицу в определенную строчку

и здесь врёшь, т.к. нет в ADOTable никаких строк...


 
Плохиш ©   (2008-05-30 15:40) [3]


> причем каждый раз таблица открывается и закрывается

Что ж он, ADOTable, дурной что ли постоянно миллиарды записей на клиента тягать?


 
Reindeer Moss Eater ©   (2008-05-30 15:41) [4]

> и вносятся в таблицу в определенную строчку

причем каждый раз таблица открывается и закрывается.

А кто ее позиционирует после открытия на "определенную строчку" ?


 
Stas ©   (2008-05-30 15:42) [5]

chargos ©   (30.05.08 15:25)  
Ого намудрил! а ты что делаешь?


 
Reindeer Moss Eater ©   (2008-05-30 15:42) [6]

программный продукт создает


 
Reindeer Moss Eater ©   (2008-05-30 15:45) [7]

замени свои дурацкие лэйблы на грид.
по крайней мере будет хоть что-то видно что там реально происходит.


 
Барсик   (2008-05-30 15:46) [8]


> программный продукт создает

манифест партии программистов?


 
stud ©   (2008-05-30 15:48) [9]

вроде все просто.
либо не туда вносятся, либо не оттуда читаются


 
Azize ©   (2008-05-30 15:51) [10]

А мне кажеться что вся проблемма в бесконечном цикле)))


 
chargos ©   (2008-05-30 15:57) [11]

Приношу свои извинения, если не так написал(например вместо "запись" - "строка").
To Плохиш :
>Что ж он, ADOTable, дурной что ли постоянно миллиарды записей на клиента тягать?
Миллиардов записей там нету. Их всего несколько.
To Reindeer Moss Eater :
> замени свои дурацкие лэйблы на грид.
по крайней мере будет хоть что-то видно что там реально происходит.

Грид мне не нужен.  Нужны именно лэйблы.
>А кто ее позиционирует после открытия на "определенную строчку" ?
Никто, т.к. данные из нее только Читаются.


 
Stas ©   (2008-05-30 15:57) [12]

Для чего это нужно? вобще Close/Open там ненадо.


 
chargos ©   (2008-05-30 15:58) [13]

И обновляются все лэйблы


 
Reindeer Moss Eater ©   (2008-05-30 15:59) [14]

Грид мне не нужен.  Нужны именно лэйблы.

Сначала тебе надо проблему локализовать, а уже потом именно лэйблы.


 
chargos ©   (2008-05-30 16:00) [15]

Если в первой программе делать через Грид, то все работает. Но мне нужно во второй и именно через лэйблы


 
Stas ©   (2008-05-30 16:01) [16]

chargos ©   (30.05.08 15:57) [11]  
1. у тебя после open таблица позиционируется на 1-ю запись
2. в бесконечном цикле нужно написать в конце Application.processmessages
или хотябы заменить на таймер
3.Так и непонял смысла этой программы.


 
Reindeer Moss Eater ©   (2008-05-30 16:01) [17]

Но мне нужно во второй и именно через лэйблы

Через лейблы у тебя уже сделано.
Поздравляю.


 
chargos ©   (2008-05-30 16:02) [18]

Stas ©
Application.processmessages есть.


 
chargos ©   (2008-05-30 16:03) [19]

Reindeer Moss Eater ©  
>Через лейблы у тебя уже сделано.Поздравляю
Спасибо :) Но при запуске данные показываются один раз и больше не обновляются, хотя есть и цикл, и Application.processmessages


 
stud ©   (2008-05-30 16:05) [20]


> Грид мне не нужен.  Нужны именно лэйблы.
> >А кто ее позиционирует после открытия на "определенную
> строчку" ?
> Никто, т.к. данные из нее только Читаются.

это сильно!! т.е. если данные читаются то позиционировать их не надо? особенно при таком отображении


 
MsGuns ©   (2008-05-30 16:05) [21]

Чтобы датасет обновился (а именно это и требуется в сабже, как я понял), нужно его переоткрыть (именно переоткрыть, а не отрефрешить видимую часть (если речь идет о DB-Aware контролах), т.к. он понятия не имеет какая именно запись изменена на сервере.
Другими словами, чтобы на форме 1 "увидеть" изменения, сделанные в форме 2, надо датасет формы 1 переоткрыть. Перед этим, естественно, нужно завершить транзакцию в форме 2. Как часто это делать (подтверждать изменения и переоткрывать "читающий" датасет, зависит о концепции построения интерфейса.


 
Reindeer Moss Eater ©   (2008-05-30 16:07) [22]

у него два процесса а не две формы.
а про транзакции ему никто еще не рассказал, чтобы он их умудрился не коммитить в первом прцессе
:)


 
Reindeer Moss Eater ©   (2008-05-30 16:10) [23]

> Никто, т.к. данные из нее только Читаются.

Ты пушкина попроси спозиционировать перед чтением. Он добрый.


 
chargos ©   (2008-05-30 16:36) [24]

Насчет Пушкина спасибо, конечно, только врядли пригодится :)
Я не очень силен в программировании, но может, кроме шуток, будет и дельный совет?
Насчет позиционирования: Для чего это нужно, если в каждом цикле база вначале открывается и данные в метках на форме должны обновляться с первой записи по последнюю?

MsGuns ©
Это 2 программы, использующие одну базу.
Можно поподробнее насчет транзакций? :)


 
Stas ©   (2008-05-30 16:37) [25]

вы подробнее опишите что делаете с приведением кода, а то мы тут гадаем что где меняется...


 
Reindeer Moss Eater ©   (2008-05-30 16:42) [26]

Я не очень силен в программировании, но может, кроме шуток, будет и дельный совет?

ПОЛОЖИ ГРИД НА ФОРМУ. На пять минут.


 
chargos ©   (2008-05-30 16:47) [27]

Первая программа при нажатии на кнопку постоянно фиксирует изменения нажатия клавиш и заносит данные в базу .mdb. Если поставить Грид на форме, то видно, что данные в записях меняются. Вторая использует эту же базу. В ней в цикле формируются лэйблы, в которые каждый раз вносятся данные из этой базы.С первой записи по последнюю. Согласен, не очень удачно, но тем не менее... Так вот, во второй программе в цикле идет открытие базы, изменение данных в метках, потом закрытие.  Application.ProcessMessages после каждого цикла есть, но данные на форме в метках не обновляются, а остаются такими же, как при запуске.


 
Stas ©   (2008-05-30 16:52) [28]

ОК, А во второй программе в начале цикла делаете Close/Open ?


 
Reindeer Moss Eater ©   (2008-05-30 16:52) [29]

молодец.
теперь положи второй грид на вторую форму в читающем приложении.


 
chargos ©   (2008-05-30 16:53) [30]

Stas ©  
Да


 
Stas ©   (2008-05-30 16:57) [31]

А если 2-е закрыть, и открыть данные будут последние?


 
chargos ©   (2008-05-30 17:02) [32]

Stas ©  
То есть?


 
Stas ©   (2008-05-30 17:04) [33]

ну 2-е приложение закрываешь. Потом опять открываешь его что оно отображает в лабелах? обновленные данные или старые?


 
chargos ©   (2008-05-30 17:04) [34]

Reindeer Moss Eater ©
>теперь положи второй грид на вторую форму в читающем приложении.
Положил - данные не обновляются.... Подумаю в этом направлении :)
Если есть желание, предлагаю перенести обсуждение на понедельник, а то пора уже с работы :)
Всем спасибо!


 
Stas ©   (2008-05-30 17:05) [35]

И я непойму ты для каждой записи создаешь лабел, а когда цикл прошел и ты его повторяешь ты удаляешь все созданные лабелы?


 
chargos ©   (2008-05-30 17:05) [36]

Stas ©
Если закрыть второе приложение и открыть, тогда данные обновляются


 
Stas ©   (2008-05-30 17:07) [37]

ок! покажи код второго, и иди домой :))


 
chargos ©   (2008-05-30 17:08) [38]

Stas ©  
Нет, создаются они один раз, а потом в цикле меняются только Caption, Font, Left, Top и т.п.


 
chargos ©   (2008-05-30 17:14) [39]

Если что будет по-чайниковски - звиняйте :)
procedure TStaticForm.FormShow(Sender: TObject);
var
lab,lab1,lab2:TLabel;

begin

Ctrlc:=1;

LabFIO:=TStringList.Create;
LabYES:=TStringList.Create;
LabNO:=TStringList.Create;
ADOTable2.Open;
j:=ADOTable2.RecordCount;
ADOTable2.Close;
for i:=1 to j+1 do
 begin
   lab:=TLabel.Create(StaticForm);
   Lab.Parent:=StaticForm;
   lab1:=TLabel.Create(StaticForm);
   Lab1.Parent:=StaticForm;
   lab2:=TLabel.Create(StaticForm);
   Lab2.Parent:=StaticForm;
   LabFIO.AddObject("Label#"+IntToStr(i),Lab);
   LabYES.AddObject("Label#"+IntToStr(i),Lab1);
   LabNO.AddObject("Label#"+IntToStr(i),Lab2);
 end;

While Ctrlc>0 do
 begin
 i:=0;
 ADOTable2.Open;
 ADOTable2.First;
 While not ADOTable2.Eof do
 begin
 i:=i+1;

   TLabel(LabFIO.Objects[i]).Caption:=ADOTable2Name.AsString;
   TLabel(LabFIO.Objects[i]).Font.Size:=20;
   TLabel(LabFIO.Objects[i]).Font.Style:=[fsBold];
   TLabel(LabFIO.Objects[i]).Visible:=true;
   TLabel(LabFIO.Objects[i]).Height:=30;
   TLabel(LabFIO.Objects[i]).Left:=24;
   TLabel(LabFIO.Objects[i]).Top:=70*i;
   TLabel(LabFIO.Objects[i]).Width:=150;
 //
   TLabel(LabYES.Objects[i]).Caption:=IntToStr(ADOTable2Yes.AsInteger);
   TLabel(LabYES.Objects[i]).Font.Size:=20;
   TLabel(LabYES.Objects[i]).Font.Style:=[fsBold];
   TLabel(LabYES.Objects[i]).Visible:=true;
   TLabel(LabYES.Objects[i]).Height:=30;
   TLabel(LabYES.Objects[i]).Left:=275;
   TLabel(LabYES.Objects[i]).Top:=70*i;
   TLabel(LabYES.Objects[i]).Width:=150;
 //

   TLabel(LabNO.Objects[i]).Caption:=IntToStr(ADOTable2No.AsInteger);
   TLabel(LabNO.Objects[i]).Font.Size:=20;
   TLabel(LabNO.Objects[i]).Font.Style:=[fsBold];
   TLabel(LabNO.Objects[i]).Visible:=true;
   TLabel(LabNO.Objects[i]).Height:=30;
   TLabel(LabNO.Objects[i]).Left:=504;
   TLabel(LabNO.Objects[i]).Top:=70*i;
   TLabel(LabNO.Objects[i]).Width:=150;

 Application.ProcessMessages;
   ADOTable2.Next;
 end;
Ctrlc:=0;
Application.ProcessMessages;
ADOTable2.Close;
 end;

end;

procedure TStaticForm.Timer1Timer(Sender: TObject);
begin
if Ctrlc=0 then
Ctrlc:=1;
end;


 
Stas ©   (2008-05-30 17:23) [40]

>Ctrlc:=0; убрать на время.



Страницы: 1 2 вся ветка

Текущий архив: 2008.06.29;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.021 c
3-1201096350
Gklbery
2008-01-23 16:52
2008.06.29
динамический use


2-1212317943
WebSQLNeederrr
2008-06-01 14:59
2008.06.29
Как обратиться к функции, которая находится в другом юните?


15-1210800305
Антенна
2008-05-15 01:25
2008.06.29
Коды


15-1211182046
User1
2008-05-19 11:27
2008.06.29
Mini Host


15-1208404328
brother
2008-04-17 07:52
2008.06.29
Совет по железу