Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.74/19: Рейтинг темы: голосов - 19, средняя оценка - 4.74
 Аватар для SecretSilent
81 / 81 / 9
Регистрация: 16.02.2010
Сообщений: 637

Type mismatch при добавлении (SQL)

28.04.2010, 22:57. Показов 4029. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите, пожалуйста, с одной проблемой с SQL!
В общем, вот код:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
if (eroadnumber.Text<>'') and (eroadname.Text<>'') and (ekat.Text<>'') and (edem.Text<>'')
      and (estart.Text<>'') and (eend.Text<>'') then
      begin
        with DMkurs.qAddRoad do
          begin
            Close;
            SQL.Clear;
            SQL.Text:='INSERT INTO Roads (RoadCode, RoadName, RoadKat, LevDemand, Length1, Length2) '+
                      ' VALUES (:ed1, :ed2, :ed3, :ed4, :ed5, :ed6)';
            Params.ParamByName('ed1').AsString:=eroadnumber.Text;
            Params.ParamByName('ed2').AsString:=eroadname.Text;
            Params.ParamByName('ed3').Value:=ekat.Text;
            Params.ParamByName('ed4').Value:=edem.Text;
            Params.ParamByName('ed5').Value:=estart.Text;
            Params.ParamByName('ed6').Value:=eend.Text;
            ExecSQL;
          end;
Поля RoadCode, RoadName - alpha
RoadKat, LevDemand - long integer
Length1, Length2 - Number
(СУБД - Paradox).

При попытке выполнить запрос, выдается ошибка с текстом "Type mismatch in expression". Не могу понять, где не совпадают типы! Что неправильно?


Надеюсь на скорую помощь. Заранее спасибо огромное! Пожалуйста, выручите!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.04.2010, 22:57
Ответы с готовыми решениями:

Ошибка при фильтрации шаблон like tclientdataset type mismatch in expression
Помогите! Форума не нашел ответ. Ошибка при фильтрации шаблон like tclientdataset type mismatch in expression. Таблица я создал с...

Ошибка при добавлении записи в таблицу БД "Could not convert variant of type "NULL" into type "OleStr"
Здравствуйте. При работе программы вылетает ошибка &quot;Could not convert variant of type &quot;NULL&quot; into type &quot;OleStr&quot; &quot;,...

Ошибка type mismatch in expression
бд создал в парадоксе. поле AAA - тип Alpha (строковый тип). поле BBB - Long Integer. делаю выборку по набору данных использую...

13
 Аватар для NemiroFFyo
70 / 70 / 3
Регистрация: 29.09.2009
Сообщений: 530
29.04.2010, 01:11
SecretSilent, типы полей в студию
0
 Аватар для SecretSilent
81 / 81 / 9
Регистрация: 16.02.2010
Сообщений: 637
29.04.2010, 01:56  [ТС]
NemiroFFyo, я их указала в своём сообщении:

Цитата Сообщение от SecretSilent Посмотреть сообщение
Поля RoadCode, RoadName - alpha
RoadKat, LevDemand - long integer
Length1, Length2 - Number
(СУБД - Paradox).
0
1263 / 706 / 62
Регистрация: 21.12.2009
Сообщений: 2,256
29.04.2010, 06:10
Причин м.б. несколько.
1. В каком - то из полей ввода используется некорректный разделитель дробной части.
2. Попытка занести некорректное значение (слишком длиную строку)
3. Значением текста в строке ввода для численного поля является пустая строка ''
4. Я бы во всех операторах присвоения использовал
Delphi
1
Params.ParamByName('ed6').AsString:=eend.Text;
Не уверен на 100%, но
Delphi
1
Params.ParamByName('ed6').Value:=eend.Text;
тоже может быть причиной ошибки. В общем случае Value имеет тип вариант. Как система интепритирует тип вариант для поля integer или numeric мне лично неизвестно, но на всякий случай я такие конструкции нигде не использую. Проверьте.
0
 Аватар для SecretSilent
81 / 81 / 9
Регистрация: 16.02.2010
Сообщений: 637
29.04.2010, 08:54  [ТС]
SAMZ, 1-3 я проверяла, там всё хорошо.

