galetis Posted January 23, 2012 Share Posted January 23, 2012 (edited) Önceden anlatımını yaptığım [topic='160967']Ams ile Sql veritabanı kullanımı[/topic] çalışmamın Mysql versiyonu. Uzak veya localdeki veritabanınıza daha kolay işlem hazırlatmak için bir framework hazırladım. Öncelikle projemizin Databases bölümünden MySQL'in seçili olduğuna dikkat ediyoruz. Sonra aşağıdaki kodların hepsini Global Functions'a yapıştırıyoruz. [codebox] db = { dbler = {}, -- baglantilar hatalar = "", -- hatalar log = function(strHata) db.hatalar = db.hatalar .. strHata .. "\n"; end, -- log bitis connect = function(host, user, pass, database) db.dbler[database], err = MySQL:connect(database, user, pass, host); if not db.dbler[database] or err then db.log("Mysql bağlantısında hata oluştu!!"); else return true; end end, -- connect bitis query = function(query, database) MySQLCursor, err = db.dbler[database]:execute(query); if not MySQLCursor or err then db.log("Sorgu hatası - "..query); return false; else return true; end end, -- query bitis var = function(query, database) MySQLCursor, err = db.dbler[database]:execute(query); if not MySQLCursor or err then db.log("Sorgu hatası - "..query); return false; else return MySQLCursor; end end, -- query bitis row = function(query, database) if (query == nil or database == nil) then db.log("Query yada db girilmedi"); return false; else local MySQLCursor = db.dbler[database]:execute(query); local row = MySQLCursor:fetch ({}, "a"); return row; end end, -- row bitis rows = function(query, database) if (query == nil or database == nil) then db.log("Query yada db girilmedi"); else local MySQLCursor, err = db.dbler[database]:execute(query); if not MySQLCursor or err then db.log("Sorgu hatası - "..query); else local row = MySQLCursor:fetch ({}, "a"); local Data = {}; local Rows=0; while row do Rows = Rows + 1; Data[Rows] = {}; for index,item in pairs(row) do Data[Rows][index] = item; end row = MySQLCursor:fetch(row, "a"); end return Data; end -- Sorgu hatası end -- fonksiyon hatası end, --rows bitis close = function() db_close = MySQL:close(); if db_close then db.log("Mysql veritabanı kapatılamadı!!"); end end, -- close bitis } -- db ana tablosu bitisi [/codebox] Veritabanına bağlanmak içinse aşağıdaki kodu kullanıyoruz. Birden fazla bağlantı için alt alta bu komutu kullanabiliriz fakat "veritabanı" isimlerinin farklı olması gerekir. [code]db.connect("ip", "kullanıcı", "şifre", "veritabanı")[/code] Sadece tek değer alınacaksa db.var() fonksiyonunu kullanmalısınız. [code]local deger = db.var("Select count(*) from tablo", "veritabanı");[/code] Dönüş yapılmayan sorgular için db.query() fonksiyonunu kullanmalısınız. [code]db.query("Delete from tablo where id=1", "veritabanı");[/code] Sadece bir satırı döndürmek istiyorsak db.row() fonksiyonunu kullanacağız. [code] local satir = db.row("Select * from tablo where id=1", "veritabanı"); sütun1 = satir.sütun1; sütun2 = satir.sütun2; [/code] Birden fazla satır içinse db.rows() fonksiyonu işimizi görecektir. Dönen değerleri in pairs ile kullanabiliriz. [code] local tblSonuclar = db.rows("Select * from tablo", "veritabanı"); if Table.Count(tblSonuclar ) ~= 0 then for ind, val in pairs(tblSonuclar) do ComboBox.AddItem("Combo_Oyuncu", val.sütun1, val.sütun2); end else Dialog.Message("Hata", "Sonuç yok!"); end [/code] Sorusu olan konu altından yazarsa sevinirim. Özel mesajlara cevap vermiyeceğim. Edited January 23, 2012 by galetis Quote Link to comment Share on other sites More sharing options...
El-Arabi Posted January 24, 2012 Share Posted January 24, 2012 db.connect("ip", "kullanıcı", "şifre", "veritabanı") bu kodu herhangi bir butonun onclick evresine yazdığımızda bağlanması lazım değilmi. Quote Link to comment Share on other sites More sharing options...
galetis Posted January 24, 2012 Author Share Posted January 24, 2012 Nereye yazdığın farketmiyor Quote Link to comment Share on other sites More sharing options...
El-Arabi Posted January 25, 2012 Share Posted January 25, 2012 Veri tabanına bağlanıyorum veriyi alıp Comboboxa atıcam ama string olması lazım diyor. local tblSonuclar = db.rows("Select * from tablo", "veritabanı"); if Table.Count(tblSonuclar ) ~= 0 then for ind, val in pairs(tblSonuclar) do ComboBox.AddItem("Combo_Oyuncu", val.sütun1, val.sütun2); end else Dialog.Message("Hata", "Sonuç yok!"); end bu kodu kullanıyorum ComboBox.AddItem("Combo_Oyuncu", val.sütun1, val.sütun2); burada hata çıkıyor. Quote Link to comment Share on other sites More sharing options...
galetis Posted January 25, 2012 Author Share Posted January 25, 2012 Kodları kendinize göre düzenledinizmi? Düzenlenmiş kodları görmem gerekir. Bu kodlar zaten çalışmaz, örnek olsun diye yazdım. Quote Link to comment Share on other sites More sharing options...
El-Arabi Posted January 25, 2012 Share Posted January 25, 2012 Kodları kendime göre düzenledim fakat ComboBox.AddItem("Combo_Oyuncu", val.sütun1, val.sütun2); buradaki val.sütun1 ile val.sütun2 ye ne yazmam gerkiyor "ü" özel karakter oldugu için kabul etmedi sadece val yazdım onuda kabul etmedi.Sorunum sadece burası. Quote Link to comment Share on other sites More sharing options...
galetis Posted January 25, 2012 Author Share Posted January 25, 2012 Kendi veritabanınızdaki sütunun adını yazacaksınız. Mesela id ve name sütunlarını çekmek istiyorsunuz o zaman val.id ile val.name değişkenlerini kullanmalısınız. Quote Link to comment Share on other sites More sharing options...
El-Arabi Posted January 25, 2012 Share Posted January 25, 2012 Yine yapamadım pm ile bilgilerimi göndersem bakabilirmisin. Quote Link to comment Share on other sites More sharing options...
galetis Posted January 25, 2012 Author Share Posted January 25, 2012 Gönder Quote Link to comment Share on other sites More sharing options...
Yusuf-Yildiz Posted January 25, 2012 Share Posted January 25, 2012 (edited) [b][font="Arial"]Hocam bu kodları kullandım fakat index global 'db' (a nil value) diye bir hata veriyor.[/font][/b] [b] [/b] [b][font="Arial"][code]MySQLConnection, err = MySQL:connect(db_ad, db_kadi, db_pass, db_site); a = Input.GetText("name"); b = Input.GetText("pass"); c = Input.GetText("pass_t"); if b==c then local new_kadi = Input.GetText("name") new_pass = Input.GetText("pass") db.query("INSERT INTO "..tb_ad.."(\""..tb_kadi.."\",\""..tb_pass.."\") VALUES ("..new_kadi..","..new_pass..")"); Dialog.Message("Eklenedi!", "Kullanıcı Eklendi!", MB_OK, MB_ICONINFORMATION) Page.Jump("Giris"); else Dialog.Message("Yanlış!", "Girdiğiniz şifreler aynı değil!\nŞifre tekrarının amacı şifreleri doğru girmek ve\nkullanıcıya doğru şekilde ulaştırmaktır.\nLütfen, şifreleri dikkatlice giriniz ve aynı olmasına dikkat ediniz...", MB_OK, MB_ICONSTOP) end [/code][/font][/b] Edited January 25, 2012 by severalnasty Quote Link to comment Share on other sites More sharing options...
galetis Posted January 25, 2012 Author Share Posted January 25, 2012 Çünkü o verdiğim kodları globale yapıştırmamışsın Quote Link to comment Share on other sites More sharing options...
Yusuf-Yildiz Posted January 25, 2012 Share Posted January 25, 2012 [quote name='galetis' date='25 January 2012 - 21:50 ' timestamp='1327521000' post='1145956'] Çünkü o verdiğim kodları globale yapıştırmamışsın [/quote] [b]O verdiğiniz kodlarda fonksiyon kullanmışsınız birsürü. Ben daha hiç fonksiyon kullanmadım, ben sadece INSERT INTO komutunu kullanacağım, nasıl olur?[/b] Quote Link to comment Share on other sites More sharing options...
galetis Posted January 25, 2012 Author Share Posted January 25, 2012 MySQLConnection, err = MySQL:connect(db_ad, db_kadi, db_pass, db_site); a = Input.GetText("name"); b = Input.GetText("pass"); c = Input.GetText("pass_t"); if b==c then local new_kadi = Input.GetText("name") new_pass = Input.GetText("pass") MysqlQuery = MySQLConnection:execute("INSERT INTO "..tb_ad.."(\""..tb_kadi.."\",\""..tb_pass.."\") VALUES ("..new_kadi..","..new_pass..")"); Dialog.Message("Eklenedi!", "Kullanıcı Eklendi!", MB_OK, MB_ICONINFORMATION) Page.Jump("Giris"); else Dialog.Message("Yanlış!", "Girdiğiniz şifreler aynı değil!\nŞifre tekrarının amacı şifreleri doğru girmek ve\nkullanıcıya doğru şekilde ulaştırmaktır.\nLütfen, şifreleri dikkatlice giriniz ve aynı olmasına dikkat ediniz...", MB_OK, MB_ICONSTOP) end Quote Link to comment Share on other sites More sharing options...
Yusuf-Yildiz Posted January 25, 2012 Share Posted January 25, 2012 [b]Error: attempt to index global 'MySQLConnection' (a nil value)[/b] [b] [/b] [b]Line: 11[/b] Quote Link to comment Share on other sites More sharing options...
galetis Posted January 25, 2012 Author Share Posted January 25, 2012 Tüm kodlarını verebilirmisin? Quote Link to comment Share on other sites More sharing options...
El-Arabi Posted January 26, 2012 Share Posted January 26, 2012 (edited) Ben web sitemden doğrulamalı bir kullanıcı giriş paneli yapmak istiyorum program çalışıyor fakat buldugunda gösteriyor bulamadıgında ise hata vermesini istiyorum bir türlü olmadı.Kodlar aşağıda arkadaşlar nerede yanlış yaptım acaba bakabilirmisiniz. [quote] db.connect("xx.xxx.xxx.xx", "xxxxx", "xxxxxx", "Hanedan_app") local tblSonuc = db.rows("select * from app_members", "Hanedan_app"); if Table.Count(tblSonuc ) ~= 0 then for ind, val in pairs(tblSonuc) do TreeList.AddRow("Plugin2",val.member_name.."|"..val.email_address, nil, nil,ind); if Input.GetText("Input1") == val.member_name and Input.GetText("Input2") == val.email_address then Dialog.Message("",val.member_name.." -- "..val.email_address); break; end end else Dialog.Message("Hata", "Sonuç yok!"); end [/quote] Edited January 26, 2012 by El-Arabi Quote Link to comment Share on other sites More sharing options...
galetis Posted January 26, 2012 Author Share Posted January 26, 2012 [quote name='El-Arabi' date='26 January 2012 - 12:30 ' timestamp='1327570220' post='1146117'] Ben web sitemden doğrulamalı bir kullanıcı giriş paneli yapmak istiyorum program çalışıyor fakat buldugunda gösteriyor bulamadıgında ise hata vermesini istiyorum bir türlü olmadı.Kodlar aşağıda arkadaşlar nerede yanlış yaptım acaba bakabilirmisiniz. [/quote] Kodlar zaten ona göre ayarlı. Tabloda sonuç yoksa "Sonuç yok" dialogunun ekrana gelmesi lazım Quote Link to comment Share on other sites More sharing options...
Yusuf-Yildiz Posted January 26, 2012 Share Posted January 26, 2012 [quote name='galetis' date='25 January 2012 - 23:28 ' timestamp='1327526939' post='1146026'] Tüm kodlarını verebilirmisin? [/quote] [b]Bu kodlar bir butonda ve hepsini verdim saten.[/b] Quote Link to comment Share on other sites More sharing options...
galetis Posted January 26, 2012 Author Share Posted January 26, 2012 db_ad, db_kadi, db_pass, db_site Yukardaki değişkenlerde bi yanlışlık olabilirmi? Quote Link to comment Share on other sites More sharing options...
Yusuf-Yildiz Posted January 26, 2012 Share Posted January 26, 2012 [b]Yok hocam, saten yanlış olsa onlarda hata verir. Hata MySQLConnection tanımında...[/b] Quote Link to comment Share on other sites More sharing options...
El-Arabi Posted January 26, 2012 Share Posted January 26, 2012 [quote name='galetis' date='26 January 2012 - 18:46 ' timestamp='1327596382' post='1146304'] Kodlar zaten ona göre ayarlı. Tabloda sonuç yoksa "Sonuç yok" dialogunun ekrana gelmesi lazım [/quote] Hocam o sonuç yok raporu eğer mysql den hiç bir veri gelmediyse çıkıyor benim dediğim kullanıcı adı ve mail i karşılaştırıyor dogruysa gösteriyor dogru değilsede göstermemesini istiyorum fakat for döngüsü içinde oldugu için kullanıcı adı ve mail denk gelene kadar ekrana denk değil yazdıracak. Quote Link to comment Share on other sites More sharing options...
galetis Posted January 26, 2012 Author Share Posted January 26, 2012 [quote name='El-Arabi' date='26 January 2012 - 22:03 ' timestamp='1327604630' post='1146358'] Hocam o sonuç yok raporu eğer mysql den hiç bir veri gelmediyse çıkıyor benim dediğim kullanıcı adı ve mail i karşılaştırıyor dogruysa gösteriyor dogru değilsede göstermemesini istiyorum fakat for döngüsü içinde oldugu için kullanıcı adı ve mail denk gelene kadar ekrana denk değil yazdıracak. [/quote] Denk gelene kadar değilde, sql sorgusunun içinde sorgulamayı yaptırsan hem daha hızlı hemde daha az kod olur. Aşağıdaki kodları bi dene. [code]db.connect("xx.xxx.xxx.xx", "xxxxx", "xxxxxx", "Hanedan_app") local member_name = Input.GetText("Input1"); local email_address = Input.GetText("Input2"); local tblSonuc = db.row("select * from app_members where member_name='"..member_name.."' and email_address='"..email_address.."'", "Hanedan_app"); if tblSonuc then Dialog.Message("", tblSonuc.member_name.." -- "..tblSonuc.email_address); else Dialog.Message("Hata", "Sonuç yok!"); end[/code] [quote name='severalnasty' date='26 January 2012 - 21:56 ' timestamp='1327604194' post='1146353'] [b]Yok hocam, saten yanlış olsa onlarda hata verir. Hata MySQLConnection tanımında...[/b] [/quote] O zaman tek bir sorun kalıyor, senin syntaxın hatalı. Aşağıdaki kodlarıda bir dene. [code] MySQLConnection, err = MySQL:connect(db_ad, db_kadi, db_pass, db_site); a = Input.GetText("name"); b = Input.GetText("pass"); c = Input.GetText("pass_t"); if b==c then local new_kadi = Input.GetText("name") local new_pass = Input.GetText("pass") MysqlQuery = MySQLConnection:execute("INSERT INTO "..tb_ad.." ('"..tb_kadi.."','"..tb_pass.."') VALUES ('"..new_kadi.."','"..new_pass.."')"); Dialog.Message("Eklenedi!", "Kullanıcı Eklendi!", MB_OK, MB_ICONINFORMATION) Page.Jump("Giris"); else Dialog.Message("Yanlış!", "Girdiğiniz şifreler aynı değil!\nŞifre tekrarının amacı şifreleri doğru girmek ve\nkullanıcıya doğru şekilde ulaştırmaktır.\nLütfen, şifreleri dikkatlice giriniz ve aynı olmasına dikkat ediniz...", MB_OK, MB_ICONSTOP) end [/code] Quote Link to comment Share on other sites More sharing options...
nightmare3519 Posted February 24, 2012 Share Posted February 24, 2012 Hocam bi resimli veya videolu anlatım yapman mümkünmüdür? Quote Link to comment Share on other sites More sharing options...
galetis Posted February 24, 2012 Author Share Posted February 24, 2012 [quote name='nightmare3519' date='24 February 2012 - 18:08 ' timestamp='1330096086' post='1160071'] Hocam bi resimli veya videolu anlatım yapman mümkünmüdür? [/quote] Sqlite veritabanına bağlanma anlatımlarının aynısı mysql içinde geçerlidir. Sadece eklenti ve kodlar biraz farklı. Quote Link to comment Share on other sites More sharing options...
KintaRo Posted February 24, 2012 Share Posted February 24, 2012 SQLite3Connection:execute yazan kısımları, MySQLConnection:execute olarak değiştirin tamam ha birde mysql veritabanına bağlanmak için host, user ve pass gerekiyor gerisi aynı. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.