Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2012.01.01;
Скачать: [xml.tar.bz2];

Вниз

ODAC/ запомнить и восстановить текущее положение в dataset   Найти похожие ветки 

 
Правильный$Вася   (2010-03-25 18:17) [40]


> Игорь Шевченко ©   (25.03.10 14:01) [38]

потому что кроме гипотетической экономии памяти никаких плюсов больше нет
да и в сторону мы уходим, это уже десятки раз перетирали и каждый остался при своем
я предпочитаю суррогатные первичные ключи, а то, что может претендовать на натуральный первичный ключ, просто делаю уником
гораздо гибче во многих случаях - можно и на то опереться, и на это, зависит от логики конкртной задачи
и даже если вдруг окажется, что натуральный ключ уже не совсем ключ, ничего не развалится, в отличие от противников суррогата


 
Anatoly Podgoretsky ©   (2010-03-25 19:59) [41]

> Медвежонок Пятачок  (25.03.2010 10:06:34)  [34]

Да никакие изменения первичного ключа не являются проблемой. Надо чтобы форма редактирования/вставки возвращала правильный номер. Это еще один плюс в пользу редактирования в отдельной форме.


 
Anatoly Podgoretsky ©   (2010-03-25 20:00) [42]

> MsGuns  (25.03.2010 14:34:39)  [39]

Не приводит, если использовать cascade updates, а я не вижу причины не использовать их


 
Anatoly Podgoretsky ©   (2010-03-25 20:01) [43]

> Правильный$Вася  (25.03.2010 18:17:40)  [40]

И у тебя получается дублирование


 
Игорь Шевченко ©   (2010-03-25 20:11) [44]

Правильный$Вася   (25.03.10 18:17) [40]


> я предпочитаю суррогатные первичные ключи, а то, что может
> претендовать на натуральный первичный ключ, просто делаю
> уником


Джо Целко зовет таких IDиотами :)

Я не совсем понимаю - если нет referential ссылки на таблицу с естественным ключом из N полей, зачем вводить дополнительную сущность ?

Телега хорошо едет с четырьмя колесами.


 
Правильный$Вася   (2010-03-25 20:29) [45]


> Я не совсем понимаю - если нет referential ссылки на таблицу
> с естественным ключом из N полей, зачем вводить дополнительную
> сущность ?

у меня практически всегда есть (98%), так что не вижу смысла ради 2% делать исключение из своего правила

> Anatoly Podgoretsky ©   (25.03.10 20:01) [43]
> > Правильный$Вася  (25.03.2010 18:17:40)  [40]И у тебя получается
> дублирование

лучше продублировать 1 поле GUID, чем  ссылаться на 10 полей из многих разных таблиц
экономия памяти, нервов и времени огромная


 
Anatoly Podgoretsky ©   (2010-03-26 07:36) [46]

> Правильный$Вася  (25.03.2010 20:29:45)  [45]

Откуда взялось 10 полей? В связи как правило участвует одно поле.


 
MsGuns ©   (2010-03-26 09:07) [47]

>Anatoly Podgoretsky ©   (26.03.10 07:36) [46]
>Откуда взялось 10 полей? В связи как правило участвует одно поле.

Каждый "этаж" - одно поле. 10-этажный "небоскреб" - 10 полей в "пентхаузе" :)


 
Правильный$Вася   (2010-03-26 11:13) [48]


> Откуда взялось 10 полей? В связи как правило участвует одно поле.

если PK составной, то в связи не может быть его часть, верно ведь?


 
evvcom ©   (2010-03-26 14:34) [49]

1. Как уже было сказано в [2] "Вноси данные через датасет - ничего рефрешить не надо."
2. Я копал внутренности букмарка одаковского датасета, это не что иное как номер строки датасета, поэтому добавляя новую запись (через грид или отдельную форму), вызывая метод Add, мы добавляем запись в конец набора, а после рефреша и order by в запросе эта запись становится уже далеко не последней (чаще всего).
3. Я немного модифицировал одаковский датасет, написав наследника, добавив туда KeyFieldName, и написал одну регулярную процедуру. После этого просто вызаваю DSRefresh(ADataSet):
procedure DSRefresh(DS: TDataSet; KeepPos: Boolean);
var
 l_Values    : array of Variant;
 l_FieldCount: Integer;
 l_FieldNames: string;
 l_FieldName : string;
 l_RecNo     : Integer;
 l_RecCount  : Integer;
begin
 if (DS is TOraStoredProc) and (TOraStoredProc(DS).StoredProcName <> "")
 then begin
   if DS.Active and (DS is TMyOraStoredProc) and
     (TMyOraStoredProc(DS).KeyFieldName <> "")
   then begin
     l_FieldNames := TMyOraStoredProc(DS).KeyFieldName;
     l_FieldCount := 0;
     l_RecNo := 1;
     while True do begin
       l_FieldName := ExtractFieldName(l_FieldNames, l_RecNo);
       if l_FieldName <> "" then begin
         Inc(l_FieldCount);
         SetLength(l_Values, l_FieldCount);
         l_Values[l_FieldCount - 1] := DS.FieldValues[l_FieldName];
       end
       else
         Break;
     end;
     DS.Close;
     DS.Open;
     if DS.Active then
       DS.Locate(l_FieldNames, l_Values, []);
   end
   else begin
     l_RecNo := DS.RecNo;
     DS.Close;
     DS.Open;
     l_RecCount := DS.RecordCount;
     if KeepPos and (l_RecCount > 0) then begin
       if l_RecNo > l_RecCount then
         l_RecNo := l_RecCount;
       if DS.Active then
         DS.MoveBy(l_RecNo - 1);
     end;
   end;
 end;
end;

Противники RecNo могут поменять их на букмарки, но в хелпе явно написано, что букмарк после переоткрытия датасета становится невалидным! Это в общем случае. Таким образом, данная процедура отлично у меня работает уже несколько лет и с одним ключом, и с составным, и даже пытается работать, если я где-то забыл указать ключ.
Но следует понимать, что этот рефреш написан не для рефреша после изменений, т.к. см. пункт 1-й, а для работы после изменений значений входных параметров!



Страницы: 1 2 вся ветка

Форум: "Базы";
Текущий архив: 2012.01.01;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.55 MB
Время: 0.005 c
3-1269443878
gog
2010-03-24 18:17
2012.01.01
Не читаются unicode данные


15-1314702451
Sergey Masloff
2011-08-30 15:07
2012.01.01
Ну че ворлд тур приближается. Кто идет, я буду


15-1316092006
Железкин
2011-09-15 17:06
2012.01.01
не включается комп, может кто сталкивался?


2-1316764003
Alex_C
2011-09-23 11:46
2012.01.01
Загрузить и выгрузить Bitmap из Stream


2-1316962248
Krema
2011-09-25 18:50
2012.01.01
Как вывести сеткой одномерный массив кнопок в Delphi?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский