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

Вниз

Прошу прокомментировать, и дать совет, как сделать лучше   Найти похожие ветки 

 
Abcdef123   (2007-04-25 17:03) [0]

Работаю с Advantage базой данных, и написала функцию для определения значения поля в таблице. Недостаток вроде в том, что если указать поле, ко которому не существует индекса, то эта функция бесполезна. Но, может не стоит заморачиваться и создавать универсальную функцию с созданием индекса? Что скажут опытные программеры? И еще - принимаются советы и замечания к коду, поскольку вполне допускаю, что выглядит примитивно.

function  GetFieldValue(var tblTable : TAdsTable; fldKey, keyValue, fldName : String) : String;     {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
{ примечание fldKey параметр - поле, по которому уже существует }{индекс                                                                                    }
var
 oldIdx, strKeyValue : String;
 
begin
 result :="";
 with tblTable do
 begin
   if not Active then
     OpenTable(tblTable);  // это просто уже существующая процедура
   case tblTable.FieldByName(fldKey).DataType
     of
     ftString     :
         strKeyValue := keyValue;
     ftInteger    :
         strKeyValue := "StrToInt("+ keyValue+")";
     ftBoolean    :
         strKeyValue := "StrToBool("+ keyValue+")";
     ftCurrency   :
         strKeyValue := "StrToCurr("+ keyValue+")";
     ftDate       :
         strKeyValue := "StrToDate("+ keyValue+")";
     ftDateTime   :
         strKeyValue := "StrToDateTime("+ keyValue+")";
     ftFloat    :
         strKeyValue := "StrToFloat("+ keyValue+")";
     else
         strKeyValue := keyValue;
   end;  //case
   oldIdx := IndexFieldNames;
   try
     IndexFieldNames := fldKey;
   except
     MessageDlg(Индекс "+fldKey+" не найден", mtError, [mbOk], 0);
     raise ;
   end;
   if not FindKey([strKeyValue]) then exit;
   case tblTable.FieldByName(fldName).DataType
     of
     ftString     :
         result := FieldByName(fldName).AsString;
     ftInteger    :
         result := IntToStr(FieldByName(fldName).AsInteger);
     ftBoolean    :
         result := BoolToStr(FieldByName(fldName).AsBoolean);
     ftCurrency   :
         result := CurrToStr(FieldByName(fldName).AsCurrency);
     ftDate       :
         result := DateToStr(FieldByName(fldName).AsDateTime);
     ftDateTime   :
         result := DateTimeToStr(FieldByName(fldName).AsDateTime);
     ftFloat    :
         result := FloatToStr(FieldByName(fldName).AsFloat);
     else result :="";
   end;  //case
   IndexFieldNames := oldIdx;
 end;    //with
end;


 
Desdechado ©   (2007-04-25 17:38) [1]

1. Забыть о Table
2. Использовать SQL
3. Для позиционирования в наборе данных использовать Locate


 
Abcdef123   (2007-04-26 05:47) [2]

To Desdechado
Насчет забыть о Table и использовать SQL - я просто подумала, что писать программу быстрее получается, если вызываешь одной строкой уже написанную функцию, а если SQL - то это надо прописывать несколько строк каждый раз (текст запроса, строки параментров и результат присвоения выполненного запроса надо обработать).
А по поводу Locate мне начальник мой запретил этой функцией пользоваться, сказал, что кушает рессурсы и выполняется медленнее при работе с большими таблицами.


 
sniknik ©   (2007-04-26 08:12) [3]

> А по поводу Locate мне начальник мой запретил этой функцией пользоваться
он идиот? либо ты врешь, что более вероятно.

----
начальник транспортного цеха запретил водителям пользоваться ручным тормозом... говорит ненадежный на крутых горках.


 
Abcdef123   (2007-04-26 09:14) [4]

to sniknik:
Совсем не понимаю подобных наездов насчет "врешь". Не вижу вообще никакой логики, зачем мне врать в принципе и в конференцию - в частности, где никто ни меня, не моего начальника не знает. Единственное сое предположение насчет этого вашего комментария - это то, что вы по себе судите, похоже, для вас вранье - как воздух, чтоб бышать - обычное дело. А что до меня, я вообще всегда по жизни стараюсь говорить только правду, либо молчу, но уж никак не вру. И ненавижу просто врунов. Они жутко услодняют всем жизнь, и сами пребывают всю жизнь в пелене лжи и неискренности. Я думаю, что просто такие люди боятся отвественности в жизни,препочитая не взрослеть. Взрослейте, молодой человек!


 
StriderMan ©   (2007-04-26 09:55) [5]

конечно Locate жрет ресурсы и работает мадленно, но то что Вы написали будет жрать еще больше и работать будет еще медленнее. а потом совсем непонятно зачем такие выкрутасы с преобразованием типов? если надо в строковом виде, чем не устраивает FieldByName(...).AsString ?


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

1. быстрее не значит лучше.
2. в чем проблема динамически построить запрос:
SQL.Text := "SELECT " + FieldName + " FROM " + TableName + " WHERE " + "KeyField = " + KeyValue; ?


 
StriderMan ©   (2007-04-26 09:57) [6]


> try
>      IndexFieldNames := fldKey;
>    except
>      MessageDlg(Индекс "+fldKey+" не найден", mtError, [mbOk],
>  0);
>      raise ;
>    end;

а в этом коде сообщение об ошибке вообще ДВАЖДЫ появится


 
Desdechado ©   (2007-04-26 11:14) [7]

> Locate кушает рессурсы и выполняется медленнее при работе с большими таблицами
1. Не мешало бы почитать справку по этому методу, очень поучительно.
2. А с большими таблицами вдвойне полезно работать через SQL. Вырабатывается хороший стиль доставать в программу только те данные, которые реально нужны, а не всю таблицу целиком, как это делает Table.

Это Table кушает ресурсы и работает медленно. Так что, или начальник - ламер, или поняты его слова были с точностью до навыворот.


 
Abcdef123   (2007-04-29 17:27) [8]

Я прочла все ответы внимательно! Спасибо за комментарии, и критику насчет моего кода тоже спасибо, я учту и исправлюсь! :-)


 
Ketmar ©   (2007-04-29 17:48) [9]

> Abcdef123 (26.04.07 09:14) [4]
опять хамло припёрлось...



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

Форум: "Начинающим";
Текущий архив: 2007.05.20;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.038 c
4-1166529534
cktor
2006-12-19 14:58
2007.05.20
IExplorer


2-1178087867
Кириллка
2007-05-02 10:37
2007.05.20
Число прописью 0.000005


15-1177334622
ПЛОВ
2007-04-23 17:23
2007.05.20
Д7 и Ворд недружат малость


2-1178091339
Ламер 2.Х
2007-05-02 11:35
2007.05.20
Реестр XP


1-1173960784
kyn66
2007-03-15 15:13
2007.05.20
Горячие клавиши на форме!





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