Clipper On Line • Ver Tópico - Uso do COMBOBOX com DBF

Uso do COMBOBOX com DBF

Discussão sobre a biblioteca Fivewin - O Clipper para Windows.

Moderador: Moderadores

 

Uso do COMBOBOX com DBF

Mensagempor Vander » 28 Nov 2005 13:59

Olá amigos;

É 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

.
.
.
@ 07,20 GET MFORNEC picture "@!" valid chectip2(mfornec)
.
.



Function CHECTIP2(Arg1)
Select FORNECE
Seek Arg1
If !EOF() .AND. !EMPTY(ARG1)
   Return .T.
  Else
   save screen to ttt
   SET COLOR TO w+/bgr
   Private m2[1]
   m2[1]:= [NOMEFORNE+"³"+substr(ENDERECOF,1,49)]
   Goto Top
   dbedit(09,01,23,78,m2,"ESCGRU","@!","","","","","")
   restore screen from ttt
   If LASTKEY() == 13
      MFORNEC:=substr(NOMEFORNE,1,30)
      Return .T.
     ElseIf LASTKEY() == 27
      Return .F.
   EndIf
endif

* /// *

Function ESCGRU(Arg1, Arg2)
tecla:= LastKey()
If (Arg1 == 0)
   Return 1
EndIf
If (Arg1 == 1)
   Return 1
EndIf
If (Arg1 == 2)
   Return 1
EndIf
If (Arg1 == 3)
   Return 1
EndIf
If (Arg1 == 4)
   If (tecla = 13)
      Return 0
   ElseIf (tecla = 27)
      Return 0
   Else
      Return 1
   EndIf
EndIf
Return 1


Desde ja agradeco;
Vander
Avatar de usuário

Vander
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 212
Data de registro: 23 Jul 2004 01:43
Cidade/Estado: João Monlevade - MG
Curtiu: 0 vez
Mens.Curtidas: 6 vezes

Mensagempor jhilbert » 28 Nov 2005 17:18

Caro colega,

segue um exemplo para combobox com arquivo DBF..

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 )

Espero que ajude!!!

Jeorge Hilbert
fw2.4, blinker 7.0, clipper 5.3b
Jeorge Hilbert
Clipper52e FW2.4 Blinker6.0
jhilbert
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 5
Data de registro: 17 Set 2005 16:53
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Mensagempor Vander » 30 Nov 2005 08:26

Valeu jhilbert

Vou testar, mas tenho certeza que vai ajudar, estou iniciando em FW e tuda ajuda e informação é bém vinda...


Vander
Avatar de usuário

Vander
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 212
Data de registro: 23 Jul 2004 01:43
Cidade/Estado: João Monlevade - MG
Curtiu: 0 vez
Mens.Curtidas: 6 vezes

Mensagempor rochinha » 01 Dez 2005 00:15

Amiguinho

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.

Em todo caso estou por aqui.

@braços :?)
Avatar de usuário

rochinha
Membro Master

Membro Master
 
Mensagens: 4548
Data de registro: 18 Ago 2003 20:43
Cidade/Estado: São Paulo - Brasil
Curtiu: 808 vezes
Mens.Curtidas: 246 vezes

Mensagempor Vander » 02 Dez 2005 13:57

Amigos:

O arquivo com maior quantidade de dados que tenho de usar é limitado em 999 registros.


Achei um exemplo simples, porém funcional.



..
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
..
..
..


DBF
GENEROGER    C 10
GENEROCOD   N  3


minha dúvida é como utilizar ID neste caso ?


Vander
Avatar de usuário

Vander
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 212
Data de registro: 23 Jul 2004 01:43
Cidade/Estado: João Monlevade - MG
Curtiu: 0 vez
Mens.Curtidas: 6 vezes

Mensagempor rochinha » 02 Dez 2005 19:20

Amiguinho

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.

Veja o exemplo destes vinculos:

No combos.CH:

#define ID_SIMPLE 110
#define ID_DROPDOWN 120
#define ID_DROPDOWNLIST 130
#define ID_SELECTION 140
#define IDC_RADIOBUTTON1 111
#define IDC_CHECKBOX2 113

No combos.RC:

#include <commctrl.h>
#include "WinApi.ch"
#include "Combos.ch"

