Retornar valor correto de um BD SQLite em uma combobox

Blz galera, sou novo em flex e estou tendo um grande problema. Tenho um formulário que inseri os dados no banco, sendo os mesmos mostrados em um datagrid, neste formulário há textinput, datefield e combobox, a textfield e a datefield (esta necessitando colocar selectedDate, senão vem zerada) retornam os dados normalmente quando abro o formulário novamente para atualização dos dados, mas a combobox aparece com o 1ª valor do banco e não o inserido. Segundo uma análise que achei na net, vem o primeiro valor porque ele só está acessando o primeiro index, mas não estou sabendo resolver . O código está assim:

private function achaTFerramenta():void{
var stmt:SQLStatement = new SQLStatement();
stmt.sqlConnection = sqlConnection;
stmt.text = “SELECT DISTINCT tferramenta FROM TFERRAMENTA”;
stmt.execute();
[color=red]tFerramentas[/color] = new ArrayCollection(stmt.getResult().data);
}

<mx:FormItem label=“Tipo:” required=“true”>
<mx:ComboBox prompt=" " dataProvider="{[color=red]tFerramentas[/color]}" id=“tipo” text="{_ferramenta.tipo}" width=“200” labelField=“tferramenta”/>
</mx:FormItem>

Os dados que aparecem nesta combobox são inseridos no banco por outro formulário.

Quem puder ajudar agradeço, pois já pesquisei, fiz de todo tipo e nada.

Vc pode usar o atributo selectedItem da combo q representa o objeto do dataprovider selecionado.
Após atribuir uma coleção para o dataProvider se vc quiser setar um item, utilize o callLater para chamar uma função para posicionar o item na combo utilizando o selectedItem ou selectedIndex.
Como o flex é assíncrono o callLater irá chamar uma função no próximo ciclo de renderização qd a coleção já estiver setada na combo.

Espero ter ajudado.

[]s

Amigo obrigado pela dica, mas como sou iniciante não entendi nada do que tu disse. Eu havia achado na net um código que pensei que poderia me ajudar era assim:

                    public function [color=red]select(key:String)[/color]:void{
            		for (var i:int=0; i< [color=green]tFerramentas[/color].length; i++) {
                		var item:String = [color=green]tFerramentas[/color][i];   
                			if(item == key) {
                    			[color=blue]tipo[/color].selectedIndex = i;
                    			break;
                			}
             		}
        		}

<mx:ComboBox prompt=" " creationComplete="[color=red]select()[/color]" dataProvider="{[color=green]tFerramentas[/color]}" id="[color=blue]tipo[/color]" text="{_ferramenta.tipo}" width=“200” labelField=“tferramenta”/>

mas não consegui utilizá-lo no meu código. Se puder ajudar agradeço.

<mx:ComboBox prompt=" " dataProvider="{tFerramentas}" id="tipo" width="200" labelField="tferramenta"/> 

Não há necessidade do atributo text.
O labelField é o atributo do teu objeto / registro q deve ser mostrado na combo.
Seria interessante vc tb trazer o campo id do teu registro com isso vc chamaria o teu método select() utilizando o callLater depois de vc popular o tFerramentas e selecionando pelo id da ferramenta.
Algo como:

private function achaTFerramenta():void{ 
     var stmt:SQLStatement = new SQLStatement(); 
     stmt.sqlConnection = sqlConnection; 
     stmt.text = "SELECT DISTINCT idFerramenta, tferramenta FROM TFERRAMENTA"; 
     stmt.execute(); 
     tFerramentas = new ArrayCollection(stmt.getResult().data); 
     callLater(selecionaFerramenta, "Martelo");  // Poderia ser o id da ferramenta
}  

public function select(key:String):void{ 
    var tam:int = tFerramentas.length;
    for (var i:int=0; i< tam; i++) { 
        var item:String = tFerramentas[i]; 
        if(item == key) { 
           tipo.selectedIndex = i; 
           break; 
        } 
    } 
} 

fabiophx, tentei usar esta parte que você me mandou em meu código, mas sem sucesso, principalmente na parte do id que você falou, nem compilava, desculpe ser um novato chato, mas é que não estou conseguindo resolver sozinho, o text do combobox é para inserir os dados no banco, o código ficou assim:

<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:com="com.*" xmlns="*" width="388" height="475"
	creationComplete="init()"
	label="{_ferramenta.ferramenta_id > 0 ? _ferramenta.tipo + ' ' + _ferramenta.descricao : 'Nova Ferramenta'}">

	<mx:Script>
		<![CDATA[
			import mx.controls.Alert;
			import mx.managers.PopUpManager;
			import Eventos.FerramentaEvent;
			
			import mx.collections.ArrayCollection;
			
			import Eventos.TFerramentaEvent;
			import Formularios.TFerramentaForm;


			[Bindable] private var tFerramentas:ArrayCollection;

			// Para criar a conexão com o banco de dados
			private function openDatabase():void
			{
				var file:File = File.applicationDirectory.resolvePath("bd/Banco.db");
				sqlConnection = new SQLConnection();
				sqlConnection.open(file);

				achaTFerramenta();
			}
		
			// Para selecionar a tabela do banco de dados desejada
			private function achaTFerramenta():void
			{
				var stmt:SQLStatement = new SQLStatement();
				stmt.sqlConnection = sqlConnection;
				stmt.text = "SELECT DISTINCT tferramenta FROM TFERRAMENTA";
				stmt.execute();
				tFerramentas = new ArrayCollection(stmt.getResult().data);
				callLater(select);
			
			}
		
			[Bindable] public var _ferramenta:Object;
			
			public var sqlConnection:SQLConnection;

			private var validators:Array;

			private function init():void
			{
				validators = [tipoValidator];
				openDatabase();// colocado para abrir o banco de outro lugar
			}

			public function set ferramenta(ferramenta:Object):void
			{
				_ferramenta = ferramenta;
			}

			public function get ferramenta():Object
			{
				return _ferramenta;
			}

			private function save():void
			{
				if (Validator.validateAll(validators).length>0)
				{
					return;
				}
				
				_ferramenta.tipo = tipo.text;
				_ferramenta.descricao = descricao.text;
				_ferramenta.data_aquisicao = dataAquisicao.selectedDate;

				if (_ferramenta.ferramenta_id > 0)
				{
					update();
				}
				else
				{
					insert();
				}
			}
			
			private function insert():void
			{
				try 
				{
					var stmt:SQLStatement = new SQLStatement();
					stmt.sqlConnection = sqlConnection;
					stmt.text = 
						"INSERT INTO ferramenta (tipo, descricao, data_aquisicao) " +
							"VALUES (:tipo, :descricao, :dataAquisicao)"; 
					stmt.parameters[":tipo"] = _ferramenta.tipo; 
					stmt.parameters[":descricao"] = _ferramenta.descricao;
					stmt.parameters[":dataAquisicao"] = _ferramenta.data_aquisicao; 
					stmt.execute();
					_ferramenta.ferramenta_id = stmt.getResult().lastInsertRowID;
					label = _ferramenta.tipo + ' ' + _ferramenta.descricao;
					dispatchEvent(new FerramentaEvent(FerramentaEvent.CREATE, _ferramenta, true));
				}
				catch (error:SQLError)
				{
					Alert.show(error.details, "Erro");
				}
				showAlert();
			}
			
			private function update():void
			{
				try
				{
					var stmt:SQLStatement = new SQLStatement();
					stmt.sqlConnection = sqlConnection;
					stmt.text = 
						"UPDATE ferramenta set " + 
							"tipo=:tipo, " + 
							"descricao=:descricao, " +
							"WHERE ferramenta_id=:ferramentaId";
					stmt.parameters[":tipo"] = _ferramenta.tipo; 
					stmt.parameters[":descricao"] = _ferramenta.descricao;
					stmt.parameters[":dataAquisicao"] = _ferramenta.data_aquisicao; 
					stmt.parameters[":ferramentaId"] = _ferramenta.ferramenta_id;
					stmt.execute();
					label = _ferramenta.tipo + ' ' + _ferramenta.descricao;
					dispatchEvent(new FerramentaEvent(FerramentaEvent.UPDATE, _ferramenta, true));
				}
				catch (error:SQLError)
				{
					Alert.show(error.details, "Error");
				}
				showAlert();
			}

			private function deleteItem():void
			{
				try 
				{
					var stmt:SQLStatement = new SQLStatement();
					stmt.sqlConnection = sqlConnection;
					stmt.text = "DELETE FROM ferramenta WHERE ferramenta_id = :ferramentaId";
					stmt.parameters[":ferramentaId"] = _ferramenta.ferramenta_id; 
					stmt.execute();
					dispatchEvent(new FerramentaEvent(FerramentaEvent.DELETE, _ferramenta, true));
				}
				catch (error:SQLError)
				{
					Alert.show(error.details, "Erro");
				}
			}
			
			//para notificação quando apertar o botão salvar
			import com.notifications.Notification;
			[Embed(source = '/assets/BD.png')]
			private var notificationIcon:Class;
		
		
			private function showAlert() :void
			{
				Notification.show( "Dados salvos com sucesso no banco de dados!", "Dados salvos!", 4000, 'bottomright', notificationIcon, true );
			}
			
			//para notificação quando apertar o botão deletar
			import com.notifications.Notification;
			[Embed(source = '/assets/BDD.png')]
			private var notificationIconDeletar:Class;
		
		
			private function showAlertDeletar() :void
			{
				Notification.show( "Dados excluídos com sucesso do banco de dados!", "Dados excluídos!", 4000, 'bottomright', notificationIconDeletar, true );
			}
			
			//Quando clicar no botão deletar mostra um alerta antes de chamar a funcão excluir.
			import mx.events.CloseEvent;
			public function alertExcluir():void
			{
				Alert.yesLabel='Sim';
				Alert.noLabel='Não';
				Alert.show('Deseja realmente excluir?','ATENÇÃO',Alert.YES|Alert.NO, null, excluir);
			}

			//após a confirmação do alerta da função alertExcluir.
			public function excluir(e:CloseEvent):void{
				if(e.detail == Alert.YES){
					deleteItem()
					showAlertDeletar()
				}
			}
			
			public function select(key:String):void{   
    			var tam:int = tFerramentas.length;  
    			for (var i:int=0; i< tam; i++) {   
        			var item:String = tFerramentas[i];   
        			if(item == key) {   
           				tipo.selectedIndex = i;   
           				break;   
        			}   
    			}   
			}

		]]>
	</mx:Script>
	
	<mx:Style source="styles.css" />

	<mx:Validator id="tipoValidator" required="true" source="{tipo}" property="text" requiredFieldError="Campos com '*' são obrigatórios."/>
	
	<mx:Form width="381" height="466">
		<mx:FormItem label="Código:">
			<mx:TextInput id="ferramentaId" text="{_ferramenta.ferramenta_id}" enabled="false" width="200"/>
		</mx:FormItem>
		<mx:FormItem label="Tipo:" required="true">
			<mx:ComboBox prompt=" " dataProvider="{tFerramentas}" id="tipo" text="{_ferramenta.tipo}" width="200" labelField="tferramenta"/>
		</mx:FormItem>
		<mx:FormItem label="Descrição:">
			<mx:TextInput id="descricao" text="{_ferramenta.descricao}" width="200"/>
		</mx:FormItem>
		<mx:FormItem label="Data de Aquisição:">
			<mx:DateField id="dataAquisicao" selectedDate="{_ferramenta.data_aquisicao}" editable="true" yearNavigationEnabled="true" width="200" formatString="DD/MM/YYYY" dayNames="['D','S','T','Q','Q','S','S']" monthNames="['Janeiro','Fevereiro','Março','Abril','Maio','Junho','Julho','Agosto','Setembro','Outubro','Novembro','Dezembro']"/>
		</mx:FormItem>		
	</mx:Form>	
	
	<mx:Button label="Salvar" click="save()" left="16" bottom="20"/> 
	<mx:Button label="Deletar" click="alertExcluir()" left="87" bottom="20"/> 

</mx:Canvas>

Sei que está uma bagunça, espero que você entenda, estou enviando imagens para vc ver como fica ao inserir e fechar e depois clicar 2x no datagrid para atualizar, cara você é minha última esperança, porque já fiz de tudo para dar um jeito nesse problema. Obrigado pela dica.