AYAKLARIM ÇALINDI HÜKÜMSÜZDÜR! “Akülü Tekerlekli Sandalye”

AYAKLARIM ÇALINDI HÜKÜMSÜZDÜR! !
“Akülü Tekerlekli Sandalye”


Sizin hiç ayaklarınız çalındı mı? Benim üç defa çalındı.
Bu sabah kalktığımda her zamanki gibi hazırlıklarımı yaptım ve işe gitmek için kapıyı açtığımda ayaklarım yerinde yoktu. İşe gitmek zorundaydım ve korkunç bir panik içindeydim, otobüsümü kaçırıp da geç kalmıyorum ki bunu daha nasıl tarif etmem gerekiyor. Oysaki daha iki ay önce yine aynı şeyleri aynı duyguları yaşıyordum ben. Ama en tramvatik olanını ben ta çocukluğumda yaşamıştım.

Fark ettiğimde önce panikledim nasıl olurdu annem sağa baktı sola baktı dışarı baktı ama gerçekten yoktu. Kalbim duracak gibi atıyor beynim zonkluyordu. Bir insanın ayakları neden çalınır ki? Ağlamaya başladım bu üçüncüydü ve sanırım hep ben yaşıyordum. Anlatılacak gibi değil. İnsanın ayakları onun umudu sevinci yaşamla arasındaki köprü! Bunu kim koparmak isteyebilir ki? Anlatamıyor anlam veremiyorum. Dahası sabahtan beri ağlamaktan doğru düşünemiyordum. Bu umutlarımın kaçıncı çalınmasıydı. Nasıl mı?

Polisi aradım; ve geldi. Ayaklarımın bana ait olup olmadığına dair bir ispat, bir belge istedi. Ben yerimden kalkamadığım için annem odamdan “ayaklarımın markasını gösteren gerekli belgeyi” ve daha iki ay önce çalınan önceki ayaklarıma ait zapta geçen “Şikayetçi Tutanağını” getirdi. Polis ilgili belgeler ile birlikte annemi ifadesini almak üzere karakola götürdü.

Annem -“Yavrum çocuğumun iki ay önce bir akülü tekerlekli sandalyesi çalınmıştı, bu da tarafınızdan tutulan tutanağı. Siz daha onu bulamadan: Bu sabah uyandığımızda ise kızımın ikinci akülü tekerlekli sandalyesinin de çalındığını gördük. Allah aşkına biz ne yapalım bize bir çare.” Dedi.
Polis -“Umutsuzca inşallah buluruz ama giden gitmiş teyzem.” dedi.

Böyle ulvi bir milletin evlatları nasıl bu kadar bencilce davranabilmişlerdi. Cahilliği affedebilir ve anlayabilirdim ama bencilliği asla. Bu yaşadığım kabusu benimle birlikte paylaşan ulusumun vicdanına havale ediyorum. Yazıklar olsun! ! !

Not:
1. Akülü tekerlekli sandalyemin çalınmasını belgeleyen tutanak tarihi ve markası:
21.02.2010-MEYRA
2. Akülü tekerlekli sandalyemin çalınmasını belgeleyen tutanak tarihi ve markası:
05.04.2010-BELMO

İrtibat: Nurten AKTAŞ
Olay yeri(Adres) : Balkiraz Mah.
Şikayet: Demirlibahçe Karakolu MAMAK / ANKARA

Nurten Aktaş

Not: Nurten Aktaş' a ait diğer yazı ve şiirlere buradan erişebilirsiniz.

Varlık-İlişki (ER) Diyagramları

Readmee nisan sayısı için yazmış olduğum Varlık-İlişki (ER) Diyagramları adlı makalede ER Diyagramlarının ne olduğuna, bu diyagramın çizilmesi için gereken temel kavramlara ve tüm bu anlatılanların detaylı bir örneğine erişmek için tıklayın.


Readmee 1 Yaşında


