Обновление списка полей в ADOQuery
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
-
- Сообщения: 407
- Зарегистрирован: 13 сен 2004, 12:05
- Откуда: Курган
- Контактная информация:
Всем привет!!! Такая вот штуковина, я создал SQL запрос в ADO и в FieldsEditor'е обновил список полей. Теперь в коде программы я меняю SQL запрос, и естественно меняется список полей, но как мне их программно обновит в FieldsEditor'е? Чтоб можно было обращатся к полю как Adoquery1FIO.text и т.д. А то adoquery1.fields.fields[1].text не очеть удобно, так как не знаю заранне в каком порядке будут расположены поля...
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто!
Да! Кстати! Ctrl+V реально вставляет!!! ХDD

- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Для обеспечения гибкости не нужно создавать объекты TXXXField в Design-Time.
Устанавливайте свойства полей (такие как DisplayWidth, DisplayFormat...) программно.
Обращаться к полям нужно по имени
Table1.FieldByName('...')...
или по индексу
Table1.Fields...
А вот так чтобы в коде зарранее написать Adoquery1FIO, а добавить поле потом - так не получится!
Это не скомпилируется!
Устанавливайте свойства полей (такие как DisplayWidth, DisplayFormat...) программно.
Обращаться к полям нужно по имени
Table1.FieldByName('...')...
или по индексу
Table1.Fields...
А вот так чтобы в коде зарранее написать Adoquery1FIO, а добавить поле потом - так не получится!
Это не скомпилируется!
-
- Сообщения: 407
- Зарегистрирован: 13 сен 2004, 12:05
- Откуда: Курган
- Контактная информация:
Гы
Получится та получилось, но вот про FieldByName чего-то не подумал
Сенькс!


Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто!
Да! Кстати! Ctrl+V реально вставляет!!! ХDD

- SergeyS
- Сообщения: 196
- Зарегистрирован: 21 ноя 2006, 17:12
- Откуда: Хакасия, Абакан
- Контактная информация:
" писал(а):А вот так чтобы в коде зарранее написать Adoquery1FIO, а добавить поле потом - так не получится!
Это не скомпилируется!
Это как же у тебя получилось? Поделись опытом." писал(а):Гы Получится та получилось
Я тоже считаю что это невозможно.
Если я прально понял, то вот пример(из реальной работающей программы), как можно добавить поле в запрос.
function ……………..
//Описание добавляемого поля
var iField: TIntegerField;
begin
try
//Описание запроса
tProgram.Close;
tProgram.SQL.Clear;
tProgram.SQL.Add('… ');
....
if (условие1) then
begin
//Добавление поля
iField := TIntegerField.Create(nil);
iField.fieldname := 'dvp_uid';
iField.FieldKind := fkData;
iField.Dataset:=tProgram;
tProgram.Fields.Add(iField);
end;
//Выполнение запроса
tProgram.Open;
dvp^ := tProgram.FieldByName('dvp_uid').AsInteger;
if (условие1 ) then
begin
// Удаление поля
tProgram.Fields.Remove(tProgram.FieldByName('dvp_uid'));
tProgram.Close;
iField.Dataset := nil;
end
finally
FreeAndNil(frmSelLicProgram);
if (условие1) then
begin
//Уничтожение экземпляра
iField.Free;
end;
end;
end;
function ……………..
//Описание добавляемого поля
var iField: TIntegerField;
begin
try
//Описание запроса
tProgram.Close;
tProgram.SQL.Clear;
tProgram.SQL.Add('… ');
....
if (условие1) then
begin
//Добавление поля
iField := TIntegerField.Create(nil);
iField.fieldname := 'dvp_uid';
iField.FieldKind := fkData;
iField.Dataset:=tProgram;
tProgram.Fields.Add(iField);
end;
//Выполнение запроса
tProgram.Open;
dvp^ := tProgram.FieldByName('dvp_uid').AsInteger;
if (условие1 ) then
begin
// Удаление поля
tProgram.Fields.Remove(tProgram.FieldByName('dvp_uid'));
tProgram.Close;
iField.Dataset := nil;
end
finally
FreeAndNil(frmSelLicProgram);
if (условие1) then
begin
//Уничтожение экземпляра
iField.Free;
end;
end;
end;
-
- Сообщения: 407
- Зарегистрирован: 13 сен 2004, 12:05
- Откуда: Курган
- Контактная информация:
В режиме редактирования проги у ADOQuery заранее написал SQL запрос и добавил поля в список, а когда в коде изменяю sql запрос меняются сами поля, а список остается тем же и тогда прога начинает ругаться" писал(а):Это как же у тебя получилось? Поделись опытом.
Я тоже считаю что это невозможно.

Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто!
Да! Кстати! Ctrl+V реально вставляет!!! ХDD
