Форум: "Базы";
Текущий архив: 2003.05.05;
Скачать: [xml.tar.bz2];
ВнизНе число... Найти похожие ветки
← →
vick (2003-04-15 12:05) [0]Доброго всем дня!! Может кто знает как решить такую проблему?
Есть поле типа varchar(6), в него умный юзер должен записывать туда цифры (а именно - код товара), но глупый юзер кроме цыфр записывает туда еще и другие символы. Как узнать, значение поля является числом или нет?
Заранее спасибо за ответ.
← →
NAlexey (2003-04-15 12:06) [1]Среда разработки?
← →
Vick (2003-04-15 12:09) [2]> NAlexey
T-SQL & Delphi
Но дело в том, что это поле сравнивается с другим, и его еще на этапе запроса нужно преобразовать в целое, тут и возникает ошибка
← →
Соловьев (2003-04-15 12:09) [3]:) Наверное Delphi...
> но глупый юзер кроме цыфр записывает туда еще и другие символы
procedure Tforma.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in [#8,"0".."9"]) then
begin
Key := #0;
Beep;
end;
end;
← →
Vick (2003-04-15 12:13) [4]> Соловьев
В Делфи я и сама так умею.
← →
Vick (2003-04-15 12:17) [5]Дело в том, данные заносятся не из моей программы, и из программы обмнена данными комп-касса, я получаю только dbf-файлики и перекачиваю данные в MSSQL, откуда потом эти данные обрабатываю, посему от глупых ошибок юзера обсалютно не застрахована.
← →
stone (2003-04-15 12:20) [6]А что предполагается делать с ошибочными записями?
← →
Vick (2003-04-15 12:24) [7]просто не выводить их, сделать типа так
select * from MyTable
where CODE_EKKA - число
← →
Соловьев (2003-04-15 12:25) [8]
> Как узнать, значение поля является числом или нет?
try
StrToInt(Str1);
except
// код ошибки конверта, вроде бы EConvertError
end;
← →
NAlexey (2003-04-15 12:26) [9]>А что предполагается делать с ошибочными записями?
Да, а что?
Пиши процедуру а скорее всего это будет триггер на вставку который проверяет, если значение не целое, то или ругаться, ну или твои действия с ошибочными записями. Я думаю так...
← →
kravchuk (2003-04-15 12:27) [10]Пробуй проверять на OnBeforePost для твоего DataSet, и если не число то далай Abort
← →
Соловьев (2003-04-15 12:28) [11]
> Дело в том, данные заносятся не из моей программы, и из
> программы обмнена данными комп-касса, я получаю только dbf-файлики
>
набить морду этому программисту, который так сделал... :)))
Надо не бороться с последствиями проблемы, а убырать то что эти проблемы создает.
← →
Vick (2003-04-15 12:29) [12]Люди, вы вообще читаете все ответы??? Я ничего никуда не вставляю, мне нужно выборку сделать при условии, что в текстовом поле только цифирьки стоят, а не какие-либо другие символы
← →
stone (2003-04-15 12:34) [13]
> Надо не бороться с последствиями проблемы, а убырать то
> что эти проблемы создает.
Идеальное решение
По сабжу:
запрос получится несколько извращенный, что типа
where SUBSTRING(CODE_EKKA, 1, 1) in ("0","1" ...) AND SUBSTRING(CODE_EKKA, 2, 1) in ("0","1" ...) и т.д.
← →
sniknik (2003-04-15 12:34) [14]Соловьев © (15.04.03 12:28)
> набить морду этому программисту, который так сделал... :)))
а вот это зря, т.к. все правильно. (код товара не всегда число, даже нетак а чаще всего не число, и если это универсальная прога то ....)
← →
Соловьев (2003-04-15 12:36) [15]
> код товара не всегда число
а у Vick
> глупый юзер кроме цыфр записывает туда еще и другие символы.
>
Надо там подправить.
← →
kravchuk (2003-04-15 12:37) [16]При перекачки из дбф проверяй каждую запись, запросом не выйдет, разве что, переганять сначала весь дбф во временную таблицу, потом делать оттуда выборку, и написать на T-SQL хранимую процедуру которая проверяет число ли, и получится типа
select * from TempTable
where IsNumber(CODE_EKKA)<>0
← →
stone (2003-04-15 12:47) [17]kravchuk © (15.04.03 12:37)
> select * from TempTable
> where IsNumber(CODE_EKKA)<>0
Временная таблица не обязательна, можно использовать OPENDATASOURCE.
и еще не IsNumber, а IsNumeric
← →
Vick (2003-04-15 12:48) [18]> sniknik ©
У нас код товара - всегда число, но когда оформляется возврат на товар, то это поле вручную заносится, вот управляющие магазинов и куралесят, и ничего не сделаешь, т.к. программа купленная и лицензированная налоговой...
← →
Соловьев (2003-04-15 12:51) [19]
> .к. программа купленная и лицензированная налоговой...
куда же вы смотрели...
← →
sniknik (2003-04-15 12:55) [20]Vick © (15.04.03 12:48)
но программу то писали похоже не только для вас а универсально, и переделывать не будут (скорее всего). так что придется тебе.
а у себя я чаше сталкиваюсь (~80%) что не число, тк. используют как код товара - баркода с префиксами, артикулы, приставки с названиями групп .... налоговая прога тоже это должна учитывать.
а числом определяют довольно редко (в 1С только), да и то не все конфигурации.
← →
Vick (2003-04-15 12:58) [21]Да ну теперь какая разница, нужно обработать просто данные и все, так как же в запросе определить число это или нет?
← →
sniknik (2003-04-15 13:04) [22]тебе же ответили. для MSSQL
SELECT * FROM ... WHERE ISNUMERIC(...)
для закачиваемой из dbf-а через OPENDATASOURCE тоже подойдет.
← →
Vick (2003-04-15 13:18) [23]>sniknik ©
Спасибо!!!!
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.05.05;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.007 c