Wamp

12.05.2014

WampServer ile Internet Explorer'da yaşanan sorun

Yazar: Admin

Wampserver sunucu yüklü bilgisayarlarda, diğer internet tarayıcılarda sorunsuz olarak işlem yapılırken, Internet Explorer çok geç işlem yapmakta ya da hiç yanıt vermemektedir.

Sorun Apache ayarlarından kaynaklanmaktadır. Sorunun çözümü için, Wampserver sunucunun kurulu olduğu dizinde bulunan httpd.conf (genellikle C:\\wamp\\bin\\apache\\apachex.x.x\\conf\\httpd.conf) dosyasının herhangi bir yerine aşağıdaki satırları yerleştirmeniz ve Wampserver sunucuyu yeniden başlatmanız yeterlidir:

# IE sorunu için
AcceptFilter http none
AcceptFilter https none

Detaylar

Android

06.08.2012

"View.OnClickListener(){} must override a superclass method" derleme hatası

Yazar: Admin

Eclipse IDE kullanarak bir android programı derlerken aşağıdaki hatayı aldığınızda daha sonraki adımlarda gösterilen değişiklikleri yaparak sorunu çözebilirsiniz:

The method onClick(View) of type new View.OnClickListener(){} must override a superclass method

1. Proje adına sağ tıklayın ve açılan menüden "Properties" seçeneğini seçin.

2. Açılan pencerede sol taraftan "Java Compiler" seçeneğini seçin.

3. Sağ taraftaki bölümde, "Enable project specific settings" seçeneğini seçin.

4. "Compiler compliance level" ifadesinin karşısındaki değeri 1.6 veya 1.7 olarak değiştirin.

5. "Apply" butonuna tıklayın.

Bu işlemler derleme hatalarını sona erdirecektir.

Detaylar

Mysql

05.03.2012

WinAPI'de ShellExecuteEx() fonksiyonu ile MySQL veri yedekleme (backup)

Yazar: Admin

MySQL'de veritabanını üzerinde yedekleme (backup) işlemlerini mysqldump.exe programı ve yedeklenen veriyi yeniden yükleme işlemlerini mysql.exe programı ile komut satırında yapmak istediğinizde aşağıdaki ifadeleri kullanabilirsiniz:

MySQL Sunucunun kurulu olduğu dizinin "C:\\Program Files\\MySQL\\MySQL Server 5.5\\bin" olduğu varsayılarak:

Aşağıdaki komut dbase_adi adlı veritabanının yedeğini C: sürücüsündeki yedek klasörü altına veri.sql dosyası adı ile alır:

C:\\Program Files\\MySQL\\MySQL Server 5.5\\bin>mysqldump.exe --port=3306 -u root -pparola dbase_adi --result-file C:\\yedek\\veri.sql

Aşağıdaki komut C: sürücüsündeki yedek klasörü altında bulunan veri.sql dosyasındaki verileri dbase_adi adlı veritabanına aktarır:

C:\\Program Files\\MySQL\\MySQL Server 5.5\\bin>mysql.exe --database=dbase_adi --port=3306 -u root -pparola < C:\\yedek\\veri.sql

Aynı işlemi, işlem pencerelerini ekranda göstermeden, C programlama dilinde WinAPI komutları gerçekleştirmek için aşağıdaki satırları kullanabilirsiniz:


VeriYedYuk(0); /* Veritabanını yedekleme (backup) */
VeriYedYuk(1); /* Veritabanını geri yükleme */

