Kod Panosu

Kopyala, Yapıştır, Hatırla, Kodla..

Tag Archives: sqlite

Flex Mobile veya AIR Desktop ile SQLite Veritabanı Kullananlara Notlar

  • FlexORM kullanırsanız datanızı SQLite veritabanı gibi değil, RAM’de duran bir ArrayCollection gibi yönetirsiniz. Bu da datayı compenentlere bind ederken büyük kolaylık sağlar.
  • Genelde async bağlantı kullanmanız tavsiye edilir (SQLConnection.openAsync()) ama böyle yaprasanız her DB çağrısına bir Responder yazmak zorunda kalırsınız ve sonuçta kod spagettiye döner, maintain edemezsiniz. Benim tavsiyem sekron bağlantı kurmak ve datayı listelerken bir sayfalama mekanizması kulanmaktan yana. Bunu yapmak için http://www.riaspace.com/paged-list-loaded-from-sqlite-in-adobe-air adresindeki makaleyi incelemenizi tavsiye ederim.
  • FlexORM ve sekron bağlantı kullanarak AsyncListView’e sayfalandırılmış data doldurmayı denediğim örnek projemi https://github.com/snowy73/PersonelLite adresindeki repositoryden incelleyebilirsiniz. ÖNEMLİ NOT: Bu projede kullanılan FlexORM kaynak kodu v0.8.2’den clonelanmış ve bir miktar değiştirilmiştir (https://github.com/snowy73/PersonelLite/blob/master/src/flexorm-degisiklikler.txt)
  • AIR’ın SQLite veritabanlarını şifreleme yöntemi çoğu veritabanı yönetim aracına uymadığından projenizi ilk başta şifrelenmiş veritabanı kullanacak şekilde başlatırsanız veritabanı büyüdükçe yönetmek zorlaşır. Ama development ortamında şifresiz veritabanı kullanıp projeyi production ortamına aktarmadan önce veritananınızı https://github.com/probertson/air-sqlite/blob/DB-copy-dev/src/com/probertson/data/DBCopier.as adresinde bulabileceğiniz classı kullanarak şifreleyebilirsiniz. Bu classı düzgün bir şekilde kullanmak için ilgili repository’nin DB-copy-dev adlı branch’ini kullanmanız gerekir.
Reklamlar

FlexMobile: SQLite’dan Gelen Tarih Verisini DataGrid İçinde İstenilen Formatta Göstermek

<?xml version="1.0" encoding="utf-8"?>
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" title="HomeView"
    creationComplete="creationComplete(event)">
  <fx:Script>
    <![CDATA[
      import mx.collections.ArrayCollection;
      import mx.events.FlexEvent;
      import mx.formatters.DateFormatter;
      
      protected function creationComplete(event:FlexEvent):void
      {
        var conn:SQLConnection = new SQLConnection();
        var dbFile:File = File.applicationDirectory.resolvePath('assets/test.db');
        var dbAppFile:File = File.applicationStorageDirectory.resolvePath('assets/test.db');
        
        if(!dbAppFile.exists)
          dbFile.copyTo(dbAppFile);
        
        conn.openAsync(dbAppFile, SQLMode.READ, new Responder(function success(event:SQLEvent):void{
          /* var update:SQLStatement = new SQLStatement();
          update.sqlConnection = conn;
          update.text = "UPDATE mytable SET dob = :dob WHERE name = :name"
          update.parameters[':dob'] = new Date()
          update.parameters[':name'] = 'Test';
          update.execute(-1, new Responder(function success(event:SQLResult):void{
            trace(event.rowsAffected);
          },
          function error(event:SQLError):void{
            trace(event.toString());
          })); */
          
          
          var select:SQLStatement = new SQLStatement();
          select.sqlConnection = conn;
          select.text = "SELECT name, dob FROM mytable";
          select.execute(-1, new Responder(function success(event:SQLResult):void{
            trace("OK");
            list.dataProvider = new ArrayCollection(event.data); 
          },
          function error(event:SQLErrorEvent):void{
            trace(event.error.toString());
          }));
        },
        function error(event:SQLError):void{
          trace(event.toString());
        }));
      }
      
      private var _dateformatter:DateFormatter = new DateFormatter();
      
      private function formatDate(item:Object,column:GridColumn):String
      {
        _dateformatter.formatString = "DD/MM/YYYY";
        return _dateformatter.format(item[column.dataField]);
      }
      
    ]]>
  </fx:Script>
  <fx:Declarations>
    <!-- Place non-visual elements (e.g., services, value objects) here -->
  </fx:Declarations>
  <s:DataGrid id="list" left="0" right="0" top="0" bottom="0" >
    <s:columns>
      <s:ArrayCollection>
        <s:GridColumn dataField="name" />
        <s:GridColumn dataField="dob" labelFunction="formatDate" />
      </s:ArrayCollection>
    </s:columns>
  </s:DataGrid>
</s:View>