Конференция "Базы" » Указать путь в SELECT к БД. [D7, Access]
 
  • Alex_C (10.11.11 18:03) [20]
    И все же вопрос открыт: как скопировать одну таблицу в другую при условии при копировании создать таблицу?
  • Inovet © (10.11.11 18:25) [21]
    SELECT INTO
  • Alex_C (10.11.11 18:29) [22]

    > SELECT INTO


    Я это еще не пробовал - пока и так переделок хватает - извини за еще раз тупой вопрос - даже если таблицы нет это сработает?
  • Alex_C (10.11.11 18:37) [23]
    Попробовал. Не работает

    'INSERT INTO NewTable SELECT * FROM ' + LogTable


    если NewTable  не существует.
  • Inovet © (10.11.11 18:45) [24]
    > [22] Alex_C   (10.11.11 18:29)
    > даже если таблицы нет это сработает?

    Про jet не знаю, а вообще да.
  • Inovet © (10.11.11 18:46) [25]
    > [23] Alex_C   (10.11.11 18:37)
    > INSERT INTO

    Это не то, читай внимательно.
  • Jeer © (10.11.11 21:39) [26]
    Бесперспективно..
  • Alex_C (11.11.11 11:13) [27]

    > Бесперспективно..


    Очень глубокая мысль :)


    > вообще да.


    В общем сделал проще - да бы ручками не описывать всю структуру таблицы сдал программку, которая это за меня делает.
    Однако вопрос: почему когда я делаю

     ADOCommand1.CommandText := 'CREATE INDEX Indx ON NewTbl (Call, DateQSO, TimeQSO,' +
       'Mode, BandADIF, State, County, Country)';
     ADOCommand1.Execute;


    открываю таблицу в Access'е - Конструктор - а поля у меня индексными не становятся?
  • sniknik © (11.11.11 11:31) [28]
    не знаю почему не становятся... может показанное не выполняешь, может ошиьбку игнорируеш, а может смотришь не там/не то, хотя оно становится...
    но!
    индекс по
    > Call, DateQSO, TimeQSO, Mode, BandADIF, State, County, Country
    такой куче полей, ИМХО, бесполезен.
  • Alex_C (11.11.11 14:40) [29]

    > не знаю почему не становятся...


    Комманда отрабатывает - если не верно указать - то ругается. Смотрю в самом Access'е в конструкторе таблиц.


    > Call, DateQSO, TimeQSO, Mode, BandADIF, State, County, Country


    Кстати вот тоже момент который мне интересен - по всем данным полям мне нужна и выборка и сортировка. А почему тогда не стоит их в индекс заносить?
  • Inovet © (11.11.11 15:32) [30]
    > [29] Alex_C   (11.11.11 14:40)
    > по всем данным полям мне нужна и выборка и сортировка

    Значит разные индексы делай. Так как сделано у тебя оптимизатор сможет использовать индекс только при сортировке

    ORDER BY Call, DateQSO, TimeQSO, Mode, BandADIF, State, County, Country
    ORDER BY Call, DateQSO, TimeQSO, Mode, BandADIF, State, County
    ...
    ORDER BY Call


    а вот для например

    ORDER BY DateQSO, TimeQSO, Mode


    уже не сможет. Поэтому делай индексы по последовательностям полей наиболее часто встречающиеся в сортировке. Лишние делать тоже ни к чему.

    Ещё. Зачем отдельно DateQSO, TimeQSO - надо бы одним полем, если действительно не нада отслеживать отдельно время от даты.
  • Inovet © (11.11.11 15:34) [31]
    > [27] Alex_C   (11.11.11 11:13)
    > В общем сделал проще - да бы ручками не описывать всю структуру
    > таблицы сдал программку, которая это за меня делает.

    Ну так что, в Jet не работает?
    SELECT * FROM table_src INTO table_dst

  • Alex_C (11.11.11 15:57) [32]
    Спасибо за разъяснение!
    Появился следующий момент - мне нужно узнать, есть ли такая страна в логе и если да, то на текущем диапазоне и с текущей модуляцией сработана и подтверждена ли.
    Есть несколько вариантов  реализации. Самый простой


     LogCommand.CommandText := 'SELECT Country, BandADIF, Mode FROM ' + LogName +
       ' WHERE Country = ' + QuotedStr(Country);
     LogCommand.Execute.RecordCount = 0 then
       Result := COUNTRY_NEW
     else
     begin
     // Здесь прохожусь по выбранным связям с данной страной, проверяя на диапазон, модуляцию и подтверждение
     end;



    Однако другой вариант - делать отдельно запросы

     LogCommand.CommandText := 'SELECT Country, BandADIF, Mode FROM ' + LogName +
       ' WHERE Country = ' + QuotedStr(Country) + ' AND Band = ' + QuotedStr(Band);


    Далее такой же запрос по модуляции и подтверждению.
    Вопрос: как более правильно сделать?
  • Anatoly Podgoretsky © (11.11.11 16:34) [33]
    > Alex_C  (11.11.2011 11:13:27)  [27]

    Если ошибки не выдает, то тогда индекс просто безумный и не нужный такой
    индекс
  • Anatoly Podgoretsky © (11.11.11 16:36) [34]
    Интересно, что скажет начальник транспортного цеха?
  • Alex_C (11.11.11 16:44) [35]

    > не нужный такой


    С этим разобрался - сделал 3 отдельных индекса по Country, Call, State
  • Inovet © (11.11.11 17:04) [36]
    > [32] Alex_C   (11.11.11 15:57)
    > Появился следующий момент - мне нужно узнать, есть ли такая
    > страна в логе и если да, то на текущем диапазоне и с текущей
    > модуляцией сработана и подтверждена ли.


    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


    Вот не слушешь ты советы по нормализации и применению справочников... Ну кто страну хранит в логе её названием. Ладно там про диапазоны и модуляции тебя убедили отказаться от справочноиков, а зря.
    Читай вот хотя бы про страны
    http://ru.wikipedia.org/wiki/%CE%E1%F9%E5%F0%EE%F1%F1%E8%E9%F1%EA%E8%E9_%EA%EB%E0%F1%F1%E8%F4%E8%EA%E0%F2%EE%F0_%F1%F2%F0%E0%ED_%EC%E8%F0%E0
  • Anatoly Podgoretsky © (11.11.11 17:19) [37]
    > Alex_C  (11.11.2011 16:44:35)  [35]

    Заработало? Тогда слишком сложный индекс
  • Anatoly Podgoretsky © (11.11.11 17:41) [38]
    > Inovet  (11.11.2011 17:04:36)  [36]

    Как раз с диапазонами и модуляций все в порядке на справочник будет
    множество ссылок, в отличии от позывных где норма одна ссылка. Просто будут
    потери места и производительности.
  • Inovet © (11.11.11 17:45) [39]
    > [38] Anatoly Podgoretsky ©   (11.11.11 17:41)
    > Просто будут потери места и производительности.

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

    И таки автор плодит логи в одной базе.
 
Конференция "Базы" » Указать путь в SELECT к БД. [D7, Access]
Есть новые Нет новых   [134431   +10][b:0][p:0.002]