Cum sterg un rand dint-o baza de date locala SQLite?

Intrebari despre Flex

Cum sterg un rand dint-o baza de date locala SQLite?

Mesajde RaresMC » Mar Ian 05, 2010 4:34 pm

Buna ziua tuturor.
Cu ajutorul unui video tutorial am reusit sa creez o baza de date locala cu ajutorul lui SQLite Manager.Baza de date se numeste: "internetmanager.sqlite" si se afla in "src/db/internetmanager.sqlite".
In proiectul Flex care se numeste WebArhiv am un DataGrid , 5 InputText pentru a completa datele in tabel si un buton care trimite datele completate catre tabelul din baza de date "internetmanager.sqlite".Totul functioneaza corect , insa eu vreu ca in momentul cand selectez un rand din DataGrid si apaus un alt buton sa imi stearga acel rand.Ma putei ajuta cu un exemplu de cod?Eu am cautat pe net dar nu am gasit nimic care sa ma ajute .Am folosit urmatoarea functie care nu functioneaza deoarece nu stiu ce spune ceva de un dataProvider.In urmatoarea functie "dp" este dataProvider.

Cod: Selectaţi tot
public function deleteRow():void{
if(dataGrid.selectedIndex >=0)
{
dp.removeItemAt(dataGrid.selectedIndex);
}
}


Mai jos am pus codul de la main.mxml

Cod: Selectaţi tot
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication creationComplete="init()" xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" borderColor="#525151" >
   <mx:Label fontSize="16" text="Manager Internet"/>
   
   <mx:DataGrid  id="ordersDG" selectedIndex="0">
      <mx:columns>
         <mx:DataGridColumn dataField="adresa" headerText="Adresa web"/>
         <mx:DataGridColumn dataField="descriere" headerText="Descriere"/>
         <mx:DataGridColumn dataField="username" headerText="Username"/>
         <mx:DataGridColumn dataField="parola" headerText="Parola"/>
         <mx:DataGridColumn dataField="email" headerText="Email"/>
      </mx:columns>
   </mx:DataGrid>
   <mx:Form>
      <mx:FormItem label="Adresa Web">
         <mx:TextInput id="adresaInput"/>
      </mx:FormItem>
      <mx:FormItem label="Descriere">
         <mx:TextInput id="descriereInput"/>
      </mx:FormItem>
      <mx:FormItem label="Username">
         <mx:TextInput id="usernameImput"/>
      </mx:FormItem>
      <mx:FormItem label="Parola">
         <mx:TextInput id="parolaInput"/>
      </mx:FormItem>
      <mx:FormItem label="Email">
         <mx:TextInput id="emailInput"/>
      </mx:FormItem>
   </mx:Form>
   <mx:Button label="Adauga date" click="saveOrder()"/>
   <mx:Button label="Sterge elementul" click="deleteRow()"/>
   
   <mx:Script>
      <![CDATA[
         import mx.collections.ArrayCollection;
         import com.flexandair.Order;
         import mx.controls.DataGrid;
         
         public var dbFile:File = File.applicationDirectory.resolvePath("db/internetmanager.sqlite");
         public var dbConn:SQLConnection = new SQLConnection();
         
            
         public function init():void{
            dbConn.open(dbFile);
            var sqlStatement:SQLStatement = new SQLStatement();
            sqlStatement.text = "SELECT * FROM favorite";
            sqlStatement.sqlConnection = dbConn;
            sqlStatement.execute();
            var result:Array = sqlStatement.getResult().data;
            ordersDG.dataProvider = result;
         }
         
         private function saveOrder():void{
            var order:Order = new Order();
            order.adresa = adresaInput.text;
            order.descriere = descriereInput.text;
            order.username = usernameImput.text;
            order.parola = parolaInput.text;
            order.email = emailInput.text;
            order.addEventListener('insert_complete', onInsertComplete);
            order.save(dbConn);
         }
         
         private function onInsertComplete(event:Event):void{
            var sqlStatement:SQLStatement = new SQLStatement();
            sqlStatement.text = "SELECT * FROM favorite";
            sqlStatement.sqlConnection = dbConn;
            sqlStatement.execute();
            var result:Array = sqlStatement.getResult().data;
            ordersDG.dataProvider = result;
         }
         
                        public function deleteRow():void{
                                  if(dataGrid.selectedIndex >=0)
                                  {
                                             dp.removeItemAt(dataGrid.selectedIndex);
                                   }
                          }
         
      ]]>
   </mx:Script>   
