Sayfayı Yazdır | Pencereyi Kapat

Veritabanına Kullanıcı Adı Çekme

Nereden Yazdırıldığı: Clomosy | Forum
Kategori: Genel Programlama
Forum Adı: Genel İşlemler
Forum Tanımlaması: TRObject dili ile programlama yaparken karşılaşılan genel işlemler
URL: https://forum.clomosy.com.tr/forum_posts.asp?TID=610
Tarih: 08 Ocak 2025 Saat 00:31
Program Versiyonu: Web Wiz Forums 12.07 - https://www.webwizforums.com


Konu: Veritabanına Kullanıcı Adı Çekme
Mesajı Yazan: emre.gungor01
Konu: Veritabanına Kullanıcı Adı Çekme
Mesaj Tarihi: 10 Haziran 2024 Saat 12:45
Merhabalar, oyun projemde Ana Kod ve Oyun Unit'im bulunmaktadır. Ana kod'umda giriş ekranı tasarladım ve burada giriş ekranında kullanıcı adını girdiği zaman bunu veritabanına alıyor aynı kullanıcı adıyla girmişse kullanıcı adını birdaha almayacak şekilde tasarladım. Kodları:

En sonunda gerçekleşirse Oyun Unit'ime gidiyor ve gerçekleşiyorda. Burada sıkıntı yok sadece burada bulunan kullanıcı girdiğinde kullanıcını adını yazıyor ve mssql veri tabanına kaydediyor, kaydettiği kullanıcı adını mssql'de bulunan skorlar tablomda da görmek istiyorum. Çünkü oyun Unit'imde kullanıcı adını girebileceği yer yok ve bu işlemi gerçekleştiremiyor. Eğer ki Oyun Unit dosyamda kullanıcı adını çekebiliyorsam nasıl yapabilirim?  Oyun Unit dosyama gelecek olursam oyunun oynandığı kısım tamamen burası btn1 adında butonum bulunuyor ve içerisinde sayac=Integer değerinde bir değişkenim var ve butona bastıkça içindeki sayıyı arttırıyor. Süre bittiğinde veya buton haricinde ekranın herhangi bir yerine tıklandığında oyundan çıkıyor ve bu skoru kaydetmesini istiyorum veritabanına giriş ekranında kullanıcı girişini giren kişinin yanına skorumu kaydetmesini istiyorum. Skoru nasıl veri tabanına kaydedeceğimi buldum. Kodları:
Böyle yaptığım zaman mssql'de bulunan dbo.Skorlar tabloma ekleme yapıyor. Çıktı:                
fakat benim istediğim Ana Kodda bulunan giriş ekranında kullanıcı adını giren kişiyi mssql'de bulunan dbo.Kullaniicilar tabloma eklediği gibi bunu dbo.Skorlar tablomada eklemesini istiyorum ve yanına skorunu yazmasını istiyorum ve bunu aynı kullanıcı girerse aynı kullanıcının üstüne güncel skorunu yazmasını farklı kullanıcı ise önceki kullanıcıyı geçtiği zaman üstüne yazdırmasını istiyorum mssql çıktısındaki gibi değilde 9 sayısının en üstte sonra 4 3 3 3 şeklinde ilerlemesini istiyorum. Fakat sürekli hata alıyorum bununda nedeninin Ana Kod'dan kullanıcı adını çekememden kaynaklı olduğunu düşünüyorum.
Şu şekilde Oyun Unit'imde kodu tasarladığım zaman hata veriyor.

Çıktı:


Burada şöyle düşündüm hadi ana kodda KullaniciId'yi çekemedim. OyuncuAdi'nda da hata veriyor. Sürekli olarak bu hataları yaşıyorum bunu nasıl çözebilirim?
Ana Kod:
Var
  AnaForm:TclForm;
  
  KullaniciId: String;
  Id:Integer;
  
  OyunGirisButonu: TClProButton;  //Giriş butonu
  GirisLabeli: TCLLabel;   //Oyun Adı
  KullaniciAdiEdt:TclEdit; //Kullanıcı Adı Girişi
  KullaniciAdi: String;  //Kullanıcı Adı Girişi
  
  //Resimler
  resim1:TCLImage;
  resim2:TCLImage;
  resim3:TCLImage;
  resim4:TCLImage;
  resim5:TCLImage;
  resim6:TCLImage;
  bomba1:TCLImage;
  time1:TCLImage;
  
  //Veritabanı
  OyunVeritabani:TClSqlQuery;
  
  //Skor Tablosu
  SkorTablosu: TClProButton;
  
  //Kurucu Girişi
  adminGirisi: TClProButton;
  

//Veri Tabanı bağlantısı için.
Void SetupSqlConnection
{
  Clomosy.DBSQLServerConnect('SQL Server', '192.168.1.149', 'sa', '1', 'Oyun', 1433);
}

//Girilen Kullanıcı Adlarını Veri Tabanına almak için.
void OyunGirisButonuClick
{
  OyunVeritabani = TClSqlQuery.Create(nil);
   try
    OyunVeritabani.Connection = Clomosy.DBSQLServerConnection;
    // Kullanıcı adını ekleme veya varsa kullanıcı id'sini alma
    OyunVeritabani.SQL.Text = 
      'IF NOT EXISTS (SELECT 1 FROM Kullaniicilar WHERE OyuncuAdi = ' + QuotedStr(KullaniciAdiEdt.Text) + ') ' +
      'BEGIN ' +
      'INSERT INTO Kullaniicilar (OyuncuAdi) VALUES (' + QuotedStr(KullaniciAdiEdt.Text) + '); ' +
      'END; ' +
      'SELECT Id FROM Kullaniicilar WHERE OyuncuAdi = ' + QuotedStr(KullaniciAdiEdt.Text);
    OyunVeritabani.Open;
    KullaniciId = OyunVeritabani.FieldByName('Id').AsString;
    KullaniciAdi = KullaniciAdiEdt.Text; // Kullanıcı adını al
  finally
    OyunVeritabani.Free;
  }
  Clomosy.RunUnit('Oyun');  //Oyun adlı Unit'e gitmek için.
}

//Tıklandığında Skor'a atar.
//void SkorTablosuClick
//{
  //Clomosy.RunUnit('Skor');