BOOL VeriYedYuk(int islem)
{
  SHELLEXECUTEINFO shellexecuteinfo;
  char cpath[4096];
  DWORD retval = 0;
  DWORD dwExitCode = 0;
  char cdizi[1000];

  ZeroMemory( &shellexecuteinfo, sizeof(SHELLEXECUTEINFO));
  shellexecuteinfo.cbSize = sizeof(SHELLEXECUTEINFO);
  shellexecuteinfo.fMask = SEE_MASK_NOCLOSEPROCESS;
  shellexecuteinfo.hwnd = hwndPanelFat;
  shellexecuteinfo.lpVerb = "open";
  if (islem==0) {
      shellexecuteinfo.lpFile = "C:\\Program Files\\MySQL\\MySQL Server 5.5\\bin\\mysqldump.exe";
      shellexecuteinfo.lpParameters = "--port=3306 -u root -pparola dbase_adi --result-file C:\\yedek\\veri.sql";
  }
  else {
      retval = GetShortPathName("C:\\Program Files\\MySQL\\MySQL Server 5.5\\bin", cpath, 4096);
      if (retval == 0) {
         return 0;
      }
      shellexecuteinfo.lpFile = "cmd.exe";
      sprintf (cdizi, "/C %s\\mysql.exe --database=dbase_adi --port=3306 -u root -pparola < C:\\yedek\\veri.sql", cpath);
      shellexecuteinfo.lpParameters = cdizi;
  }
  shellexecuteinfo.lpDirectory = NULL;
  shellexecuteinfo.nShow = SW_HIDE;
  shellexecuteinfo.hInstApp = NULL;

  if (ShellExecuteEx(&shellexecuteinfo)) {
      if (shellexecuteinfo.hProcess != NULL) {
          WaitForSingleObject(shellexecuteinfo.hProcess, INFINITE);

          if (GetExitCodeProcess(shellexecuteinfo.hProcess, &dwExitCode)) {
              if (dwExitCode) {
                  return 0;
              }
              CloseHandle(shellexecuteinfo.hProcess);
          }
          else {
              MessageBox(NULL, "GetExitCodeProcess() fonksiyon hatası", "Fonksiyon hatası", MB_OK | MB_ICONWARNING);
          }
          CloseHandle(shellexecuteinfo.hProcess);
      }
  }
  else {
     MessageBox(NULL, "ShellExecuteEx() fonksiyon hatası", "Fonksiyon hatası", MB_OK | MB_ICONWARNING);
     return 0;
  }

  return 1;
}

Detaylar

Mysql

05.03.2012

MySQL'de bir tablodaki hesaplanan alanların (calculated fields) toplamını almak

Yazar: Admin

Bilindiği üzere, hesaplanan alanlar (calculated fields) bir tabloda yer almazlar, sadece diğer alanlar üzerinde işlem yapılarak elde edilirler. MySQL'de bir tablodaki hesaplanan alanların (calculated fields) toplamını almak için SUM() komutunu aşağıdaki şekilde kullanabilirsiniz:

SELECT SUM(miktar) as toplam, (taksit1 + taksit2 + taksit3) as odenen, SUM(taksit1 + taksit2 + taksit3) FROM fatura

Aynı işlemi C programlama dilinde gerçekleştirmek için, fatura tablosunda yer alan taksit sütun değerlerinin (taksit1, taksit2, taksit3) toplamını almak için aşağıdaki saıtrları kullanabilirsiniz:


MYSQL *conn;
char qdizi[1000];
  
conn = mysql_init(NULL);

if(conn == NULL) {
   MessageBox(NULL, mysql_error(conn), "Veritabanı hatası", MB_OK | MB_ICONWARNING);
   return 0;
}

if(mysql_real_connect(conn, "localhost", "root", "password", "veritabani_adi", 3306, NULL, 0) == NULL) {
   MessageBox(NULL, mysql_error(conn), "Veritabanı hatası", MB_OK | MB_ICONWARNING);
   mysql_close(conn);
   return 0;
}  
  
sprintf(qdizi, "SELECT SUM(miktar) as toplam, (taksit1 + taksit2 + taksit3) as odenen, SUM(taksit1 + taksit2 + taksit3) FROM fatura");


if(mysql_query(conn, qdizi)) {
   MessageBox(NULL, mysql_error(conn), "Veritabanı hatası", MB_OK | MB_ICONWARNING);
   mysql_close(conn);
   return 0;
}

result = mysql_store_result(conn);

row = mysql_fetch_row(result);

/* row[0] : fatura tablosu miktar sütun toplamı */

