Форум: "Базы";
Текущий архив: 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