Combos DIALOG 22, 74, 174, 97
STYLE DS_MODALFRAME | 0x4L | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Testing all ComboBoxes styles"
FONT 8, "Arial"
{
COMBOBOX ID_SIMPLE, 7, 6, 49, 56, CBS_SIMPLE | CBS_DISABLENOSCROLL | WS_CHILD | WS_VISIBLE | WS_TABSTOP
COMBOBOX ID_DROPDOWN, 62, 6, 49, 52, CBS_DROPDOWN | WS_CHILD | WS_VISIBLE | WS_TABSTOP
COMBOBOX ID_DROPDOWNLIST, 117, 6, 49, 52, CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_TABSTOP
LTEXT "&Selection:", -1, 11, 80, 32, 8
LTEXT "_______________________", ID_SELECTION, 47, 80, 72, 8, WS_CHILD | WS_VISIBLE | WS_GROUP
PUSHBUTTON "&Done", IDOK, 137, 76, 31, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
RADIOBUTTON "Radio", IDC_RADIOBUTTON1, 63, 24, 60, 12, BS_AUTORADIOBUTTON
CHECKBOX "Checkbox", IDC_CHECKBOX2, 63, 37, 60, 12, BS_AUTOCHECKBOX | WS_TABSTOP
}

No .PRG:

#include "FiveWin.ch"
#include "Combos.ch"

function Main()
local oDlg, oSay
local oCbx1, oCbx2, oCbx3
local cItem1, cItem2 := "One", cItem3, cItem4 := "None"
SET _3DLOOK ON
DEFINE DIALOG oDlg RESOURCE "Combos"
REDEFINE COMBOBOX oCbx1 VAR cItem1 ITEMS { "One", "Two", "Three" } ;
ID ID_SIMPLE OF oDlg ;
ON CHANGE ( cItem4 := cItem1, oSay:Refresh() ) ;
VALID (oCbx2:SetFocus(), cItem4 := cItem1, oSay:Refresh() )

REDEFINE COMBOBOX oCbx2 VAR cItem2 ITEMS { "One", "Two", "Three" } ;
ID ID_DROPDOWN OF oDlg ;
STYLE CBS_DROPDOWN ;
ON CHANGE ( cItem4 := cItem2, oSay:Refresh() ) ;
VALID ( If( ! oCbx2:Find( oCbx2:oGet:GetText() ),;
oCbx2:Add( oCbx2:oGet:GetText() ),), .t. )

REDEFINE COMBOBOX oCbx3 VAR cItem3 ITEMS { "One", "Two", "Three" } ;
ID ID_DROPDOWNLIST OF oDlg ;
ON CHANGE ( cItem4 := cItem3, oSay:Refresh() ) ;
VALID ( cItem4 := cItem3, oSay:Refresh(), .t. )

REDEFINE SAY oSay PROMPT cItem4 ID ID_SELECTION OF oDlg COLOR "R+/W"

ACTIVATE DIALOG oDlg CENTERED
return nil

No exemplo acima se voce abrir o .RC no WorkShop podera ver nas propriedades dos controles COMBOBOX o numero constante no combos.CH

@braços :?)
Avatar de usuário

rochinha
Membro Master

Membro Master
 
Mensagens: 4548
Data de registro: 18 Ago 2003 20:43
Cidade/Estado: São Paulo - Brasil
Curtiu: 808 vezes
Mens.Curtidas: 246 vezes

Mensagempor Macs » 19 Jan 2006 13:25

Porque não utilizar o DBCOMBO???

#include "dbcombo.ch"

REDEFINE DBCOMBO oState VAR cState ID 101 OF oDlg ;
                       ALIAS "STATES" ;
                 ITEMFIELD "CODE" ;
                 LISTFIELD "NAME"
Márcio Augusto Cezar
Macs
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 2
Data de registro: 15 Jan 2006 17:49
Cidade/Estado: Recife-PE
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Mensagempor rochinha » 19 Jan 2006 14:08

Amiguinho

Dê uma olhadinha na Quarta postagem neste mesmo tópico e verá porque.

@braços :?)
Avatar de usuário

rochinha
Membro Master

Membro Master
 
Mensagens: 4548
Data de registro: 18 Ago 2003 20:43
Cidade/Estado: São Paulo - Brasil
Curtiu: 808 vezes
Mens.Curtidas: 246 vezes




Retornar para FiveWin

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 6 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro