Форум: "Базы";
Текущий архив: 2004.05.30;
Скачать: [xml.tar.bz2];
ВнизВставить данные Найти похожие ветки
← →
Klerk (2004-05-11 16:53) [0]Пытаюсь делать так:
sql.add("insert into ""+WorkBaza+"" (Schet) values(:Schet)");
Params[0].asinteger := strtoint(Edit1.text);
При выполнении даёт ошиьку о несовпадении типов.
В Таблице (Paradox7) поле Schet имеет тип S.
Подскажите, как правильно задать параметр?
← →
Соловьев © (2004-05-11 16:55) [1]
> sql.add("insert into ""+WorkBaza+"" (Schet) values(:Schet)");
> Params[0].asinteger := strtoint(Edit1.text);
все можно глянуть?
и перед выполнением посмотри что в Sql.
← →
sniknik © (2004-05-11 16:55) [2]кавычки походу лишнии ("")
← →
Klerk (2004-05-11 17:10) [3]with query1 do
begin
sql.clear;
sql.add("insert into ""+WorkBaza+"" (Schet,Wroten,Firma) values (:Schet,:Wroten,:Firma)");
Params[0].asinteger := strtoint(Edit1.text);
Params[1].Asdate := strtodate(Maskedit1.text);
Params[2].AsString := Edit3.text;
showmessage(sql.text);
//execsql;
end;
Если убрать Params[0], то всё ОК.
То есть, похоже ошибка в этой строке.
Как вообще Short и Integer сочетаются?
← →
Anatoly Podgoretsky © (2004-05-11 17:15) [4]Params[0].AsString := Edit1.text;
← →
Соловьев © (2004-05-11 17:16) [5]
> Params[0].asinteger := strtoint(Edit1.text);
> Params[1].Asdate := strtodate(Maskedit1.text);
> Params[2].AsString := Edit3.text;
ParamByName("Schet").AsInteger := strtoint(Edit1.text);
ParamByName("Wroten").AsDateTime := strtodate(Maskedit1.text);
ParamByName("Firma").AsString := Edit3.text;
← →
Klerk (2004-05-11 17:16) [6]>Anatoly Podgoretsky © (11.05.04 17:15) [4]
>Params[0].AsString := Edit1.text;
Так ведь тип поля в БД :Short.
← →
Соловьев © (2004-05-11 17:17) [7]
> strtodate(Maskedit1.text);
и ты уверен что там дата правильная? используй DateTimePicker
← →
Klerk (2004-05-11 17:22) [8]>Соловьев © (11.05.04 17:17) [7]
Да, уверен. Ведь в таком виде работает (убрал Schet).
with query1 do
begin
sql.clear;
sql.add("insert into ""+WorkBaza+"" (Wroten,Firma) values (:Wroten,:Firma)");
// ParamByName("Schet").AsInteger := strtoint(Edit1.text);
ParamByName("Wroten").AsDateTime := strtodate(Maskedit1.text);
ParamByName("Firma").AsString := Edit3.text;
execsql;
← →
Соловьев © (2004-05-11 17:25) [9]
> Klerk (11.05.04 17:22) [8]
запусти SQL Exploer и выполни там запрос
← →
Соловьев © (2004-05-11 17:27) [10]
> Да, уверен.
Всеравно используй DateTimePicker - оградишь себя от головной боли
← →
Курдль © (2004-05-11 17:32) [11]
> Все равно используй DateTimePicker - оградишь себя от головной
> боли
А лучше - DBEdit и пр. DB-заточенные компоненты.
← →
Klerk (2004-05-11 18:50) [12]Мастера. Может я чего не понимаю, но при чём здесь "DBEdit и пр. DB-заточенные компоненты" и "Всеравно используй DateTimePicker - оградишь себя от головной боли"?
Ведб проблеммная строка найдена:
ParamByName("Schet").AsInteger := strtoint(Edit1.text);
Проблемма с приведением типа Integer в Short. И я не знаю как заставить его правильно это делать:(
← →
Мунька © (2004-05-11 19:09) [13]Сначала попробуй так
with query1 do
begin
sql.clear;
sql.add("insert into ""+WorkBaza+"" (Schet,Wroten,Firma) values ("+ strtoint(Edit1.text)+",:Wroten,:Firma)");
Params[1].Asdate := strtodate(Maskedit1.text);
Params[2].AsString := Edit3.text;
showmessage(sql.text);
//execsql;
end;
Посмотри итоговую строку запроса и выполнится ли запрос, потом разбирайся с параметром
← →
sniknik © (2004-05-11 19:11) [14]Paradox short fields are special number fields that can contain only whole numbers in the range -32,767 to 32,767.
= Smallint в дельфях, проверь размерность вводимого значения.
← →
Мунька © (2004-05-11 19:20) [15]да я видела такой глюк парадокса - когда он такое говорил в запросе с параметрами. Причем с размерностью было все ок.
← →
Мунька © (2004-05-11 19:23) [16]
> А лучше - DBEdit и пр. DB-заточенные компоненты
Никогда их не использовала, все ручками делала
← →
Anatoly Podgoretsky © (2004-05-11 19:25) [17]Klerk (11.05.04 17:16) [6]
Ну и что, методы AsXXX означают не тип поля, а тип подаваемых данных, преобразование произойдет внутри метода.
Ты бы аместо этого просто попробовал.
← →
Klerk (2004-05-11 19:25) [18]В этот Edit вводятся числа от 0 - 999.
← →
Klerk (2004-05-11 19:29) [19]>Anatoly Podgoretsky © (11.05.04 19:25) [17]
Я пробовал.
Потом и начал грешить на приведение типов.
← →
sniknik © (2004-05-11 19:33) [20]ну если ничего не помогает, прямая дорога за обновлением BDE. ;о)
← →
Anatoly Podgoretsky © (2004-05-11 19:34) [21]Правда возможно, что для TParam это и не пройдет, но для TIntegerField возможные свойства
AsFloat
AsInteger
AsString
А вот для TParam зато есть AsSmallInt
← →
sniknik © (2004-05-11 19:36) [22]Delphi syntax:
property AsSmallInt: LongInt;
;о)))
← →
Anatoly Podgoretsky © (2004-05-11 19:50) [23]sniknik © (11.05.04 19:36) [22]
Ну я так глубоко не копал :-), просто AsSmallInt, честнее по названию чем AsInteger и возможно в нем делается проверка на диапазон?
← →
Klerk (2004-05-11 19:55) [24]AssmallInt. Да. Всем большое спасибо!!!
← →
sniknik © (2004-05-11 20:04) [25]возможно... и похоже не только проверка... > Klerk (11.05.04 19:55) [24]
← →
Anatoly Podgoretsky © (2004-05-11 20:11) [26]sniknik © (11.05.04 20:04) [25]
Много проще, я не полезу разбираться в исходники, зато если я увижу что есть два свойства AsSmallInt и AsInteger, а у меня поле типа Short мне даже и в голову не придет использовать второй, возможно, что я даже и спраку читать не буду.
По предположению видимо в методе доступа проверяется соответствие на тип поля. У As методов для TParam есть хитрая особенность, они устанавливают свойство DataType в один из ftХХХ типов, наверно в этом и все дело.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.05.30;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.038 c