powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Работа с датой в таблицах SQL Server и mdb
18 сообщений из 18, страница 1 из 1
Работа с датой в таблицах SQL Server и mdb
    #32215225
_Дмитрий_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые гуру! Я только недавно начал программировать на 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
Работа с датой в таблицах SQL Server и mdb
    #32215241
AndreyBond
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в конструкции where лучше использовать date1 between '01.01.2003' AND '16.02.2003'
А чтоб универсально было скорее всего надоиспользовать параметры...
...
Рейтинг: 0 / 0
Работа с датой в таблицах SQL Server и mdb
    #32215257
_Дмитрий_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Работа с датой в таблицах SQL Server и mdb
    #32215280
MW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> А если нужна будет третья база в 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
Работа с датой в таблицах SQL Server и mdb
    #32215341
_Дмитрий_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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
Работа с датой в таблицах SQL Server и mdb
    #32215378
BigHarry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверно - беда в формате даты.
Попробуй варианты: '16-01-2003', '2003-01-16'...
...
Рейтинг: 0 / 0
Работа с датой в таблицах SQL Server и mdb
    #32215391
Timujin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотрите формат даты в Windows:
Пуск->Настройка->Панель управления->Язык и стандарты->Дата->Краткий формат.
Задавайте дату в формате, настроенном в Windows
...
Рейтинг: 0 / 0
Работа с датой в таблицах SQL Server и mdb
    #32215418
MW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Побробуй AsDateTime
...
Рейтинг: 0 / 0
Работа с датой в таблицах SQL Server и mdb
    #32215423
_Дмитрий_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В панели управления Краткая дата - "23.07.2003". Задаю дату именно в этом формате... Поменял формат даты на такой - "16/01/2003" (ММ/ДД/ГГГГ) Заработало с mdb, не работает с SQL Server :) Придется видимо, как-то определять к чему подключаемся и соотв. менять sql-строки.
...
Рейтинг: 0 / 0
Работа с датой в таблицах SQL Server и mdb
    #32215504
Фотография Mihail R.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
такое уже обсуждалось много раз.
и ответ всегда один:
все из-за различного фомата даты в NT4, W98,W2000.
в 2000-ой 4 цифры в году, в остальных две.
все баги именно при конвертировании из строки и обратно.

отсюда решение: строкой дату задавать нельзя !
брать либо из DateTimePickera, либо другого какого компонента, либо Date(), либо еще чего. И только затем присваивать параметру именно как TDate или TDateTime, но ни в коем случае не строкой.
...
Рейтинг: 0 / 0
Работа с датой в таблицах SQL Server и mdb
    #32216319
AndreyBond
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Странно, все варианты испробовал, заработало и там и там только вот так:
Код: 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
Работа с датой в таблицах SQL Server и mdb
    #32216384
_Дмитрий_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Провел некоторые эксперименты с разными ADO провайдерами.
Запрос нормально отрабатывает, если в свойствах соединения с SQL Server стоит русский язык. Если стоит английский, то запрос не работает! Поэтому использую
Код: plaintext
SET LANGUAGE Russian
C mdb файлами работа запроса зависит от локальных настроек windows. Если стоит русский язык, то все в порядке.
Спасибо всем за помощь.
...
Рейтинг: 0 / 0
Работа с датой в таблицах SQL Server и mdb
    #32216386
Фотография Mihail R.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
Работа с датой в таблицах SQL Server и mdb
    #32216483
AndreyBond
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может и нельзя, но если конвертить в строку всё работает правельно, а вот если в дату конвертить, то аксекс понимает дату, например 02.07.2003, как 7 февраля 2003 года, а не так как мы её понимаем.
...
Рейтинг: 0 / 0
Работа с датой в таблицах SQL Server и mdb
    #32216541
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mdb - для него действую только Regional Settings на твоей машине
SQLServer - для него правила определяют
1. Regional Settings на машине клиента определяют формат даты как ее будет трактовать клиент - т.е. если стоит mm/dd/yy - то все что посылается и принимается будет анализироваться и восприниматься по этому шаблону
2. Login Language - для каждого логина на сервере можно установить язык логина - он определяет как будет воспринимать данные от клиента сервер.
Проверьте одинаковы ли он.
...
Рейтинг: 0 / 0
Работа с датой в таблицах SQL Server и mdb
    #32216550
Papka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> 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
Работа с датой в таблицах SQL Server и mdb
    #32216738
AndreyBond
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну не знаю, у меня JDE, которое в делфи 5, не хочет дату правельно трактовать :-(( Тебе значит повезло, а мне или не повезло или руки кривые.. :-))
...
Рейтинг: 0 / 0
Работа с датой в таблицах SQL Server и mdb
    #32216743
AndreyBond
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну не знаю, у меня ADO, которое в делфи 5 (при работе через Jet 4.0), не хочет дату правельно трактовать :-(( Тебе значит повезло, а мне или не повезло или руки кривые.. :-))
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Работа с датой в таблицах SQL Server и mdb
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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