JoséQuintas escreveu:Não se esqueça que, se usa ADO, trata-se de uma tabela ADO:
Sim é ADO, nesse caso vou ter que carregar toda a tabela e trabalhar em cima do resultset.
O código do cliente é um caracter de 5.
Pensando uma coisa maluca aqui.
No GET o usuário digita o código 20735
SELECT APC.CODIGO, APC.NOME FROM APC01 APC WHERE APC.CODIGO = ?"
oPrm := oCommand:CreateParameter("0'", adVarChar, adParamInput, 5, cCodigo)
oCommand:Parameters:Append( oPrm )
O resultset pode ser true (achou) ou false (não achou)
Se achou, mostra os dados do cliente e faz outro select em outra tabela que contém dados de cobrança, a chave é código.
Se o usuário resolve mover para outro cliente seta para direita, posso fazer um cCodigo := StrZero( Val( cCodigo ) + 1, 5 ) e refazer o select do cliente, até achar o próximo quando o resultset for true ( tipo softweek on )
cSql := "SELECT APC.CODIGO, APC.NOME, APC.CLASSE_PG, APC.CATEGORIA, APC.D_FALECI "
cSQL += "FROM APC01 APC "
cSQL += "WHERE APC.CODIGO = ? "
cSQL += "ORDER BY APC.CODIGO"
cCodigo := "20735"
lAchou := .F.
DO WHILE ! lAchou //Tenta achar
oPrm := oCommand:CreateParameter(StrZero(nLoop,2), adVarChar, adParamInput, 5, cCodigo )
oCommand:Parameters:Append( oPrm )
oCommand:CommandText := cSql
oCommand:CommandType := adCmdText
oRs := oCommand:Execute()
lAchou := ! oRs:Eof
IF lAchou
hwg_MsgInfo( oRs:Fields( 0 ):Value + " " + oRs:Fields( 1 ):Value )
Exit // Sai para fazer outro select para atualizar a grid (browse)
ELSE
cCodigo := StrZero( Val( cCodigo ) + 1, 5 )
ENDIF
oCommand := Nil
AbreCommand( @oCommand ) // Tem que recarregar o objeto command se não dá crash
ENDDO
FUNCTION AbreCommand( oCommand )
WITH OBJECT oCommand := Win_OleCreateObject( "ADODB.Command" )
:ActiveConnection := oConexao
END
RETURN Nil