Code: |
Private cPath
cPath:="c:\temp\" if !file(cPath+"Mlabel.dbf") sayandwait("ЌҐ ©¤Ґ д ©« Ї® ЇгвЁ "+cPath +" !") else NetUse("NewMlabal",cPath+"Mlabel.dbf") NewMlabal->(dbsetindex(cPath+"Mlabel.cdx")) NewMlabal->(OrdSetFocus("tag_MLABEL")) Mlabel->(OrdSetFocus("Mlabel")) NewMLabal->(DbGotop()) Do While NewMlabal->(!eof()) Mlabel->(DbGotop()) if Mlabel->(DbSeek(upper(NewMlabal->(grup+nnum)))) else mlabel->(RecLOCK()) mlabel->(addrec()) mlabel->grup:=NewMlabal->grup mlabel->nnum:=NewMlabal->nnum mlabel->(f_dbunlock()) endif NewMlabal->(DBskip()) enddo |
Val wrote: | ||
//программа должна проверять наличие записей в номенклатурнике с
//файлом в с:\temp\mlabel.dbf и добавлять отсутствующие //сейчас она их добавляет все (включая уже существующие)
|
Code: |
Do While NewMlabal->(!eof())
if !Mlabel->(DbSeek(upper(NewMlabal->(grup+nnum))) mlabel->(addrec()) mlabel->grup:=NewMlabal->grup mlabel->nnum:=NewMlabal->nnum mlabel->(f_dbunlock()) endif NewMlabal->(DBskip()) enddo mlabel->( DBCOMMIT() ) |
nordk wrote: | ||
|
nordk wrote: |
Давайте по порядку
1. Речь идет про HFileEval или про FileEval ? |
nordk wrote: |
2. никаких GOTOP() не надо - мы через DBSEEK ищем и вообще работаем с разными алиасами |
nordk wrote: |
Честно скажу текст не проверял но для HfileEval все написано точно. Работать должно без проблем (нужно только в отладчике убедиться что там где вы используете задачу алиас mlabel существует) |
nordk wrote: |
В FileEval работать не должно в принципе |
nordk wrote: |
через := в поле не положить надо делать MLABEL->( FIELDPUT(FIELDPOS("GRUP"),NewMlabal->GRUP) ) |
Quote: |
• Syntax <VariableId> := <Expression> • Description This operator assigns the value of <Expression> (which can be of any data type) to the variable <VariableId> (which can be of any storage class). The expression <Expression> is evaluated and assigned to <VariableId>. |
Code: |
SET DELETED on
copy file H:\BEST2005\pal_2005\partner.DBF to D:\BESTBUH4\PAL_2005\part.DBF USE D:\BESTBUH4\PAL_2005\part.DBF in 2 USE D:\BESTBUH4\PAL_2005\partner.DBF in 1 SELECT 1 SCAN SELECT 2 LOCATE FOR (part.code=partner.code) DO WHILE FOUND() delete CONTINUE ENDDO select 1 ENDSCAN close database USE D:\BESTBUH4\PAL_2005\part.DBF pack close database quit |
dmitry wrote: | ||
Все равно. Это слишком простая ситуация, которая должна работать и там и там. Но не работает. |
Quote: |
2. никаких GOTOP() не надо - мы через DBSEEK ищем и вообще работаем с разными алиасами
Из NewMlabal мы берем выражение поиска, а ищем в Mlabel. Если я искал и нашел, значит указатель стоит уже не на первой логической записи файла, по которому осуществляется поиск. Он разве сам вернется? Нет. Поэтому я применяю DbGoTop(), чтобы гарантировано начинать поиск с начала. |
Quote: |
Честно скажу текст не проверял но для HfileEval все написано точно. Работать должно без проблем (нужно только в отладчике убедиться что там где вы используете задачу алиас mlabel существует) А зря. Если бы Вы проверили, мы бы могли быстрее решить проблему. |
Quote: |
В FileEval работать не должно в принципе Кто Вам это сказал? |
Quote: |
через := в поле не положить надо делать MLABEL->( FIELDPUT(FIELDPOS("GRUP"),NewMlabal->GRUP) ) Разве xHarbour не поддерживает стандартную нотацию Клиппера? Откуда такая информация? Мы наверное пользуемся разными источниками, потому что мои говорят, что |
nordk wrote: |
Каждый волен писать на чем угодно, но здесь мы учимся пользоваться харбором и я считаю это правильнее потому что
это встроенный механизм и буферы ему не нужны. |
Quote: |
Private cAlias,aStru if type('aPars')!='A' exit() endif if len(aPars)==0 exit() endif cAlias:=SELECT() //Save if aPars[1]==1 dbSelectArea("mlabel") dbpush() mlabel->(ordsetfocus("MLABEL")) mlabel->(dbGoTop()) aStru:=DBSTRUCT() if !FILE("exchange\copynnum.dbf") dbCreate("exchange\copynnum.dbf", aStru) endif dbCreate( "exchange\nnum.dbf", aStru) NETUSE("nnum","exchange\nnum",,.F.) NETUSE("copy","exchange\copynnum",,.F.) copy->(ordcreate("exchange\copynnum","copynnum","UPPER(GRUP+NNUM+NAME+STR(CENA)+STR(OCENA1)+STR(OCENA2)+STR(OCENA3)+STR(OCENA4)+STR(VCENA1)+STR(VCENA2)+STR(VCENA3)+STR(VCENA4))")) nnum->(ordcreate("exchange\nnum","nnum","UPPER(GRUP+NNUM)")) While(mlabel->(!EOF())) IF !copy->(DBSEEK(mlabel->(UPPER(GRUP+NNUM+NAME+STR(CENA)+STR(OCENA1)+STR(OCENA2)+STR(OCENA3)+STR(OCENA4)+STR(VCENA1)+STR(VCENA2)+STR(VCENA3)+STR(VCENA4))))) nnum->(AddRec()) nnum->(Gather(mlabel->(Scatter()))) nnum->(DbUnLock()) endif mlabel->(dbSkip()) EndDo mlabel->(dbGoTop()) While(mlabel->(!EOF())) IF !copy->(DBSEEK(mlabel->(UPPER(grup+nnum)))) copy->(AddRec()) else copy->(RecLock()) endif copy->(Gather(mlabel->(Scatter()))) copy->(DbUnLock()) mlabel->(dbSkip()) EndDo copy->(dbCloseArea()) nnum->(dbCloseArea()) dbpop() endif // Load if aPars[1]==2 if !FILE("exchange\nnum.dbf") return endif dbSelectArea("mlabel") dbpush() mlabel->(ordsetfocus("MLABEL")) mlabel->(dbGoTop()) NETUSE("nnum","exchange\nnum",,.F.) nnum->(ordcreate("exchange\nnum","nnum","UPPER(GRUP+NNUM)")) nnum->(dbGoTop()) While(nnum->(!EOF())) IF !mlabel->(DBSEEK(nnum->(UPPER(grup+nnum)))) mlabel->(AddRec()) else mlabel->(RecLock()) endif mlabel->(Gather(nnum->(Scatter()))) mlabel->(DbUnLock()) nnum->(dbSkip()) EndDo nnum->(dbCloseArea()) dbpop() endif dbSelectArea(cAlias) |
ЯКОВ wrote: |
Просто на данном примере я предложил немного другой алгоритм,
который можно реализовать на любом инструменте, который как мне кажется будет работать быстрее. А инструмент конечной реализации каждый выбирает сам. |
ЯКОВ wrote: | ||
|
output generated using printer-friendly topic mod. All times are GMT + 4 Hours