Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.009 c
14-69553
ILYA1
2002-11-04 10:58
2002.11.21
FastNet, Indy. Кто знает где взять к ним примеры и доку?


1-69400
ctapik-net
2002-11-10 15:54
2002.11.21
Работа с ListVew


6-69481
Pelot
2002-07-16 13:57
2002.11.21
Удаленное Выключение под ХР


1-69257
123000
2002-11-11 18:12
2002.11.21
..::PWL::.. и этим все сказано


6-69466
Slava V.
2002-09-23 16:32
2002.11.21
Как разорвать текущее соединение с Интернет?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский