Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.05.05;
Скачать: CL | DM;

Вниз

Не число...   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.015 c
14-12882
Вадим
2003-04-17 03:32
2003.05.05
Интерпретатор


14-12877
paranoid
2003-04-16 22:16
2003.05.05
Как спрятать свою программу!


14-12910
VRG
2003-04-17 15:13
2003.05.05
Проекту VRG требуются разработчики на некоммерческой основе


1-12775
Lighnam
2003-04-21 10:27
2003.05.05
несколько расширений в 1 строке фильтра в open dialog


1-12716
Zheka
2003-04-23 16:55
2003.05.05
Hint above Label