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

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

Почему датасоурс Nil (не определяется)? (выдает ошибку)Что не так [D6, XP]


Страницы:   1 2

Abcdef123 ©   (2007-06-21 12:50:00) 

TFRM_Grid = class(TForm_parent)
private
   InDataSet : TDataSet;
   InDataSrc : TDataSource;
end;
constructor TFRM_Grid.Create(AOwner: TComponent; DtSet : TDataSet);
begin
 Self.InDataSet := DtSet;
  Self.InDataSrc.DtSet := DtSet;
 Create(AOwner);
end;


Abcdef123   (2007-06-28 04:41:00) [1]

да, я поняла, спасибо :-)


Плохиш   (2007-06-27 18:33:00) [2]

Главное, чтобы было понято, почему код в [24] работал не так как ожидалось :-)


Abcdef123   (2007-06-27 16:42:00) [3]

извините, что не сразу ответила, у меня получилось, но мое сообщение сюда на сайт - не ушло, выдало ошибку. Вот сейчас только зашла еще раз попытаться.
Ega23 и Плохиш - большое вам спасибо за терпение и помощь! :-) Я очень благодарна!


Плохиш   (2007-06-27 11:00:00) [4]


> Abcdef123   (27.06.07 10:17) [24]

Дурдом

 idx := ListSelect.IndexOf(Value);
 if idx >= 0 then ListSelect.Delete(idx)
 else ListSelect.Add(Value);


Ega23   (2007-06-27 10:20:00) [5]

У тебя else к какому if'у относится?


Abcdef123   (2007-06-27 10:17:00) [6]

ListSelect : TStringList; //TList;

       Value:=DataSource1.DataSet.fieldByName('PlantNo').AsString+DataSource1.DataSet.FieldByName('ServCode').AsString;
       IF ListSelect.Count > 0 Then
           IF ListSelect.IndexOf(Value) <> 0
           Then ListSelect.Delete(ListSelect.IndexOf(Value))
           Else Begin
                  ListSelect.Add(Value);
           End
           Else Begin
                  ListSelect.Add(Value);
           End;

Так? Если да, то сразу говорю, тоже не работает :-(


Ega23   (2007-06-27 10:05:00) [7]

Зачем TList, если у тебя строковое значение????
Используй TStringList без приведения значения Value к Pointer


Abcdef123   (2007-06-27 09:52:00) [8]

ListSelect : TList;


Ega23   (2007-06-27 09:49:00) [9]

ListSelect - это что? Какой класс?


Abcdef123   (2007-06-27 09:45:00) [10]

Итак, пытаюсь реализовать у себя пример, на который меня здесь направил Плохиш[15].У меня отличие, что уникальность - два поля, а не одно. Так что я прописываю значение в список выбранных строк:
Value:=DataSource1.DataSet.fieldByName('PlantNo').AsString+DataSource1.DataSet.FieldByName('ServCode').AsString;
       IF ListSelect.Count > 0 Then
            IF ListSelect.IndexOf(Pointer(Value)) >=0
           Then ListSelect.Delete(ListSelect.IndexOf(Pointer(Value)))
           Else Begin
                  ListSelect.Add(Pointer(Value));
           End
           Else Begin
                  ListSelect.Add(Pointer(Value));
           End;
Записывать значение - записывает, но потом не находит (строка где не срабатывает - указана жиным шрифтом. И, галочка тоже не рисуется, не знаю, по той же причине или по другой. Что не так? Может Pointer не работает по сумме друх полей?


Плохиш   (2007-06-24 16:04:00) [11]


> я полагала, что хотя бы в сеансе работы программы должно
> запоминаться и меняться значение вычисляемого поля.

Вычисляемоеполе не сохраняется, а вычисляетсяв момент потребности.


Abcdef123   (2007-06-24 12:34:00) [12]

To Плохиш [17]
Под понятие "Извне" уже подходит анализ события клик на гриде?
Вот я полагала (и пыталась реализовать, но безуспешно) - когда кликаешь на записи в грид, то по событию клик пыталась подключить обработку процедуры OnCalculateField, в которой я прописала для calculated field 'Check':
Table.FieldByName('Check').AsBoolean:= not  (Table.FieldByName('Check').AsBoolean);
то есть я полагала, что хотя бы в сеансе работы программы должно запоминаться и меняться значение вычисляемого поля. Получается, что даже это невозможно?


Плохиш   (2007-06-24 11:43:00) [13]


>  меня не получается, ругается при попытке записи, что поле
> не существует, хотя в гриде поле это показывает

Вычисляемые поля не преднозначены для того, чтобы в них чего-то записывать из вне, а только для расчётов в OnCalculateField.

> еще и дальше нужно работать с помеченным датасет, то создание
> списка - не самый простой вариант в моем случае

Судя по "много букав", то это самый простой способ...


Abcdef123   (2007-06-24 08:23:00) [14]

to Плохишх[15]
1Много букав :-) это Ega23 попросил подробно описать, что я и сделала, поскольку это в моих интересах, человек помощь предложил. :-)
2. Насчет ссылки - Я этот проект смотрела уже раньше, в этом проекте идет через создание списка, а поскольку у меня еще и дальше нужно работать с помеченным датасет, то создание списка - не самый простой вариант в моем случае, так что вопрос насчет поля типа calculated  все же остался, можно как-то при крыжике менять значение calculated field или нельзя?


Плохиш   (2007-06-23 20:25:00) [15]


> Abcdef123   (23.06.07 20:01) [14]

Слишком многа бУквав
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=168


Abcdef123   (2007-06-23 20:01:00) [16]

To Ega23[13]:
Участвовать в задаче будут 3 таблицы
Table1: поля No, Serv,....
Table2: поля No_tbl1, Serv,ReadNo_tbl3,...
Table3: поля No_tbl1, Serv_tbl3,ReadNo,...

задача такая: Существует проект,на одной из форм проекта показаны данные Table1 (например на записи Table1.No=5, далее из этой формы по кнопке открывается другая форма с данными Table 3(показываются только записи, у которого Table3.No_tbl1=5). И, к примеру, курсор стоит на записи Table3.No_tbl1=5 и Table3.ReadNo='002'. И вот тут мне дали задачу, чтоб на форме2 по кнопке открывалась новая форма3 с данными Table 2(выбор данных из Table2 идет такой:Table2.No_tbl1=5 и Table2.ReadNo_tbl3='002'.)Этот набор данных я должна выдать в DBGrid, но с дополнительной колонкой на гриде CheckBox, чтоб пользователь прошелся по гриду, отметил на checkbox записи,с которыми будет проводить некоторые Update Table 2единым разом, по кнопке сохранить. После закрытия формы3, на форме 2,в соответствии с помеченными записями в гриде, мне надо Update текущую запись Table 3.
Для Информации уточняю, что все таблицы прописаны в Датамодуле, и в основном,в проекте идет работа через таблицы, а я Датасет в форму3 тяну чезез создание query с указанным критерием полей.
Итак, на данный момент,то, что вы подсказали с датасоурс -получилось, но,как я уже сказала раньше, есть сомнения,может я зря тяну Датасет из формы в форму. И второй вопрос, над которым я бьюсь уже несколько дней - как реализовать вот этот checkbox в гриде, чтоб помечать записи.Я добавила в датамодуле в таблице2 дополнительное поле типа Calculated,прочла документацию с использованием такого типа поля, но наверно я что-то не понимаю все равно, могу я записывать значение в это поле, когда кликну на checkbox или нет? У меня не получается, ругается при попытке записи, что поле не существует, хотя в гриде поле это показывает.Если нельзя в такое поле записывать, то я должна дополнительно StringList создавать что ли и туда писать? Вэтом случае надо еще заморачиваться данные грида с этим stringList связывать. В общем,не знаю, как реализовать.
И, еще, к слову, у меня еще есть возможность использовать вместо DBGrid компонент TdxDBGrid, в нем уже есть тип колонки Checkbox, не надо искуственно создавать, как в DBGrid, но с calculated полем все равно не проходит.Подскажите, как мне оперировать с таким типом поля.
Если что не совсем понятно написала, спросите, я поясню. Очень жду ответа!      
Заранее Спасибо!


Ega23   (2007-06-22 09:42:00) [17]


> Вот вы советуете свойство сделать, как это? Может это вообще
> будет гораздо лучше, чем мои заморочки?


Давай ещё раз с самого начала: какие исходные данные и какая стоит задача?
Напиши, плиз, подробно, что-нибудь придумаем.


Anatoly Podgoretsky   (2007-06-21 19:40:00) [18]

Ега и Яга - это разные слова.


Abcdef123   (2007-06-21 19:11:00) [19]

To Ega23 [10]
Ну, по нику было нетрудно пол перепутать, на будущее буду иметь в виду :-)
За код - спасибо!
Насчет DataModule - он есть, и там хранятся все основные таблицы и запросы, это уже существующий проект, просто мне дали задачу дописать кое какую примочку. Поэтому я решила этот запрос не помещать в Datamodule, а просто тащить выбранные пользователем на форме данные в следующую форму как dataset параметр. А дошла я до создания конструктора не от избытка ума, а просто, честно говоря, не получилось по другому, поскольку родитель формы замороченный попался.
Вот вы советуете свойство сделать, как это? Может это вообще будет гораздо лучше, чем мои заморочки?


Ega23   (2007-06-21 18:39:00) [20]


> как правильно предположила Ega23.


Вообще-то мне 31 год завтра исполняется, вешу я 110 кг, служил срочную в спецназе, бородат и вообще мужик. Так, к слову.

Что касается твоей проблемы:
1. Я бы на твоём месте использовал DataModule для хранения данных. Тогда не надо привязываться к какой-то там форме.
2. Нафига тебе передавать эти параметры в конструкторе? Может, лучше прямо свойство сделать?
3. Если всё-таки хочется, то код должен быть таким:
constructor TFRM_Grid.Create(AOwner: TComponent; DtSet : TDataSet);
begin
InDataSrc := TDataSource.Create(Self);
InDataSet := DtSet;
InDataSrc.DtSet := DtSet;
inherited Create(AOwner);
end;


Страницы:   1 2

Наверх

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