Конференция "Базы" » ADO+dbf - как будут называться функции в select [D7, dBase, FoxPro]
 
  • Раиса © (07.05.09 04:36) [0]
    lower=lcase
    upper=ucase

    А как будут выглядеть типа substring, cast, replace и прочие, если они имеются?
  • Виталий Панасенко (07.05.09 09:13) [1]
    Будет зависеть от провайдера(или драйвера для ODBC провайдера)
  • Раиса © (07.05.09 13:03) [2]
    Provider=MSDASQL;Persist Security Info=False;Data Source=Файлы dBASE;Initial Catalog=путь к файлам
    Настройки ODBC по умолчанию, ничего в них не меняла.
  • Виталий Панасенко (07.05.09 13:54) [3]
    Тогда смотрите доку по dBase... Например, определение позиции подстроки в строке будет AT(Substr, Str), вырезать подстроку Substr(str, Позиция[, Кол-во символов]) и т.д.(ltrim, rtrim, atrim)
  • Раиса © (07.05.09 14:02) [4]
    Попробовала Substr(str, Позиция[, Кол-во символов]) - запрос говорит, что неопределенная функция в строке.
    Про str я знаю, проходит. А вот cast как будет выглядеть (из символов в дату, например)?
    BDE+dbase - функции это одно.
    А где смотреть ODBC +dbase?
  • Anatoly Podgoretsky © (07.05.09 14:10) [5]
    > Раиса  (07.05.2009 14:02:04)  [4]

    Это все потому, что то цепочка длинная {ODBC/JET/BDE(родное)}, с потерей части ДНК
  • sniknik © (07.05.09 14:11) [6]
    > А где смотреть ODBC +dbase?
    есть очень большая вероятность, что в jet (access). зависит от версии. для однозначности надо бы сменить провайдера.
  • Раиса © (07.05.09 14:14) [7]
    Но все-таки хочется написать в запросе: cast, substring, replace, разница между датами в днях...
    А если полностью задача, то: определить список лиц, дни рождения которых приходятся в период с ... по ... и ADO+dbf...
  • Раиса © (07.05.09 14:16) [8]
    А как сменить провайдера на чужом компе? И кто это позволит?
  • sniknik © (07.05.09 14:22) [9]
    > Но все-таки хочется написать в запросе: ...
    хочется так напиши. а вот когда возникнет желание чтобы еще и работало...

    > определить список лиц, дни рождения которых приходятся в период с ... по ... и ADO+dbf...
    чтобы выбрать период нет никакой необходимости в указанных функциях, вообще в запросе не нужно ничего считать, просто определить 2 параметра и задавать их значения перед открытием.

    > А как сменить провайдера на чужом компе? И кто это позволит?
    не на компе и не инетовского... а используемого в твоей программе. для коннекта. почитай про ADO где нибудь...
  • Раиса © (07.05.09 14:27) [10]
    Все же я не представляю, как будет выглядеть запрос (чтобы и работал) о днях рождениях, если в файле дата рождения в виде даты с годом, а надо выбрать всех, у кого дни рождения в период с 29.12 по 05.01, например....
    Помогите, пожалуйста...
  • Anatoly Podgoretsky © (07.05.09 14:45) [11]
    > Раиса  (07.05.2009 14:27:10)  [10]

    Вообще то не представляю такой запрос, BETWEEN не проходит, и очень хорошо что ты привела именно такой формат, очень наглядно. Для MS SQL и других серверов, которые работают с Юлианской датой еще представляю, но с некоторой ошибкой на стыке лет.
  • Игорь Шевченко © (07.05.09 14:52) [12]

    > а надо выбрать всех, у кого дни рождения в период с 29.12
    > по 05.01, например....


    Filtered + OnFilterRecord ?
  • sniknik © (07.05.09 14:58) [13]
    > у кого дни рождения в период с 29.12 по 05.01
    это уже не период, а куча периодов по одному на год

    примерно так (только без гарантий на на все провайдеры кроме jet)
    SELECT * FROM Table1
    WHERE DateSerial(1000, Month(Date), Day(Date)) BETWEEN :Start AND :End

    и задавать нужно в пределах года, если так как у тебя начало в одном конец в другом то нужно либо 2 условия либо 2 запроса. понятно почему думаю. (кстати 1000 это високосный год? вроде да, но если нет то нужно взять високосный)
  • Раиса © (07.05.09 15:02) [14]
    Извините, я еду к врачу, поэтому вернусь часа через 4...

    Игорь Шевченко ©   (07.05.09 14:52) [12]
    А поподробнее... Что в фильтре? И хотелось бы запросом...
  • Anatoly Podgoretsky © (07.05.09 15:30) [15]
    > Раиса  (07.05.2009 15:02:14)  [14]

    Одним запросом не получится и нужен анализ на клиентской стороне и создание динамического запроса.

    if End >= Start then  один еlse первый запрос объединение второй запрос
    Первый запрос до 31.12.2004 и второй запрос начиная c 1.01.2004, при переформатирование дат с заменой года на константу, например 2004, SQL диалект должен позволять разделять дату на составляющие и обратное складывание, хотя бы в текстовый формат YYYYMMDD

    Это при условии, что делается только запросами без применения серверных решений.
  • Anatoly Podgoretsky © (07.05.09 15:32) [16]
    > Раиса  (07.05.2009 15:02:14)  [14]

    Фильтр видимо не пойдет, а вот OnFilterRecord вполне, с учетом выше сказано про переход через год
  • Игорь Шевченко © (07.05.09 15:46) [17]

    > с учетом выше сказано про переход через год


    можно и без перехода, отсеять в фильтре тех, у кого дата рождения с 02.05 до 28.12 - в остатке получатся нужные персоны.
  • Anatoly Podgoretsky © (07.05.09 16:24) [18]
    А надо в промежутках от 28.21 по 31.12 и от 01.01 по конец.

    Вот поэтому и два запроса и объединение (частный случай один запрос).
    Ну или тоже самое в OnFilterRecord, но уже по всему массиву данных.

    Я задачу решал через JulianDay в это Дельфи DayOfYear, не путать с JulianDate, хотя и через нее можно решать, но у меня в СУБД не было поддержки, только JulianDay - оно чем удобно, что не надо самому преобразовывать в количество дней с 1 января любого года. Расчет очень простой. Мне как раз нужен был интервал в 16 дней. Нужен только анализ на один или два запроса.
  • Игорь Шевченко © (07.05.09 16:31) [19]
    Anatoly Podgoretsky ©   (07.05.09 16:24) [18]

    Я подобную задачу решал, но у меня было условие, чтобы начальная дата не превышала конечную (месяц+день), одним запросом, но на оракле - он умеет с датами вытворять кучу преобразований.
 
Конференция "Базы" » ADO+dbf - как будут называться функции в select [D7, dBase, FoxPro]
Есть новые Нет новых   [134473   +33][b:0][p:0.001]