Problem : ASP'de
oldugu gibi COM nesneleri kullanarak Microsoft Excel,Word gibi
programlarin avantajlarindan yararlanmak istiyorsunuz.
Cozum: PHP4 ile beraber ASP'de oldugu gibi onceden hazirlanmis
COM objelerini programlarimiz icinde argumentler yardimiyla
kullanabiliyoruz.
Bir ornek vermek gerekirse:
<?php
$word = new COM("word.application")
or die("Word baslatilamiyor");
print "Word uygulamasi basarili sekilde yuklendi,Bu bilgisayardaki
word versiyonu {$word->Version}n";
$word->visible = 0;
$word->Documents->Add();
$word->Selection->TypeText("Test yapiliyor,Bu bir
test mesajidir... 1,2,3");
$Documents[1]->SaveAs("ornek_dosya.doc");
$word->Quit();
?>
Tartisma : Cok uzun bir sure ASP'nin programcilara verdigi
bu cok guclu ozellik ile cok fazla programlama bilmeden guclu
web uygulamalarinin yaratilmasi saglandi.Bu sekilde C,C++
veya Visual Basic ile uygulamalar yazip bunlari ASP arayuzu
ile web ortamina aktarmak mumkun oluyordu.Simdi PHP de bu
ozelligi desteklemektedir.
Aslinda ASP kullanmak icin hic bir neden yoktur.Birazdan sizlere
durumun ne boyutta oldugunu gosterecegiz ve karari size birakacagiz.PHP
ile gelen kolayliklar simdiye kadar hic bir dilde olmadigi
kadar gelismistir.
Simdi de biraz daha gelismis bir uygulama yapalim ve ayni
kodun birde ASP deki yazilimina bakalim.
Bu ornegimiz de Excel ve Mssql programlarini kullanarak bir
uygulama yaratacagiz.Anlatimda kolaylik olmasi acisinda veritabani
modulunu(class veya sinif olarak tabir ediliyor.) uygulamaya
"require ()" komutunu kullanarak eklyecegim.Boylece cok fazla
karisikliga yol acmadan anlatmak istedigimizi anlatmis olacagiz.
Zannedersem bir problem olmadan anlayacaksiniz...Bu sinifi
veya dahja gelismis veritabani siniflarini internetten kolayca
bulabilirsiniz.Sonucta konumuz COM objelerini kullanarak Excel,Word
gibi uygulamalara baglanmak.
Kodlarimizi yazmaya baslayalim,
<?php
require("DB.php");
$excel_baglantisi = new COM("excel.application");
$excel_baglantisi->Visible = false;
$CalismaKitabi = $excel_baglantisi->workbooks->add();
$CalismaKitabi->Cells(1,1)->value = "Isim";
$CalismaKitabi->Cells(1,2)->value = "Ucret";
$CalismaKitabi->Cells(1,3)->value = "Calisma Suresi";
$dbh = new DB; //Burada mssql veritabanina baglaniyoruz.
$dbh->connect("mssql://kullaniciadim:sifrem@localhost/calisanraporlari");
$sth = $dbh->query("SELECT * FROM calisanisimleri WHERE
ucret='ucret'");
$idx = 2;
while ($satir = $dbh->fetchRow($sth, DB_GETMODE_ASSOC))
{
$CalismaKitabi->Cells(idx, 1)->value = $satir["isim"];
$CalismaKitabi->Cells(idx, 2)->value = $satir["Ucret"];
$CalismaKitabi->Cells(idx, 3)->value = $satir["CS"];//Calisma
Suresi CS
}
$dbh->disconnect();
$CalismaKitabi->SaveAs("cal_raporlari-$ucret.xls");
$excel_baglantisi->quit();
?>
Tekrar ediyorum burada "DB.php" dosyasi programimiza en basta
goreceginiz gibi "require()" komutuyla birlestirildi.Bu class
dosyasini uygulamanizi kayit ettiginiz klasore yerlestirmeniz
halinde uygulam problemsiz caliscaktir. Veya hangi veritabani
class'ini kullaniyrosaniz onu ekleyin.Sonucta bu tamamen size
kalmis.
Evet buraya kadar herhalde anlasilmayan bir sey yok.Simdide
ornek olmasi ve size fikir vermesi acisindan bu uygulamanin
ASP versiyonunu yazalim.
<%
Dim excel_baglantisi, calisma_kitabi, DosyaAdi 'XLS dosyasi
ile ilgili ayrintilar
Dim dbh, sth, stmt 'Veritabani ile ilgili
Dim i, x 'Dongulerle ilgili
Dim Ucret 'Kullanicin girecegi girdi degiskeni
set ucret = request.queryString("ucret")
set excel_baglantisi = server.createObject("excel.application")
'COM Nesnesi
excel_baglantisi.visible = False
excel_baglantisi.workbooks.Add
set calisma_kitabi = excel_baglantisi.Worksheets(1)
'VERITABANI BAGLANTISINI BASLAT VE VERIYI EKLE
set dbh = server.createObject("ADODB.Connection")
dbh.Open "DSN= calisanraporlari;uid=kullaniciadim;pwd=sifrem"
set stmt = "SELECT * FROM calisanisimleri WHERE ucret='"
stmt = stmt & Ucret & "'"
set x=2
For i=0 to sth.eof
Worksheet.Cells(x,1) = sth(i).isim
Worksheet.Cells(x,2) = sth(i).ucret
Worksheet.Cells(x++,3) = sth(i).CS
sth.movenext
next
dbh.close
calisma_kitabi.SaveAs "cal_raporlari-" & Ucret &
".xls"
excel_baglantisi.quit
set calisma_kitabi = Nothing
set excel_baglantisi = Nothing
%>
Karar Sizin :)
Bu konu hakkindaki butun gorus ve sorularinizi asagidaki
mail adresime gonderebilirsiniz.
Saglicakla kalin,
Serkan Hadi Ceylani
serkan@turk-php.com
|