/* row[2] : fatura tablosu ödenen toplam taksit miktarı */  

Detaylar

Mysql

03.03.2012

MySQL için C'de sprintf() fonksiyonu ile tarih formatı oluşturma

Yazar: Admin

MySQL Connector/C kullanarak oluşturduğunuz programlarla MySQL Sunucu'da yer alan veritabanlarında yapılan sorgulamalarda (query), sprintf() fonksiyonu kullanır ve tablo veri alanlarındaki tarih değerlerini DATE_FORMAT komutu ile yapılandırarak tablodan okutmak isterseniz, DATE_FORMAT komutu içinde yer alan % karakterinin sprintf() fonksiyonu parametresi olarak algılanmaması için önüne ek olarak bir % karakteri daha yazmak gerekir.

Aşağıdaki komut satırı genel kullanım şeklini göstermektedir:


sprintf(dizi, "SELECT DATE_FORMAT(alan_adi, '%%d.%%m.%%Y') as tarih_tr FROM tablo_adi");

Aşağıdaki kodlar fatura adlı tablodan tarih alan değerini gg.aa.yyyy formatında okuyarak qdizi adlı karakter dizisine atar ve bu diziyi kullanarak mysql_query() fonksiyonuyla sorgulamayı gerçekleştirir:


MYSQL *conn;
char qdizi[1000];
  
conn = mysql_init(NULL);

if(conn == NULL) {
   MessageBox(NULL, mysql_error(conn), "Veritabanı hatası", MB_OK | MB_ICONWARNING);
   return 0;
}

if(mysql_real_connect(conn, "localhost", "root", "password", "veritabani_adi", 3306, NULL, 0) == NULL) {
   MessageBox(NULL, mysql_error(conn), "Veritabanı hatası", MB_OK | MB_ICONWARNING);
   mysql_close(conn);
   return 0;
} 
  
sprintf(qdizi, "SELECT DATE_FORMAT(tarih, '%%d.%%m.%%Y') as tarih_tr FROM fatura", );
  
if(mysql_query(conn, qdizi)) {
   MessageBox(NULL, mysql_error(conn), "Veritabanı hatası", MB_OK | MB_ICONWARNING);
   mysql_close(conn);
   return 0;
}

Detaylar

Mysql

02.03.2012

MySQL SUM() komutunda ilginç bir boşluk karakteri sorunu

Yazar: Admin

MySQL'de SUM() komutunu kullanırken eğer SUM ifadesi ile () karakterleri arasında boşluk bırakırsanız komut çalışmıyor.

Fonksiyonları bu şekilde kullanma alışkanlığı olanlar için bir sorun oluşturabilir.

Normalde diğer komutlar için boşluk karakterinin varlığı bir farklılık göstermemektedir. Ancak aşağıdaki ilk satırda kullanılan SUM komutu hata vermesine karşın ikinci satırda yer alan komut sorunsuz çalışmaktadır.


SELECT SUM (sütun_adi) FROM tablo_adi /* Hatalı */
SELECT SUM(sütun_adi) FROM tablo_adi  /* Sorunsuz */

Detaylar

C

01.03.2012

C Programlama Dili'nde 2 tarih arasındaki farkı gün olarak alma

Yazar: Admin

C Programlama Dili'nde verilen 2 tarih arasındaki farkı gün olarak almak için time.h başlık dosyası içinde tanımlanmış olan tarih ve zaman fonksiyonları ile veri türlerini kullanabiliriz.

Öncelikle kaynak dosyanızın başına time.h başlık dosyasını ekleyin:

#include <time.h>

Fonksiyon içinde kullanılan fonksiyon ve veri türlerinin aşağıda belirtilen amaçlarla kullanılmıştır:

/* Verilen tarihten time_t değeri elde etmek için kullanılır. */
struct tm tmzaman;

mktime() fonksiyonuna parametre oluşturarak time_t nesnesi elde etmek için tm yapısı kullanılır.

