É possivel utilizar o COMBOBOX para apresentacao de dados gravados em um DBF
para que o usuario possa escolher um registro ?
Tenho em um sistemas em clipper a seguinte forma de padronizacao:
ESCOLHAS QUE O USUARIO IRA CADASTRAR EM FORNEC.DBF
SE FOR DIGITADO UMA ENTRADA VALIDA OK
SE FOR DIGITADO UMA ENTRADA INVALIDA APARECE UM MENU COM AS OPCOES CADASTRADAS
O exemplo chama o dbf (estado) que tem a sigla dos estados...
REDEFINE COMBOBOX oCbx VAR cMuf ITEMS PEGA(cMuf);
ID 119 OF oDlgMan;
ON CHANGE ( cMuf2 := cMuf, oCbx:Refresh() ) ;
VALID ( If( ! oCbx:Find( oCbx:oGet:GetText() ),;
oCbx:Add( oCbx:oGet:GetText() ),), .t. )
******************
FUNCTION PEGA(arr)
LOCAL xItem,aTotreg
IF .NOT. Use_arq("estado",.T.,.T.,.T.)
RETURN nil
ENDIF
aTotreg= LASTREC()
xItem={}
FOR I=1 TO aTotreg
AADD(xItem,est->uf)
SKIP
NEXT
est->(DbCloseArea())
SELECT cli
RETURN( xItem )
o COMBOBOX do Fivewin é limitado, pois trabalha com arrays e mesmo que o Clipper/Fivewin ofereçãm um limite muito grande de dados voce poderá obter erros se o arquivo utilizado contiver muitos registros, pois mesmo não ultrapassando os limites do array voce tem o impcílho de memória.
Talvez voce se de melhor usando o comando DBCOMBO, ainda assim acho que o mesmo também tem limites.
Voce terá de usar uma função mais melhorada chamada DBSEARCH ou ZOOMLBX.
Infelizmente as que tenho modifiquei o códgo para o meu uso e não sei se tenho o código original.
..
Local cserie,mserie := { OemToAnsi ("seri")," "}
DEFINE DIALOG oDlg FROM 0,0 TO 32,95 TITLE "CADASTRO"
sele generos
set order to 1
Ajut:= {}
go top
do while !eof()
AAdd(ajut,GENEROGER)
skip
enddo
gener:=ajut
..
..
@ 07,06 COMBOBOX mgenero ITEMS gener SIZE 65,110 OF oDlg
..
..
..
Utilizamos ID somente quando desenhamos uma Dialog pelo WorkShop.
Neste caso ao colocar o controle na tela voce define um numero que não pode ser repetido dentro do conjunto de controles da janela sendo definida e ai acessa via comandos.