4. После ввода информации мне надо будет использовать численные поля для арифметических операций. Если я буду применять AsString для них, это никак не повлияет на их вычисляемость?
0
1263 / 706 / 62
Регистрация: 21.12.2009
Сообщений: 2,256
29.04.2010, 09:24
Цитата Сообщение от SecretSilent Посмотреть сообщение
Если я буду применять AsString для них, это никак не повлияет на их вычисляемость?
Нет, не повлияет. AsString также, как и другие AS... - это функции внешнего представления данных. Внутреннй формат всегда остается таким, каким Вы его описали.
0
 Аватар для SecretSilent
81 / 81 / 9
Регистрация: 16.02.2010
Сообщений: 637
29.04.2010, 10:24  [ТС]
поставила AsString вместо Value. Всё равно - та же ошибка ):
Помогите, пожалуйста! Работа горит!..
0
1263 / 706 / 62
Регистрация: 21.12.2009
Сообщений: 2,256
29.04.2010, 10:39
Попробуй в порядке эксперимента заменить Edit.Text на константы. Какая будет реакция.
Насколько я знаю в Paradox никаких триггеров и хп не бывает. Вроде и грешить больше не на что.
Посмотри еще на описание numeric. Нет ли попытки ввода значения не попадающего под описания.
0
 Аватар для SecretSilent
81 / 81 / 9
Регистрация: 16.02.2010
Сообщений: 637
29.04.2010, 12:09  [ТС]
Пришлось проверять по полю в отдельности. Вся проблема была с типами. Поставила в лоб определения типов, и всё заработало. пока только на редактировании записи проверяла, но думаю, что и в добавлении будет то же самое.

Если кому надо, вот исправленный код:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
procedure TfEditRoad.BitBtn1Click(Sender: TObject);
var Code:string;
    kat, dem: integer;
    l1, l2: double;
begin
    if (roadnumber.Text<>'') and (rname.Text<>'') and (rkat.Text<>'') and (rdem.Text<>'')
        and (rstart.Text<>'') and (rend.Text<>'') then
      begin
        kat:=StrToInt(rkat.Text);
        dem:=StrToInt(rdem.Text);
        l1:=StrToFloat(rstart.Text);
        l2:=StrToFloat(rend.Text);
        Code:=fRoads.DBGridEh1.DataSource.DataSet.FieldByName('RoadCode').AsString;
        fRoads.DBGridEh1.DataSource.DataSet.Active:=false;
        with DMkurs.qBuffer do
          begin
            Close;
            SQL.Clear;
            SQL.Text:='UPDATE Roads SET RoadCode=:rcode,RoadName=:rname, RoadKat=:rkat, LevDemand=:rdem, '+
                      ' Length1=:l1, Length2=:l2 '+
                    'WHERE (RoadCode=:roadcode)';
         {+}   Params.ParamByName('rcode').AsString:=roadnumber.Text;
         {+}   Params.ParamByName('rname').AsString:=rname.Text;
         {+}   Params.ParamByName('rkat').AsInteger:=kat;
          {+}  Params.ParamByName('rdem').AsInteger:=dem;
         {+}   Params.ParamByName('l1').AsFloat:=l1;
         {+}   Params.ParamByName('l2').AsFloat:=l2;
            Params.ParamByName('roadcode').AsString:=Code;
            ExecSQL;
          end;
        fRoads.DBGridEh1.DataSource.DataSet.Active:=true;
        Close;
        ShowMessage('Запись была успешно отредактирована!');
    end
  else
    ShowMessage('Заполните, пожалуйста, все поля.');
 
end;
Добавлено через 27 минут
и на добавление записи (возможно, кому-то будет полезно):
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
procedure TfAddRoad.BitBtn1Click(Sender: TObject);
var Code:string;
    kat, dem: integer;
    l1, l2: double;
