
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.96] |
![]() |
|
Сообщ.
#1
,
|
|
|
Уважаемые господа!
Подскажите где у меня ошибка? База в файле Access через ADO. Создаю запрос с использованием DateEdit: ... SQL.Add('(Date='''+DateEdit.EditText+''')'); ... компилируется нормально, но при обращении выдает ошибку "Несоответствие типов данных в выражении условия отбора". |
![]() |
Сообщ.
#2
,
|
|
Используй параметры:
![]() ![]() ... SQL.Add('(Date=:P_DATE)'); SQL.ParamByName('P_DATE').Value = DateEdit.Date; ... |
Сообщ.
#3
,
|
|
|
Спасибо за такой быстрый ответ, но к сожалению не компилируется.
Пишет, что не понимает "Parameters". |
![]() |
Сообщ.
#4
,
|
|
Цитата nikvicfc, 8.10.04, 15:48 SQL.Add('(Date='''+DateEdit.EditText+''')'); ![]() ![]() '(Date=#'+DateEdit.EditText+'#)' |
Сообщ.
#5
,
|
|
|
Уважаемый Master!
При таком коде появляется ошибка: 'Дата содержит синтаксическую ошибку в выражении запроса '(Date=##)''. |
Сообщ.
#6
,
|
|
|
Цитата nikvicfc, 8.10.04, 15:48 тут кажется ошибки нет, но дату нужно вводить соответствующим форматом. точно не помню но кажется YYYY-MM-DD.SQL.Add('(Date='''+DateEdit.EditText+''')'); или как писал Chow через параметр. |
Сообщ.
#7
,
|
|
|
Если выдается именно (дословно) такая ошибка:
Цитата 'Дата содержит синтаксическую ошибку в выражении запроса '(Date=##)'' то это значит, что DateEdit.EditText имеет пустое значение. Иначе было бы: 'Дата содержит синтаксическую ошибку в выражении запроса '(Date=#чего-то там#)'' |
![]() |
Сообщ.
#8
,
|
|
Цитата nikvicfc, 11.10.04, 09:04 'Дата содержит синтаксическую ошибку в выражении запроса '(Date=##)''. В Accesse дату принято заключать в #. Слово 'Date' - являеться зарезервированным во многих язаках, и если оно являеться именем поля то обычно надо брать в кавычки. |
Сообщ.
#9
,
|
|
|
Уважаемые господа!
Отвечаю по-порядку. И в таблице и в запросе формат dd.mm.yyyy, в таблице Access - краткий формат даты. Первоначально сообщение об ошибке так и было написоно:'Дата содержит синтаксическую ошибку в выражении запроса '(Date=#11.10.2004#)''. Название поля(Date) на самом деле иное. |
![]() |
Сообщ.
#10
,
|
|
Цитата nikvicfc, 11.10.04, 13:01 '(Date=#11.10.2004#)''. А так (Date=#11/10/2004#) ![]() ![]() WHERE (((Заказы.ДатаРазмещения)=#7/26/1996#)); |
Сообщ.
#11
,
|
|
|
слово DATE зарезервировано стандартом ANSI/iso sql92.
Оно не допустимо к исползованию как имя поля. |
Сообщ.
#12
,
|
|
|
Уважаемый Master!
Попробывал заменить везде, в том числе в системе разделители даты. Кроме изменения разделителей ничего не изменилось. Ошибка та же:'Дата содержит синтаксическую ошибку в выражении запроса '(S_Date=#11/10/2004#)''. Уважаемый Pigas, как я уже писал название поля на самом деле не Date, так написал на форуме для простоты. |
Сообщ.
#13
,
|
|
|
Я работаю на Delphi 7 с использованием DBExpress Компонет.
И у меня тоже возникла ошибка при работе с датой, точнее передачей ее запросом. Цитата SQLQuery1.Close; SQLQuery1.SQL.Text:='insert into history (now_date) values (:date)'; SQLQuery1.ParamByName('date').asDateTime:=date; SQLQuery1.ExecSQL(); Он ругается : "dbExpress Error: Invalid Field Type" В таблице поле типа: datetime Также пытался Задавать параметр asDate. Все равно нивкакую. |
![]() |
Сообщ.
#14
,
|
|
Какой текст запроса полностью?
(И все-же стоит использовать параметры - не надо ломать голову о формате представления того или иного типа. Тем более, что на другом компьютере могут быть другие настройки и ваша программа не будет работать) Добавлено Цитата Mamont, 12.10.04, 09:07 'insert into (now_date) values (:date)' Где здесь указано имя таблицы? |
Сообщ.
#15
,
|
|
|
Забыл сказать, что тоже компилирует он нормально, ошибка возникает воремя обращения.
Добавлено Sorry Цитата SQLQuery1.SQL.Text:='insert into history (now_date) values (:date)'; Это я когда пост писал, забыл написать. В проге название таблицы присутствует. |
Сообщ.
#16
,
|
|
|
попробуи вместо asDateTime - Value. пусть сам с типом разберется
|
Сообщ.
#17
,
|
|
|
Use a number (as date value) in SQL text.
Example: 'SELECT * FROM Country WHERE Date1=36736' Actually, a date value is a number. So, #07.29.2000# = 36736. If you find a date value as a number then can use FormatFloat function: str1=FormatFloat('#', Date) //str1='36736' Finally, Query1.SQL.Text= 'SELECT * FROM Country WHERE Date1=' + FormatFloat('#', Date); Note: This solution is properly work BDE, VB, MS-Access, MS-SQL. |
Сообщ.
#18
,
|
|
|
При следующем коде:
Close; SQL.Clear; SQL.Add('SELECT *'); SQL.Add('FROM TDAT'); SQL.Add('WHERE S_DDT=#'+DE.EditText+'#'); SQL.Add('ORDER BY sss'); Open; ошибок синтаксиса программа не выдает, но странно себя ведет. Т.е. на некоторые даты реагирует как положено(10.20.2004, 20.10.2004), а все остальные просто не видит. Что за чертовщина? Кстати проблемма в синтаксисе была в том, что было не соответствие в маске ввода в Accesse и в компонентах Delphi. Везде в delphi подставил английскую маску даты и ошибка исчезла. |
Сообщ.
#19
,
|
|
|
Kobra, Пробовал и Value, результат тот же.
|
![]() |
Сообщ.
#20
,
|
|
Цитата nikvicfc, 12.10.04, 12:00 (10.20.2004, 20.10.2004), Какой формат даты (DD.MM.YYYY or MM.DD.YYYY)? Да и что лежит в DE.EditText |
Сообщ.
#21
,
|
|
|
select * from mytable where mydate = ' + FormatFloat('#', DE.Date)
|
Сообщ.
#22
,
|
|
|
Огромное всем спасибо!
Решение моего вопроса следующее: SQL.Clear; SQL.Add('SELECT *'); SQL.Add('FROM Table'); SQL.Add('WHERE S_Date=dateValue("'+DateEdit.EditText+'")'); Фильтрация выполняется как положено. " - двойные кавычки. Но видимо прав Show работать с параметрами надежнее, не нужно бутет подстраиваться на каждой машине. ![]() |
Сообщ.
#23
,
|
|
|
Vmesto ispol'zovaniia AsDateTime ili AsDate neobhodimo ispol'zovat' AsSQLTimeStamp. Dlia preobrazovaniia peremennoj tipa TDateTime v TimeStamp ispol'zujte funkciiu DateTimeToSQLTimeStamp iz modulia SqlTimSt (neobhodimo vstavit' ssylku na etot modul' v sekciiu uses).
A voobshche otvet na etot vopros nahoditsia na http://bdn.borland.com/article/0%2C1410%2C30078%2C00.html. Nadeius' u Vas s inglish vs? OK. IA prosto perev?l vkratce ![]() Добавлено У меня тоже возникает ошибка "dbExpress Error: Invalid Field Type" в режиме исполнения программы. Но не с полем Дата-Время, а даже и в таком коде: var FloatParam1, FloatParam2: Float; ... SQLDataSet1.Close; SQLDataSet1.ParamByName('FloatParam1').AsFloat := FloatParam1; SQLDataSet1.ParamByName('FloatParam2').AsFloat := FloatParam2; SQLDataSet1.Open;// <-----error ![]() Использую связку Delphi - Oracle |
Сообщ.
#24
,
|
|
|
попробуи вместо AsFloat - Value. пусть сам с типом разберется
|
Сообщ.
#25
,
|
|
|
![]() ![]() Close; SQL.Clear; SQL.Add('SELECT *'); SQL.Add('FROM TDAT'); SQL.Add('WHERE S_DDT=:d'); SQL.Add('ORDER BY sss'); parameters.ParseSQL(SQL.Text, true); parameters.parambyname('d').value:=DE.EditText; Open; |
Сообщ.
#26
,
|
|
|
Я сталкивасля с проблемой использования Даты в SQL запросах:
Вот что накопал: 1) Для каждой БД (MySQL, MSSQL, Access, BDE) в запросе должен использоваться свой формат даты: MM.DD.YYYY, DD.MM.YYYY, MM/DD/YYYY и т.д. какой формат конкретно у какой БД я вычислял эксперементально 2) В запросе я всегда дату ставлю в одиночные кавычки: "SELECT * FROM tablename WHERE date='24.11.2004'" "INSERT INTO tablename (id,date) VALUES(1,'24.11.2004')" 3) В программе на Delphi есть очень полезная функция: FormatDateTime Рабочий пример: dt:TDateTime; Query_SQL:String; dt := DateTimePicker1.DateTime; Query_SQL := 'INSERT INTO ClientCatalog (Name, Id_Group, Address, Description, DateCreate) VALUES('+ ''''+Edit2.Text+''''+ ','+Edit4.Text+ ','''+Edit3.Text+''''+ ','''+Memo1.Text+''''+ ','''+FormatDateTime('MM.DD.YYYY',dt)+''')'; DataModule1.ADOQuery1.Active := False; DataModule1.ADOQuery1.SQL.Clear; DataModule1.ADOQuery1.SQL.Add(Query_SQL); DataModule1.ADOQuery1.ExecSQL; Проблемы исчезали... |
Сообщ.
#27
,
|
|
|
Meverik, угу, спасибо тебе за наблюдения, только оформляй пожалуйста текст программы тегом code. Как - написано вверху в красной рамке.
M Сообщения были разделены в тему "две проблемы при конвертации" M Сообщения были разделены в тему "две проблемы при конвертации" |