Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 ошибка и его обработка  [new]
Andres N.
Member

Откуда:
Сообщений: 165
При нажатие на кнопку должен работать такой код:
bir=1
SELECT 5
APPEND BLANK
REPLACE mushteri_k WITH thisform.text2.Value,  zeng_eden WITH thisform.text13.Value, mushteri_a WITH thisform.text5.Value,;
mushteri_u WITH thisform.text6.Value, mushteri_z WITH  thisform.combo8.Value, qaime_n WITH  thisform.text3.Value, telefon with thisform.text4.Value,;
sif_kod WITH thisform.text34.Value, dx WITH "D", qebul_ed WITH thisform.text20.Value,  catdirilma WITH thisform.text21.Value,;
alan_a WITH thisform.text8.Value,  alan_u WITH thisform.text9.Value, alan_t WITH thisform.text1.Value, alan_r WITH thisform.combo6.Value, alan_z WITH thisform.combo4.Value,;
kod_qeyd WITH val(thisform.combo5.Value), qeyd WITH thisform.text7.value, say_mektub WITH thisform.text12.value, zerf_qiy WITH thisform.text10.value, baqlamalar WITH thisform.text14.value,;
um_ceki WITH thisform.text15.value, xidm_novu WITH thisform.combo1.value, qiymet WITH thisform.text22.value, el_xid_n WITH thisform.text23.value,  daxtel WITH thisform.text27.value;
xus_qiy WITH thisform.text17.value, guzeshtm WITH thisform.text77.value, guzeshtf WITH thisform.text18.value, cemi WITH  thisform.text24.value, edv WITH thisform.text25.value, yekun WITH thisform.text26.value,;
icinde WITH  thisform.text19.value, kuryer_adq WITH thisform.text11.Value, kuryer_adc WITH thisform.text16.Value
REPLACE kuryer_kq WITH  VAL(thisform.combo2.value), kuryer_kc WITH VAL(thisform.combo2.value)
REPLACE BANK_AD WITH BANK_AD1, BANK_KOD WITH BANK_KOD1, BANK_VOEN WITH BANK_VOEN1, HES_HESABI WITH HES_HESABI1, MUX_HESABI WITH MUX_HESABI1, swift WITH swift1, voen WITH voen1

IF IMTINA="Imtina".or.qaime_n=0
 REPLACE cemi WITH 0, yekun WITH 0
endif 
bbaxish1=0
thisform.release()
do form baxish

И можно сказать что нормально работает. Но, иногда (очень редко) получается примерно такая ошибка и сразу же программа заканчиваеть свою работу:
"Номер записи 6 Форма или 1 из его тренов загрузка форма или сред данных несовпедения типа оператора и операнда."
Это ошибка очень редко получается (но, очень мешаеть), и неизвестно когда будеть, поэтому не могу найти причину.

Помогите пожалуйста, где моя ошибка здесь и как могу исправит это?

И ЕЩЕ 1 ВОПРОС: Как можно эта ошибку обработовать, т.е., когда эта ошибка получится какой-то сообщение давать и не выйти из программы?
Помогите пожалуйста.
22 дек 09, 08:10    [8099087]     Ответить | Цитировать Сообщить модератору
 Re: ошибка и его обработка  [new]
reware
Member

Откуда: Хабаровск
Сообщений: 585
Andres N.
При нажатие на кнопку должен работать такой код:
...
REPLACE mushteri_k WITH thisform.text2.Value, zeng_eden WITH thisform.text13.Value, mushteri_a WITH thisform.text5.Value,;
...
Помогите пожалуйста, где моя ошибка здесь и как могу исправит это?

И ЕЩЕ 1 ВОПРОС: Как можно эта ошибку обработовать, т.е., когда эта ошибка получится какой-то сообщение давать и не выйти из программы?

Да здесь и не нужна обработка ошибки, её и так можно найти в этом жутком REPLACE и исправить. Просто в какое-то из полей подставляется неподходящее по типу значение.
Например, в REPLACE mushteri_k WITH thisform.text2.Value поле mushteri_k - символьное, а в него пытаются занести число из thisform.text2.Value. Или наоборот. Надо проверить тип всех полей и сравнить с типами записываемых значений.
Только не убеждайте себя и всех, что все поля и передаваемые в них значения абсолютно одинакового типа.
И замените вы этот дикий REPLACE (или вообще весь подход к задаче) на что-то более компактное, чтобы потом не мучаться и искать в таком коде ошибку.
22 дек 09, 09:37    [8099285]     Ответить | Цитировать Сообщить модератору
 Re: ошибка и его обработка  [new]
прошелмимо
Member [заблокирован]

Откуда: Из Курска понаехал
Сообщений: 10363
относительно глобальной обработки ошибок

https://www.sql.ru/forum/actualtopics.aspx?search=%E3%EB%EE%E1%E0%EB%FC%ED%FB%E9+%EE%E1%F0%E0%E1%EE%F2%F7%E8%EA+%EE%F8%E8%E1%EA%E8&bid=37

также в фокспро есть такое понятие, как локальная обработка ошибки.

ошибки не борят, а создают какой-то интерфейс, который
помогает проанализировать ситуацию
и быстро принять меры к решению проблемы.
22 дек 09, 09:59    [8099369]     Ответить | Цитировать Сообщить модератору
 Re: ошибка и его обработка  [new]
Andres N.
Member

Откуда:
Сообщений: 165
reware

Просто в какое-то из полей подставляется неподходящее по типу значение.


Дело в том что, эта ошибка не всегда получается, поэтому я так думал (типы же не меняется в программе)

reware

Да здесь и не нужна обработка ошибки

Это я не только для этого случае, просто хотел узнать как обработаваеть ошибку.
22 дек 09, 10:00    [8099371]     Ответить | Цитировать Сообщить модератору
 Re: ошибка и его обработка  [new]
Dag
Member

Откуда:
Сообщений: 842
reware
И замените вы этот дикий REPLACE (или вообще весь подход к задаче) на что-то более компактное, чтобы потом не мучаться и искать в таком коде ошибку.

+1024. ControlSource для того и прмдуман.

do form baxish
Название формы не может не радовать xD

Обработку ошибки в общем случае можно засунуть в
TRY
ENDTRY
22 дек 09, 10:01    [8099380]     Ответить | Цитировать Сообщить модератору
 Re: ошибка и его обработка  [new]
прошелмимо
Member [заблокирован]

Откуда: Из Курска понаехал
Сообщений: 10363
2 Andres N.

также совет, оформляйте свой код некоторым образом(способом),
который помогает проще сопровождать код

replace  ttt  with ppp ;
         ,  kkk with ggggggg ;
         ,  ....
22 дек 09, 10:01    [8099384]     Ответить | Цитировать Сообщить модератору
 Re: ошибка и его обработка  [new]
Andres N.
Member

Откуда:
Сообщений: 165
прошелмимо

replace  ttt  with ppp ;
         ,  kkk with ggggggg ;
         ,  ....


Спасибо, за совет.
22 дек 09, 10:08    [8099428]     Ответить | Цитировать Сообщить модератору
 Re: ошибка и его обработка  [new]
Andres N.
Member

Откуда:
Сообщений: 165
reware

Только не убеждайте себя и всех, что все поля и передаваемые в них значения абсолютно одинакового типа.


Я не убеждаю этого, только мне не понятно тогда почему это ошибка каждый раз не получается?
22 дек 09, 10:13    [8099463]     Ответить | Цитировать Сообщить модератору
 Re: ошибка и его обработка  [new]
GermanGM
Member

Откуда:
Сообщений: 256
Andres N.,
replace честно отрабатывает вплоть до момента возникновения ошибки "Data type mismatch". Наверное стоит посмотреть "по горячим следам", на каком поле он остановился
22 дек 09, 10:15    [8099481]     Ответить | Цитировать Сообщить модератору
 Re: ошибка и его обработка  [new]
Шестипалов
Member

Откуда:
Сообщений: 115
Andres N.
reware

Только не убеждайте себя и всех, что все поля и передаваемые в них значения абсолютно одинакового типа.


Я не убеждаю этого, только мне не понятно тогда почему это ошибка каждый раз не получается?


Такое может быть, например, когда юзер введёт цифру там, где раньше вводил символ, или наоброт.
22 дек 09, 10:21    [8099528]     Ответить | Цитировать Сообщить модератору
 Re: ошибка и его обработка  [new]
Andres N.
Member

Откуда:
Сообщений: 165
Я сейчас проверил что когда эта ошибка получается не записивается ( не работает) следующие replace, т.e, эти поле пусто бываеть, остальные нет:

REPLACE  mushteri_k WITH thisform.text2.Value, ;
                zeng_eden WITH thisform.text13.Value,;
                mushteri_a WITH thisform.text5.Value,;

REPLACE BANK_AD WITH BANK_AD1, ;
               BANK_KOD WITH BANK_KOD1,;
               BANK_VOEN WITH BANK_VOEN1,;
               HES_HESABI WITH HES_HESABI1, ;
               MUX_HESABI WITH MUX_HESABI1,;
               swift WITH swift1,;
               voen WITH voen1

Это как-то может помоч мне? Можно до replace проверить это и если есть несовподение дать сообщение об этом ?
22 дек 09, 10:28    [8099578]     Ответить | Цитировать Сообщить модератору
 Re: ошибка и его обработка  [new]
Andres N.
Member

Откуда:
Сообщений: 165
Шестипалов

Такое может быть, например, когда юзер введёт цифру там, где раньше вводил символ, или наоброт.


Да, этого может быть. Тогда, что можно делать в этом случае?
22 дек 09, 10:31    [8099596]     Ответить | Цитировать Сообщить модератору
 Re: ошибка и его обработка  [new]
Шестипалов
Member

Откуда:
Сообщений: 115
Andres N.
Да, этого может быть. Тогда, что можно делать в этом случае?

Проверять корректность ввода данных. Либо перед реплейсом, либо в методе Valid.

А вообще, Вам уже посоветовали использовать свойство ControlSource.
22 дек 09, 10:35    [8099614]     Ответить | Цитировать Сообщить модератору
 Re: ошибка и его обработка  [new]
Andres N.
Member

Откуда:
Сообщений: 165
Шестипалов
Проверять корректность ввода данных. Либо перед реплейсом, либо в методе Valid.

Помогите пожалуйста, как это делаются? Если можно на примерах пожалуйста.
22 дек 09, 10:39    [8099636]     Ответить | Цитировать Сообщить модератору
 Re: ошибка и его обработка  [new]
прошелмимо
Member [заблокирован]

Откуда: Из Курска понаехал
Сообщений: 10363
автор
Помогите пожалуйста, как это делаются? Если можно на примерах пожалуйста.



local lnValue
lnValue = thisform.text1.value

if varty(lnValue) <> "N"
   messageb("Пользователь - ты был не прав!")
   retu .f.
else
   insert into ttt    (ppp) ;
                values (lnValue)
endif

22 дек 09, 11:24    [8100080]     Ответить | Цитировать Сообщить модератору
 Re: ошибка и его обработка  [new]
Andres N.
Member

Откуда:
Сообщений: 165
Мне надо проверить 3 поле (mushteri_k, zeng_eden, mushteri_a) сразу.
Я делаю вот так:
IF TYPE('baza.mushteri_k')<>TYPE('thisform.text27.Value').or.TYPE('baza.zeng_eden')<> TYPE('thisform.text13.Value').or.TYPE('baza.mushteri_a')<>TYPE('thisform.text5.Value')
	MESSAGEbox('Пользователь - ты был не прав!')
	thisform.text27.SetFocus()
else
	SELECT 5
               REPLACE .............
                              .............
	do form baxish
endif
Так правильно будеть? Еще раз хочу сказать это проблема не каждый раз получается, поэтому трудно мне уловить это. После этого изминение пока не вышло. Но, нельзя пока ничего сказать.
24 дек 09, 07:54    [8110820]     Ответить | Цитировать Сообщить модератору
 Re: ошибка и его обработка  [new]
прошелмимо
Member [заблокирован]

Откуда: Из Курска понаехал
Сообщений: 10363
автор
Так правильно будеть?


нет.

извините, но стиль Вашей разработки - это насилие над фокспро и собой (тобишь садомазо.)

во-первых: тайп стараемся применять реже - есть ф-я vartype()

во-вторых: можно разработать так форму и проинициализировать контролы,
что в них никогда не будет неверного типа.
если вам хочется что-то вводить - ну создать курсор пустой
и поля его уже присвоить контролсоурсам контролов

в-третьих:
TYPE('baza.mushteri_k')<>TYPE('thisform.text27.Value')

Вы явно не знаете тип 'baza.mushteri_k'? или это мутирующее поле в какой-то таблице,
которое меняет постоянно свой тип и т.д.
па-руцки пишется так, ну если уж хочется заняться садомазо:
  
if vartype(thisform.text27.Value)<>"C" or ....
24 дек 09, 09:10    [8111017]     Ответить | Цитировать Сообщить модератору
 Re: ошибка и его обработка  [new]
Andres N.
Member

Откуда:
Сообщений: 165
Я совсем недавно занимаюс с фокспро, например vartype я незнал.
25 дек 09, 07:59    [8116505]     Ответить | Цитировать Сообщить модератору
 Re: ошибка и его обработка  [new]
Andres N.
Member

Откуда:
Сообщений: 165
прошелмимо
Вы явно не знаете тип 'baza.mushteri_k'?


Знаю. Тогда, наверно так будеть правильно. (Или опять что-то не так?)
m_k1=thisform.text2.Value
z_e1=thisform.text13.Value
m_a1=thisform.text5.Value
if varty(m_k1) <> "N".or.varty(z_e1)<>"C".or.varty(m_a1)="C"
	MESSAGEbox('Пользователь - ты был не прав!')
	thisform.text27.SetFocus()
else
	SELECT 5
               REPLACE .............
                              .............
	do form baxish
endif
25 дек 09, 08:12    [8116525]     Ответить | Цитировать Сообщить модератору
 Re: ошибка и его обработка  [new]
Шестипалов
Member

Откуда:
Сообщений: 115
Andres N.,

поведайте миру, какая религия вам запрещает использовать свойство ControlSource?
25 дек 09, 09:08    [8116670]     Ответить | Цитировать Сообщить модератору
 Re: ошибка и его обработка  [new]
Andres N.
Member

Откуда:
Сообщений: 165
Шестипалов
Andres N.,

поведайте миру, какая религия вам запрещает использовать свойство ControlSource?


Наверно, неправилный метод, но я использую
TABLEUPDATE(.T.,.T.,"baza")
,
для добавление записи в таблицу (до нажатие кнопку записи не должно добавлятся в таблицу). Поэтому использую REPLACE
25 дек 09, 09:34    [8116775]     Ответить | Цитировать Сообщить модератору
 Re: ошибка и его обработка  [new]
прошелмимо
Member [заблокирован]

Откуда: Из Курска понаехал
Сообщений: 10363
никто не мешает откатить изменения в случае отмены необходимости сохраняться

либо

scatter memvar
затем переменные памяти привязать к контролам

либо
select * from ... into cursor ...
appe blank
поредактировать во временном курсоре
и затем уже из отредактированного
перелить в основной
insert into
select * from
и уже изменения в основном провалить в основную табличку
25 дек 09, 10:01    [8116954]     Ответить | Цитировать Сообщить модератору
 Re: ошибка и его обработка  [new]
Andres N.
Member

Откуда:
Сообщений: 165
прошелмимо, спасибо за совет. Попробую это сделать. Но, хочу еще раз спрашивать в моем случае это ошибка еще раз может получится? Просто мне очень интересно это узнать и честно говоря если ошибка не получится хочу оставить как есть.
25 дек 09, 10:47    [8117285]     Ответить | Цитировать Сообщить модератору
 Re: ошибка и его обработка  [new]
Andres N.
Member

Откуда:
Сообщений: 165
прошелмимо
никто не мешает откатить изменения в случае отмены необходимости сохраняться

Я незнал что это возможно.
Это как? Обясните пожалуйста, на примерах если не трудно.
26 дек 09, 09:14    [8121528]     Ответить | Цитировать Сообщить модератору
 Re: ошибка и его обработка  [new]
прошелмимо
Member [заблокирован]

Откуда: Из Курска понаехал
Сообщений: 10363
2 Andres N.,

обратите внимание на пункт меню:
"Редактирование св-в курсорадаптеров"

в данном примере показано каким образом редактировать список
и каким образом привязывать контролы к источникам,
сохранять или выполнять отмену(не сохранять....)


вычленять ничего не буду и каких-то простых примеров рисовать не стану,
даю "в куче" пример разработки каких-то ... посредством приемов ООП
и сипользования классов курсорадаптеров.
в данном приложении в целом показан способ построения проектов,
посредством которого создаются универсальные настраиваемые сущности

первая часть марлезонского балета

К сообщению приложен файл (oop.part01.rar - 87Kb) cкачать
28 дек 09, 09:04    [8125320]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / FoxPro, Visual FoxPro Ответить