//}
//Tıklandığında adminGirisi'ne atar.
void adminGirisiClick
{
  Clomosy.RunUnit('Admin');
}
 {
 
  AnaForm = TclForm.Create(Self);
  
  SetupSqlConnection; //Veritabanı bağlantısı için
  
  //Resimler
  //resim1
  resim1=AnaForm.AddNewImage(AnaForm,'resim1');
  AnaForm.SetImage(resim1,'https://cdn0.iconfinder.com/data/icons/phosphor-thin-vol-3/256/number-circle-one-thin-256.png');
  resim1.Height=120;
  resim1.Width=120;
  resim1.Align=alBottom;
  resim1.Margins.Right=350;
  
  //resim2
  resim2=AnaForm.AddNewImage(AnaForm,'resim2');
  AnaForm.SetImage(resim2,'https://cdn0.iconfinder.com/data/icons/phosphor-thin-vol-3/256/number-circle-three-thin-512.png');
  resim2.Height=120;
  resim2.Width=120;
  resim2.Align=alCenter;
  resim2.Margins.Right=500;
  
  //resim3
  resim3=AnaForm.AddNewImage(AnaForm,'resim3');
  AnaForm.SetImage(resim3,'https://cdn0.iconfinder.com/data/icons/phosphor-thin-vol-3/256/number-circle-five-thin-512.png');
  resim3.Height=65;
  resim3.Width=65;
  resim3.Align=alCenter;
  resim3.Margins.Left=500;
  
  //resim4
  resim4=AnaForm.AddNewImage(AnaForm,'resim4');
  AnaForm.SetImage(resim4,'https://cdn0.iconfinder.com/data/icons/phosphor-thin-vol-3/256/number-circle-seven-thin-512.png');
  resim4.Height=120;
  resim4.Width=120;
  resim4.Align=alBottom;
  resim4.Margins.Left=400;
  
  //resim5
  resim5=AnaForm.AddNewImage(AnaForm,'resim5');
  AnaForm.SetImage(resim5,'https://cdn0.iconfinder.com/data/icons/phosphor-thin-vol-3/256/number-circle-nine-thin-512.png');
  resim5.Height=80;
  resim5.Width=80;
  resim5.Align=alTop;
  resim5.Margins.Right=200;
  
  //resim6
  resim6=AnaForm.AddNewImage(AnaForm,'resim6');
  AnaForm.SetImage(resim6,'https://cdn0.iconfinder.com/data/icons/phosphor-thin-vol-3/256/number-circle-six-thin-512.png');
  resim6.Height=80;
  resim6.Width=80;
  resim6.Align=alTop;
  resim6.Margins.Left=400;
 
  //bomba1
  bomba1=AnaForm.AddNewImage(AnaForm,'bomba1');
  AnaForm.SetImage(bomba1,'https://cdn2.iconfinder.com/data/icons/nasty/60/apocolypse_nuclear_explosion_atomic_bomb-256.png');
  bomba1.Height=60;
  bomba1.Width=60;
  bomba1.Align=alBottom;
  bomba1.Margins.Left=200;
  
  //time1
  time1=AnaForm.AddNewImage(AnaForm,'time1');
  AnaForm.SetImage(time1,'https://cdn4.iconfinder.com/data/icons/basic-ui-2-line/32/clock-time-ticker-times-hour-256.png');
  time1.Height=45;
  time1.Width=45;
  time1.Align=alLeft;
  time1.Margins.Left=10;
  
  // Başlık Label'ı
  GirisLabeli = AnaForm.AddNewLabel(AnaForm, 'GirisLabeli', 'TimeTap');
  GirisLabeli.StyledSettings = ssFamily;
  GirisLabeli.TextSettings.Font.Size = 24;
  GirisLabeli.Align = alTop;
  GirisLabeli.Height = 50;
  GirisLabeli.Width = 200;
  GirisLabeli.Margins.Left=300;
  GirisLabeli.Position.X = (AnaForm.clWidth / 2) - (GirisLabeli.Width / 2);
  GirisLabeli.Position.Y = 50;
  
  
  // Kullanıcı Adı Bölümü
  KullaniciAdiEdt = AnaForm.AddNewEdit(AnaForm,'KullaniciAdiEdt', 'Kullanici Adinizi Giriniz');
  KullaniciAdiEdt.Align = alNone;
  KullaniciAdiEdt.Margins.Top=30;
  KullaniciAdiEdt.Width = 200;
  KullaniciAdiEdt.Height = 30;
  KullaniciAdiEdt.Position.X = (AnaForm.clWidth / 2) - (KullaniciAdiEdt.Width / 2) + 2;
  KullaniciAdiEdt.Position.Y = (AnaForm.clHeight / 2) - (KullaniciAdiEdt.Height / 2) - 75;
  KullaniciAdiEdt.TextPrompt = 'Kullanıcı Adınızı Girin';
  KullaniciAdiEdt.MaxLength=17;  //Belirli miktarda kullanıcı adı girebilir.
  
  // Başlat Butonu
  OyunGirisButonu = AnaForm.AddNewProButton(AnaForm, 'OyunGirisButonu', 'Başlat');
  OyunGirisButonu.clProSettings.BackgroundColor=clAlphaColor.clHexToColor('#e0d1d1');
  OyunGirisButonu.Margins.Top= 50;
  OyunGirisButonu.Align = alNone;
  OyunGirisButonu.Width = 100;
  OyunGirisButonu.Height= 50;
  OyunGirisButonu.Position.X = (AnaForm.clWidth / 2) - (OyunGirisButonu.Width / 2);
  OyunGirisButonu.Position.Y = (AnaForm.clHeight / 2) - (OyunGirisButonu.Height / 2);
  OyunGirisButonu.SetclProSettings(OyunGirisButonu.clProSettings);
  AnaForm.AddNewEvent(OyunGirisButonu, tbeOnClick, 'OyunGirisButonuClick');
  
  // SkorTablosu
  SkorTablosu = AnaForm.AddNewProButton(AnaForm, 'SkorTablosu', '');
  clComponent.SetupComponent(SkorTablosu,'{"RoundHeight": 2, "RoundWidth": 2, "BorderColor": "#000000"}');
  AnaForm.SetImage(SkorTablosu, 'https://cdn3.iconfinder.com/data/icons/customer-experience-1/32/Score-256.png');
  SkorTablosu.clProSettings.BackgroundColor=clAlphaColor.clHexToColor('#b4f500');
  SkorTablosu.Margins.Left= 480;
  SkorTablosu.Margins.bottom=500;
  SkorTablosu.Align = alNone;
  SkorTablosu.Width = 70;
  SkorTablosu.Height= 40;
  SkorTablosu.SetclProSettings(SkorTablosu.clProSettings);
  AnaForm.AddNewEvent(SkorTablosu, tbeOnClick, 'SkorTablosuClick');
  
  //Admin Girişi
  adminGirisi = AnaForm.AddNewProButton(AnaForm, 'adminGirisi', '');
  clComponent.SetupComponent(adminGirisi,'{"RoundHeight": 2, "RoundWidth": 2, "BorderColor": "#000000"}');
  AnaForm.SetImage(adminGirisi, 'https://cdn4.iconfinder.com/data/icons/essential-app-2/16/user-avatar-human-admin-login-256.png');
  adminGirisi.clProSettings.BackgroundColor=clAlphaColor.clHexToColor('#00b8f5');
  adminGirisi.Margins.Right= 630;
  adminGirisi.Margins.bottom=500;
  adminGirisi.Align = alNone;
  adminGirisi.Width = 70;
  adminGirisi.Height= 40;
  adminGirisi.SetclProSettings(adminGirisi.clProSettings);
  AnaForm.AddNewEvent(adminGirisi, tbeOnClick, 'adminGirisiClick');
  
  
  
  TclButton(anaForm.clFindComponent('BtnFormMenu')).Visible = False; //Clomosy Form Menu kapatma olayı.
  TclButton(anaForm.clFindComponent('BtnGoBack')).Visible = False;  //Clomosy Geri tuşunu kapatma olayı.

  
  AnaForm.SetFormColor('#ad6ec4','#6d6bbd',clGHorizontal); //AnaForm'un arkaplanını renklendirme.
 
  AnaForm.Run; // AnaForm'u çalıştırma.
 
 }

Oyun Unit Kodlarım:

Var
  AnaForm:TclForm;
 
  KullaniciAdi: String;
 
 //Buton kısmı
  btn1 : TClProButton;  
  Zaman : TCLTimer; 
  sayac:Integer;
//Random Renk verme kısmı
  RndmTimer: TClTimer;
  colorArray : array of String;
//Oyun Süresi kısmı
  oyunzaman:TCLTimer;
  sayac1:Integer;
  lblTimer: TCLLabel;
//Random oyun süresi arttırma azaltma için ekranda çıkan görseller
  surearttirma: TCLImage; 
  sureazaltma: TCLImage;

  SkorVeritabani: TClSqlQuery;
  
  void SetupSqlConnection
{
  Clomosy.DBSQLServerConnect('SQL Server', '192.168.1.149', 'sa', '1', 'Oyun', 1433);
}