struct tm
{
  int tm_sec;	/* Saniye: 0-59 */
  int tm_min;	/* Dakika: 0-59 */
  int tm_hour;	/* Gece yarısından itibaren geçen zaman: 0-23 */
  int tm_mday;	/* Ayın gün sayısı: 1-31 */
  int tm_mon;	/* Ocak'tan itibaren ay sayısı: 0-11 */
  int tm_year;	/* 1900 yılından bu yana yıl sayısı */
  int tm_wday;	/* Pazar'dan bu yana gün saysıı (0-6) */
  int tm_yday;	/* 1 Ocak'tan bu yana gün sayısı: 0-365 */
  int tm_isdst;	/* +1 Günışığı devrede, Günışığı yok, -1 Bilgi yok */
};

dgun = difftime(timeson, timeon) / (60 * 60 * 24); /* 2 zaman farkını elde etmek için kullanılır. */

/* 2 time_t nesnesi arasındaki farkı saniye olarak geri verir. */
double difftime (time_t, time_t);

Fonksiyon kullanımı:

GunFarki("25.02.2012", "15.09.2011");

Elde edilen çıktı:

163


int GunFarki(char *pson, char *pon)
{
  struct tm tmzaman;
  time_t timeson, timeon;
  char ctemp[5];
  int don=0;
  double dgun;

  /* İlk zaman değeri için tm yapısını doldurma ve time_t değeri oluşturma */
  tmzaman.tm_sec = 1;
  tmzaman.tm_min = 0;
  tmzaman.tm_hour = 0;
  tmzaman.tm_isdst = -1;

  strncpy (ctemp, &pson[0], 2);
  ctemp[2]='\\0';
  tmzaman.tm_mday = atoi (ctemp);
  strncpy (ctemp, &pson[3], 2);
  ctemp[2]='\\0';
  tmzaman.tm_mon = atoi (ctemp);
  tmzaman.tm_mon--;
  strncpy (ctemp, &pson[6], 4);
  ctemp[4]='\\0';
  tmzaman.tm_year = atoi (ctemp);
  tmzaman.tm_year -= 1900;

  timeson = mktime(&tmzaman);

  /* İkinci zaman değeri için tm yapısını doldurma ve time_t değeri oluşturma */
  tmzaman.tm_sec = 1;
  tmzaman.tm_min = 0;
  tmzaman.tm_hour = 0;
  tmzaman.tm_isdst = -1;

  strncpy (ctemp, &pon[0], 2);
  ctemp[2]='\\0';
  tmzaman.tm_mday = atoi (ctemp);
  strncpy (ctemp, &pon[3], 2);
  ctemp[2]='\\0';
  tmzaman.tm_mon = atoi (ctemp);
  tmzaman.tm_mon--;
  strncpy (ctemp, &pon[6], 4);
  ctemp[4]='\\0';
  tmzaman.tm_year = atoi (ctemp);
  tmzaman.tm_year -= 1900;

  timeon = mktime(&tmzaman);

  if(timeson < timeon) don = -1;
  else {
     dgun = difftime(timeson, timeon) / (60 * 60 * 24);
     don = dgun;
  }

  return don;
}

Detaylar

Mysql

01.03.2012

MySQL'de tablo AUTO_INCREMENT değerini ayarlama

Yazar: Admin

MySQL Sunucu üzerinde yer alan bir tablonun AUTO_INCREMENT değeri ile ilgili işlemler yapılırken bazen sorun yaşanabilir ve hata mesajları alınabilir.

Bu durumda, tablonun AUTO_INCREMENT değeri yeniden düzenlenebilir.

Aşağıdaki MySQL komutu ile işlem yapılan tablonun AUTO_INCREMENT değerini, 1 sayısına değil, otomatik artan değerleri içeren sütunda yer alan maksimum değerin bir fazlasına ayarlar.

Örneğin, eğer otomatik artan değerleri içeren sütunda yer alan maksimum değer 25 ise, AUTO_INCREMENT değeri 26 olarak ayarlanır.


ALTER TABLE table_name AUTO_INCREMENT = 1

Detaylar