Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Не присваиваеться значение Элементу массива объектов Tedit [D6, XP]


iles ©   (2006-02-22 12:35:00) 

Всем доброго дня.
Задача:
На форме объект PageControl, в нем два листа в каждом из которых динамически прорисовываються объекты Tedit в виде сетки, 24 строки по 8 столбцов:

type
   TEdits =  array[1..8,1..24] of TEdit;

var
 Form1: TForm1;
 EditsArray_1: TEdits;
 EditsArray_2: TEdits;

function TForm1.GetColumnWidth(Column: Integer): Integer;
begin
    case Column of
      1:  Result := 33;
      2:  Result := 225;
      3:  Result := 89;
      4:  Result := 89;
      5:  Result := 89;
      6:  Result := 161;
      7:  result := 49;
      8: Result := 65;
     else
          Result := 0;
     end;
end;

procedure TForm1.GenerateEdits(arr: TEdits; AOwner: TComponent; Parent: TWinControl);
var
 Column, Row, TopPad, LeftPad: Integer;
begin
 TopPad:= 5;
 LeftPad:= 70;
 for Column := 1 to 8 do
 begin
   for Row:= 1 to 24 do
   begin
     arr[Column,Row]:= TEdit.Create(AOwner);
     arr[Column,Row].Parent := Parent;
     arr[Column,Row].Width := GetColumnWidth(Column);
     arr[Column,Row].Top := TopPad+Row*(arr[Column,Row].Height+2);
     arr[Column,Row].Left := LeftPad;
     
    end;
   LeftPad := LeftPad + arr[Column,Row-1].Width+2;
 end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 GenerateEdits(EditsArray_1,PageControl1,TabSheet1);
 GenerateEdits(EditsArray_2,PageControl1,TabSheet2);
end;

далее необходиму по событию из Комбобокса сделать выборку из базы данных, и полученные значения присвоить свойству Text объектов Tedit, прорисованных на форме. (выборка хитрая, имеем 24 строки по 8 столбцов, первая выборка дает нам значения 24 строк, и 1 по 7 столбцы, а вот вторая выборка, берет значение из 5 столбца объектов Tedit (им значение присвоила первая выборка и соответственно оно там есть) закидывает это значение в запрос и ответ присваивает значение 8 столбца)

for Column := 1 to 8 do
       begin
          for Row := 1 to 24 do
              begin
                  if not (Column = 10) then
                      begin
                         EditsArray_1[Column][Row].Text := ADOQuery1.Fields[Row-1].AsString;
                         ADOQuery1.Next;
                      end
                  else
                      begin
