Конференция "Базы" » Указать путь в SELECT к БД. [D7, Access]
 
  • Inovet © (11.11.11 17:47) [40]
    > [32] Alex_C   (11.11.11 15:57)

    Ну и параметры в запросе можно использовать. Это здесь не критично, а на будущее.
  • Alex_C (14.11.11 10:02) [41]

    > Ну кто страну хранит в логе её названием.


    "Название" страны - это максимум 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 ... там еще некоторые данные. Учитывая какие эти справочники маленькие, так самое простое получается.


    > не слушешь


    Зря. Очень даже слушаю.
  • Inovet © (14.11.11 11:30) [42]
    > [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 и тоже имортировать.
  • Inovet © (14.11.11 11:33) [43]
    > [41] Alex_C   (14.11.11 10:02)
    > Только они не по ссылкам, а по названиям полей (не уверен
    > , что правильно выразился.)
    > Допустим в логе модуляция SSB, в справочнике
    > SSB - PHONE ... там еще некоторые данные.

    Это те же ссылки, принципиальной разницы нет - число там или строка.
  • Inovet © (14.11.11 11:37) [44]
    Если ещё не советовали, то рекомендуется пользоваться TADODataset для возвращающих набор запросов и TADOCommand для остальных вместо TADOQuery, и сосвем никогда не пользоваться TADOTable.
  • Alex_C (14.11.11 18:03) [45]

    > 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 не только у первой записи, но и у последней. Это почему так? Это поле вроде как и не нужно - в зависимости от сортировки оно естественно тоже меняется, но иногда оно полезно!
  • Германн © (15.11.11 00:25) [46]

    > И все было нормально, но теперь RecNo = -1 не только у первой
    > записи

    А что раньше у "первой" записи всегда было RecNo = -1?
    Ну некоторые предпочитают считать от 0, некоторые от 1. Но не знаю таких, которые считают от "-1"! :)

    P.S. Забудь также про RecNo.
  • Alex_C (15.11.11 09:29) [47]

    > А что раньше у "первой" записи всегда было RecNo = -1?


    Я пользовался VolgaTable, и чтоб номер записи у последней записи высвечивался верно, приходилось вот так изголяться.

    Подошел сейчас к одной из ответственных задач в своей программе - работа Thread + ADO. По идее я так понимаю особых проблем быть не должно.

    И так: есть несколько тредов получающих данные из инета  и заносящих их в единую таблицу. Количество тредов в принципе не ограничено.
    Я думаю решить эту задачу так: для каждого треда создаю свой ADOCommand, с комощью которого заношу данные в таблицу. Все ADOCommand подсоединяются к единому ADOConnection. В принципе на такое использование ограничений быть не должно.
    Единственный момент, на который следует обратить внимание, что если уже такая запись в таблице есть, повторы не вносить.
  • Alex_C (15.11.11 10:10) [48]

    > для каждого треда создаю свой ADOCommand, с комощью которого
    > заношу данные в таблицу. Все ADOCommand подсоединяются к
    > единому ADOConnection.


    Однако не верно
    http://www.delphimaster.net/view/2-1277129198
    в [3] объяснено почему!
 
Конференция "Базы" » Указать путь в SELECT к БД. [D7, Access]
Есть новые Нет новых   [134431   +10][b:0][p:0.001]