Readmee'nin bu(Nisan 2010) sayısı hem benim hem de ekibimiz için çok büyük önem taşımaktadır. İlk sayısından beri çok emek vererek bu günlere getirdiğimiz  Readmee artık 1 yaşında. Doğuşunu, adını koyuşumuzu dün gibi hatırlıyorum. Şimdi ise 100 makele ile besledik, büyüttük ve 1 yaşına getirdik.
Yoğun dönemlerimiz oldu, sınavlara projelere rağmen onu okuyucularımızla buluşturmayı başardık. Her ay çok çeşitli konularda makaleler yazdık ve ciddi bir okuyucu kitlesi oluşturduk. Her ay yeni şeyler öğrenmenin ve öğrendiklerimizi okuyucularımız ile paylaşmanın mutluluğunu yaşadık. Yazı dizileri, yeni teknolojiler, röportajlar,  öğrenci arkadaşlarımıza derslerinde yardımcı olabilecek bilgiler ve daha birçok konu ile olabildiğince geniş bir kitleye ulaşmayı hedefledik. Gelen yorumlardan ve takipçilerimizin fazlalığından da anladığımız üzere bu hedefimizde başarılı olabilmişiz. Yine de yapabileceğimiz çok fazla şey var. Gün geçtikçe daha çok büyüyecek ve gelişecek Readmee.
Readmee’yi bugünlere getiren siz sevgili okuyuculara ve ekibimize çok teşekkür ediyorum. İyi ki doğdun Readmee. Daha da büyüyerek ve gelişerek nice yıllar yaşaman dileğiyle.

QT ile Veritabanı Bağlantıları


Bir önceki yazımızda Qt’yi tanıtmış ve bünyesinde her türlü araç ve kütüphaneyi barındırdığını söylemiştik. Qt’nin özellikle veritabanı konusunda çok büyük kolaylıklar sağladığından ve çok sayıda veritabanını desteklediğinden bahsetmiştik. Bu yazımızda Qt ile veritabanı bağlantıları nasıl yapacağız bunlardan bahsedeceğiz ve basit birkaç örnekle anlattıklarımızı pekiştireceğiz.
Öncelikle QSql kütüphanesinin kullanımından başlayalım. QSql, veritabanınız ile Qt uygulamalarınıza sorunsuz bağlantı yapabilmenizi sağlayan bir modüldür. Qt Sql kütüphanesinde kullanılan çok çeşitli belirleyicileri içermektedir.Sql classı üç farklı katmandan oluşmaktadır.
1.Sürücü Katmanı (Driver Layer): Bu katman, QSqlDriver, QSqlDriverCreator, QSqlDriverCreatorBase, QSqlDriverPlugin ve QSqlResult sınıflarını kapsamaktadır. Sürücü katmanı, belirli veritabanları ile Sql API katmanı arasında köprü görevi görmektedir.
2. SQL API Katmanı (SQL API Layer): Bu sınıflar Sql’ e erişimi sağlayan sınıflardır. Bağlantı işlemi QSqlDatabase sınıfı kullanılarak yapılır. QSqlQuery sınıfı ile veritabanı ile etkileşim yapılır. SQL API katmanı bunların dışında QSqlError, QSqlField, QSqlIndex ve QSqlRecord  gibi sınıfları da desteklemektedir.
3.Kullanıcı Arayüzü Katmanı (User Interface Layer): Bu katman, QSqlQueryModel, QSqlTableModel ve QSqlRelationalTableModel sınıflarını içerir. Bu sınıflar, veritabanındaki dataya erişirler ve Qt’nin model/view framework ü ile birlikte çalışabilecek şekilde dizayn edilmişlerdir.
QSqlDatabase: QSlDatabase veritabanına bağlantı yapmayı sağlayan sınıftır. Bu sınıftan oluşturacağımız nesneler sayesinde veritabanımızı yönetebileceğiz.
QSqlQuery: Bu class sayesinde Sql sorguları oluşturarak veritabanı uygulamaları yapabiliriz.
Şimdi QSqlDatabase sınıfını kullanarak veritabanı bağlantısı oluşturalım.

  QSqlDatabase db = QSqlDatabase::addDatabase("sürücüTipi");  
  db.setHostName("sunucuAdresi");  
  db.setDatabaseName("veritabanıAdı");  
  db.setUserName("kullanıcıAdı");  
  db.setPassword("kullanıcıSifresi");  
  bool ok = db.open();