////////////////////////////////////
              if (EditsArray_1[5,Row].Text='PPPoE') and (EditsArray_1[3,Row].Text <> '') then // Видим что клиент PPP-шный
              begin
              form1.ADOQuery2.Active:=false;
              form1.ADOQuery2.SQL.Clear;
              form1.ADOQuery2.SQL.Add('exec CardGetByNumber_3 '+''''+EditsArray_1[3,Row].Text+'''');
              fORM1.ADOQuery2.Active:=true;
              EditsArray_1[Column,Row].Text :=form1.ADOQuery2.FieldByName('CardLimit').AsString;
              end;

              if (EditsArray_1[5,Row].Text <> '') and (EditsArray_1[5,Row].Text<>'PPPoE') and (EditsArray_1[3,Row].Text <> '') then // Ищем клиента со стат. IP адресом по www логину
              begin
              Form1.ADOQuery2.Active:=false;
              form1.ADOQuery2.SQL.Clear;
              Form1.ADOQuery2.SQL.add('select * from WebLogin where username='+''''+EditsArray_1[3,Row].Text+'''');
              form1.ADOQuery2.Active:=true;
                 if (form1.ADOQuery2.RecordCount > 0)  then     //если запись одна и все ок
                   begin
                     userID:=Form1.ADOQuery2.FieldByName('SubscriberID').AsString;
                     Form1.ADOQuery2.Active:=false;
                     form1.ADOQuery2.SQL.Clear;
                     Form1.ADOQuery2.SQL.add('Select saldo from Account where SubscriberID ='+userID);
                     form1.ADOQuery2.Active:=true;
                     EditsArray_1[Column,Row].Text:=form1.ADOQuery2.FieldByName('saldo').AsString;
                   end;
                  //else if (form1.ADOQuery2.RecordCount > 1)then ShowMessage('www логин клиента '+Form1.Edit11.Text+'не уникален');
              end;
              ADOQuery1.Next;

////////////////////////////////////
                      end;
              end;

       end;

А теперь проблема:
Вся проблема в том, что в строке:
EditsArray_1[Column][Row].Text := ADOQuery1.Fields[Row-1].AsString;

не происходит присваивание значения свойству Text элементу массива EditsArray_1.
Значение из базы получаю, а вот присвоить не могу.

Прога используеться для стыковки инфы между биллингом и DSLAM и отображения ее в "читаемом" виде для службы тех поддержки.

Заранее Благодарен.


iles   (2006-02-22 14:27:00) [1]


> procedure TForm1.GenerateEdits(var arr: TEdits; AOwner:
> TComponent; Parent: TWinControl);
> рекомендую обратить внимание на жирный участок


Ё!!!!!!!!!!!!!!!!!!!!!!!!!!

работает...

Всем спасибо за помощь. как всегда беда в "не внимательности".
Еще раз Спасибо.


clickmaker   (2006-02-22 14:19:00) [2]

procedure TForm1.GenerateEdits( vararr: TEdits; AOwner: TComponent; Parent: TWinControl);
рекомендую обратить внимание на жирный участок


Плохиш   (2006-02-22 14:12:00) [3]


> значение присваиваеться?????????

да

> Из-за версии дельфи может быть ???

д7


iles   (2006-02-22 14:11:00) [4]


> Смею предположить, что для того чтобы увидеть ресультат
> надо переключиться на правильную закладку.
> У меня твой пример работает, т.ч. [2] остаётся в силе.


Блин, как ето????? значение присваиваеться?????????
Из-за версии дельфи может быть ???


iles   (2006-02-22 14:10:00) [5]


> PS. И вообще, я бы TStringGrid использовал.


С grid конечно все было бы проще, но нужна именна такая схема.


Плохиш   (2006-02-22 13:58:00) [6]

PS. И вообще, я бы TStringGrid использовал.


Плохиш   (2006-02-22 13:52:00) [7]


> iles ©   (22.02.06 13:16) [7]

> Тоже не срабатывает.:(((((((

Смею предположить, что для того чтобы увидеть ресультат надо переключиться на правильную закладку.
У меня твой пример работает, т.ч. [2] остаётся в силе.


iles   (2006-02-22 13:16:00) [8]


> в ADOQuery1.Fields[Row-1].AsString точно есть значение?
> может там надо  ADOQuery1.First где-то сказать...


значения есть, при дебаге останавливаюсь на этой строке, вижу что ADOQuery1 возвращает значение.

Более того,

procedure TForm1.Button1Click(Sender: TObject);
begin
EditsArray_1[1,1].Text := 'TEST';
end;

Тоже не срабатывает.:(((((((


clickmaker   (2006-02-22 13:06:00) [9]

в ADOQuery1.Fields[Row-1].AsString точно есть значение?
может там надо  ADOQuery1.First где-то сказать...


iles   (2006-02-22 12:59:00) [10]


> а почему Row? это же массив полей по столбцам

Тоже вопрос, но пока так не сделал, нужные значения полей из бызы данных не прописывались в нужные поля на форме.

В принципе они и щас не прописываються, но я хотя бы по дебагу вижу что порядок верный.


iles   (2006-02-22 12:57:00) [11]


> Рекомендую воспользоваться встроенным в делфи отладчиком.


ну через BreakPoint смотрел, вижу что не присваиваеться и все. А как и почему не понимаю....

Help plizzzz.


clickmaker   (2006-02-22 12:41:00) [12]


> ADOQuery1.Fields[Row-1]

а почему Row? это же массив полей по столбцам


iles   (2006-02-22 12:40:00) [13]

if not (Column = 8) then


Плохиш   (2006-02-22 12:40:00) [14]

Рекомендую воспользоваться встроенным в делфи отладчиком.


Наверх

Титульная страница Поиск, карта сайта Написать письмо