![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вставить данные [D5, Paradox]
Klerk © (2004-05-11 16:53:00)Пытаюсь делать так:
sql.add('insert into "'+WorkBaza+'" (Schet) values(:Schet)');
Params[0].asinteger := strtoint(Edit1.text);
При выполнении даёт ошиьку о несовпадении типов.
В Таблице (Paradox7) поле Schet имеет тип S.
Подскажите, как правильно задать параметр?
Anatoly Podgoretsky (2004-05-11 20:11:00) [1]sniknik © (11.05.04 20:04) [25]
Много проще, я не полезу разбираться в исходники, зато если я увижу что есть два свойства AsSmallInt и AsInteger, а у меня поле типа Short мне даже и в голову не придет использовать второй, возможно, что я даже и спраку читать не буду.
По предположению видимо в методе доступа проверяется соответствие на тип поля. У As методов для TParam есть хитрая особенность, они устанавливают свойство DataType в один из ftХХХ типов, наверно в этом и все дело.
sniknik (2004-05-11 20:04:00) [2]возможно... и похоже не только проверка... > Klerk (11.05.04 19:55) [24]
Klerk (2004-05-11 19:55:00) [3]AssmallInt. Да. Всем большое спасибо!!!
Anatoly Podgoretsky (2004-05-11 19:50:00) [4]sniknik © (11.05.04 19:36) [22]
Ну я так глубоко не копал :-), просто AsSmallInt, честнее по названию чем AsInteger и возможно в нем делается проверка на диапазон?
sniknik (2004-05-11 19:36:00) [5]Delphi syntax:
property AsSmallInt: LongInt;
;о)))
Anatoly Podgoretsky (2004-05-11 19:34:00) [6]Правда возможно, что для TParam это и не пройдет, но для TIntegerField возможные свойства
AsFloat
AsInteger
AsString
А вот для TParam зато есть AsSmallInt
sniknik (2004-05-11 19:33:00) [7]ну если ничего не помогает, прямая дорога за обновлением BDE. ;о)
Klerk (2004-05-11 19:29:00) [8]>Anatoly Podgoretsky © (11.05.04 19:25) [17]
Я пробовал.
Потом и начал грешить на приведение типов.
Klerk (2004-05-11 19:25:00) [9]В этот Edit вводятся числа от 0 - 999.
Anatoly Podgoretsky (2004-05-11 19:25:00) [10]Klerk (11.05.04 17:16) [6]
Ну и что, методы AsXXX означают не тип поля, а тип подаваемых данных, преобразование произойдет внутри метода.
Ты бы аместо этого просто попробовал.
Мунька (2004-05-11 19:23:00) [11]
> А лучше - DBEdit и пр. DB-заточенные компоненты
Никогда их не использовала, все ручками делала
Мунька (2004-05-11 19:20:00) [12]да я видела такой глюк парадокса - когда он такое говорил в запросе с параметрами. Причем с размерностью было все ок.
sniknik (2004-05-11 19:11:00) [13]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:09:00) [14]Сначала попробуй так
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;
Посмотри итоговую строку запроса и выполнится ли запрос, потом разбирайся с параметром
Klerk (2004-05-11 18:50:00) [15]Мастера. Может я чего не понимаю, но при чём здесь "DBEdit и пр. DB-заточенные компоненты" и "Всеравно используй DateTimePicker - оградишь себя от головной боли"?
Ведб проблеммная строка найдена:
ParamByName('Schet').AsInteger := strtoint(Edit1.text);
Проблемма с приведением типа Integer в Short. И я не знаю как заставить его правильно это делать:(
Курдль (2004-05-11 17:32:00) [16]
> Все равно используй DateTimePicker - оградишь себя от головной
> боли
А лучше - DBEdit и пр. DB-заточенные компоненты.
Соловьев (2004-05-11 17:27:00) [17]
> Да, уверен.
Всеравно используй DateTimePicker - оградишь себя от головной боли
Соловьев (2004-05-11 17:25:00) [18]
> Klerk (11.05.04 17:22) [8]
запусти SQL Exploer и выполни там запрос
Klerk (2004-05-11 17:22:00) [19]>Соловьев © (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:17:00) [20]
> strtodate(Maskedit1.text);
и ты уверен что там дата правильная? используй DateTimePicker