Форум: "Начинающим";
Текущий архив: 2006.03.12;
Скачать: [xml.tar.bz2];
ВнизНе присваиваеться значение Элементу массива объектов 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;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.012 c