Sayfayı Yazdır | Pencereyi Kapat

Sql bağlantı hatası

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=1081
Tarih: 12 Temmuz 2025 Saat 15:28
Program Versiyonu: Web Wiz Forums 12.07 - https://www.webwizforums.com


Konu: Sql bağlantı hatası
Mesajı Yazan: Muammer
Konu: Sql bağlantı hatası
Mesaj Tarihi: 11 Temmuz 2025 Saat 15:13
Aşağıdaki kod satış ve fire işlemleri sayfasının kodu.Bu kodda satış ve fire işlemi yaptığım zaman hafızaya kaydettiğim 100 üründen işlem yapıyor.Sql ile bağlantı sağlayamadığım için bunu yapmak zorunda kaldım.Bu koddaki tanımlanan sabit 100 ürün yerine sqldeki ürünleri çekmeye çalışıyorum fakat sürekli hata alıyoru.
Amacım Sqlde tablodaki üründen satış yapıldığında düşmesi.

var
  MyForm: TclForm;          
  MyGrid: TclStringGrid;    
  Lbl_Baslik: TClProLabel;  
  LblUyari: TClProLabel;    
  DtEdt1: TClProDateEdit;   
  Edt_SatisMiktari, Edt_FireMiktari, Edt_UrunKodu: TclProEdit; 
  Lbl_SatisMiktari, Lbl_FireMiktari, Lbl_UrunKodu: TClProLabel;  
  Btn_Satis, Btn_Fire: TClProButton;  // Satış ve Fire butonları
  UrunKodu: String;
  selectQuery: TClSqlQuery;
  SatisMiktari, FireMiktari: Integer;
  mevcutStok, yeniStok: Integer;
  yeterliStok: Boolean;
  mainPnl, leftPanel, rightPanel: TclProPanel;  // Declare panels

// Setup Grid Columns Function
void SetupGridColumns;
{
  MyGrid.Columns[0].Header = 'Ürün Kodu';
  MyGrid.Columns[1].Header = 'Ürün Adı';
  MyGrid.Columns[2].Header = 'Stok Miktarı';
  MyGrid.Columns[3].Header = 'Kritik Seviye';
  MyGrid.Columns[4].Header = 'Depo Yeri ID';
  MyGrid.Columns[5].Header = 'Birim Fiyat';
  MyGrid.Columns[6].Header = 'Tarih';


}


// Satis Button Click Event
void SatisButtonClick;
{
  // Kullanıcının girdiği satış miktarını alıyoruz
  SatisMiktari = StrToInt(Edt_SatisMiktari.Text);  // Satış miktarını alıyoruz
  UrunKodu = Edt_UrunKodu.Text;  // Ürün kodunu alıyoruz

  // Mevcut stok miktarını kontrol ediyoruz (simülasyon, burada sadece örnek olarak 100 adet mevcut stok kabul ediliyor)
  mevcutStok = 100;  // Örnek olarak mevcut stok 100 kabul ediliyor

  // Yeterli stok olup olmadığını kontrol ediyoruz
  yeterliStok = mevcutStok >= SatisMiktari;

  // Yeterli stok varsa satışı yapıyoruz
  if (yeterliStok == True)
  {
    yeniStok = mevcutStok - SatisMiktari;

    // Satışı başarılı bir şekilde gerçekleştirdiğimizi göstermek için
    ShowMessage('Satış işlemi başarıyla tamamlandı! Yeni stok miktarı: ' + IntToStr(yeniStok));
  }
  else
  {
    ShowMessage('Yetersiz stok. Satış işlemi gerçekleştirilemedi.');
  }
}

// Fire Button Click Event
void FireButtonClick;
{
  // Kullanıcının girdiği fire miktarını alıyoruz
  FireMiktari = StrToInt(Edt_FireMiktari.Text);  // Fire miktarını alıyoruz
  UrunKodu = Edt_UrunKodu.Text;  // Ürün kodunu alıyoruz

  // Mevcut stok miktarını kontrol ediyoruz (simülasyon, burada sadece örnek olarak 100 adet mevcut stok kabul ediliyor)
  mevcutStok = 100;  // Örnek olarak mevcut stok 100 kabul ediliyor

  // Yeterli stok olup olmadığını kontrol ediyoruz
  yeterliStok = mevcutStok >= FireMiktari;

  // Yeterli stok varsa fire işlemi yapıyoruz
  if (yeterliStok == True)
  {
    yeniStok = mevcutStok - FireMiktari;

    // Fire işlemi başarılı bir şekilde gerçekleştirildiğini göstermek için
    ShowMessage('Fire işlemi başarıyla tamamlandı! Yeni stok miktarı: ' + IntToStr(yeniStok));
  }
  else
  {
    ShowMessage('Yetersiz stok. Fire işlemi gerçekleştirilemedi.');
  }
}
void AddDataToGrid;
{
  try
    selectQuery.SQL.Text = 'SELECT UrunKodu, UrunAdi, StokMiktari, KritikSeviye, DepoYeriID, BirimFiyat, OlusturmaTarihi FROM TBLSTOKSB';
    selectQuery.Open;
    
    if (selectQuery.Found == True)  // Burada == kullanıyoruz
    {
      MyForm.RemoveGridBinding('myLink');
      MyForm.AddNewGridBinding(MyGrid, selectQuery, 'myLink');
      SetupGridColumns;
    }
    else
    {
      ShowMessage('Kayıt bulunamadı!');
    }
  except
    ShowMessage('Hata oluştu: ' + LastExceptionMessage);
  }
}