</mx:WindowedApplication>


Iar aici am pus codul de la "Order.as"

Cod: Selectaţi tot
package com.flexandair
{
   import flash.data.SQLConnection;
   import flash.data.SQLStatement;
   import flash.events.Event;
   import flash.events.EventDispatcher;
         
   public class Order extends EventDispatcher
   {
      public var id:int=0;
      public var adresa:String='';
      public var descriere:String='';
      public var username:String='';
      public var parola:String='';
      public var email:String='';
      
      public function Order()
      {
      }
            
      public function save(dbConn:SQLConnection):void{
         var insert:SQLStatement = new SQLStatement();
         insert.text = "INSERT INTO favorite (adresa, descriere, username, parola, email) VALUES (@ADRESA, @DESCRIERE, @USERNAME, @PAROLA, @EMAIL)";
         insert.parameters["@ADRESA"] = this.adresa;
         insert.parameters["@DESCRIERE"] = this.descriere;
         insert.parameters["@USERNAME"] = this.username;
         insert.parameters["@PAROLA"] = this.parola;
         insert.parameters["@EMAIL"] = this.email;
         insert.sqlConnection = dbConn;
         insert.execute();
         dispatchEvent(new Event('insert_complete'));
      }
   }
}


Va rog frumos daca ma puteti ajuta as fi recunoscator.
Multumesc anticipat.
Avatar utilizator
RaresMC
 
Mesaje: 28
Membru din: Vin Feb 06, 2009 3:26 pm
Localitate: Spania

Re: Cum sterg un rand dint-o baza de date locala SQLite?

Mesajde Barna Biro » Mie Ian 06, 2010 12:31 am

Salut si bine ai venit,

Ti-am facut un exemplu "rapid". Am comentat codul ca sa fiu figur ca intelegi tot de acolo. Sper ca nu am complicat lucrurile prea tare deoarece chiar am incercat sa "keep it simple". Sunt cam obosit sa explic in cuvinte ce am facut, dar daca te uiti la surse si la comentariile in cod, o sa iti dai tu seama. ;)

Example.zip
Record update/delete/insertion example.
(9.16 KiB) Descărcat de 275 ori

La multi ani si multa bafta.
Barni

PS: Treaba cu "removeItemAt" din codul tau functioneaza doar daca dataProvider-ul respectiv este de tipul ArrayCollection. In caz de este de alt tip, nu va functiona ( "removeItemAt" fiind o metoda al clasei ArrayCollection ). Apropo, am folosit SDK-u de 3.4 ( sa stii in caz de te lovesti de probleme... ).
Imagine
Avatar utilizator
Barna Biro
Administrator
 
Mesaje: 2037
Membru din: Vin Iul 25, 2008 1:06 am
Localitate: Lucerne, Switzerland

Re: Cum sterg un rand dintr-o baza de date locala SQLite?

Mesajde RaresMC » Mie Ian 06, 2010 12:34 am

Va multumesc din suflet pentru promtitudine,inca nu am probat acest exemplu.In caz ca am ceva ne claritati am sa postez in continuare.
Va multumesc frumos pentru ajutorul acordat.
Avatar utilizator
RaresMC
 
Mesaje: 28
Membru din: Vin Feb 06, 2009 3:26 pm
Localitate: Spania

Re: Cum sterg un rand dint-o baza de date locala SQLite?

Mesajde Barna Biro » Mie Ian 06, 2010 12:38 am

Apropo: nu e perfect exemplul :) nu am avut chef sa mai complic treaba si cu error handling la operatii de insert/update/delete ( si cu fix-uri si etc. )... pe langa asta, in mod normal, phone_number-u ar fi mai bine TEXT si nu INTEGER ( initial am vrut sa fac altceva, dupa care m-am razgandit si mi-a fost lene sa modific lucrurile ulterior ) :P ehh, oricum... sper sa intelegi ideea din spatele aplicatiei ( daca ai prins ideea, sigur te descurci si cu restul ). In caz de ai intrebari, fara rushine, intreaba :)
Imagine
Avatar utilizator
Barna Biro
Administrator
 
Mesaje: 2037
Membru din: Vin Iul 25, 2008 1:06 am
Localitate: Lucerne, Switzerland

Re: Cum sterg un rand dint-o baza de date locala SQLite?

Mesajde RaresMC » Mie Ian 06, 2010 10:50 am

