Merhaba arkadaşlar, bir sitemin admin panelini sqle çevirmem gerek.. panelde form aracılığı ile access db ye kayıt yapılıyor, bunu mysqle yaptırmam lazım. bu konuda bilgilerinizi esirgememenizi rica ediyorum, ayrıca bana msnden vs. yardımcı olabilecek birisi varsa çok sevinirim, benim için çok önemli ...
bu arada sitenin her yeri mysql birtek admin paneli access kaldı. birine ücretli olarakta yaptırabilirim bunu.. ilgilenenler lütfen yazsın ..
ASP Access to MYSQL [acil]
7
●2.373
- 22-09-2008, 01:07:34
- 22-09-2008, 01:09:03ALINTIDIR!!!
Bir access dosyasını mysql aktarmanın en kolay yolu php nin odbc destegini kullanmaktır.
Access dosyamızı mysql dönüştürdüğümüz zaman daha sonra yapmamız gereken artık bize kalmış durumda. Mysql ile ilgilenen arkadaşlar zaten mysql verilerini nasıl başka bir yere taşıyacaklarını biliyorlardır. Ben bu dökümanda accessle oluşturulmuş bir mdb dosyasını localde nasıl mysql e dönüştürebileceğimizi anlatacağım. Bundan sonrası ise size kalmış.
Herşeyden önce access dosyamızı oluşturalım ve bunun içine biraz veri girelim.
Mdb dosyamızın içinde bilgi adında şöyle bir tablomuz olsun;

numara sayısal deger ad soyad ise metin şeklinde
http://rapidshare.com/files/136266727/Datta.zip
Şimdi bu dosyamızı odbc ye tanıtalım. Bunun için Eger Nt tabanlı bir işletim sistemi kullanıyorsanız Denetim Masası>Yönetimsel araçlar>Veri Kaynakları (ODBC) seçeceksiniz Win98,win95 te Odbc diyte geçiyordu doğru anımsıyorsam.
Burdan önünüze çıkacak pencere aynıdır.

Buradan Kulanıcı DSN den MS Access Database seçilecek. Bunu seçtiğimizde karşımıza yine bir pencere açılacaktır.Pencerenin görünümü şu şekilde olacaktır;

Burada bizim için öncemli olanlar şunlar:
Birincisi "Veri Kaynağının Adı" kısmı buraya yazdığımız kelime daha sonra php ile access dosyamıza erişirken gerekecek. Bundan dolayı buraya anlamlı birşey yazalım mesela "accessdatabase" oldun.
Açıklama kısmını doldurmak zorunda değiliz. Herhangi birşey yazabilir yada hiç yazmayabiliriz. Veritabanı Sekmesinden ise Seç diyerek mdb dosyamızı göstermeliyiz.

Mdb dosyamızıda seçtikten sonra artık Tamam diyebiliriz. Şu an yaptığımız işlemle mdb dosyamızı Odbc olarak tanıtmış olduk. Yani php dosyamızda odbc desteği sayesinde artık bu verilere erişebiliriz.
Artık Kullanıcı DSN kısmında bizim tanımımızda yer almaktadır.

