Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.24;
Скачать: CL | DM;

Вниз

Подскажите пожайлусата как правильно и рационально   Найти похожие ветки 

 
svt   (2006-10-12 10:17) [0]

Подскажите пожайлусата как правильно и рационально  конвертировать формат даты из DateTimePicker1.DateTime в формат mssql. Дело в том что формат в DateTimePicker1.DateTime (дд.мм.гггг), а в mssql - мм.дд.гггг (т.е. в инсерт можно так записать).
Короче говоря помогите решить этот вопрос. что и как правильно необходимо сделать. Спасибо


 
Sergey13 ©   (2006-10-12 10:21) [1]

Через параметры SQL запроса.


 
ANB ©   (2006-10-12 10:24) [2]


> а в mssql - мм.дд.гггг

кто сказал такую глупость ?


 
svt   (2006-10-12 10:25) [3]


> Через параметры SQL запроса.

а на примере возможно показать... просто очн необходимо сейчас....плз


 
ANB ©   (2006-10-12 10:28) [4]


> просто очн необходимо сейчас

просто ничего не бывает. свыкнись, что теорию надо учить. и на это нужно время.
почитай книжку.

insert into table1 (F1, F2, F3) values (:F1, :F2, :F3)


 
svt   (2006-10-12 10:30) [5]


> кто сказал такую глупость ?

т.е. в базе формат храниться в форме гггг-мм-дд 00:00:000.000
а в insert into table (date1) values ("13.10.2006") можно записать и така... при условии, что у меня в настройках базы выбран "язык для пользователя"-russian.
в делфях говорят есть функция, подобная DateToStr, ну только для SQL формата? это правда, если есть то какие у нее параметры настройки?


 
k2 ©   (2006-10-12 10:32) [6]

про типы таки читать не хочешь, пытаешься записать строку в поле типа даты


 
svt   (2006-10-12 10:32) [7]


> insert into table1 (F1, F2, F3) values (:F1, :F2, :F3)

что такое :F1...?


 
k2 ©   (2006-10-12 10:33) [8]

параметр, связанная переменная


 
svt   (2006-10-12 10:41) [9]

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


 
k2 ©   (2006-10-12 10:44) [10]

http://delphimaster.net/view/2-1160626264/


 
svt   (2006-10-12 10:47) [11]

необходимо использовать convert(datetime,date1,104)?


 
SergeD   (2006-10-12 10:53) [12]

Пример очень простой.
Пишешь запрос:
INSERT INTO TABLE1 (ПОЛЕДАТЫ, ПОЛЕ1, ПОЛЕ2)
VALUE (:DAT, :POL1,:POL2)

А потом, когда тебе нужно будет заполнить эти поля, просто передашь параметры с нужным типом. остальное БД сделает сама.
Query.ParamByName("dat").asDate:= дата;
Query.ParamByName("pol1").asInteger:= число;
Query.ParamByName("pol2").asString:= строка;
Query.ExecQuery;


 
Bless ©   (2006-10-12 10:56) [13]

svt   (12.10.06 10:30) [5]>
Тебе дали лучший в твоей ситуации совет: пользуйся параметрами.

ADODataset1.commandtext := " insert into table1 (F1, F2, F3) values (:F1, :F2, :F3)"
ADODataSet1.Parameters.ParamValues["F1"] := DateTimePicker1.DateTime;


> k2 ©   (12.10.06 10:32) [6]
> про типы таки читать не хочешь, пытаешься записать строку
> в поле типа даты
>


Дык, это ж не криминал, если строка сформирована надлежащим образом.

>т.е. в базе формат храниться в форме гггг-мм-дд 00:00:000.000

Это не так.
По поводу конвертирования строки в дату рекомендую почитать следующие статьи в Book Online:

- Writing International Transact-SQL Statements
- Using Date and Time Data
- Unseparated String Format
- Rules for Entering Search Values

Хотя параметры лучше.


 
dr Gonzo ©   (2006-10-12 10:57) [14]

