se fosse em java seria String descricao = modulo.getDescricao(); em flash deve ser algo parecido…
ssh
Se fosse em java, sua query SQL deveria ficar armazenada em um ResultSet .
e você usuaria. ResultSet.getString(“nome da coluna/ ou numero”);
getString para quando o campo é varchar.
horochovec
Vamos lá
Não consegui entender sua estrutura, você está trabalhando com Flex e está usando AMF? Porque o Flex não conecta com banco de dados, então sua função: ObterItemSelecionadoComboBox não vai funcionar no Flex, e sim no Java.
Esse trecho também está confuso: banco.getDados2(sql, “PostGres”,2);
O que é “banco”?
Para poder ajudar, você vai ter que postar mais código ai, para ao menos tentarmos entender o que você está tentando fazer.
Ivan_Alves
Não entendi muita coisa, por acaso você está retornando um objeto que contém os atributos e quer pegar o atributo ‘descricao’?
jrcardoso007
Amigos, me desculpem, vou tentar ser mais claro.
banco.getDados (é um método em java que utilizo para conectar com o banco de dados e extrair informações)
neste trecho estou conectando com o banco e passando o sql que quero executar. A função ResultadoChamaModulo2 é a que trata o retorno deste método. Estou retornando no metodo getDados um List com os campos (cd, descr) gostaria de pegar pelo result o conteudo do campo descr.
Se acharem necessario, posto a classe completa para terem maior claresa na informação.
Este método esta retornando uma List com os dois campos (cd e descr). Este retorno esta sendo tratado pela função ResultadoChamaModulo2 definida na tag abaixo do flex
<mx:method name=“getDados2” result=“ResultadoChamaModulo2(event)”/>
Eu gostaria de pegar a coluna descr do event.result e atribuir a uma Label. Ex.: label.text = event.resul.descr
Obs. Verifiquei que os dados estão sendo retornado no result do evento, porque consegui colocar as informações em uma grid, para testar a informação.
Ivan_Alves
coloca o método java getDados2 para esclarecer melhor!
horochovec
Bom, vamos lá
Primeiro: Essa estrutura que você está montando não é indicada. Você não deve passar suas consultas entre Flex / Java e sim trafegar apenas objetos serializados e tipados. Quem deve se preocupar com sua consulta é o Java e não o Flex que corresponde a sua View.
Segundo: A tua consulta retorna um objeto obtido no Java, o correto é você criar um DTO (ou VO) e trafegar este objeto de forma tipada, por exemplo, você vai ter um objeto do tipo “PessoaDTO” no Java e o mesmo vai retornar para o Flex como PessoaDTO. Caso opte por não trabalhar com objetos (o que não é legal), você pode por no teu método java um retorno direto da String que você deseja, ex:
resultSet.getString(“nome da coluna/ ou numero”);
E no Flex você pode verificar o retorno dele como:
Provavelmente vai dar certo, mas como eu disse, nada recomendável trabalhar desta forma.
lucasbemo
Eu também aconselho você remover essa parte que esta passado o SQL dentro do Flex, você deve passar SQL no código java, é na camada java que deve se preocupar com o SQL. Isso não é legal nem boa prática(dica: procure saber sobre design pattern ).
vlw, abrç.
jrcardoso007
Ok amigos, obrigado pelas dicas, vou estar alterando o local do meu sql e colocar diretamento no java. E aproveitar e dar uma olhada nos designer patter como sugerido.
Estou inserindo abaixo o método getBancos conforme solicitado pelo Ivan para deixar mais claro, mas de qualquer forma ja vou fazer as alterações sugeridas tambem.
publicListgetDados(Stringsql,Stringbanco,intcampos){executaSQL(sql,banco);Listlista_final=newArrayList();try{while(rs.next()){HashMapdados=newHashMap();dados.put("cd",rs.getString("cd"));lista_final.add(dados);}}catch(Exceptione){JOptionPane.showMessageDialog(null,"Erro na criação dos dados HashMap");}returnlista_final;}publicvoidexecutaSQL(Stringsql,Stringbanco){Conecta(banco);try{st=conn.createStatement();rs=st.executeQuery(sql);}catch(Exceptione){JOptionPane.showMessageDialog(null,"Erro no comando SQL"+e);}}
horochovec
Realmente o código precisa ser refatorado, tá cheio de JOptionXYZ… Isso ai não funciona com Flex
Ivan_Alves
A sim está usando HashMap que também não é o mais recomendado porém vamos analisar, você envia de volta para o flex uma List de HashMaps cada uma com os atributos que você colocou como ‘cd’ então no Result você faz
var minhaLista:ArrayCollection = event.result as ArrayCollection; //uma List em Java representa um ArrayCollection no Flex
//verifique se ele possui algum elemento
if(minhaLista != null && minhaLista.lenght>0){
//você pode acessar os atributos passados para sua HashMap através da sua chave que no caso ai tem 'cd' por exemplo
//o primeiro dado passado para sua lista
Alert.show(minhaLista.getItemAt(0).cd.toString()); //use um loop caso queira passar visualizar todos
}
tenta arrumar seu código ai de acordo com as dicas do pessoal ai de cima depois tenta isso ai, flw!
jrcardoso007
Ivan, muito obrigado cara.
Realmente deu certo fazendo como indicou. Ja estou acertando o código conforme o pessoal indicou.
Agora só mais uma coisa. Voce comentou que usar o HashMap, não é o mais indicado.
Qual seria a maneira mais indicada de passar o retorno do sql neste caso???
E você saberia me indicar um livro bom que trata o assunto java e Flex juntos???
Vlw
Abraço.
Ivan_Alves
Não sei se é o seu caso mais comigo por exemplo eu crio minha tabela no banco de dados de acordo com as minhas classes por exemplo seu eu quero representar um produto eu crio assim:
public class Produto{
private int id;
private String descricao;
//....
//metodos gets e setters
}
e no banco crio uma tabela com os campos id e descrição
na maioria dos casos quando faço uma consulta quero buscar os dados de uma tabela, podendo assim guarda-los em um objeto do tipo ‘Produto’ e assim envia-los para o flex seja em uma List ou apenas 1 objeto.
No flex também quero utiliza-los como o tipo ‘Produto’ então crio uma classe Produto lá também com os mesmos atributos e faço as devidas referencias, então as uso normalmente geralmente setando elas com ‘Bindable’ entre outros.
Nesse site tem um exemplo talvez você entenda melhor http://blog.digows.com/en/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensource-para-sistemas-web-parte-1/
flw!
horochovec
É interessante que os objetos trafegados não sejam sua camada de domínio. Pode parecer custoso e até estranho, mas isso permite uma maior segurança da sua aplicação e também facilita em caso de algum construtor diferente, alguma implementação em algum “set”, etc. O contra disso é a conversão dos objetos de tráfego Flex <-> Java em objetos na camada de domínio para serem persistidos