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

Вниз

Не присваиваеться значение Элементу массива объектов Tedit   Найти похожие ветки 

 
iles ©   (2006-02-22 12:35) [0]

Всем доброго дня.
Задача:
На форме объект 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 12:40) [1]

if not (Column = 8) then


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

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


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


> ADOQuery1.Fields[Row-1]

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


 
iles ©   (2006-02-22 12:57) [4]


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


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

Help plizzzz.


 
iles ©   (2006-02-22 12:59) [5]


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

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

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


 
clickmaker ©   (2006-02-22 13:06) [6]

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


 
iles ©   (2006-02-22 13:16) [7]


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


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

Более того,

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

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


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


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

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

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


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

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


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


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


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


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


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


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


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


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

да

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

д7


 
clickmaker ©   (2006-02-22 14:19) [13]

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


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


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


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

работает...

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



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

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

Наверх




Память: 0.51 MB
Время: 0.058 c
6-1130140516
isasa
2005-10-24 11:55
2006.03.12
Сеть XP + Win98.


15-1140247857
Mozart
2006-02-18 10:30
2006.03.12
lynx -dump


15-1139988050
DelphiN!
2006-02-15 10:20
2006.03.12
Требуется программист на Delphi. г.Алматы. р.Казахстан


4-1135254028
ArtemESC
2005-12-22 15:20
2006.03.12
Как выйти в меню выбора пользователя?


2-1140539927
Незнаище
2006-02-21 19:38
2006.03.12
Локальный компьютер