Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.04.2009, 10:24   #1
SlavaSH
Форумчанин
 
Регистрация: 12.08.2008
Сообщений: 174
По умолчанию Type mismatch in expression

У меня такая проблема. Создаю запрос:

Query.Close;
Query.SQL.Text:='Insert into Schet_tovar (Key_tovar, Kol_vo, Cen, Nds, Key_schet)';
Query.SQL.Add('select Key_tovar, Kol_vo, Cen, Nds, :Key_schet1 from Schet_tovar');
Query.SQL.Add('where Key_schet = :Key_schet2');
Query.ParamByName('Key_schet1').AsI nteger:=Query1Key_schet.AsInteger;
Query.ParamByName('Key_schet2').AsI nteger:=Query2Key_schet.AsInteger;
Query.ExecSQL;

И выскакивает ошибка Type mismatch in expression.

Где здесь несоответствие типов???

База данных Paradox7
SlavaSH вне форума Ответить с цитированием
Старый 24.04.2009, 10:49   #2
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

есть такое дело
если ты попробуешь выполнить такой запрос
Код:
select Key_tovar, Kol_vo, Cen, Nds, :Key_schet1 
from Schet_tovar
то и получишь эту ошибку
нужно явно указать тип переменной в заголовке селекта
сам пару раз так натыкался

попробуй писать вместо этого
Код:
:Key_schet1
это
Код:
cast(:Key_schet1 as integer)
soleil@mmc вне форума Ответить с цитированием
Старый 24.04.2009, 11:38   #3
SlavaSH
Форумчанин
 
Регистрация: 12.08.2008
Сообщений: 174
По умолчанию

исправил запрос на

Query.Close;
Query.SQL.Text:='Insert into Schet_tovar (Key_tovar, Kol_vo, Cen, Nds, Key_schet)';
Query.SQL.Add('select Key_tovar, Kol_vo, Cen, Nds, cast(:Key_schet1 as integer) from Schet_tovar');
Query.SQL.Add('where Key_schet = :Key_schet2');
Query.ParamByName('Key_schet1').AsI nteger:=Query1Key_schet.AsInteger;
Query.ParamByName('Key_schet2').AsI nteger:=Query2Key_schet.AsInteger;
Query.ExecSQL;

Теперь вылазиет ошибка:
Capability not supported

Ну что за хрень??????
SlavaSH вне форума Ответить с цитированием
Старый 24.04.2009, 11:39   #4
SlavaSH
Форумчанин
 
Регистрация: 12.08.2008
Сообщений: 174
По умолчанию

Цитата:
Сообщение от soleil@mmc Посмотреть сообщение
есть такое дело
если ты попробуешь выполнить такой запрос
Код:
select Key_tovar, Kol_vo, Cen, Nds, :Key_schet1 
from Schet_tovar
то и получишь эту ошибку
нужно явно указать тип переменной в заголовке селекта
сам пару раз так натыкался

попробуй писать вместо этого
Код:
:Key_schet1
это
Код:
cast(:Key_schet1 as integer)
исправил запрос на

Query.Close;
Query.SQL.Text:='Insert into Schet_tovar (Key_tovar, Kol_vo, Cen, Nds, Key_schet)';
Query.SQL.Add('select Key_tovar, Kol_vo, Cen, Nds, cast(:Key_schet1 as integer) from Schet_tovar');
Query.SQL.Add('where Key_schet = :Key_schet2');
Query.ParamByName('Key_schet1').AsI nteger:=Query1K ey_schet.AsInteger;
Query.ParamByName('Key_schet2').AsI nteger:=Query2K ey_schet.AsInteger;
Query.ExecSQL;

Теперь вылазиет ошибка:
Capability not supported

Ну что за хрень??????
SlavaSH вне форума Ответить с цитированием
Старый 24.04.2009, 11:56   #5
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

а этот запрос ты можешь выполнить?
Код:
Query.Close;
Query.SQL.Text:='select Key_tovar, Kol_vo, Cen, Nds, cast(:Key_schet1 as integer) from Schet_tovar';
Query.SQL.Add('where Key_schet = :Key_schet2');
Query.ParamByName('Key_schet1').AsInteger:=Query1Key_schet.AsInteger;
Query.ParamByName('Key_schet2').AsInteger:=Query2Key_schet.AsInteger;
Query.Open;
почитай доки на парадокс - может он cast не понимает?!
а может есть еще какие-то "местные" функи приведения типов

апдейт
торможу чота я
попробуй такой враиант:

Код:
Query.Close;
Query.SQL.Text:='Insert into Schet_tovar (Key_tovar, Kol_vo, Cen, Nds, Key_schet)';
Query.SQL.Add(format('select Key_tovar, Kol_vo, Cen, Nds, %d from Schet_tovar', [Query1Key_schet.AsInteger]));
Query.SQL.Add('where Key_schet = :Key_schet2');
Query.ParamByName('Key_schet2').AsInteger:=Query2Key_schet.AsInteger;
Query.ExecSQL;

Последний раз редактировалось soleil@mmc; 24.04.2009 в 12:18.
soleil@mmc вне форума Ответить с цитированием
Старый 24.04.2009, 13:42   #6
SlavaSH
Форумчанин
 