begin
  if (eroadnumber.Text<>'') and (eroadname.Text<>'') and (ekat.Text<>'') and (edem.Text<>'')
      and (estart.Text<>'') and (eend.Text<>'') then
      begin
        kat:=StrToInt(ekat.Text);
        dem:=StrToInt(edem.Text);
        l1:=StrToFloat(estart.Text);
        l2:=StrToFloat(eend.Text);
        with DMkurs.qAddRoad do
          begin
            Close;
            SQL.Clear;
            SQL.Text:='INSERT INTO Roads (RoadCode, RoadName, RoadKat, LevDemand, Length1, Length2) '+
                      ' VALUES (:ed1, :ed2, :ed3, :ed4, :ed5, :ed6)';
            Params.ParamByName('ed1').AsString:=eroadnumber.Text;
            Params.ParamByName('ed2').AsString:=eroadname.Text;
            Params.ParamByName('ed3').AsInteger:=kat;
            Params.ParamByName('ed4').AsInteger:=dem;
            Params.ParamByName('ed5').AsFloat:=l1;
            Params.ParamByName('ed6').AsFloat:=l2;
            ExecSQL;
          end;
        Close;
        ShowMessage('Запись была успешно добавлена!');
        fQuestBridge.Show;
      end
  else
    ShowMessage('Заполните, пожалуйста, все поля.');
 
end;
0
1263 / 706 / 62
Регистрация: 21.12.2009
Сообщений: 2,256
29.04.2010, 13:42
Предлагаю небольшой эксперимент. После строк твоего кода
Цитата Сообщение от SecretSilent Посмотреть сообщение
Params.ParamByName('ed5').AsFloat:=l1;
Params.ParamByName('ed6').AsFloat:=l2;
Вставь
Delphi
1
2
Showmessage('ed5 = ' +  Params.ParamByName('ed5').AsString);
Showmessage('ed6 = ' +  Params.ParamByName('ed6').AsString);
Посмотри, что выведется на экран и сравни с тем, что набрано в едитах посимвольно
0
1866 / 1186 / 192
Регистрация: 27.03.2009
Сообщений: 4,603
29.04.2010, 14:05
SQL
1
2
Params.ParamByName('ed1'.Value:=eroadnumber.Text;
            Params.ParamByName('ed2').Value:=eroadname.Text;
0
 Аватар для SecretSilent
81 / 81 / 9
Регистрация: 16.02.2010
Сообщений: 637
29.04.2010, 18:27  [ТС]
SAMZ, сделала так. вывелось всё правильно
0
1866 / 1186 / 192
Регистрация: 27.03.2009
Сообщений: 4,603
30.04.2010, 09:34
пытался подключится по ADO к mdb и выполнить твой запрос. вот что получилось. может поможет
Вложения
Тип файла: zip 123.zip (303.1 Кб, 15 просмотров)
0
 Аватар для SecretSilent
81 / 81 / 9
Регистрация: 16.02.2010
Сообщений: 637
30.04.2010, 10:29  [ТС]
unick12345, спасибо, конечно, но выше я написала, что уже сама разобралась со своей проблемой
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.04.2010, 10:29
Помогаю со студенческими работами здесь

Фильтрация по дате. Type mismatch in expression
Добрый день. Необходимо выбрать данные из таблицы в соответствии с заданным диапазоном дат. Диапазон дат выбирается из DateTimePicker1 и...

Ошибка в ADOQuery: Type mismatch for field 'phisical_io', expecting: LargeInt actual: BCD
Товарищи ситуация такая: есть стандартная ADOQuery, которая забирает данные из поля bigint, соответственно в Query это поле прописывается...

SQL запрос: проверка на одинаковые записи при добавлении
БД: Data, Naimenovanie predpriyatiya, FIO rukovoditelya и т.д. Нужно чтобы при добавлении в одну дату не было повторных Предприятий, т.е....

Ошибка при добавлении записи в таблицу через SQL
Когда я активирую ADOQuery, происходит ошибка &quot;commandtext does not return a resultset&quot;. Сам SQl запрос работает, строка в таблицу...

Обновление treeview при добавлении данных в базу sql
добрый день, подскажите как прописать код кнопки 'сохранить' чтобы обновлялся элемент treeview при добавлении данных в базу sql


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru