Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: SQL ошибка вставки записи (type mismatch in expression)  (Прочитано 24041 раз)
0 Пользователей и 3 Гостей смотрят эту тему.
Элексир
Помогающий

ru
Offline Offline
Пол: Мужской

« : 16-02-2010 09:37 » 

Всем здравствуйте. Помогите пожалуйста с такой проблемой не получается добавлять записи в базу с помощью sql запроса.

Создал с помощью 'database desctop' таблицу paradox c колонками
Datap тип: Date
LS тип: Alpha длина: 4
FIO тип: Alpha длина: 30
Summa тип: Number
в таблицу данные пытаюсь добавить таким вот запросом:
Код:
Query6.SQL.Text:='Insert Into OplatNet(Datap,LS,FIO,Summa)'+
'VALUES('+#39+DateToStr(now())+#39+', '+#39+licSet.Text+#39+', '
+#39+Family.Text+#39+', '+
#39+Sumka.Caption+#39+')';
Query6.ExecSQL;
возвращает же мне заместа выполненного запроса, ошибку
type mismatch in expression.
Буду признателен за помощь как это побороть. Спасибо
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 16-02-2010 09:44 » 

Элексир, покажи содержимое Query6.SQL.Text после присваивания
Записан

Элексир
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 16-02-2010 09:50 » 

Алексей1153++, получается на выходе строка

insert into OplatNet(Datap,LS,FIO,Summa)VALUES('16.02.2010','0560','Иванов Иван Иванович','555.555')
Записан
baldr
Команда клуба

cy
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #3 : 16-02-2010 10:13 » 

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

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #4 : 16-02-2010 10:14 » new

так если у Вас
Summa тип: Number
то зачем берете его в кавычки - '555.555' ?
Записан

I Have Nine Lives You Have One Only
THINK!
Элексир
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 16-02-2010 10:23 » 

Убрал перед кавычки перед суммой и после. ошибка осталась.
блин не заметил сумма показывается через "," 555,555.
p.s. как ее отформатировать под точку. без манипуляций в виндовс?
« Последнее редактирование: 16-02-2010 11:19 от Элексир » Записан
Falsehood
Молодой специалист

ru
Offline Offline
Пол: Женский
не может быть


« Ответ #6 : 16-02-2010 11:47 » 

а то, что дата, как строка передается - это нормально?
Записан

Славная трава...
baldr
Команда клуба

cy
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #7 : 16-02-2010 12:00 » 

а то, что дата, как строка передается - это нормально?
Да, кстати, скорее всего формат даты тоже надо уточнить - тоже зависит от региональных настроек...
Элексир, попробуй руками выполнить такие запросы - и выяснишь формат:

insert into OplatNet(Datap,LS,FIO,Summa)VALUES('16/02/2010','0560','Иванов Иван Иванович',555)
insert into OplatNet(Datap,LS,FIO,Summa)VALUES('02/16/2010','0560','Иванов Иван Иванович',555)
insert into OplatNet(Datap,LS,FIO,Summa)VALUES('02-16-2010','0560','Иванов Иван Иванович',555)
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
Элексир
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 16-02-2010 18:24 » 

в sql эксплорере запрос с такими параметрами прокатывает.
дает ошибку только на сумме, там ему точка нужна.
но щас с датами попробую. и напишу.
Записан
Элексир
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #9 : 16-02-2010 19:22 » 

проверил даты работают как в формате '16.01.2010' так и
'02/16/2010'
Записан
baldr
Команда клуба

cy
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #10 : 17-02-2010 06:48 » 

дает ошибку только на сумме, там ему точка нужна.
Ну тогда тупо сделай замену запятой на точку в строке (сумме) и все.
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
Элексир
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #11 : 17-02-2010 09:46 » 

baldr, спасибо!!!
Записан
baldr
Команда клуба

cy
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #12 : 17-02-2010 10:09 » 

baldr, спасибо!!!
Пожалуйста.. Но учти, что это способ, который применим конкретно в этом случае.. Для курсовика, в принципе, прокатит, особенно если преподаватель не задумывается о таких мелочах..
Но, в принципе, так писать программы - неправильно. Это может привести к ошибке.
В следующий раз твоя программа может быть запущена на компьютере, на котором десятичный разделитель - точка, а на сервере с базой - запятая.. Эти настройки хранятся в локали для локального компьютера и в настройках базы для сервера БД. Из локали получить настройки достаточно просто даже через WinAPI, а вот для БД - это не всегда можно получить..
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #13 : 17-02-2010 10:35 » 

baldr, можно сделать простой универсальный тест Улыбаюсь Есть всего 4 варианта:

бд  комп
.     .
,     .
.     ,
,     ,

нужно сделать тест (результат которого заранее должен быть известен) для каждого сочетания и использовать прошедшее тест сочетание

например, выясняем, что появится, если отформатировать число 1.1
Код:

str=<форматируем число 1.1 >;
if(str=="1,1")
{
  //запятая
}
else
if(str=="1.1")
{
  //точка
}

Записан

Kivals
Команда клуба

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #14 : 17-02-2010 10:47 » 

Цитата
Summa - это число - не заключай его в кавычки.. И учти что в зависимости от локальных настроек десятичный разделитель может быть как точкой, так и запятой.
baldr, Хм... ИМХО ты сам себе противоречишь:
1. Если брать в кавычки - то тогда используется десятичный разделитель из настроек (каких именно - локальных или БД - наверное зависит от СУБД и клиента)
2. Если кавычки убрать - то всегда будт точка, т.к. в синтаксисе SQL точка отделяет десятичную часть, а запятая - параметры
Записан
baldr
Команда клуба

cy
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #15 : 17-02-2010 10:52 » 

Kivals, мы говорим о числе, уже сконвертированном в строку. Кавычки - имелись в виду внутренние, внутри SQL-запроса.
А вообще, ты прав - запятая там вряд ли может быть...
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
Kivals
Команда клуба

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #16 : 17-02-2010 10:55 » 

Именно о числовом поле: если в кавычках - СУБД будет пытаться его конвертировать из строковой константы в числовую; если без - то это числовая константа, а она разделяется точкой
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines