Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.12.24;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.151 c
1-1163086672
VID
2006-11-09 18:37
2006.12.24
Кривое отображение формы на другом компе.


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


3-1160652534
REA
2006-10-12 15:28
2006.12.24
Rollback Retaining


9-1139717450
Уважаемый Автор
2006-02-12 07:10
2006.12.24
На каких англоязычных сайтах можно зарегить свою игрушку?


4-1155593723
Sergey_FV
2006-08-15 02:15
2006.12.24
Quick Launch под NT





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский