Sayfayı Yazdır | Pencereyi Kapat

veri tabanı bağlayamıyorum

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=1174
Tarih: 11 Ağustos 2025 Saat 21:44
Program Versiyonu: Web Wiz Forums 12.07 - https://www.webwizforums.com


Konu: veri tabanı bağlayamıyorum
Mesajı Yazan: ela göçel
Konu: veri tabanı bağlayamıyorum
Mesaj Tarihi: 11 Ağustos 2025 Saat 16:41
kodlarım aşağıdaki şekilde ve RUNTIME ERROR
File library anasayfa: Unit kaloriForminstance: Syntax error.
Source position: 16,25 when evaluating instruction CallProc
(SFFFFFFFF, $1, SAC3728,5134734D0, RunUnit ).
Stack content is: [Null, Integer: 525653400,Null, Null...].
Source position: 22,40
Position: 22, 40. HATASI ALIYORUM NE YAPMAM GEREKİYOR                                          
var
  kaloriFormInstance: TCLForm;
  mainLayout: TCLLayout;
  titleLabel: TCLLabel;
  dataListView: TCLListView;
  refreshButton: TCLProButton;
  addPanel: TCLProPanel;
  yemekAdiEdit: TCLProEdit;
  kaloriEdit: TCLProEdit;
  ekleButton: TCLProButton;
  SQLiteDB: TCLSQLiteConnection;
  Query: TCLSQLiteQuery;
  dbPath: string;


void InitializeDatabase()
{
  dbPath = Clomosy.AppFilesPath + 'kalori.db';
  
  SQLiteDB = kaloriFormInstance.AddNewSQLiteConnection(kaloriFormInstance, 'SQLiteDB');
  SQLiteDB.DatabaseName = dbPath;
  
  try
  {
    SQLiteDB.Connect();
    
    Query = kaloriFormInstance.AddNewSQLiteQuery(kaloriFormInstance, 'Query');
    Query.Connection = SQLiteDB;
    
    Query.Sql.Text = 'CREATE TABLE IF NOT EXISTS yemekler (id INTEGER PRIMARY KEY AUTOINCREMENT, yemek_adi TEXT NOT NULL, kalori INTEGER NOT NULL)';
    Query.ExecSQL();
    Query.Close();
  }
  catch
  {
    kaloriFormInstance.ShowMessage('Veritabanı bağlantı hatası!');
  }
}


void LoadDataToList()
{
  var listItem: TCLListViewItem;

  try
  {
    dataListView.Items.Clear();
    
    Query.Sql.Text = 'SELECT id, yemek_adi, kalori FROM yemekler ORDER BY yemek_adi';
    Query.Open();
    
    while not Query.Eof
    {
      listItem = dataListView.Items.Add();
      listItem.Text = Query.FieldByName('yemek_adi').AsString;
      listItem.Detail = Query.FieldByName('kalori').AsString + ' kcal';
      listItem.TagString = Query.FieldByName('id').AsString;
      Query.Next();
    }
    
    Query.Close();
  }
  catch
  {
    kaloriFormInstance.ShowMessage('Veri yükleme hatası!');
  }
}


void RefreshButtonClick()
{
  LoadDataToList();
}


void EkleButtonClick()
{
  if (yemekAdiEdit.Text != '') and (kaloriEdit.Text != '')
  {
    try
    {
      Query.Sql.Text = 'INSERT INTO yemekler (yemek_adi, kalori) VALUES ("' + yemekAdiEdit.Text + '", ' + kaloriEdit.Text + ')';
      Query.ExecSQL();
      Query.Close();
      
      yemekAdiEdit.Text = '';
      kaloriEdit.Text = '';
      LoadDataToList();
      kaloriFormInstance.ShowMessage('Yemek başarıyla eklendi!');
    }
    catch
    {
      kaloriFormInstance.ShowMessage('Ekleme hatası! Kalori değerinin bir sayı olduğundan emin olun.');
    }
  }
  else
  {
    kaloriFormInstance.ShowMessage('Lütfen tüm alanları doldurun!');
  }
}

{
  kaloriFormInstance = TCLForm.Create(Self);
  kaloriFormInstance.SetFormColor('#cce6d6', '#678e76', clGVertical);AngryAngry
  InitializeDatabase;
  LoadDataToList;

  kaloriFormInstance.Run;
}



Cevaplar:
Mesajı Yazan: cerenn
Mesaj Tarihi: 11 Ağustos 2025 Saat 17:21
Merhaba Eda 
Öncelikle kodunda bazı hatalar mevcut
Fonksiyonları eğer parametresizse ()olmadan kullanıyoruz örneğin

void InitializeDatabase() değilde void InitializeDatabase; 

şeklinde kullanman lazım tüm fonksiyonlarını buna çevirirsen hatalardan biri düzelicektir.

Ayrıca showmessageları
'kaloriFormInstance.ShowMessage('Ekleme hatası! Kalori değerinin bir sayı olduğundan emin olun.');' şeklinde değilde direkt 'ShowMessage('Ekleme hatası! Kalori değerinin bir sayı olduğundan emin olun.');'  şeklinde kullanman gerekiyor

if (yemekAdiEdit.Text != '') and (kaloriEdit.Text != '')  kullanımı doğru değil and kullanmıyoruz && şeklinde gösteriyoruz ve yine != şeklinde bir kullanım yok <> şeklinde kullanman gerekiyor yani if ((yemekAdiEdit.Text <> '') &&(kaloriEdit.Text <> '')) doğrusu bu şekilde.
clomosyde try-catch yok try-except ya da try-finally var senin kodun için except kullanmak uygun. 
try
    {
      Query.Sql.Text = 'INSERT INTO yemekler (yemek_adi, kalori) VALUES ("' + yemekAdiEdit.Text + '", ' + kaloriEdit.Text + ')';
      Query.ExecSQL();
      Query.Close();
      
      yemekAdiEdit.Text = '';
      kaloriEdit.Text = '';
      LoadDataToList();
      kaloriFormInstance.ShowMessage('Yemek başarıyla eklendi!');
    }
    except
    {
      ShowMessage('Ekleme hatası! Kalori değerinin bir sayı olduğundan emin olun.');
    }
}
şeklinde olmalı fazladan en sona bir '}' atıyoruz kural böyle.

Bunun haricinde sqllitede ExecSQL() diye bir ifade yok bunu sqlserverda kullanıyoruz.sqllite için
chrome-extension://efaidnbmnnnibpcajpcglclefindmkaj/ https://clomosy.com/docs/ClomosyKitapV2.pdf" rel="nofollow - https://clomosy.com/docs/ClomosyKitapV2.pdf
218.sayfa 14.7.2. Local (Yerel) Veri Tabanı Bağlantıları inceleyebilirsin.Syntax hatalarını düzelttikten ve kitaba baktıktan sonra aldığın bir hata olursa ve paylaşırsan tekrar yardımcı olabilirim.
İyi çalışmalar.



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