İlk olarak QSqlDatabase nesnesini(db) oluşturduk. addDatabase() fonksiyonu sürücü tipini belirtmeye yarar. Ne tür bir veri tabanına bağlanılacağını bildirir. Qt birden fazla veritabanını desteklediği için o veritabanına uygun sürücü tipini de belirtmek gerekir. Örneğin kullanılan veritabanına göre şu sürücü tipleri kullanılabilir:

Sürücü Tipi
Açıklama
QDB2
IBM DB2
QIBASE
Borland InterBase Driver
QMYSQL
MySQL Driver
QOCI
Oracle Call Interface Driver
QODBC
ODBC Driver (includes Microsoft SQL Server)
QPSQL
PostgreSQL Driver
QSQLITE
SQLite version 3 or above
QSQLITE2
SQLite version 2
QTDS
Sybase Adaptive Server

setHostName(),setDatabaseName(), setUserName(), setPassword() fonkisyonu ile gerekli bilgileri verdikten sonra  open() fonksiyonu ile veritabanıyla fiziksel bağlantımızı oluşturuyoruz. open() metodunu kullanmadığınız sürece bağlantıyı yapamazsınız. Bu metod, boalean(true/false) sonuç döndürür. Bu sayede bağlantnın açık olup olmadığını kontrol edebiliriz.
Örneklere başlamadan önce değinmek istediğim bir nokta var.  QtCreator ile veritabanı uygulaması geliştirmek için QtCreator’ı açıp, proje tipinizi seçtikten sonra kütüphanelerin bulunduğu bir ekran karşınıza gelecektir. Buradan da QSql seçeneğini aktif hale getirmeniz gerekmektedir. Aksi takdirde QtCreator veritabanı classlarınızı tanımayacağı için hata verecektir.
Şimdi yeni bir proje açalım ve yukarda bahsettiğim gibi QSql seçeneğini seçelim. Projemizin adı da sqlBaglanti olsun ve görsel bir uygulama olsun. Bu durumda projeyi actığımızda sol tarafta sqlBaglanti.h, sqlBaglanti.cpp ve main.cpp  oluşmuş olacak.Biz bağlantı kodlarını içeren bir header file oluşturalım adı connection.h olsun ve projemizin gerekli yerlerinde bu header file’ i kullanalım.
connection.h

#ifndef CONNECTION_H
#define CONNECTION_H

#include
#include
#include
#include

static bool createConnection()
{
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");

      if(db.isDriverAvailable("QODBC"))
      {
      db.setDatabaseName("DRIVER={SQL Server};SERVER=ServerName;UID=sa;PWD=12345;DATABASE=readmee;");
      } // Bağlantı cümlenizi bu şekilde tek satırla da belirtebilirsiniz.

      if (!db.open()) {
            QMessageBox::critical(0, QObject::tr("Database Error"),              db.lastError().text());
            QString str = db.lastError().text();
      }
     return true;

}
#endif


sqlBaglanti.h kısmında QSqlDatabase nesnemizi tanımlayalım.

#ifndef SQLBAGLANTI_H
#define SQLBAGLANTI_H

#include
#include "ui_sqlbaglanti.h"

#include

class sqlbaglanti : public QMainWindow
{
      Q_OBJECT

public:
      sqlbaglanti (QWidget *parent = 0, Qt::WFlags flags = 0);
      ~ sqlbaglanti ();

private:
      Ui:: sqlbaglanti Class ui;
      QSqlDatabase db;
};

#endif // SQLBAGLANTI_H


main.cpp kısmında oluşturduğumuz createConnection() metodunu çağıralım:

#include
#include " sqlbaglanti.h"
#include "connection.h"

int main(int argc, char *argv[])
{
      QApplication a(argc, argv);
      if (!createConnection())
        return 1;
      sqlbaglanti w;
      w.show();
      return a.exec();
}


