Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.06.29;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.55 MB
Время: 0.043 c
2-1212256392
Wildyt
2008-05-31 21:53
2008.06.29
Дан файл, состоящий из чисел


2-1212221404
Pi:=3.14...
2008-05-31 12:10
2008.06.29
Пример ключа в реестр


2-1212128719
snake-as
2008-05-30 10:25
2008.06.29
Работа с TreeView


15-1210658822
БарЛог
2008-05-13 10:07
2008.06.29
Домен зарегистрирован, не делегирован


2-1212308588
leonidus
2008-06-01 12:23
2008.06.29
Как определить что мое окно наверху?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский