![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не число...
vick © (2003-04-15 12:05:00)Доброго всем дня!! Может кто знает как решить такую проблему?
Есть поле типа varchar(6), в него умный юзер должен записывать туда цифры (а именно - код товара), но глупый юзер кроме цыфр записывает туда еще и другие символы. Как узнать, значение поля является числом или нет?
Заранее спасибо за ответ.
Vick (2003-04-15 13:18:00) [1]>sniknik ©
Спасибо!!!!
sniknik (2003-04-15 13:04:00) [2]тебе же ответили. для MSSQL
SELECT * FROM ... WHERE ISNUMERIC(...)
для закачиваемой из dbf-а через OPENDATASOURCE тоже подойдет.
Vick (2003-04-15 12:58:00) [3]Да ну теперь какая разница, нужно обработать просто данные и все, так как же в запросе определить число это или нет?
sniknik (2003-04-15 12:55:00) [4]Vick © (15.04.03 12:48)
но программу то писали похоже не только для вас а универсально, и переделывать не будут (скорее всего). так что придется тебе.
а у себя я чаше сталкиваюсь (~80%) что не число, тк. используют как код товара - баркода с префиксами, артикулы, приставки с названиями групп .... налоговая прога тоже это должна учитывать.
а числом определяют довольно редко (в 1С только), да и то не все конфигурации.
Соловьев (2003-04-15 12:51:00) [5]
> .к. программа купленная и лицензированная налоговой...
куда же вы смотрели...
Vick (2003-04-15 12:48:00) [6]> sniknik ©
У нас код товара - всегда число, но когда оформляется возврат на товар, то это поле вручную заносится, вот управляющие магазинов и куралесят, и ничего не сделаешь, т.к. программа купленная и лицензированная налоговой...
stone (2003-04-15 12:47:00) [7]kravchuk © (15.04.03 12:37)
> select * from TempTable
> where IsNumber(CODE_EKKA)<>0
Временная таблица не обязательна, можно использовать OPENDATASOURCE.
и еще не IsNumber, а IsNumeric
kravchuk (2003-04-15 12:37:00) [8]При перекачки из дбф проверяй каждую запись, запросом не выйдет, разве что, переганять сначала весь дбф во временную таблицу, потом делать оттуда выборку, и написать на T-SQL хранимую процедуру которая проверяет число ли, и получится типа
select * from TempTable
where IsNumber(CODE_EKKA)<>0
Соловьев (2003-04-15 12:36:00) [9]
> код товара не всегда число
а у Vick
> глупый юзер кроме цыфр записывает туда еще и другие символы.
>
Надо там подправить.
sniknik (2003-04-15 12:34:00) [10]Соловьев © (15.04.03 12:28)
> набить морду этому программисту, который так сделал... :)))
а вот это зря, т.к. все правильно. (код товара не всегда число, даже нетак а чаще всего не число, и если это универсальная прога то ....)
stone (2003-04-15 12:34:00) [11]
> Надо не бороться с последствиями проблемы, а убырать то
> что эти проблемы создает.
Идеальное решение
По сабжу:
запрос получится несколько извращенный, что типа
where SUBSTRING(CODE_EKKA, 1, 1) in ("0","1" ...) AND SUBSTRING(CODE_EKKA, 2, 1) in ("0","1" ...) и т.д.
Vick (2003-04-15 12:29:00) [12]Люди, вы вообще читаете все ответы??? Я ничего никуда не вставляю, мне нужно выборку сделать при условии, что в текстовом поле только цифирьки стоят, а не какие-либо другие символы
Соловьев (2003-04-15 12:28:00) [13]
> Дело в том, данные заносятся не из моей программы, и из
> программы обмнена данными комп-касса, я получаю только dbf-файлики
>
набить морду этому программисту, который так сделал... :)))
Надо не бороться с последствиями проблемы, а убырать то что эти проблемы создает.
kravchuk (2003-04-15 12:27:00) [14]Пробуй проверять на OnBeforePost для твоего DataSet, и если не число то далай Abort
NAlexey (2003-04-15 12:26:00) [15]>А что предполагается делать с ошибочными записями?
Да, а что?
Пиши процедуру а скорее всего это будет триггер на вставку который проверяет, если значение не целое, то или ругаться, ну или твои действия с ошибочными записями. Я думаю так...
Соловьев (2003-04-15 12:25:00) [16]
> Как узнать, значение поля является числом или нет?
try
StrToInt(Str1);
except
// код ошибки конверта, вроде бы EConvertError
end;
Vick (2003-04-15 12:24:00) [17]просто не выводить их, сделать типа так
select * from MyTable
where CODE_EKKA - число
stone (2003-04-15 12:20:00) [18]А что предполагается делать с ошибочными записями?
Vick (2003-04-15 12:17:00) [19]Дело в том, данные заносятся не из моей программы, и из программы обмнена данными комп-касса, я получаю только dbf-файлики и перекачиваю данные в MSSQL, откуда потом эти данные обрабатываю, посему от глупых ошибок юзера обсалютно не застрахована.
Vick (2003-04-15 12:13:00) [20]> Соловьев
В Делфи я и сама так умею.