Astazi m-am uitat peste exemplul dvs. si cu parere de rau nu functioneaza.
Am importat proiectul deja dezarhivat, in Flex Builder 3 si cand apas pe Run Example nu se intampla nimic nici nu da o eroare dar nici nu porneste aplicatia.Cred ca greseala este undeva in
Example.mxml mai exact aici:
<mx:WindowedApplication
xmlns:mx = "http://www.adobe.com/2006/mxml"
width = "780"
height = "450"
layout = "vertical"
creationComplete = "handleCreationComplete()"
Am uita sa mentionez ca sunt incepator in Flex.
Daca a-ti putea sa imi trimiteti un exemplu functional v-as fi recunascator.
Va multumesc si apreciez efortul dvs.
Avatar utilizator
RaresMC
 
Mesaje: 28
Membru din: Vin Feb 06, 2009 3:26 pm
Localitate: Spania

Re: Cum sterg un rand dint-o baza de date locala SQLite?

Mesajde Barna Biro » Mie Ian 06, 2010 12:40 pm

1) Sper ca ai SDK-u de 3.4 instalat ( am mentionat mai sus ca ai nevoie de acest SDK ).
2) Asigura-te ca ai ultima versiune de Adobe AIR: http://get.adobe.com/air/?promoid=BUIGQ
3) Ce sistem de operare folosesti? Eu am rulat exemplul pe Windows 7.
4) Ai incercat sa pui un breakpoint undeva ca sa vezi ca macar executa ceva? In caz de nu porneste deloc, inseamna ca e ceva sau cu sistemul tau de operare sau cu setarile tale de Flex Builder.

EDIT: Cred ca stiu care-i problema. Deschide Example-app.xml si modifica linia asta:

Cod: Selectaţi tot
<application xmlns="http://ns.adobe.com/air/application/1.5.2">

In asta:

Cod: Selectaţi tot
<application xmlns="http://ns.adobe.com/air/application/1.5">
Imagine
Avatar utilizator
Barna Biro
Administrator
 
Mesaje: 2037
Membru din: Vin Iul 25, 2008 1:06 am
Localitate: Lucerne, Switzerland

Re: Cum sterg un rand dint-o baza de date locala SQLite?

Mesajde RaresMC » Joi Ian 07, 2010 12:41 am

Salutare din nou.Am instalat SDK 3.4 am modificat asa cum mi-a-ti spus, acum ruleaza aplicatia, cu toate ca imi da o eroare si anume asta:

Could not resolve <mx:WindowedApplication> to a component implementation.
Example/src Example.mxml line 7 1262818749529 211

Eu va multumesc totusi pentru efortul acordat,dar daca a-ti putea sa ma lamuriti si cu aceasta eroare ar fi nemaipomenit.Curios lucru, cu eroarea care o are aplicatia ruleaza deci pot introduce , edita si sterge date.
Va multumesc inca o data.
Toate cele bune va doresc.
Avatar utilizator
RaresMC
 
Mesaje: 28
Membru din: Vin Feb 06, 2009 3:26 pm
Localitate: Spania

Re: Cum sterg un rand dint-o baza de date locala SQLite?

Mesajde Barna Biro » Joi Ian 07, 2010 12:53 am

Cred ca ai schimbat tu din greseala/neatentie ceva in Example.mxml. Probabil ai schimbat namespace-ul care era acolo in ceea ce am postat mai sus ( nu trebuia sa faci asa ceva ). Mi-e cam greu sa ghicesc cauza exacta a problemei fara sa vad ce ai acolo... proiectul a fost 100% functional cand a fost postat. Te lovesti de diferite probleme deoarece sau nu ai ceva instalat calumea, sau nu ai diferite setari setate calumea, sau cine stie ce mai e dereglat la tine pe calculator. :)

Incearca sa stergi proiectul, importa-l din nou, si de data asta, sa schimbi doar ceea ce am spus sa schimbi doar in Example-app.xml. Chiar nu am alta idee fara sa vad ce ai acolo... eu cred ca ai editat din neatentie ceva ( undeva... cel mai probabil in Example.mxml ) si din cauza asta iti arunca eroarea respectiva. Try again. ;)
Imagine
Avatar utilizator
Barna Biro
Administrator
 
Mesaje: 2037
Membru din: Vin Iul 25, 2008 1:06 am
Localitate: Lucerne, Switzerland


Înapoi la Adobe Flex

Cine este conectat

Utilizatorii ce navighează pe acest forum: Niciun utilizator înregistrat şi 1 vizitator

cron