sqlbaglanti.cpp

#include
#include

 #include "sqlbaglanti.h"
 #include "connection.h"

sqlbaglanti:: sqlbaglanti (QWidget *parent, Qt::WFlags flags)
      : QMainWindow(parent, flags)
{
      ui.setupUi(this);
}

sqlbaglanti::~ sqlbaglanti ()
{

}


Veri tabanı bağlantımızı yaptık. Şimdi veritabanımıza SqlQuery kullanarak veri ekleme silme gibi işlemleri yapalım.

QSqlQuery query;

    if (!query.exec("SELECT * FROM person"))
      {          
            QMessageBox::critical(0, QObject::tr("Query Error"),db.lastError().text());
            return false;
      }

// veri ekleme
     query.prepare("INSERT INTO person (ID,Name) "
                   "VALUES (:ID, :Name)");
     query.bindValue(":ID", 10);
     query.bindValue(":Name", "Gamze");
     query.exec();

//ID si 3 olan kaydın adını QMessageBox ‘ ta gösterelim:

     query.exec("SELECT * FROM person where ID='3'");
     int fieldNo = query.record().indexOf("Name");
     while (query.next()) {
              Name = query.value(fieldNo).toString();
       }
      QMessageBox::critical(0, QObject::tr("Name"),Name);


QSqlTableModel
Herhangi bir tabloya(tableWidget ya da tableView gibi) veri ekleme işlemlerinde QsqlTableModel sınıfı kullanılır.QSqlTableModel türünde bir nesne/model oluşturulur.Oluşturulan bu modele veriler aktarılır ve yapılacak tüm işlemler bu model üzerinden gerçekleştilir.Bu sayede tekrar tekrar veritabanından veri çekme işlemi yapılmamış olur.
initializeModel() metodu parametre olarak oluşturduğumuz model nesnesini alıyor ve bu nesneye bir takım özellikler atıyor.
createView() metodu ise ekranda gözükecek olan tableViewı olusturuyor ve buna model nesnesine daha önceden aktarılmıs olan veriler aktarılıyor.Bu tableView nesnesini kodla olşturmak yerine QtDesigner’ da sürükle bırak yöntemiyle de projenize ekleyebilirsiniz.
                 
void initializeModel(QSqlTableModel *model)
 {
       
     model->setTable("person");
     model->setEditStrategy(QSqlTableModel::OnManualSubmit);
     model->select();

     model->setHeaderData(0, Qt::Horizontal, QObject::tr("ID"));
     model->setHeaderData(1, Qt::Horizontal, QObject::tr("Name"));
    
 }

QTableView *createView(const QString &title, QSqlTableModel *model)
 {
     QTableView *view = new QTableView;
     view->setModel(model);
     view->setWindowTitle(title);
     return view;
 }



Bu fonksiyonları da main.cpp ‘ de çağırarak ekranda veri tabanından aldığımız bilgilerle doldurulan tableView’ı gösterebilirsiniz.

int main(int argc, char *argv[])
{
     QApplication a(argc, argv);
            if (!createConnection())
        return 1;

     QSqlTableModel model;
     initializeModel(&model);
     
     QTableView *view1 = createView(QObject::tr("Table Model (View 1)"), &model);
     view1->show();

 return a.exec();
}


Bu yazımda sizlere veritabanı uygulamalarınızda ihtiyaç duyabileceğiniz temel işlemlerden bahsettim. http://doc.trolltech.com/4.5/qsqldatabase.html adresinden bu konuyla ilgili daha detaylı bilgi alabilirsiniz. Bu adreste Qt ile ilgili çok geniş doküman yer almaktadır. Buradaki örnekleri inceleyerek öğrendiklerinizi pekiştirebilirsiniz. Qt ‘ nin bu yukarıda bahsettiğim sınıflar dışında daha birçok veritabanı sınıfı bulunmaktadır. Bunları kullanarak çok çeşitli uygulamalar geliştirebilirsiniz.