{
  // Form Initialization
  MyForm = TclForm.Create(Self);
  MyForm.SetFormColor('#c4c4c4', '#c4c4c4', clGVertical);

  // Form Title
  Lbl_Baslik = MyForm.AddNewProLabel(MyForm, 'Lbl_Baslik', 'Satış ve Fire İşlemleri');
  Lbl_Baslik.Align = alTop;
  Lbl_Baslik.Height = 60;
  Lbl_Baslik.Margins.Top = 30;
  Lbl_Baslik.clProSettings.FontSize = 26;
  Lbl_Baslik.clProSettings.FontColor = clAlphaColor.clHexToColor('#fc0000');
  Lbl_Baslik.clProSettings.FontVertAlign = palCenter;
  Lbl_Baslik.clProSettings.FontHorzAlign = palCenter;
  Lbl_Baslik.SetclProSettings(Lbl_Baslik.clProSettings);

  // Create main panel to split left and right panels
  mainPnl = MyForm.AddNewProPanel(MyForm, 'mainPnl');
  mainPnl.Align = alClient;  // Use full client area
  mainPnl.Margins.Left = 10;
  mainPnl.Margins.Right = 10;
  mainPnl.Margins.Top = 10;
  mainPnl.Margins.Bottom = 10;

  // Left Panel (For inputs)
  leftPanel = MyForm.AddNewProPanel(mainPnl, 'leftPanel');
  leftPanel.Align = alLeft;
  leftPanel.Width = mainPnl.Width div 2;  // Half width for left panel
  leftPanel.Margins.Top = 20;
  leftPanel.Margins.Left = 20;
  leftPanel.Margins.Right = 20;

  // Right Panel (For Grid)
  rightPanel = MyForm.AddNewProPanel(mainPnl, 'rightPanel');
  rightPanel.Align = alClient;  // Takes remaining space
  rightPanel.Margins.Top = 20;
  rightPanel.Margins.Left = 20;
  rightPanel.Margins.Right = 20;

  // Left Panel Widgets (For Sales and Fire)
  Lbl_UrunKodu = MyForm.AddNewProLabel(leftPanel, 'Lbl_UrunKodu', 'Ürün Kodu');
  Lbl_UrunKodu.Align = alTop;
  Lbl_UrunKodu.Height = 30;
  Lbl_UrunKodu.clProSettings.FontSize = 14;
  Lbl_UrunKodu.clProSettings.FontColor = clAlphaColor.clHexToColor('#000000');
  Lbl_UrunKodu.SetclProSettings(Lbl_UrunKodu.clProSettings);

  Edt_UrunKodu = MyForm.AddNewProEdit(leftPanel, 'Edt_UrunKodu', '');
  Edt_UrunKodu.Align = alTop;
  Edt_UrunKodu.Height = 40;
  Edt_UrunKodu.Width = leftPanel.Width * 70 div 100;
  Edt_UrunKodu.Margins.Top = 10;
  Edt_UrunKodu.SetclProSettings(Edt_UrunKodu.clProSettings);

  Lbl_SatisMiktari = MyForm.AddNewProLabel(leftPanel, 'Lbl_SatisMiktari', 'Satış Miktarı');
  Lbl_SatisMiktari.Align = alTop;
  Lbl_SatisMiktari.Height = 30;
  Lbl_SatisMiktari.clProSettings.FontSize = 14;
  Lbl_SatisMiktari.clProSettings.FontColor = clAlphaColor.clHexToColor('#000000');
  Lbl_SatisMiktari.SetclProSettings(Lbl_SatisMiktari.clProSettings);

  Edt_SatisMiktari = MyForm.AddNewProEdit(leftPanel, 'Edt_SatisMiktari', '');
  Edt_SatisMiktari.Align = alTop;
  Edt_SatisMiktari.Height = 40;
  Edt_SatisMiktari.Width = leftPanel.Width * 70 div 100;
  Edt_SatisMiktari.Margins.Top = 10;
  Edt_SatisMiktari.SetclProSettings(Edt_SatisMiktari.clProSettings);

  Btn_Satis = MyForm.AddNewProButton(leftPanel, 'Btn_Satis', 'Satış Yap');
  Btn_Satis.Align = alTop;
  Btn_Satis.Height = 50;
  Btn_Satis.Width = leftPanel.Width * 70 div 100;
  Btn_Satis.Margins.Top = 10;
  Btn_Satis.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#FF5733');
  Btn_Satis.clProSettings.FontColor = clAlphaColor.clHexToColor('#ffffff');
  Btn_Satis.clProSettings.FontSize = 16;
  Btn_Satis.SetclProSettings(Btn_Satis.clProSettings);

  Lbl_FireMiktari = MyForm.AddNewProLabel(leftPanel, 'Lbl_FireMiktari', 'Fire Miktarı');
  Lbl_FireMiktari.Align = alTop;
  Lbl_FireMiktari.Height = 30;
  Lbl_FireMiktari.clProSettings.FontSize = 14;
  Lbl_FireMiktari.clProSettings.FontColor = clAlphaColor.clHexToColor('#000000');
  Lbl_FireMiktari.SetclProSettings(Lbl_FireMiktari.clProSettings);

  Edt_FireMiktari = MyForm.AddNewProEdit(leftPanel, 'Edt_FireMiktari', '');
  Edt_FireMiktari.Align = alTop;
  Edt_FireMiktari.Height = 40;
  Edt_FireMiktari.Width = leftPanel.Width * 70 div 100;
  Edt_FireMiktari.Margins.Top = 10;
  Edt_FireMiktari.SetclProSettings(Edt_FireMiktari.clProSettings);

  Btn_Fire = MyForm.AddNewProButton(leftPanel, 'Btn_Fire', 'Fire İşlemi Yap');
  Btn_Fire.Align = alTop;
  Btn_Fire.Height = 50;
  Btn_Fire.Width = leftPanel.Width * 70 div 100;
  Btn_Fire.Margins.Top = 10;
  Btn_Fire.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#FFC107');
  Btn_Fire.clProSettings.FontColor = clAlphaColor.clHexToColor('#ffffff');
  Btn_Fire.clProSettings.FontSize = 16;
  Btn_Fire.SetclProSettings(Btn_Fire.clProSettings);

  // Right Panel: Grid for displaying products
  MyGrid = MyForm.AddNewStringGrid(rightPanel, 'MyGrid');
  MyGrid.Align = alClient;
  MyGrid.ReadOnly = True;
  
    // SQL bağlantısı
  selectQuery = TClSqlQuery.Create(nil);
  Clomosy.DBSQLServerConnect('SQL Server', 'DESKTOP-E2HF8JM\SQLEXPRESS', 'sa', '1', 'StokYonetim', 1433);
  selectQuery.Connection = Clomosy.DBSQLServerConnection;

  // Butonlara tıklama olaylarını bağlıyoruz
  MyForm.AddNewEvent(Btn_Satis, tbeOnClick, 'SatisButtonClick');
  MyForm.AddNewEvent(Btn_Fire, tbeOnClick, 'FireButtonClick');
  
  AddDataToGrid;
  MyForm.clSetWindowState(fwsMaximized);

  MyForm.Run;
}




Cevaplar:
Mesajı Yazan: Sudesigirci
Mesaj Tarihi: 11 Temmuz 2025 Saat 17:46
Merhaba Muammer , sqlden veri çekmek için bir fonksiyon paylaşıyorum umarım sana faydası dokunur
function GetMevcutStok(kod: String): Integer;
var stokQuery: TClSqlQuery;
{
  stokQuery = TClSqlQuery.Create(nil);
  stokQuery.Connection = Clomosy.DBSQLServerConnection;
  stokQuery.SQL.Text = 'SELECT StokMiktari FROM TBLSTOKSB WHERE UrunKodu = ' + QuotedStr(kod);
  stokQuery.Open;

  while( not stokQuery.Eof ){
    Result = stokQuery.FieldByName('StokMiktari').AsInteger;
  } else {
    ShowMessage('Ürün bulunamadı!');
    Result = -1;
  }

  stokQuery.Free;
}




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