//Buton haricinde ekranın herhangi bir yerine basınca oyundan çıkmak için.
void onFormMouseDown
{
  ShowMessage('Yandınız.Oyuna tekrardan başlayınız.');
  AnaForm.clHide;
  oyunzaman.Enabled=False;
}

//Başlangıç ekranından sonra olacak olay için
void OyunBaslangic;
{
  btn1.Visible=True;
}

//Random olarak arkaplan rengini değiştirmek için.
void randomColor;
var
  randmDeger: Integer;
{
  colorArray = ['#26cf3a','#ff780a','#9a7de8','#813b3b','#a664c4','#6492c4','#81c464'];
  randmDeger =  clMath.GenerateRandom(0,6);
  AnaForm.SetFormColor(colorArray[randmDeger],'',clGNone);
}

//Random olarakm btn1'in yerini değiştirmek için kısayol.
void randomPosition;
{
 if((sayac >= 32) && (sayac <= 55))
 {
    btn1.Position.X = Abs((Random() * AnaForm.clWidth) - btn1.Width);
    btn1.Position.Y = Abs((Random() * AnaForm.clHeight) - btn1.Height);
  }
}


//Belirli zamanda ekranın herhangi bir yerinde çıkan görsele basınca ek süre eklemek için.

void eksure   //Ekranın ortasındaki sayı 3 veya büyük olunca çıkması için yapıldı.
{
  if(IntToStr(btn1.Text) >= 3)
  {
  surearttirma.visible=False;
  sayac1 = sayac1+5;
  }
}

//Belirli zamanda ekranın herhangi bir yerinde çıkan görsele basınca süre azaltmak için.

void sureazalt  //Ekranın ortasındaki sayı 3 veya büyük olunca çıkması için yapıldı.
{
  if(IntToStr(btn1.Text) >= 3)
  {
  sureazaltma.visible=False;
  sayac1 = sayac1-2;
  }
}


//btn1 içerisinde yazan sayıya göre işlemler döndüren kısım. randomColor,randomPosition,süre arttırma ve azaltma gibi işlemler yapar. 
void zamanlayici;
{
//Bu fonksiyon RndmTimer'ın rastgale çalışmasını engellemiş oluyor.
  if (sayac >= 32)
    {
      RndmTimer.Enabled = True;
    }
    btn1.Text = IntToStr(sayac);

  sayac = sayac + 1;  //sayacı 1 1 arttırır.
  oyunzaman.Enabled=True; //oyun zamanı etkinleştirir
  btn1.Text = IntToStr(sayac); //btn1 içerisindeki sayı
  
  if(sayac == 3)  //sureazaltma
  {
    sureazaltma.Position.X = Abs((Random() * AnaForm.clWidth) - sureazaltma.Width);
    sureazaltma.Position.Y = Abs((Random() * AnaForm.clHeight) - sureazaltma.Height);
    sureazaltma.visible=True;
  }
  
  if(sayac == 5)
  {
    AnaForm.SetFormColor('#23c7c5','',clGNone);
    sayac1 = sayac1 + 3;
    btn1.Position.X = Abs((Random() * AnaForm.clWidth) - btn1.Width);
    btn1.Position.Y = Abs((Random() * AnaForm.clHeight) - btn1.Height);
    surearttirma.Position.X = Abs((Random() * AnaForm.clWidth) - surearttirma.Width);
    surearttirma.Position.Y = Abs((Random() * AnaForm.clHeight) - surearttirma.Height);
    surearttirma.visible=True;
  }
  
  if(sayac==9)   //sureazaltma
  {
    sureazaltma.Position.X = Abs((Random() * AnaForm.clWidth) - sureazaltma.Width);
    sureazaltma.Position.Y = Abs((Random() * AnaForm.clHeight) - sureazaltma.Height);
    sureazaltma.visible=True;
  }
  
  if(sayac == 13)
  {
    AnaForm.SetFormColor('#e01f1f','',clGNone);
    sayac1 = sayac1 + 5;
    btn1.Position.X = Abs((Random() * AnaForm.clWidth) - btn1.Width);
    btn1.Position.Y = Abs((Random() * AnaForm.clHeight) - btn1.Height);
    surearttirma.Position.X = Abs((Random() * AnaForm.clWidth) - surearttirma.Width);
    surearttirma.Position.Y = Abs((Random() * AnaForm.clHeight) - surearttirma.Height);
    surearttirma.visible=True;
  }
  
  if(sayac==17)   //sureazaltma
  {
    sureazaltma.Position.X = Abs((Random() * AnaForm.clWidth) - sureazaltma.Width);
    sureazaltma.Position.Y = Abs((Random() * AnaForm.clHeight) - sureazaltma.Height);
    sureazaltma.visible=True;
  }
  
  if(sayac == 25)
  {
    AnaForm.SetFormColor('#cfeb00','#db7edd',clGHorizontal);
    sayac1 = sayac1 + 7;
    btn1.Position.X = Abs((Random() * AnaForm.clWidth) - btn1.Width);
    btn1.Position.Y = Abs((Random() * AnaForm.clHeight) - btn1.Height);
    surearttirma.Position.X = Abs((Random() * AnaForm.clWidth) - surearttirma.Width);
    surearttirma.Position.Y = Abs((Random() * AnaForm.clHeight) - surearttirma.Height);
    surearttirma.visible=True;
  }
  
  if(sayac==29)   //sureazaltma
  {
    sureazaltma.Position.X = Abs((Random() * AnaForm.clWidth) - sureazaltma.Width);
    sureazaltma.Position.Y = Abs((Random() * AnaForm.clHeight) - sureazaltma.Height);
    sureazaltma.visible=True;
  }
  
  if((sayac >= 32) && (sayac <= 55))
  {
    RndmTimer.Enabled = True;
    randomPosition();
  }
  
  if (sayac >= 56)
    {
      AnaForm.SetFormColor('#ffae00','',clGNone);
      RndmTimer.Enabled = False;
    }
    btn1.Text = IntToStr(sayac);

}

//Oyun süresi için oluşturulmuş kısım
void sure;
  {
    if(sayac1 == 0)
    {
      oyunzaman.Enabled = False;
      lblTimer.caption = IntToStr(sayac1);
      ShowMessage('Süreniz Doldu!');
      ShowMessage('Puanınız: ' + IntToStr(sayac));

      // Skoru veritabanına kaydet
      SkorVeritabani = TClSqlQuery.Create(nil);
     try
      SkorVeritabani.Connection = Clomosy.DBSQLServerConnection;
        
      SkorVeritabani.SQL.Text = 'INSERT INTO Skorlar (Skor) VALUES ('+ IntToStr(sayac) +')';
      SkorVeritabani.ExecSQL;
      finally
      SkorVeritabani.Free;
      }
    
  }
    else
    {
      lblTimer.caption = IntToStr(sayac1);
      Dec(sayac1);
    }
  }

 //Ekranda bulunan her şeyin özellik kısmı eklemek için.
 {
   sayac=0;
   
   sayac1=5;
   
  AnaForm = TclForm.Create(Self);
  
  SetupSqlConnection;
  
  TclButton(anaForm.clFindComponent('BtnFormMenu')).Visible = False; //Clomosy'nin kendi uygulaması menü özelliği kapatıldı.
  TclButton(anaForm.clFindComponent('BtnGoBack')).Visible = False;  //Clomosy'nin kendi uygulaması geri özelliği kapatıldı.
  
  //Random color kısmı
  RndmTimer = AnaForm.AddNewTimer(AnaForm,'RndmTimer',100); //sürekli olacağı için timer kullanıldı.
  RndmTimer.Enabled = False;
  AnaForm.AddNewEvent(RndmTimer,tbeOnTimer,'randomColor');
  
  //oyunzaman süresi
  oyunzaman=AnaForm.AddNewTimer(AnaForm,'oyunzaman',1000);
  oyunzaman.Enabled=False;
  AnaForm.AddNewEvent(oyunzaman,tbeOnTimer,'sure');
  lblTimer=AnaForm.AddNewLabel(AnaForm,'lblTimer','');
  lblTimer.StyledSettings = ssFamily;
  lblTimer.TextSettings.Font.Size = 35;
  lblTimer.Align = alTop;
  lblTimer.Height=50;
  lblTimer.Width=50;
  lblTimer.Margins.Left = 170;
  //oyunzaman süresi
  
  
  AnaForm.SetFormColor('#52504d','',clGNone); 
  btn1 = AnaForm.AddNewProButton(AnaForm,'btn1','Başla');
  surearttirma = AnaForm.AddNewImage(AnaForm,'surearttirma');
  sureazaltma = AnaForm.AddNewImage(AnaForm,'sureazaltma');
  
  btn1.Align = alNone;
  btn1.Width = 100;
  btn1.Height = 100;
  btn1.Position.X = (AnaForm.clWidth / 2) - (btn1.Width / 2);  //konum1.
  btn1.Position.Y = (AnaForm.clHeight / 2) - (btn1.Width / 2); // konum2.
  btn1.visible=True;
   
  AnaForm.SetImage(surearttirma,'https://cdn2.iconfinder.com/data/icons/chess-58/377/Time-256.png');
  surearttirma.Align = alNone;
  surearttirma.Height = 35;
  surearttirma.Width = 35;
  surearttirma.Position.X = (AnaForm.clWidth / 2) - (surearttirma.Width / 2);  //surearttirma konum1.
  surearttirma.Position.Y = (AnaForm.clHeight / 2) - (surearttirma.Width / 2); //surearttirma konum2.
  surearttirma.visible=False;  //Ekranın farklı yerlerinde ek süre için çıkan resim görünürlüğü.
   
  //SÜRE AZALTMA
  AnaForm.SetImage(sureazaltma,'https://cdn2.iconfinder.com/data/icons/nasty/60/apocolypse_nuclear_explosion_atomic_bomb-256.png');
  sureazaltma.Align = alNone;
  sureazaltma.Height = 40;
  sureazaltma.Width = 40;
  sureazaltma.Position.X = (AnaForm.clWidth / 2) - (sureazaltma.Width / 2);  //sureazaltma konum1.
  sureazaltma.Position.Y = (AnaForm.clHeight / 2) - (sureazaltma.Width / 2); //sureazaltma konum2.
  sureazaltma.visible=False;  //Ekranın farklı yerlerinde ek süre için çıkan resim görünürlüğü.
  
  btn1.clProSettings.BorderColor = clAlphaColor.clHexToColor('#a0a3b1');
  btn1.clProSettings.FontColor = clAlphaColor.clHexToColor('#050505');
  btn1.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#ffffff');
  btn1.clProSettings.IsTransparent = False;
  btn1.clProSettings.FontSize = 12;
  btn1.clProSettings.FontVertAlign = palcenter;//palLeading , palCenter , palTrailing
  btn1.clProSettings.FontHorzAlign = palCenter;
  btn1.clProSettings.IsFill = True; 
  btn1.clProSettings.IsRound = True;
  btn1.clProSettings.RoundHeight = 50;
  btn1.clProSettings.RoundWidth = 50;
  btn1.clProSettings.BorderWidth = 3;
  btn1.SetclProSettings(btn1.clProSettings);
  

   AnaForm.AddNewEvent(btn1,tbeOnClick,'zamanlayici');  //btn1'e tıklanınca süre etkinleşmesi için tıklanma olayı.
   AnaForm.AddNewEvent(surearttirma, tbeOnClick, 'eksure');  //ek süre için tıklanma olayı.
   AnaForm.AddNewEvent(sureazaltma, tbeOnClick, 'sureazalt'); //süre azaltmak için tıklanma olayı.

   
   AnaForm.AddNewEvent(AnaForm, tbeOnMouseDown, 'onFormMouseDown'); 
   AnaForm.Run;
 
 }



Cevaplar:
Mesajı Yazan: Developer
Mesaj Tarihi: 10 Haziran 2024 Saat 14:56
Merhaba Emre,
Kullanıcı adını kontrol ettiksen sonra Clomosy.GlobalVariableString = 'Test'; diyerek. Oyun Unit'ine taşıyabilirsin kullanıcı adını skoru insert ederken de kullanıcı adını artık kullanabilirsin. Kullanıcı adını çekerken de kullaniciAdi = Clomosy.GlobalVariableString yapabilirsin.
Kolay Gelsin 


Mesajı Yazan: emre.gungor01
Mesaj Tarihi: 10 Haziran 2024 Saat 17:14
Bunları nereye yazacağıma dair bir bilgi vermemişsiniz. Bir bilgi verebilirseniz işimi dahada kolay hale gelebilmesi ve ilerde sorun yaşayabilirsem düzeltmek için zaman ayırabilirim.


Mesajı Yazan: Developer
Mesaj Tarihi: 11 Haziran 2024 Saat 11:42
Merhaba Emre,

/Girilen Kullanıcı Adlarını Veri Tabanına almak için.
void OyunGirisButonuClick
{
  OyunVeritabani = TClSqlQuery.Create(nil);
   try
    OyunVeritabani.Connection = Clomosy.DBSQLServerConnection;
    // Kullanıcı adını ekleme veya varsa kullanıcı id'sini alma
    OyunVeritabani.SQL.Text = 
      'IF NOT EXISTS (SELECT 1 FROM Kullaniicilar WHERE OyuncuAdi = ' + QuotedStr(KullaniciAdiEdt.Text) + ') ' +
      'BEGIN ' +
      'INSERT INTO Kullaniicilar (OyuncuAdi) VALUES (' + QuotedStr(KullaniciAdiEdt.Text) + '); ' +
      'END; ' +
      'SELECT Id FROM Kullaniicilar WHERE OyuncuAdi = ' + QuotedStr(KullaniciAdiEdt.Text);
    OyunVeritabani.Open;
    KullaniciId = OyunVeritabani.FieldByName('Id').AsString;
    KullaniciAdi = KullaniciAdiEdt.Text; // Kullanıcı adını al
   Clomosy.GlobalVariableString = KullaniciAdiEdt.Text; //Burada kullanıcı adının atamsını yaptın.
  finally
    OyunVeritabani.Free;
  }
  Clomosy.RunUnit('Oyun');  //Oyun adlı Unit'e gitmek için.
}

//Oyun süresi için oluşturulmuş kısım
void sure;
  {
    if(sayac1 == 0)
    {
      oyunzaman.Enabled = False;
      lblTimer.caption = IntToStr(sayac1);
      ShowMessage('Süreniz Doldu!');
      ShowMessage('Puanınız: ' + IntToStr(sayac));

      // Skoru veritabanına kaydet
      SkorVeritabani = TClSqlQuery.Create(nil);
     try
      SkorVeritabani.Connection = Clomosy.DBSQLServerConnection;
        
      SkorVeritabani.SQL.Text = 'INSERT INTO Skorlar (Skor,KullaniciId) VALUES ('+ IntToStr(sayac),QuotedStr(Clomosy.GlobalVariableString) +')';
      SkorVeritabani.ExecSQL;
      finally
      SkorVeritabani.Free;
      }
    
  }
    else
    {
      lblTimer.caption = IntToStr(sayac1);
      Dec(sayac1);
    }
  }




İyi Çalışmalar


Mesajı Yazan: emre.gungor01
Mesaj Tarihi: 11 Haziran 2024 Saat 16:28
Merhabalar;
İstediğim gibi sonuç aldım teşekkürler. Fakat bu sefer hesaba katmadığımız bir sorun var. Beni mssql veritabanımda bulunan dbo.Kullaniicilar tablomda Id int türünde bunda sıkıntı yok, OyuncuAdi nvarchar(50) türünde 

Görsel:

Giriş ekranında string türünde veriyle giriş yapabiliyorum ve oyunumuda oynayabiliyorum, oyun sonunda 

Bu hatayla karşılaşıyorum kullaniicilar tabloma alıyor kullanıcı adını fakat dbo.Skorlar tabloma o ismi almıyor. Bende giriş ekranında int tipinde değer girerek denedim ve oluyor hem dbo.Kullanicilar tabloma ekliyor hemde dbo.Skorlar tabloma ekliyor.

Görseller:



Burası Skorlar tablosu:


Burası Kullaniicilar tablosu:


Peki ben giriş ekranında string veri türünde girmek istediğimde skorlar tabloma kaydetmiyor, kullaniicilar tabloma kaydediyorsa her iki tabloma da nasıl kayıt ettirebilirim?


Mesajı Yazan: Atiker01
Mesaj Tarihi: 11 Haziran 2024 Saat 16:33
Merhaba Emre,

görselleri ve hataları yüklememişsin. Tekrar atabilir misin?


Mesajı Yazan: emre.gungor01
Mesaj Tarihi: 11 Haziran 2024 Saat 16:46
Merhabalar;
İstediğim gibi sonuç aldım teşekkürler. Fakat bu sefer hesaba katmadığımız bir sorun var. Beni mssql veritabanımda bulunan dbo.Kullaniicilar tablomda Id int türünde bunda sıkıntı yok, OyuncuAdi nvarchar(50) türünde 

Görsel;

Giriş ekranında string türünde veriyle giriş yapabiliyorum ve oyunumuda oynayabiliyorum, oyun sonunda 



Bu hatayla karşılaşıyorum kullaniicilar tabloma alıyor kullanıcı adını fakat dbo.Skorlar tabloma o ismi almıyor. Bende giriş ekranında int tipinde değer girerek denedim ve oluyor hem dbo.Kullanicilar tabloma ekliyor hemde dbo.Skorlar tabloma ekliyor.

Görseller:

Böyle girdiğimde sorun çıkmıyor.Sadece string türünde kullanıcı adı girdiğimde çıkıyor.


Burası Kullaniicilar tablosu:


Burası Skorlar tablosu:


Peki ben giriş ekranında string veri türünde girmek istediğimde skorlar tabloma kaydetmiyor, kullaniicilar tabloma kaydediyorsa her iki tabloma da nasıl kayıt ettirebilirim?


Mesajı Yazan: Developer
Mesaj Tarihi: 11 Haziran 2024 Saat 18:09
Merhaba Emre 
Sanınırm KullaniciId kalmış sql Insert cümlende bunu değiştirmen gerekiyor. OyuncuAdi yazman gerekiyor. Çünki sql senden int değer türü bekliyor.
eğer anlamazsan kodunu yükler misin 
Kolay Gelsin 


Mesajı Yazan: emre.gungor01
Mesaj Tarihi: 11 Haziran 2024 Saat 18:19
AnaKod:

Var
  AnaForm:TclForm;
  
  KullaniciId: String;
  Id:Integer;
  
  OyunGirisButonu: TClProButton;  //Giriş butonu
  GirisLabeli: TCLLabel;   //Oyun Adı
  KullaniciAdiEdt:TclEdit; //Kullanıcı Adı Girişi
  KullaniciAdi: String;  //Kullanıcı Adı Girişi
  
  //Resimler
  resim1:TCLImage;
  resim2:TCLImage;
  resim3:TCLImage;
  resim4:TCLImage;
  resim5:TCLImage;
  resim6:TCLImage;
  bomba1:TCLImage;
  time1:TCLImage;
  
  //Veritabanı
  OyunVeritabani:TClSqlQuery;
  
  //Skor Tablosu
  SkorTablosu: TClProButton;
  
  //Kurucu Girişi
  adminGirisi: TClProButton;
  

//Veri Tabanı bağlantısı için.
Void SetupSqlConnection
{
  Clomosy.DBSQLServerConnect('SQL Server', '192.168.1.149', 'sa', '1', 'Oyun', 1433);
}

//Girilen Kullanıcı Adlarını Veri Tabanına almak için.
void OyunGirisButonuClick
{
  OyunVeritabani = TClSqlQuery.Create(nil);
   try
    OyunVeritabani.Connection = Clomosy.DBSQLServerConnection;
    // Kullanıcı adını ekleme veya varsa kullanıcı id'sini alma
    OyunVeritabani.SQL.Text = 
      'IF NOT EXISTS (SELECT 1 FROM Kullaniicilar WHERE OyuncuAdi = ' + QuotedStr(KullaniciAdiEdt.Text) + ') ' +
      'BEGIN ' +
      'INSERT INTO Kullaniicilar (OyuncuAdi) VALUES (' + QuotedStr(KullaniciAdiEdt.Text) + '); ' +
      'END; ' +
      'SELECT Id FROM Kullaniicilar WHERE OyuncuAdi = ' + QuotedStr(KullaniciAdiEdt.Text);
    OyunVeritabani.Open;
    KullaniciId = OyunVeritabani.FieldByName('Id').AsString;
    KullaniciAdi = KullaniciAdiEdt.Text; // Kullanıcı adını al
    Clomosy.GlobalVariableString=KullaniciAdiEdt.Text; // Kullanıcı adını al //burası
  finally
    OyunVeritabani.Free;
  }
  Clomosy.RunUnit('Oyun');  //Oyun adlı Unit'e gitmek için.
}

//Tıklandığında Skor'a atar.
void SkorTablosuClick
{
  Clomosy.RunUnit('Skor');
}

//Tıklandığında adminGirisi'ne atar.
void adminGirisiClick
{
  Clomosy.RunUnit('Admin');
}
 {
 
  AnaForm = TclForm.Create(Self);
  
  SetupSqlConnection; //Veritabanı bağlantısı için
  
  //Resimler
  //resim1
  resim1=AnaForm.AddNewImage(AnaForm,'resim1');
  AnaForm.SetImage(resim1,' https://cdn0.iconfinder.com/data/icons/phosphor-thin-vol-3/256/number-circle-one-thin-256.png" rel="nofollow - https://cdn0.iconfinder.com/data/icons/phosphor-thin-vol-3/256/number-circle-one-thin-256.png ');
  resim1.Height=120;
  resim1.Width=120;
  resim1.Align=alBottom;
  resim1.Margins.Right=350;
  
  //resim2
  resim2=AnaForm.AddNewImage(AnaForm,'resim2');
  AnaForm.SetImage(resim2,' https://cdn0.iconfinder.com/data/icons/phosphor-thin-vol-3/256/number-circle-three-thin-512.png" rel="nofollow - https://cdn0.iconfinder.com/data/icons/phosphor-thin-vol-3/256/number-circle-three-thin-512.png ');
  resim2.Height=120;
  resim2.Width=120;
  resim2.Align=alCenter;
  resim2.Margins.Right=500;
  
  //resim3
  resim3=AnaForm.AddNewImage(AnaForm,'resim3');
  AnaForm.SetImage(resim3,' https://cdn0.iconfinder.com/data/icons/phosphor-thin-vol-3/256/number-circle-five-thin-512.png" rel="nofollow - https://cdn0.iconfinder.com/data/icons/phosphor-thin-vol-3/256/number-circle-five-thin-512.png ');
  resim3.Height=65;
  resim3.Width=65;
  resim3.Align=alCenter;
  resim3.Margins.Left=500;
  
  //resim4
  resim4=AnaForm.AddNewImage(AnaForm,'resim4');
  AnaForm.SetImage(resim4,' https://cdn0.iconfinder.com/data/icons/phosphor-thin-vol-3/256/number-circle-seven-thin-512.png" rel="nofollow - https://cdn0.iconfinder.com/data/icons/phosphor-thin-vol-3/256/number-circle-seven-thin-512.png ');
  resim4.Height=120;
  resim4.Width=120;
  resim4.Align=alBottom;
  resim4.Margins.Left=400;
  
  //resim5
  resim5=AnaForm.AddNewImage(AnaForm,'resim5');
  AnaForm.SetImage(resim5,' https://cdn0.iconfinder.com/data/icons/phosphor-thin-vol-3/256/number-circle-nine-thin-512.png" rel="nofollow - https://cdn0.iconfinder.com/data/icons/phosphor-thin-vol-3/256/number-circle-nine-thin-512.png ');
  resim5.Height=80;
  resim5.Width=80;
  resim5.Align=alTop;
  resim5.Margins.Right=200;
  
  //resim6
  resim6=AnaForm.AddNewImage(AnaForm,'resim6');
  AnaForm.SetImage(resim6,' https://cdn0.iconfinder.com/data/icons/phosphor-thin-vol-3/256/number-circle-six-thin-512.png" rel="nofollow - https://cdn0.iconfinder.com/data/icons/phosphor-thin-vol-3/256/number-circle-six-thin-512.png ');
  resim6.Height=80;
  resim6.Width=80;
  resim6.Align=alTop;
  resim6.Margins.Left=400;
 
  //bomba1
  bomba1=AnaForm.AddNewImage(AnaForm,'bomba1');
  AnaForm.SetImage(bomba1,' https://cdn2.iconfinder.com/data/icons/nasty/60/apocolypse_nuclear_explosion_atomic_bomb-256.png" rel="nofollow - https://cdn2.iconfinder.com/data/icons/nasty/60/apocolypse_nuclear_explosion_atomic_bomb-256.png ');
  bomba1.Height=60;
  bomba1.Width=60;
  bomba1.Align=alBottom;
  bomba1.Margins.Left=200;
  
  //time1
  time1=AnaForm.AddNewImage(AnaForm,'time1');
  AnaForm.SetImage(time1,' https://cdn4.iconfinder.com/data/icons/basic-ui-2-line/32/clock-time-ticker-times-hour-256.png" rel="nofollow - https://cdn4.iconfinder.com/data/icons/basic-ui-2-line/32/clock-time-ticker-times-hour-256.png ');
  time1.Height=45;
  time1.Width=45;
  time1.Align=alLeft;
  time1.Margins.Left=10;
  
  // Başlık Label'ı
  GirisLabeli = AnaForm.AddNewLabel(AnaForm, 'GirisLabeli', 'TimeTap');
  GirisLabeli.StyledSettings = ssFamily;
  GirisLabeli.TextSettings.Font.Size = 24;
  GirisLabeli.Align = alTop;
  GirisLabeli.Height = 50;
  GirisLabeli.Width = 200;
  GirisLabeli.Margins.Left=300;
  GirisLabeli.Position.X = (AnaForm.clWidth / 2) - (GirisLabeli.Width / 2);
  GirisLabeli.Position.Y = 50;
  
  
  // Kullanıcı Adı Bölümü
  KullaniciAdiEdt = AnaForm.AddNewEdit(AnaForm,'KullaniciAdiEdt', 'Kullanici Adinizi Giriniz');
  KullaniciAdiEdt.Align = alNone;
  KullaniciAdiEdt.Margins.Top=30;
  KullaniciAdiEdt.Width = 200;
  KullaniciAdiEdt.Height = 30;
  KullaniciAdiEdt.Position.X = (AnaForm.clWidth / 2) - (KullaniciAdiEdt.Width / 2) + 2;
  KullaniciAdiEdt.Position.Y = (AnaForm.clHeight / 2) - (KullaniciAdiEdt.Height / 2) - 75;
  KullaniciAdiEdt.TextPrompt = 'Kullanıcı Adınızı Girin';
  KullaniciAdiEdt.MaxLength=17;  //Belirli miktarda kullanıcı adı girebilir.
  
  // Başlat Butonu
  OyunGirisButonu = AnaForm.AddNewProButton(AnaForm, 'OyunGirisButonu', 'Başlat');
  OyunGirisButonu.clProSettings.BackgroundColor=clAlphaColor.clHexToColor('#e0d1d1');
  OyunGirisButonu.Margins.Top= 50;
  OyunGirisButonu.Align = alNone;
  OyunGirisButonu.Width = 100;
  OyunGirisButonu.Height= 50;
  OyunGirisButonu.Position.X = (AnaForm.clWidth / 2) - (OyunGirisButonu.Width / 2);
  OyunGirisButonu.Position.Y = (AnaForm.clHeight / 2) - (OyunGirisButonu.Height / 2);
  OyunGirisButonu.SetclProSettings(OyunGirisButonu.clProSettings);
  AnaForm.AddNewEvent(OyunGirisButonu, tbeOnClick, 'OyunGirisButonuClick');
  
  // SkorTablosu
  SkorTablosu = AnaForm.AddNewProButton(AnaForm, 'SkorTablosu', '');
  clComponent.SetupComponent(SkorTablosu,'{"RoundHeight": 2, "RoundWidth": 2, "BorderColor": "#000000"}');
  AnaForm.SetImage(SkorTablosu, ' https://cdn3.iconfinder.com/data/icons/customer-experience-1/32/Score-256.png" rel="nofollow - https://cdn3.iconfinder.com/data/icons/customer-experience-1/32/Score-256.png ');
  SkorTablosu.clProSettings.BackgroundColor=clAlphaColor.clHexToColor('#b4f500');
  SkorTablosu.Margins.Left= 480;
  SkorTablosu.Margins.bottom=500;
  SkorTablosu.Align = alNone;
  SkorTablosu.Width = 70;
  SkorTablosu.Height= 40;
  SkorTablosu.SetclProSettings(SkorTablosu.clProSettings);
  AnaForm.AddNewEvent(SkorTablosu, tbeOnClick, 'SkorTablosuClick');
  
  //Admin Girişi
  adminGirisi = AnaForm.AddNewProButton(AnaForm, 'adminGirisi', '');
  clComponent.SetupComponent(adminGirisi,'{"RoundHeight": 2, "RoundWidth": 2, "BorderColor": "#000000"}');
  AnaForm.SetImage(adminGirisi, ' https://cdn4.iconfinder.com/data/icons/essential-app-2/16/user-avatar-human-admin-login-256.png" rel="nofollow - https://cdn4.iconfinder.com/data/icons/essential-app-2/16/user-avatar-human-admin-login-256.png ');
  adminGirisi.clProSettings.BackgroundColor=clAlphaColor.clHexToColor('#00b8f5');
  adminGirisi.Margins.Right= 630;
  adminGirisi.Margins.bottom=500;
  adminGirisi.Align = alNone;
  adminGirisi.Width = 70;
  adminGirisi.Height= 40;
  adminGirisi.SetclProSettings(adminGirisi.clProSettings);
  AnaForm.AddNewEvent(adminGirisi, tbeOnClick, 'adminGirisiClick');
  
  
  
  TclButton(anaForm.clFindComponent('BtnFormMenu')).Visible = False; //Clomosy Form Menu kapatma olayı.
  TclButton(anaForm.clFindComponent('BtnGoBack')).Visible = False;  //Clomosy Geri tuşunu kapatma olayı.

  
  AnaForm.SetFormColor('#ad6ec4','#6d6bbd',clGHorizontal); //AnaForm'un arkaplanını renklendirme.
 
  AnaForm.Run; // AnaForm'u çalıştırma.
 
 }

Oyun Unit Kodları:


Var
  AnaForm:TclForm;
  
 //Buton kısmı
  btn1 : TClProButton;  
  Zaman : TCLTimer; 
  sayac:Integer;
//Random Renk verme kısmı
  RndmTimer: TClTimer;
  colorArray : array of String;
//Oyun Süresi kısmı
  oyunzaman:TCLTimer;
  sayac1:Integer;
  lblTimer: TCLLabel;
//Random oyun süresi arttırma azaltma için ekranda çıkan görseller
  surearttirma: TCLImage; 
  sureazaltma: TCLImage;

  SkorVeritabani: TClSqlQuery;
  KullaniciAdi:String;
  
  
  
  void SetupSqlConnection
{
  Clomosy.DBSQLServerConnect('SQL Server', '192.168.1.149', 'sa', '1', 'Oyun', 1433);
}


//Buton haricinde ekranın herhangi bir yerine basınca oyundan çıkmak için.
void onFormMouseDown
{
  ShowMessage('Yandınız.Oyuna tekrardan başlayınız.');
  AnaForm.clHide;
  oyunzaman.Enabled=False;
}

//Başlangıç ekranından sonra olacak olay için
void OyunBaslangic;
{
  btn1.Visible=True;
}

//Random olarak arkaplan rengini değiştirmek için.
void randomColor;
var
  randmDeger: Integer;
{
  colorArray = ['#26cf3a','#ff780a','#9a7de8','#813b3b','#a664c4','#6492c4','#81c464'];
  randmDeger =  clMath.GenerateRandom(0,6);
  AnaForm.SetFormColor(colorArray[randmDeger],'',clGNone);
}

//Random olarakm btn1'in yerini değiştirmek için kısayol.
void randomPosition;
{
 if((sayac >= 32) && (sayac <= 55))
 {
    btn1.Position.X = Abs((Random() * AnaForm.clWidth) - btn1.Width);
    btn1.Position.Y = Abs((Random() * AnaForm.clHeight) - btn1.Height);
  }
}


//Belirli zamanda ekranın herhangi bir yerinde çıkan görsele basınca ek süre eklemek için.

void eksure   //Ekranın ortasındaki sayı 3 veya büyük olunca çıkması için yapıldı.
{
  if(IntToStr(btn1.Text) >= 3)
  {
  surearttirma.visible=False;
  sayac1 = sayac1+5;
  }
}

//Belirli zamanda ekranın herhangi bir yerinde çıkan görsele basınca süre azaltmak için.

void sureazalt  //Ekranın ortasındaki sayı 3 veya büyük olunca çıkması için yapıldı.
{
  if(IntToStr(btn1.Text) >= 3)
  {
  sureazaltma.visible=False;
  sayac1 = sayac1-2;
  }
}


//btn1 içerisinde yazan sayıya göre işlemler döndüren kısım. randomColor,randomPosition,süre arttırma ve azaltma gibi işlemler yapar. 
void zamanlayici;
{
//Bu fonksiyon RndmTimer'ın rastgale çalışmasını engellemiş oluyor.
  if (sayac >= 32)
    {
      RndmTimer.Enabled = True;
    }
    btn1.Text = IntToStr(sayac);

  sayac = sayac + 1;  //sayacı 1 1 arttırır.
  oyunzaman.Enabled=True; //oyun zamanı etkinleştirir
  btn1.Text = IntToStr(sayac); //btn1 içerisindeki sayı
  
  if(sayac == 3)  //sureazaltma
  {
    sureazaltma.Position.X = Abs((Random() * AnaForm.clWidth) - sureazaltma.Width);
    sureazaltma.Position.Y = Abs((Random() * AnaForm.clHeight) - sureazaltma.Height);
    sureazaltma.visible=True;
  }
  
  if(sayac == 5)
  {
    AnaForm.SetFormColor('#23c7c5','',clGNone);
    sayac1 = sayac1 + 3;
    btn1.Position.X = Abs((Random() * AnaForm.clWidth) - btn1.Width);
    btn1.Position.Y = Abs((Random() * AnaForm.clHeight) - btn1.Height);
    surearttirma.Position.X = Abs((Random() * AnaForm.clWidth) - surearttirma.Width);
    surearttirma.Position.Y = Abs((Random() * AnaForm.clHeight) - surearttirma.Height);
    surearttirma.visible=True;
  }
  
  if(sayac==9)   //sureazaltma
  {
    sureazaltma.Position.X = Abs((Random() * AnaForm.clWidth) - sureazaltma.Width);
    sureazaltma.Position.Y = Abs((Random() * AnaForm.clHeight) - sureazaltma.Height);
    sureazaltma.visible=True;
  }
  
  if(sayac == 13)
  {
    AnaForm.SetFormColor('#e01f1f','',clGNone);
    sayac1 = sayac1 + 5;
    btn1.Position.X = Abs((Random() * AnaForm.clWidth) - btn1.Width);
    btn1.Position.Y = Abs((Random() * AnaForm.clHeight) - btn1.Height);
    surearttirma.Position.X = Abs((Random() * AnaForm.clWidth) - surearttirma.Width);
    surearttirma.Position.Y = Abs((Random() * AnaForm.clHeight) - surearttirma.Height);
    surearttirma.visible=True;
  }
  
  if(sayac==17)   //sureazaltma
  {
    sureazaltma.Position.X = Abs((Random() * AnaForm.clWidth) - sureazaltma.Width);
    sureazaltma.Position.Y = Abs((Random() * AnaForm.clHeight) - sureazaltma.Height);
    sureazaltma.visible=True;
  }
  
  if(sayac == 25)
  {
    AnaForm.SetFormColor('#cfeb00','#db7edd',clGHorizontal);
    sayac1 = sayac1 + 7;
    btn1.Position.X = Abs((Random() * AnaForm.clWidth) - btn1.Width);
    btn1.Position.Y = Abs((Random() * AnaForm.clHeight) - btn1.Height);
    surearttirma.Position.X = Abs((Random() * AnaForm.clWidth) - surearttirma.Width);
    surearttirma.Position.Y = Abs((Random() * AnaForm.clHeight) - surearttirma.Height);
    surearttirma.visible=True;
  }
  
  if(sayac==29)   //sureazaltma
  {
    sureazaltma.Position.X = Abs((Random() * AnaForm.clWidth) - sureazaltma.Width);
    sureazaltma.Position.Y = Abs((Random() * AnaForm.clHeight) - sureazaltma.Height);
    sureazaltma.visible=True;
  }
  
  if((sayac >= 32) && (sayac <= 55))
  {
    RndmTimer.Enabled = True;
    randomPosition();
  }
  
  if (sayac >= 56)
    {
      AnaForm.SetFormColor('#ffae00','',clGNone);
      RndmTimer.Enabled = False;
    }
    btn1.Text = IntToStr(sayac);

}

//Oyun süresi için oluşturulmuş kısım
void sure;
  {
    if(sayac1 == 0)
    {
      oyunzaman.Enabled = False;
      lblTimer.caption = IntToStr(sayac1);
      ShowMessage('Süreniz Doldu!');
      ShowMessage('Puanınız: ' + IntToStr(sayac));

      // Skoru veritabanına kaydet
      SkorVeritabani = TClSqlQuery.Create(nil);
     try
      SkorVeritabani.Connection = Clomosy.DBSQLServerConnection;
      
      SkorVeritabani.SQL.Text =
      'INSERT INTO Skorlar (Skor,KullaniciId) VALUES ('+ IntToStr(sayac) + ', ' + QuotedStr(Clomosy.GlobalVariableString) +')';
      SkorVeritabani.ExecSQL;
      finally
      SkorVeritabani.Free;
      }
  }
  
    else
    {
      lblTimer.caption = IntToStr(sayac1);
      Dec(sayac1);
    }
  }

 //Ekranda bulunan her şeyin özellik kısmı eklemek için.
 {
   sayac=0;
   
   sayac1=5;
   
  AnaForm = TclForm.Create(Self);
  
  SetupSqlConnection;
  
  TclButton(anaForm.clFindComponent('BtnFormMenu')).Visible = False; //Clomosy'nin kendi uygulaması menü özelliği kapatıldı.
  TclButton(anaForm.clFindComponent('BtnGoBack')).Visible = False;  //Clomosy'nin kendi uygulaması geri özelliği kapatıldı.
  
  //Random color kısmı
  RndmTimer = AnaForm.AddNewTimer(AnaForm,'RndmTimer',100); //sürekli olacağı için timer kullanıldı.
  RndmTimer.Enabled = False;
  AnaForm.AddNewEvent(RndmTimer,tbeOnTimer,'randomColor');
  
  //oyunzaman süresi
  oyunzaman=AnaForm.AddNewTimer(AnaForm,'oyunzaman',1000);
  oyunzaman.Enabled=False;
  AnaForm.AddNewEvent(oyunzaman,tbeOnTimer,'sure');
  lblTimer=AnaForm.AddNewLabel(AnaForm,'lblTimer','');
  lblTimer.StyledSettings = ssFamily;
  lblTimer.TextSettings.Font.Size = 35;
  lblTimer.Align = alTop;
  lblTimer.Height=50;
  lblTimer.Width=50;
  lblTimer.Margins.Left = 170;
  //oyunzaman süresi
  
  
  AnaForm.SetFormColor('#52504d','',clGNone); 
  btn1 = AnaForm.AddNewProButton(AnaForm,'btn1','Başla');
  surearttirma = AnaForm.AddNewImage(AnaForm,'surearttirma');
  sureazaltma = AnaForm.AddNewImage(AnaForm,'sureazaltma');
  
  btn1.Align = alNone;
  btn1.Width = 100;
  btn1.Height = 100;
  btn1.Position.X = (AnaForm.clWidth / 2) - (btn1.Width / 2);  //konum1.
  btn1.Position.Y = (AnaForm.clHeight / 2) - (btn1.Width / 2); // konum2.
  btn1.visible=True;
   
  AnaForm.SetImage(surearttirma,' https://cdn2.iconfinder.com/data/icons/chess-58/377/Time-256.png" rel="nofollow - https://cdn2.iconfinder.com/data/icons/chess-58/377/Time-256.png ');
  surearttirma.Align = alNone;
  surearttirma.Height = 35;
  surearttirma.Width = 35;
  surearttirma.Position.X = (AnaForm.clWidth / 2) - (surearttirma.Width / 2);  //surearttirma konum1.
  surearttirma.Position.Y = (AnaForm.clHeight / 2) - (surearttirma.Width / 2); //surearttirma konum2.
  surearttirma.visible=False;  //Ekranın farklı yerlerinde ek süre için çıkan resim görünürlüğü.
   
  //SÜRE AZALTMA
  AnaForm.SetImage(sureazaltma,' https://cdn2.iconfinder.com/data/icons/nasty/60/apocolypse_nuclear_explosion_atomic_bomb-256.png" rel="nofollow - https://cdn2.iconfinder.com/data/icons/nasty/60/apocolypse_nuclear_explosion_atomic_bomb-256.png ');
  sureazaltma.Align = alNone;
  sureazaltma.Height = 40;
  sureazaltma.Width = 40;
  sureazaltma.Position.X = (AnaForm.clWidth / 2) - (sureazaltma.Width / 2);  //sureazaltma konum1.
  sureazaltma.Position.Y = (AnaForm.clHeight / 2) - (sureazaltma.Width / 2); //sureazaltma konum2.
  sureazaltma.visible=False;  //Ekranın farklı yerlerinde ek süre için çıkan resim görünürlüğü.
  
  btn1.clProSettings.BorderColor = clAlphaColor.clHexToColor('#a0a3b1');
  btn1.clProSettings.FontColor = clAlphaColor.clHexToColor('#050505');
  btn1.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#ffffff');
  btn1.clProSettings.IsTransparent = False;
  btn1.clProSettings.FontSize = 12;
  btn1.clProSettings.FontVertAlign = palcenter;//palLeading , palCenter , palTrailing
  btn1.clProSettings.FontHorzAlign = palCenter;
  btn1.clProSettings.IsFill = True; 
  btn1.clProSettings.IsRound = True;
  btn1.clProSettings.RoundHeight = 50;
  btn1.clProSettings.RoundWidth = 50;
  btn1.clProSettings.BorderWidth = 3;
  btn1.SetclProSettings(btn1.clProSettings);
  

   AnaForm.AddNewEvent(btn1,tbeOnClick,'zamanlayici');  //btn1'e tıklanınca süre etkinleşmesi için tıklanma olayı.
   AnaForm.AddNewEvent(surearttirma, tbeOnClick, 'eksure');  //ek süre için tıklanma olayı.
   AnaForm.AddNewEvent(sureazaltma, tbeOnClick, 'sureazalt'); //süre azaltmak için tıklanma olayı.

   
   AnaForm.AddNewEvent(AnaForm, tbeOnMouseDown, 'onFormMouseDown'); 
   AnaForm.Run;
 
 }

Biz şimdi Oyun Unit kodlarımda void sure kısmında KullaniciId'yi QuotedStr(Clomosy.GlobalVariableString) buna bağladık. QuotedStr(Clomosy.GlobalVariableString) buda AnaKod kısmında KullaniciAdiEdt.Text kısmına bağlı değil mi?  KullaniciAdiEdt.Text' te bir üstünde bulunan  KullaniciAdi = KullaniciAdiEdt.Text; kısmıyla eşleştirildiğini düşünüyorum ben. Ama nedense işte string değeri almıyorda sadece int değerini mssql veri tabanına alıyor.


Mesajı Yazan: Developer
Mesaj Tarihi: 12 Haziran 2024 Saat 12:00
Merhaba Emre 
 'INSERT INTO Kullaniicilar (OyuncuAdi) VALUES (' + QuotedStr(KullaniciAdiEdt.Text) + '); ' 
Bunda hata var 
INSERT INTO Kullaniicilar (id,OyuncuAdi) VALUES (2,' + QuotedStr(KullaniciAdiEdt.Text) + '); 
Böyle dener misin 


Mesajı Yazan: emre.gungor01
Mesaj Tarihi: 12 Haziran 2024 Saat 12:10
Dediğiniz şekilde yaptığım zaman integer değerini alıyor. Fakat string değerini almıyor ve bu hatayı veriyor.


Mesajı Yazan: emre.gungor01
Mesaj Tarihi: 12 Haziran 2024 Saat 12:13
Dediğiniz şekilde yaptım ve bu hatayı aldım. Kullanıcı adını yazdığımız bölüme integer değer girilebiliyor fakat string değer girelemiyor.


Mesajı Yazan: emre.gungor01
Mesaj Tarihi: 16 Haziran 2024 Saat 17:42
tamamdır hallettim.



Sayfayı Yazdır | Pencereyi Kapat

Forum Software by Web Wiz Forums® version 12.07 - https://www.webwizforums.com
Copyright ©2001-2024 Web Wiz Ltd. - https://www.webwiz.net