-
> [32] Alex_C (11.11.11 15:57)
Ну и параметры в запросе можно использовать. Это здесь не критично, а на будущее.
-
> Ну кто страну хранит в логе её названием.
"Название" страны - это максимум 4(!!!) буквы! Название России - R, США - W, Германии - DL. Согласить, куда как проще и быстрее в хранить в логе само название, чем ссылку на это название. А вот все остальные данные как раз по стране (а их там много) хранятся в отдельном справочнике. Так что тут как раз все весьма верно.
> q.SQL.Text := 'SELECT COUNT(*) FROM log WHERE Country = > ''Ямайка'''; > q.Open() > if q.Fields[0].AsInteger > 1 then > begin > q.SQL.Text := 'SELECT BandADIF, Mode WHERE Country = ''Ямайка'' > AND BandADIF = 3.5 AND Mode = 'SSB'' > // тут показываем > end
Да я как раз так и предполагал. Думаю будет самый быстрый вариант. Хотя тут есть некоторый нюанс - но сегодня все испробую и потом про него напишу уже более подробно.
> убедили отказаться от справочноиков
Почему же? По диапазонам и модуляциям справочники остались. Только они не по ссылкам, а по названиям полей (не уверен , что правильно выразился.) Допустим в логе модуляция SSB, в справочнике SSB - PHONE ... там еще некоторые данные. Учитывая какие эти справочники маленькие, так самое простое получается.
> не слушешь
Зря. Очень даже слушаю.
-
> [41] Alex_C (14.11.11 10:02) > "Название" страны - это максимум 4(!!!) буквы! Название > России - R, США - W, Германии - DL. Согласить, куда как > проще и быстрее в хранить в логе само название, чем ссылку > на это название.
Так это и есть ссылка на справочник. Осталось добавить внешний ключ и будет автоматическая проверка и прочие возможности.
Ну и уже хранить лучше общепринятые сокращения см справичник по ссылке выше. 2 или 3 символьный код, или, если хочется R W DL, то так закодировать, но это уже не относится к целостности данных.
РОССИЯ Российская Федерация RU RUS 643 СОЕДИНЕННЫЕ ШТАТЫ Соединенные Штаты Америки US USA 840 ГЕРМАНИЯ Федеративная Республика Германия DE DEU 276
Справочник, если что, можно прямо в Вики скопировать и имопртировать в базу или готовый взять в DBF и тоже имортировать.
-
> [41] Alex_C (14.11.11 10:02) > Только они не по ссылкам, а по названиям полей (не уверен > , что правильно выразился.) > Допустим в логе модуляция SSB, в справочнике > SSB - PHONE ... там еще некоторые данные.
Это те же ссылки, принципиальной разницы нет - число там или строка.
-
Если ещё не советовали, то рекомендуется пользоваться TADODataset для возвращающих набор запросов и TADOCommand для остальных вместо TADOQuery, и сосвем никогда не пользоваться TADOTable.
-
> TADODataset для возвращающих набор запросов и TADOCommand
Да только их и использую - это уже понял. :) Процесс переделки программы идет полным ходом. Возник очередной затык: есть абсолютно ничего не значащее поле - номер записи. Он у меня был вычисляемым полем
procedure TDataMod.LogTableCalcFields(DataSet: TDataSet);
begin
if LogTable.RecNo <> -1 then
LogTableNumer.AsInteger := LogTable.RecNo
else
LogTableNumer.AsInteger := LogTable.RecordCount + 1;
end;
И все было нормально, но теперь RecNo = -1 не только у первой записи, но и у последней. Это почему так? Это поле вроде как и не нужно - в зависимости от сортировки оно естественно тоже меняется, но иногда оно полезно!
-
> И все было нормально, но теперь RecNo = -1 не только у первой > записи
А что раньше у "первой" записи всегда было RecNo = -1? Ну некоторые предпочитают считать от 0, некоторые от 1. Но не знаю таких, которые считают от "-1"! :)
P.S. Забудь также про RecNo.
-
> А что раньше у "первой" записи всегда было RecNo = -1?
Я пользовался VolgaTable, и чтоб номер записи у последней записи высвечивался верно, приходилось вот так изголяться.
Подошел сейчас к одной из ответственных задач в своей программе - работа Thread + ADO. По идее я так понимаю особых проблем быть не должно.
И так: есть несколько тредов получающих данные из инета и заносящих их в единую таблицу. Количество тредов в принципе не ограничено. Я думаю решить эту задачу так: для каждого треда создаю свой ADOCommand, с комощью которого заношу данные в таблицу. Все ADOCommand подсоединяются к единому ADOConnection. В принципе на такое использование ограничений быть не должно. Единственный момент, на который следует обратить внимание, что если уже такая запись в таблице есть, повторы не вносить.
-
> для каждого треда создаю свой ADOCommand, с комощью которого > заношу данные в таблицу. Все ADOCommand подсоединяются к > единому ADOConnection.
Однако не верно http://www.delphimaster.net/view/2-1277129198в [3] объяснено почему!
|