Форум: "Базы";
Текущий архив: 2002.11.21;
Скачать: [xml.tar.bz2];
ВнизКак прикрутить небазовое поле... Найти похожие ветки
← →
Андрусь (2002-11-01 21:05) [0]Привет всем! Вот такая возникла проблемка:есть DataSet, пользователю предоставляется возможность копирования набранных раннее другим юзером. Для этого он просматривает те записи и отбирает нужные. Их он метит,к примеру птичкой в чекбоксе на гриде. Как мне прикрутить к датасету небазовое поле с меткой. Типы полей,которые можно добавить к датасету мне не подходят.Можно конечно сделать динамичесский массив и каждую отмеченную запись вносить в него.Но мне кажется,что можно это сделать ч/з DataSet.
Зараннее всем большое спасибо всем откликнувшимся.
← →
Znaika (2002-11-01 21:17) [1]Rem:
Небазовое поле - поле сбоку от базы.
Метка, если не черная, то тоже побоку.
По дате и сету никакие поля мне не влом.
Можно и с Динамо сыграть, но вряд ли отметки мне впарят по месту.
Кароче: Назначьте дату и сет, с`ыграйте - результат МНЕ.
← →
Andriano (2002-11-02 09:35) [2]Есть интересный способ.
Создаётся DataSet2 с такими же полями.
Кидаешь с одного ListBox, привязанного к твоему DataSet в другой, привязанный к DataSet2.
И кидаешь слева направо и наоборот. Можно перебрасывать наборами.
Внутренняя работа ведётся с кэшами этих DataSet-ов.
Точно методы не помню. Но этот способ полностью описан в книге "Мир INTERBASE"...дома забыл :( Я прочел главу бегло.
Прошу прощения за приблизительность, но найти методы самому можно: используется одно событие и один метод.
← →
Андрусь (2002-11-02 13:15) [3]>Znaika (01.11.02 21:17)
Определённо передозировка...
>Andriano © (02.11.02 09:35)
Чего-то не допонял...
← →
BlackTiger (2002-11-02 14:56) [4]Чего-то Znaika понесло в одну сторону, а Andriano - в другую. Хотя одну траву курили... :-)
Ладно, к делу. Гемор это страшный. В доках как бы написано, что поле типа fkCalculated может быть изменено пользователем, но все введенные значения будут утеряны при закрытии датасета. Не знаю как там у них, но у меня, после 2х дневной битвы ничего не получилось.
Поле само по себе добавляется просто, что-то вроде
with TFloatField.Create(SomeTable) do begin
FieldName := "Field1";
FieldKind := fkData; //fkCalculated, fkLookup и тыды
Name := SomeTable.Name + "Field1";
DataSet := SomeTable;
SomeTable.FieldDefs.Update;
end;
После долгой битвы и прочесывания инета, я просто остановился на варианте с TRxMemoryData. С помощью его можно редактировать заведомо нередактируемые записи, вот только сохранять изменения придется самому. У меня код такой (ногами не бить!!!)
try
dm.qryItemPrices.Open;
if RxMemoryData1.Active then RxMemoryData1.Close;
RxMemoryData1.FieldDefs.Clear;
for i := 0 to dm.qryItemPrices.FieldCount - 1 do begin
if jbStr.PosN(" Exp",dm.qryItemPrices.Fields[i].FieldName,0) = 0 then begin
if dm.qryItemPrices.Fields[i] is TStringField then
RxMemoryData1.FieldDefs.Add(dm.qryItemPrices.Fields[i].FieldName,
ftString,
dm.qryItemPrices.Fields[i].Size)
else begin
RxMemoryData1.FieldDefs.Add(dm.qryItemPrices.Fields[i].FieldName,
dm.qryItemPrices.Fields[i].DataType);
RxMemoryData1.FieldDefs.Update;
if (dm.qryItemPrices.Fields[i].FieldName <> "Default Price")
and (dm.qryItemPrices.Fields[i].FieldName <> "Changed")
and cbUseExpDate.Checked then begin
RxMemoryData1.FieldDefs.Add(dm.qryItemPrices.Fields[i].FieldName + " Exp. Date",
ftDate);
RxMemoryData1.FieldDefs.Update;
end;
end;
end;
end;
StatusBar1.Panels[0].Text := "Loading data into memory ...";
Repaint;
RxMemoryData1.LoadFromDataSet(dm.qryItemPrices,10000000,lmAppend);
for i := 0 to RxMemoryData1.FieldCount - 1 do begin
if RxMemoryData1.Fields[i] is TFloatField then
RxMemoryData1.Fields[i].OnGetText := FormatPriceValue;
if (RxMemoryData1.Fields[i].FieldName = "Item Code") or
(RxMemoryData1.Fields[i].FieldName = "Item Name") then
DBGridEh1.Columns[i].ReadOnly := true
;
//if (RxMemoryData1.Fields[i].FieldName = "Changed") then
// DBGridEh1.Columns[i].
if (RxMemoryData1.Fields[i].FieldName = "Default Price") then
DBGridEh1.Columns[i].PopupMenu := PopupMenu1;
DBGridEh1.FrozenCols := 4;
end;
RxMemoryData1.Active := true;
← →
Андрусь (2002-11-02 16:52) [5]Я работаю через ODAC - там тоже есть похожая штука TVirtualTable.
Но будет ли оно быстро отрабатывать,в случае когда будет master-detal. И на детале висеть TVirtualTable, подсасывающая данные из DataSetа.
← →
BlackTiger (2002-11-02 17:04) [6]Компромисы, компромисы...
Зато удобно. Может есть и более человеческий способ, но примеры из хелпа не работают как надо (может быть там что-то упущено "и дураку понятное") в инете тоже не нашел ничего нормального.
Офигенное ЗЫ: сейчас только вспомнил/заметил, что полей-то я не добавляю! Просто в запросе у меня есть поля типа "0 AS FieldName", которые я потом подгружаю и использую для своих нужд. Вспомнил, почему - Я НЕ НАШЕЛ НИ ОДНОГО РАБОЧЕГО ПРИМЕРА ДОБАВЛЕНИЯ НЕСУЩЕСТВУЮЩИХ (В ЗАПРОСЕ) ПОЛЕЙ (НО НЕ Calculated). Вот...
← →
Андрусь (2002-11-04 09:59) [7]Может уже проснулись те,кто скажет как добавить к полям датасета несуществующее в запросе поле. Добавить и нормально с ним работать - вносить и удалять данные не трогая базу.
← →
Sergey13 (2002-11-04 11:58) [8]Я использовал таблицы в памяти. RxMemoryData. Но все равно изврат все это.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.11.21;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c