Регистрация: 12.08.2008
Сообщений: 174
По умолчанию

Цитата:
Сообщение от soleil@mmc Посмотреть сообщение
а этот запрос ты можешь выполнить?
Код:
Query.Close;
Query.SQL.Text:='select Key_tovar, Kol_vo, Cen, Nds, cast(:Key_schet1 as integer) from Schet_tovar';
Query.SQL.Add('where Key_schet = :Key_schet2');
Query.ParamByName('Key_schet1').AsInteger:=Query1Key_schet.AsInteger;
Query.ParamByName('Key_schet2').AsInteger:=Query2Key_schet.AsInteger;
Query.Open;
почитай доки на парадокс - может он cast не понимает?!
а может есть еще какие-то "местные" функи приведения типов

апдейт
торможу чота я
попробуй такой враиант:

Код:
Query.Close;
Query.SQL.Text:='Insert into Schet_tovar (Key_tovar, Kol_vo, Cen, Nds, Key_schet)';
Query.SQL.Add(format('select Key_tovar, Kol_vo, Cen, Nds, %d from Schet_tovar', [Query1Key_schet.AsInteger]));
Query.SQL.Add('where Key_schet = :Key_schet2');
Query.ParamByName('Key_schet2').AsInteger:=Query2Key_schet.AsInteger;
Query.ExecSQL;
первый запрос работает без проблем. Значит он понимает cast.
А вот второй не хочет сцука. Опять несоответствие типов какое-то вылазиет.

Даже такой метод не прокатывает:

Query.SQL.Text:='Insert into Schet_tovar (Key_tovar, Kol_vo, Cen, Nds, Key_schet)';
Query.SQL.Add('select Key_tovar, Kol_vo, Cen, Nds, '+Query1Key_schet.AsString+' from Schet_tovar');
Query.SQL.Add('where Key_schet = '+Query2Key_schet.AsString);

опять Type mismatch in expression
SlavaSH вне форума Ответить с цитированием
Старый 24.04.2009, 13:43   #7
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

а так?
Код:
Query.SQL.Text:='Insert into Schet_tovar (Key_tovar, Kol_vo, Cen, Nds, Key_schet)';
Query.SQL.Add('select Key_tovar, Kol_vo, Cen, Nds, '+Query1Key_schet.AsString+' Key_schet from Schet_tovar');
Query.SQL.Add('where Key_schet = '+Query2Key_schet.AsString);
просто вводишь именование поля в селекте
soleil@mmc вне форума Ответить с цитированием
Старый 24.04.2009, 13:57   #8
SlavaSH
Форумчанин
 
Регистрация: 12.08.2008
Сообщений: 174
По умолчанию

Цитата:
Сообщение от soleil@mmc Посмотреть сообщение
а так?
Код:
Query.SQL.Text:='Insert into Schet_tovar (Key_tovar, Kol_vo, Cen, Nds, Key_schet)';
Query.SQL.Add('select Key_tovar, Kol_vo, Cen, Nds, '+Query1Key_schet.AsString+' Key_schet from Schet_tovar');
Query.SQL.Add('where Key_schet = '+Query2Key_schet.AsString);
просто вводишь именование поля в селекте
забавно, но тоже Type mismatch in expression.

Может быть ты хотел предложить этот вариант?

Query.SQL.Text:='Insert into Schet_tovar (Key_tovar, Kol_vo, Cen, Nds, Key_schet)';
Query.SQL.Add('select Key_tovar, Kol_vo, Cen, Nds, Key_schet from Schet_tovar');
Query.SQL.Add('where Key_schet = '+Query2Key_schet.AsString);

В этом случае выскакивает ошибка Capability not supported

Даже при запросе
Query.SQL.Text:='Insert into Schet_tovar (Key_tovar, Kol_vo, Cen, Nds, Key_schet)';
Query.SQL.Add('select Key_tovar, Kol_vo, Cen, Nds, Key_schet from Schet_tovar');
выскакивает ошибка Capability not supported

Я уже не знаю что и думать.
SlavaSH вне форума Ответить с цитированием
Старый 24.04.2009, 14:01   #9
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

а как у тебя объявлено поле Key_schet в таблице?
soleil@mmc вне форума Ответить с цитированием
Старый 24.04.2009, 14:07   #10
SlavaSH
Форумчанин
 
Регистрация: 12.08.2008
Сообщений: 174
По умолчанию

Цитата:
Сообщение от soleil@mmc Посмотреть сообщение
а как у тебя объявлено поле Key_schet в таблице?
тип поля?

всего в таблице Schet_tovar 6 полей:
key_Schet_tovar Autoincrement
key_Schet Integer
key_Tovar Integer
Kol_vo Number
Cena Number
Nds Integer
SlavaSH вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Incompatible type conversion Fox99 Общие вопросы C/C++ 4 14.08.2008 11:45
New Type Манжосов Денис :) Общие вопросы Delphi 5 30.07.2008 12:34
разделы type-а: private, pub....... Altera Общие вопросы Delphi 4 16.02.2008 17:19
Паскаль. Тype mismatch gamer123 Помощь студентам 5 20.01.2008 11:07