Jump to content

Ams Ile Mysql Veritabanına Bağlanma


galetis
 Share

Recommended Posts

Ö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 by galetis
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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ı.

Link to comment
Share on other sites

[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 by severalnasty
Link to comment
Share on other sites

[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]

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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 by El-Arabi
Link to comment
Share on other sites

[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

Link to comment
Share on other sites

[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.

Link to comment
Share on other sites

[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]

Link to comment
Share on other sites

  • 4 hafta sonra ...

[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ı.

Link to comment
Share on other sites

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.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...