Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.02.2018, 14:27   #1
Kamran_
 
Регистрация: 05.10.2017
Сообщений: 9
По умолчанию DBMemo не удается изменить Field.Name

DBMemo - не удается изменить Field.Name

Добрый день! Никак не могу изменить Field.Name у DBMemo программно!
Компилятор выдает ошибку. Делфи XE7 os win7 ...на ХЕ5 я это делал без
проблем.
Мне надо когда меняю таблицу менялось и DataField у DBMemo или вообще
отключить за не имением этого поля в соответствие с сменяемой таблицой

Таблицы меняются но любые попытки изменить названия DataField вызывает
исключение. также не работает FindField пробовал разные методы все мыслимые
и не ...не получается, попытка менять название даже с закрытой таблицей также
заканчивается с ошибкой, в чем проблема компилятор или ос ?
//сокращенно
procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
var
s:string;
begin

ABSTable1.Close;
//DBMemo1.Field.Name:=''; //выдает ошибку, на новое значение тоже
ABSTable1.TableName:=TreeView1.Sele cted.Text;
if ABSTable1.FindField('text')<>nil then // не работает
....
ABSTable1.Open;
ColumnsHide(DBGrid1); // процедура
end;
Kamran_ вне форума Ответить с цитированием
Старый 07.02.2018, 16:28   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Цитата:
//DBMemo1.Field.Name:=''; //выдает ошибку, на новое значение тоже
какую же?
Цитата:
if ABSTable1.FindField('text')<>nil then // не работает
чтобы работало НД(ABSTable1) должен быть открыт.
Цитата:
ABSTable1.Close;
P.S.
Цитата:
[DBMemo - не удается изменить Field.Name
и НИКОГДА не удастся.
DB...Field это только справочно на какое поле установлено( и работает только для открытого НД)
Field.Name кстати тоже только читать можно.

установить(задать) какое поле нужно можно так
DBMemo1.DataField:=<ИМЯ нужного поля> если конечно же не ошибаюсь в имени свойства (правильное имя смотри в инспекторе объектов)
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 07.02.2018 в 16:39.
evg_m вне форума Ответить с цитированием
Старый 07.02.2018, 17:43   #3
Kamran_
 
Регистрация: 05.10.2017
Сообщений: 9
По умолчанию

//DBMemo1.Field.Name:=''
Ошибка
Debugger Exception Notification
---------------------------
Project MyTest.exe raised exception class $C0000005 with message 'access violation at 0x00770cb6: read of address 0x00000000'.

if ABSTable1.FindField('text')<>nil then // не работает

Да, действительно...дело в том что у меня основной компьютер
временно не доступен из за неисправности и все справочники, примеры и проекты остались там на диске, ну это я и другим методом могу...в цикле
например

Главное для меня [DBMemo - не удается изменить Field.Name
не помню как но на хе5 (в основном компьютере) мне удавалось
решить эту проблему

DBMemo1.DataField:=<ИМЯ нужного поля>
а,если нет этого поля? компилятор выдаст ошибку, как нибудь
можно с этим справится? а то придется всем таблицам присвоит если
даже не нужен.
Kamran_ вне форума Ответить с цитированием
Старый 07.02.2018, 17:48   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

DBMemo1.DataField:=<ИМЯ нужного поля> - после открытия датасета
Вообще очистить наверно после сброса DataSource

Насчет редактирования Field.Name - сомнительно, что это работает в каких то версиях делфи, не проверял, та что имхо
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 07.02.2018, 21:22   #5
Kamran_
 
Регистрация: 05.10.2017
Сообщений: 9
По умолчанию

Аватар и evg_m, спасибо за подсказки.
Получилось!
Kamran_ вне форума Ответить с цитированием
Старый 08.02.2018, 09:14   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Цитата:
а,если нет этого поля? компилятор выдаст ошибку, как нибудь
можно с этим справится? а то придется всем таблицам присвоит если
даже не нужен.
1. изначально
DBMemo.DataFiled:='';

2. после открытия
Код:
sname:='...'; //здесь ИМЯ нужного нам поля
ADS.Open;
if ADS.FindField(s)<>nil then DBMemo.DataField:=s;
Код:
f:=FindField('...');
if f<>nil then DBMemo.DataField:=f.Fieldname;
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 09.02.2018, 09:40   #7
Kamran_
 
Регистрация: 05.10.2017
Сообщений: 9
По умолчанию

evg_m, спасибо, я уже сделал...
Kamran_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с dbmemo Ivan174 БД в Delphi 5 27.03.2013 17:11
DbMemo в Word ch1pah1 БД в Delphi 1 13.12.2011 05:09
из таблицы в DBmemo pasapasa Помощь студентам 5 30.11.2010 15:14
DBMemo автоподстановка John_chek Компоненты Delphi 3 25.01.2007 13:41