Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Работа с датой в таблицах SQL Server и mdb / 18 сообщений из 18, страница 1 из 1
23.07.2003, 10:38
    #32215225
_Дмитрий_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с датой в таблицах SQL Server и mdb
Уважаемые гуру! Я только недавно начал программировать на Delphi. И сейчас у меня есть такой к вам вопрос. Как в одной программе работать с БД, находящимися в разных форматах. Т.е. на работе база находится на MS SQL Server а дома в mdb. Доступ к данным организован с помощью ADO. Подключение к нужной базе меняю с помощью udl файла (есть два заранее заготовленных файла и рабочий, с помощью которого и идет подключение). Все работает нормально, НО когда в запросе встречается дата, тогда происходит ошибка в программе. Запрос неважно какой, например:
Код: plaintext
SELECT * FROM Sales WHERE Date1> '01.01.2003' AND Date1< '16.02.2003'

Данный запрос нормально отрабатывает в SQL Server но не работает с mdb. Подскажите универсальное решение, пожалуйста.
...
Рейтинг: 0 / 0
23.07.2003, 10:44
    #32215241
AndreyBond
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с датой в таблицах SQL Server и mdb
в конструкции where лучше использовать date1 between '01.01.2003' AND '16.02.2003'
А чтоб универсально было скорее всего надоиспользовать параметры...
...
Рейтинг: 0 / 0
23.07.2003, 10:58
    #32215257
_Дмитрий_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с датой в таблицах SQL Server и mdb
AndreyBond: "в конструкции where лучше использовать date1 between '01.01.2003' AND '16.02.2003'
А чтоб универсально было скорее всего надоиспользовать параметры..."

"Between" или сравнение, это не принципиально... :) Даже если написать так:
Код: plaintext
1.
SELECT * FROM Sales WHERE Date1 BETWEEN '01.01.2003' AND '16.02.2003'
то все равно не работает. С параметрами тоже пробовал- такая же проблема
Код: plaintext
1.
2.
Dat1=StrToDate('01.01.2003');
Dat1=StrToDate('16.02.2003');
SELECT * FROM Sales WHERE Date1 BETWEEN :Dat1 AND :Dat2

Вопрос как сделать это в принципе? А если нужна будет третья база в dbf? (Нужно делать импорт из программы написанной давно на Clipper)? Создам udl файл, и запрос на нем тоже не будет выполнятся?
...
Рейтинг: 0 / 0
23.07.2003, 11:21
    #32215280
MW
MW
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с датой в таблицах SQL Server и mdb
> А если нужна будет третья база в dbf?

А не суть... SQL достаточно стандартизирован.
А писать надо так (на примере Query это запрос):

Код: plaintext
1.
2.
3.
Query.sql.text := 'SELECT * FROM Sales WHERE Date1 BETWEEN :Dat1 AND :Dat2';
Query.ParamByName( 'DAT1' ).AsDate := StrToDate('01.01.2003');
Query.ParamByName( 'DAT2' ).AsDate := StrToDate('16.01.2003');


ну и т.п.
...
Рейтинг: 0 / 0
23.07.2003, 11:55
    #32215341
_Дмитрий_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с датой в таблицах SQL Server и mdb
Код: plaintext
1.
2.
3.
Query.sql.text := 'SELECT * FROM Sales WHERE Date1 BETWEEN :Dat1 AND :Dat2';
Query.ParamByName( 'DAT1' ).AsDate := StrToDate('01.01.2003');
Query.ParamByName( 'DAT2' ).AsDate := StrToDate('16.01.2003');

:) Именно так я и писал... И именно так не работает :( . Вернее работает только с SQL server.
...
Рейтинг: 0 / 0
23.07.2003, 12:12
    #32215378
BigHarry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с датой в таблицах SQL Server и mdb
Наверно - беда в формате даты.
Попробуй варианты: '16-01-2003', '2003-01-16'...
...
Рейтинг: 0 / 0
23.07.2003, 12:17
    #32215391
Timujin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с датой в таблицах SQL Server и mdb
Посмотрите формат даты в Windows:
Пуск->Настройка->Панель управления->Язык и стандарты->Дата->Краткий формат.
Задавайте дату в формате, настроенном в Windows
...
Рейтинг: 0 / 0
23.07.2003, 12:29
    #32215418
MW
MW
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с датой в таблицах SQL Server и mdb
Побробуй AsDateTime
...
Рейтинг: 0 / 0
23.07.2003, 12:30
    #32215423
_Дмитрий_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с датой в таблицах SQL Server и mdb
В панели управления Краткая дата - "23.07.2003". Задаю дату именно в этом формате... Поменял формат даты на такой - "16/01/2003" (ММ/ДД/ГГГГ) Заработало с mdb, не работает с SQL Server :) Придется видимо, как-то определять к чему подключаемся и соотв. менять sql-строки.
...
Рейтинг: 0 / 0
23.07.2003, 13:03
    #32215504
Mihail R.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с датой в таблицах SQL Server и mdb
такое уже обсуждалось много раз.
и ответ всегда один:
все из-за различного фомата даты в NT4, W98,W2000.
в 2000-ой 4 цифры в году, в остальных две.
все баги именно при конвертировании из строки и обратно.

отсюда решение: строкой дату задавать нельзя !
брать либо из DateTimePickera, либо другого какого компонента, либо Date(), либо еще чего. И только затем присваивать параметру именно как TDate или TDateTime, но ни в коем случае не строкой.
...
Рейтинг: 0 / 0
23.07.2003, 21:31
    #32216319
AndreyBond
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с датой в таблицах SQL Server и mdb
Странно, все варианты испробовал, заработало и там и там только вот так:
Код: plaintext
1.
2.
3.
SQLQuery.SQL.Clear;
SQLQuery.SQL.Add('SELECT * FROM Sales WHERE Date1 BETWEEN :Dat1 AND :Dat2');
SQLQuery.Parameters[ 0 ].Value:=DateToStr(dtpStartPr.Date);
SQLQuery.Parameters[ 1 ].Value:=DateToStr(dtpFinPr.Date);
...
Рейтинг: 0 / 0
24.07.2003, 06:12
    #32216384
_Дмитрий_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с датой в таблицах SQL Server и mdb
Провел некоторые эксперименты с разными ADO провайдерами.
Запрос нормально отрабатывает, если в свойствах соединения с SQL Server стоит русский язык. Если стоит английский, то запрос не работает! Поэтому использую
Код: plaintext
SET LANGUAGE Russian
C mdb файлами работа запроса зависит от локальных настроек windows. Если стоит русский язык, то все в порядке.
Спасибо всем за помощь.
...
Рейтинг: 0 / 0
24.07.2003, 06:16
    #32216386
Mihail R.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с датой в таблицах SQL Server и mdb
Код: plaintext
1.
2.
3.
SQLQuery.SQL.Clear;
SQLQuery.SQL.Add('SELECT * FROM Sales WHERE Date1 BETWEEN :Dat1 AND :Dat2');
SQLQuery.Parameters[ 0 ].Value:=dtpStartPr.Date;
SQLQuery.Parameters[ 1 ].Value:=dtpFinPr.Date;

параметрам прописать тип TDateTime и все будет работать замечательно под любой коннект, под любой ОС и любом языке.

НУ СКОЛЬКО МОЖНО ПОВТОРЯТЬ: НЕЛЬЗЯ В СТРОКУ КОНВЕРТИТЬ!!!
...
Рейтинг: 0 / 0
24.07.2003, 09:48
    #32216483
AndreyBond
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с датой в таблицах SQL Server и mdb
Может и нельзя, но если конвертить в строку всё работает правельно, а вот если в дату конвертить, то аксекс понимает дату, например 02.07.2003, как 7 февраля 2003 года, а не так как мы её понимаем.
...
Рейтинг: 0 / 0
24.07.2003, 10:36
    #32216541
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с датой в таблицах SQL Server и mdb
mdb - для него действую только Regional Settings на твоей машине
SQLServer - для него правила определяют
1. Regional Settings на машине клиента определяют формат даты как ее будет трактовать клиент - т.е. если стоит mm/dd/yy - то все что посылается и принимается будет анализироваться и восприниматься по этому шаблону
2. Login Language - для каждого логина на сервере можно установить язык логина - он определяет как будет воспринимать данные от клиента сервер.
Проверьте одинаковы ли он.
...
Рейтинг: 0 / 0
24.07.2003, 10:44
    #32216550
Papka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с датой в таблицах SQL Server и mdb
> AndreyBond

Nu ne savsem tak. Ja rabotaju i s mdb i s MS SQL i pri peredache dati parametrom s tipom data - vse rabotajet normalno.
...
Рейтинг: 0 / 0
24.07.2003, 12:28
    #32216738
AndreyBond
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с датой в таблицах SQL Server и mdb
Ну не знаю, у меня JDE, которое в делфи 5, не хочет дату правельно трактовать :-(( Тебе значит повезло, а мне или не повезло или руки кривые.. :-))
...
Рейтинг: 0 / 0
24.07.2003, 12:30
    #32216743
AndreyBond
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с датой в таблицах SQL Server и mdb
Ну не знаю, у меня ADO, которое в делфи 5 (при работе через Jet 4.0), не хочет дату правельно трактовать :-(( Тебе значит повезло, а мне или не повезло или руки кривые.. :-))
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Работа с датой в таблицах SQL Server и mdb / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]