Şimdi gelelim php ile odbc erişimine...
Php nin son versiyonlarında odbc desteği otomatik kurulu halde geliyor. Odbc desteğinin otomatik kurulu olup olmadığını anlamak için php.ini dosyasının içeriğinde extension tanımlarının bulunduğu satıra bakmak gerekir.
;Windows Extensions
satırını bulduğunuzda dosya içinde
;Note that MySQL and ODBC support is now built in, so no dll is needed for it.
Gibi bir açıklama görüyorsanız herhangi birşey yapmanız gerekmiyor. Lâkin böyle bir satır yoksa hemen az aşşağıda odbc .dll gibi bir satır göreceksiniz bu satır önünde bulunan ; (Noktalı virgül) ü kaldırın.Ve Apache yi restart edin.
Artık php ile odbc ye bağlanabiliriz.
Php manuelde gerekli komutların hepsi açıklamalı olarak var biz bunlardan sadece bize gerekli olanlarına değinelim.
Bunlardan birincisi odbc_connect() komutu komutun kullanımı paremetrik olarak şu şekilde
odbc_connect('dns adi','kullanıcı adı','parola')
Dikkat ettiyseniz biz odbc yi tanımlarken herhangi bir kullanıcı adı yada parola yazmadık. Bundan dolayı buraları boş geçecegiz. Ama odbc yi tanıtırken kullanıcı adı ve parola tanımlamak istiyorsanız.Mdb dosyasını seçtiğimiz pencerede bulunan gelişmiş tuşundan kullanıcı adı ve parola belirleyebilirsiniz.Bu fonksiyon bize bağlantı numarasını döndürecektir.
odbc_close('bağlantı numarası')
Açılan bağlantıyı kapamaya yarar.
odbc_exec('bağlantı numarası','sql komutu')
Bir sql cümlecigini göndermeye yarar
odbc_fetch_row('query numarası');
Sql sonucunda gelen verileri çeker.
odbc_result('query numarası','alan sıra numarası yada adı');
Fetch row ile çekilen verilen içerisinden alanları çeker.
Basit bir örnekle soy isimleri gösterirsek
Kod:
<?
$odbclink=odbc_connect('accessdatabase','','');
$result=odbc_do($odbclink,'select * from bilgi');
while(odbc_fetch_row($result)){
echo odbc_result($result,'soyad');
}
odbc_close($odbclink);
?>
Bundan sonra access verilerimizi mysql e taşımak çok zor değil.Aynı tablo yapısı ile bilgi adında bir tabloyu mysql e oluşturun tabloyu oluşturan sqli direk kullanabilirsiniz
Kod:
CREATE TABLE bilgi (
numara int(11),
ad text,
soyad text
);
Sonra işin özü hem mysql bağlanmak hemde odbc ye bağlanmak ve odbc den gelen verileri msyql e aktarmak;
Kod:
<?
$odbclink=odbc_connect('accessdatabase','','');
$mysqllink=mysql_connect('localhost','root','');
mysql_select_db('data');
$result=odbc_do($odbclink,'select * from bilgi');
while(odbc_fetch_row($result)){
mysql_query('insert into bilgi (numara,ad,soyad)
Values("'.odbc_result($result,'numara').'","'.odbc _result($result,'ad').'","'.odbc_result($result,'s oyad').'")');
}
odbc_close($odbclink);
mysql_close($mysqllink);
?>
Bu kodu çalıştırdığımızda biden tüm dataların taşındığını göreceksiniz.
Olay bu kadar...
Karşılaşacağınız bazı sorunlar ve çözümleri şöyle;
Çok fazla veri taşımaya çalıştığınızda bu veri taşıma işlemi sayfanız Aşım süresine uğramasına neden olabilir bunun için set_time_limit fonksiyonunu kullanabilirsiniz kullanımı
set_time_limit('saniye olarak süre') dir
Bir başka çözüm ise odbc den veri çeken sql nizi veriyi sınırlandıracak şekilde ayarlayarak verileri parça parça insert etmektir şöyle ki numara alanını baz alırsak ilk başta belirli bir numara aralığına uyan verileri çektirmek suretiyle verinizi sınırlandırabilirsiniz.
Geliştirmeye yönelik ise bir verinin iki kere girilip girilmediğini kontrol edip sorna veriyi girebilirsiniz.
Benden bu kadar...ALINTIDIR!!! - 22-09-2008, 01:19:48Eposta Aktivasyonu Gerekmekteaccess da yazılmış her sistem mysql e direkt uymaz.
cümlecikler değişebilir...
insert into yerine add.new yaptıysa recordset mantığını değiştirmeniz gerekecektir - 22-09-2008, 14:31:50asp den mysql a geçerken neredeyse bütün kodlar değişmektedir.
aşağıdaki yazı ceturk.com dan alınmıştır.
Ahmet Alp Balkan
Web Tasarım ve Geliştiricisi
ahmet safak balkan bulgarian airlines at ahmetalpbalkan.net
-----------------------------------
VERİTABANINA İLK BAĞLANTIYI YAPMAK, TABLO EKLEMEK, VERİ EKLEMEK, LİSTELEMEK VE DİĞER İŞLEMLER
Önce boş bir ASP dosyası yapalım ve aynen şu bağlantıyı oluşturalım:
<%
mysql_server = "localhost"
mysql_user = "root"
mysql_pass = "root"
mysql_db = "test"
Connection_DSN= "DRIVER={MySQL ODBC 3.51 Driver}; SERVER="&mysql_server&"; UID="&mysql_user&"; pwd="&mysql_pass&";db="&mysql_db&";"
Set Baglanti= Server.CreateObject("ADODB.Connection")
Baglanti.Open Connection_DSN
Response.Write "bağlantı kuruldu"
%>
Dosyayı wwwroot içine mysql\default.asp olarak kaydedip http://localhost/mysql/ olarak çalıştıralım. Eğer sayfa hata vermiyor ve “bağlantı kuruldu” yazıyor ise her şeyi çok iyi yapmışsınız demektir.
([MySQL][ODBC 3.51 Driver]Access denied for user 'root'@'localhost' gibi bir hata alıyor iseniz MySQL veritabanı kullanıcı adı ve şifrenizi yukarıdaki kodda uygun olarak doldurun. Eğer kurulumda k.adı ve şifre belirlemediyseniz mysql_user = “root” ve mysql_pass=”” (boş) olarak bırakın. Büyük ihtimal bağlanacaktır.)
Bağlantımız tamamlandı ise bir sorgu ile kendi veritabanımızı yapalım isterseniz.
<%
Baglanti.Execute("create database telefonrehberi ;")
Response.Write “<br> telefonrehberi Veritabanı üretildi.”
%>
Evet. Sayfayı açınca üretildi mesajını da ekranımızda görüyorsak artık sunucuda telefonrehberi adlı bir veritabanımız var. İsterseniz artık bağlantı kodumuzdaki mysql_db değişkenine “telefonrehberi” yazalım.
Access teki veri türlerini hatırlıyor musunuz? Metin, Not, Sayı, Uzun Tamsayı, Evet/Hayır, Tarih/Saat… Şimdi MySQL’de sık kullanacağınız veri tiplerini görelim. Bu veri tiplerini Google’dan arayarak detaylı özelliklerini, limitlerini bulabilirsiniz:
VARCHAR(50) : 50 karakterlik bir metin veri tipi. Access’teki Metin tipi gibi.
TINYINT (6) : 6 karakterli tamsayı alanı yaratır. Ondalık sayı girilmez
INT(11) : 11 basamaklı tamsayı alanı yaratır. Ondalık sayı girilmez
BIGINT (20) : 20 basamaklı tamsayı alanı yaratır. Ondalık sayı girilmez
DOUBLE : Ondalık sayı girebileceğiniz ve büyük sayılar alabilen bir tamsayı alanı.
LONGTEXT : Access’teki not adlı metin alanı. Sınırsız gibi. 2,14 gb yazı alabilir.
SET(‘e’,’h’) : Sadece e harfi veya h harfinin girilebileceği, iki seçenekli bir Evet/Hayır veri alanı gibi.
DATETIME, DATE, TIME: MySQL tarih alanı. MySQL’e veri girerken veriyi 2 tarz girebilirsiniz:
(yyyy-gg-aa sa:dk:sn) veya (yyyyggaasadksn) olarak. PHP kullananlar Unix Epoch tarihi olarak da girebilir. Tabi bu ASP yazanları ilgilendirmiyor. ASP yazanlar Now() fonksiyonu ile tarih ekleyebilir. Projede tarih kullanılacaksa en uygunu DATETIME kullanmaktır. Tarihleri varchar gibi alanlarda saklamak yanlış olacaktır.
Peki şimdi bir telefon defteri tablosunu nasıl yapabiliriz görelim. Eğer verdiğimiz SQL Front, SQLYOG gibi programlarla bağlanırsanız komutlar kullanmadan kendi tablolarınızı ve kendi veritabanınızı zahmete girmeden tasarlayabilirsiniz.Bu programlardan biriyle telefondefteri veritabanımıza bağlanalım ve sağ tıklayıp Yeni Tablo (New Table) üretelim:
id : (primary key)(auto_increment) int(11)
isim : varchar(100)
meslek : varchar(50)
telefon : bigint(20)
Bu tablonun SQL komutuyla yapımı şöyle olacaktır:
CREATE TABLE `telefondefteri` (
`id` int(11) NOT NULL auto_increment,
`isim` varchar(100) default NULL,
`meslek` varchar(50) default NULL,
`telefon` bigint(20) default NULL,
PRIMARY KEY (`id`)
) Engine=InnoDB ;
Artık telefonrehberi veritabanımız altında telefondefteri tablomuz var.
Bu komut ile de tablomuzu üretebiliriz. Burada dikkatinizi sorgu sonundaki Engine kısmı çekebilir. Bu, tablonun hangi veritabanı motoruyla yönetileceğini gösterir. InnoDB, MyISAM, ISAM, MEMORY, MRG_MYISAM gibi türleri vardır. Eğer kayıtlarınız on binleri bulmayacak ise InnoDB iyidir fakat çok kayıt bulunacak ise MyISAM’ı tavsiye ederim.
Not: MySQL’de SQL sorgu satırının sonuna “;” (noktalı virgül) koymalısınız. Eğer tek satır sorgu yazıyorsanız buna gerek yoktur.
Şimdi de birkaç kayıt eklemeye ne dersiniz?
<%
Baglanti.Execute("INSERT INTO telefondefteri (isim,meslek,telefon) VALUES ('ahmet alp balkan','doktor','5056872347') ;")
Baglanti.Execute("INSERT INTO telefondefteri (isim,meslek,telefon) VALUES ('gürcan balci','insaat mühendisi','5334169988') ;")
Baglanti.Execute("INSERT INTO telefondefteri (isim,meslek,telefon) VALUES ('kerim candan','berber','2625281611') ;")
Response.Write “3 kayıt eklendi”
%>
Evet kayıtlarımız böyle ekleniyor. Geliştirmeye açık kodlar. ASP ile deneyerek, formları, değişkenleri kullanarak kayıtlar ekleyebilirsiniz. Şimdi de kayıtları listelemeye ne dersiniz:
<%
Set TelefonDefteriKayitlari = Baglanti.Execute(“Select * from telefondefteri ;”)
Do Until TelefonDefteriKayitlari.eof
Kayit = Kayit +1
%>
(<%=Kayit%>) İsim: <%= TelefonDefteriKayitlari(“isim”)%>
(<%=TelefonDefteriKayitlari(“meslek”)%>) <br />
Telefon : <%=TelefonDefteriKayitlari(“telefon”)%>
<br /><br /><br />
<%
TelefonDefteriKayitlari.MoveNext
Loop
%>
Bu kodun çıktısı şu şekilde olacaktır:
(1) İsim: ahmet alp balkan (doktor)
Telefon : 5056872347
(2) İsim: gürcan balci (insaat mühendisi)
Telefon : 5334169988
(3) İsim: kerim candan (berber)
Telefon : 2625281611
Gördüğünüz üzere kayıtlarımız listelendi. Fakat ASP deki şu kod açma tarzını hatırladınız mı?
Set rs= server.createobject("adodb.recordset")
Sorgu = “select * from telefondefteri”
Rs.Open Sorgu,Connection,3,1
Artık bu tarz recordset açmayı kullanmayacağız. Çünkü MySQL kullanırken bize hiçbir getirisi olmayacak. Önceden Rs.AddNew Rs.Update Rs.RecordCount Rs.Delete kullanırdınız. Ama artık bu yok. Bütün işlemlerinizi SQL Komutları ile yapacaksınız. Örneğin:
Ekleme Komutu :
INSERT INTO telefondefteri (isim,meslek,telefon) VALUES ('gürcan balci','insaat mühendisi','5334169988') ;
INSERT INTO kisiler (‘isim’,’kayittarihi’) VALUES (‘dilan fındıkçı’,’20060813201439’);
Silme Komutu:
DELETE FROM telefondefteri where isim=’gürcan balci’;
Düzeltme Komutu:
UPDATE telefondefteri set isim=’mehmet balci’, meslek=’ogrenci’ where isim=’gürcan balci’;
Kayıt Sayısını Almak:
SELECT COUNT(*) AS TOPLAM FROM telefondefteri;
Kullanımı örneğin şu şekildedir:
<%
Set ToplamKisi = Baglanti.Execute(“SELECT COUNT(*) AS TOPLAM FROM telefondefteri;”)
Response.Write Toplamkisi(“TOPLAM”)
%> - 22-09-2008, 19:32:07bu yüzden yaptığım asp portalı komple kapatmıştım, sonra WP ile tanıştım