1. Нужно использовать ПАРАМЕТРЫ хранимых процедур или квери.

  Для Хран. Процедуры:
 
  SELECT * FROM TABLE1 WHERE FieldDate > @ParamDate
 
  в коде Delphi :
  ...
  ADOStoredProc1.Parameters.ParamByName("@ParamDate").Value := XXXX;
  ...
  где XXX тип TDateTime

  для ADOQuery
 
  ADOQuery.SQL.Text:= "SELECT * FROM TABLE1 WHERE FieldDate > :@ParamDate"
 
  ADOQuery.Parameters.ParamByName("@ParamDate").Value := XXXX;

2. MSSQL понимает 2 формата даты их строки.
  а ) который настроен в кодовой странице машины - свойства сервера.
  б ) универсальный формат MSSQL, который не зависит от настроек :
   yyyymmdd


 
k2 ©   (2006-10-12 10:57) [15]

Bless ©   (12.10.06 10:56) [13]
аха не криминал, пока настройки на базе не поменялись
программу будешь перекомпилировать?


 
svt   (2006-10-12 11:00) [16]

СПАСИБО за помощь...теперь хоть видно в каком направлении двигать.
а вот по поводу convert? что скажете.... стоит ли использовать?


 
Bless ©   (2006-10-12 11:02) [17]


> svt   (12.10.06 10:47) [11]
> необходимо использовать convert(datetime,date1,104)?


Нет, если datetime  - это DateTimePicker1.DateTime.
Похоже, у тебя в голове полная каша по поводу дат.
В справке по TDateTimePicker ты мог бы увидеть, что
DateTime: TDateTime
type TDateTime = type Double;

т.е. свойство DateTime - это просто вещественное число.
А convert(datetime,date1,104) подразумевает (о чем недвусмысленно написано в BOL), что первый параметр - character data, то бишь строка.


 
Bless ©   (2006-10-12 11:04) [18]


> k2 ©   (12.10.06 10:57) [15]
>
> аха не криминал, пока настройки на базе не поменялись
> программу будешь перекомпилировать?



> Bless ©   (12.10.06 10:56) [13]
> если строка сформирована надлежащим образом


Дата вида "YYYYMMDD HH:MM:SS.fff" будет всегда корректна независимо от настроек базы


 
svt   (2006-10-12 11:07) [19]


> ADODataset1.commandtext := " insert into table1 (F1, F2,
>  F3) values (:F1, :F2, :F3)"
> ADODataSet1.Parameters.ParamValues["F1"] := DateTimePicker1.
> DateTime;

вот в этой ситуации необходимо проверять наличие двойных кавычек, или это делается автоматом?


 
svt   (2006-10-12 11:09) [20]

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


 
svt   (2006-10-12 11:12) [21]

Вот еще вопрос. Что рациональнее использовать для внесения, обновления и удаления данных в базе :ADODataSet1  или ADOCommand1?


 
SergeD   (2006-10-12 11:14) [22]

<q>>вот в этой ситуации необходимо проверять наличие двойных кавычек, или это делается автоматом?</q>
Каких двойных кавычек?


 
Bless ©   (2006-10-12 11:16) [23]


> svt   (12.10.06 11:09) [20]
>
> я спрашиваю это в том, случае , если я через параметры буду
> предавть слово, содержащее кавычку.


Гм...

если так:
var
 st: string;
...
Parameters.ParamValues["st_param"] := st;

то абсолютно равнобедренно, есть в st кавычки или нет, что в st лежит, то и передастся.

а если так:
Parameters.ParamValues["st_param"] := "блаблабла""блаблабла";
то вместо "" написать одну кавычку тебе компилятор не позволит
Не понимаю проблемы :)


 
Bless ©   (2006-10-12 11:24) [24]


> svt   (12.10.06 11:12) [21]
>
> Вот еще вопрос. Что рациональнее использовать для внесения,
>  обновления и удаления данных в базе :ADODataSet1  или ADOCommand1?
>


Ну, тут дело не в рациональности. Они предназначены для разных целей
ADODataset - для запросов, возвращающих данные какой-то выборки (то есть SELECT, обычно).
ADOCommand - для INSERT, UPDATE, DELETE. (можно в принципе и для SELECT, но есть ньюансы, т.к. ADOCommand - не потомок TDataset)

Если попробуешь использовать ADODataset для  INSERT, UPDATE, DELETE, поймаешь ошибку типа "нет данных" (как точно она звучит, мне проверять лениво), хотя запрос и сработает.


 
svt   (2006-10-12 11:26) [25]


> Не понимаю проблемы :)

в поле edit пользователь вводит текст содержащий апостроф.
присваиваю переменной txt:=edit1.text;
а потом
Parameters.ParamValues["st_param"] := txt;
я проверял на наличие апострофа и если он встречался в тексте, то заменял на двойную. так ошибок не было.... а после побработки  все нормально. вот почему и спрашиваю.
если проблемы нет то вопрос не имеет силы:)


 
svt   (2006-10-12 11:29) [26]


> ADOCommand - для INSERT, UPDATE, DELETE. (можно в принципе
> и для SELECT, но есть ньюансы, т.к. ADOCommand - не потомок
> TDataset)

ADOCommand  - работает с параметрами так же как и ADODataset1?

я спрашиваю, т.к. был приведен пример
ADODataset1.commandtext := " insert into table1 (F1, F2, F3) values (:F1, :F2, :F3)"


 
svt   (2006-10-12 11:33) [27]

Я использовал  ADOCommand  для вставки, обновления и удаления.
У меня ADOCommand  один и через него я выполняю различные комманды с выше указанными условиями (insert,delete...)
т.е. по логике вещей я могу программно указать параметры in commandSting и потом им (параметрам) присваивать свои значения?


 
Bless ©   (2006-10-12 11:37) [28]


> я спрашиваю, т.к. был приведен пример
> ADODataset1.commandtext := " insert into table1 (F1, F2,
>  F3) values (:F1, :F2, :F3)"


Мой косяк :) Для INSERT надо было ADOCommand.


 
svt   (2006-10-12 11:43) [29]


> Bless ©  

плз ответь на [25] [26] [27]


 
Bless ©   (2006-10-12 11:52) [30]

>ADOCommand  - работает с параметрами так же как и ADODataset1?

да.

Вообще-то ответы на все твои вопросы были даны ранее мной или другими участниками обсуждения.
А если остались какие-то сомнения, то ты их уже давно разрешил бы, просто ПОПРОБОВАВ на практике то, что тебе насоветовали.


 
Stanislav ©   (2006-10-12 12:01) [31]

svt   (12.10.06 10:17)  

Всегда передаю дату в таком формате: "20061231" (YYYYMMDD) - всегда правильно.


 
svt   (2006-10-12 12:05) [32]


> А если остались какие-то сомнения, то ты их уже давно разрешил
> бы, просто ПОПРОБОВАВ на практике то, что тебе насоветовали.
>

с момента задания вопроса до момента прочтения
> Bless ©   (12.10.06 11:52) [30]


уже наэксперементировал и навносил пробную инфу в базу.... работает спасибо. рад что не обломался мне советовать. спасибо.


 
evvcom ©   (2006-10-12 12:08) [33]

> [32] svt   (12.10.06 12:05)

Да приходи еще, не стесняйся. :)


 
MaxDAG ©   (2006-10-13 16:47) [34]

Когда рабол над АСУ предприятия встретился с проблемой переноса данных между ORACLE, IB и MSSQL. Самым муторнам оказалось перенести поля с типом ДАТА из-за их различий.
Попробовали брать тип TDateTime, а точнее FLOAT, что в той или иной степени подошло ко всем базам, сортировалось и работало при сравнении значений.



Страницы: 1 вся ветка

Текущий архив: 2006.12.24;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.108 c
15-1165320497
HRust
2006-12-05 15:08
2006.12.24
CGI не исполняются на сервере


11-1142084192
GMax
2006-03-11 16:36
2006.12.24
KolListbox loMultiSelect


6-1154054443
Гриха
2006-07-28 06:40
2006.12.24
Передать файл через сеть


15-1165168673
Горгер
2006-12-03 20:57
2006.12.24
Получить адрес в ассемблерной вставке


15-1164755613
Real
2006-11-29 02:13
2006.12.24
Ссылка на папку вида - file://10.0.0.200/folder