Combo box sorunu

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
stnonstop
Üye
Mesajlar: 149
Kayıt: 22 Haz 2005 04:34

Mesaj gönderen stnonstop »

pardon hdayinin mesajına cevap yazmıştım ama ben gönderinceye kadar bir çok cevap eklenmiş. İlk olarak verileri veritabanından alıyorum. Biz kayıtta düzeltme yapmak için bu tarzda bir combobox a ihtiyaç duydum. DblookupComboBox işimi çok iyi görüyor kod karmaşamı önemli ölçüde azaltıyor fakat düzeltmeden önceki değerlerin seçili gelmesini istiyorum. Bunu beceremedim.

TComboBox da ise 40 satır kod 3 tane fonksiyon yazdıktan sonra DblookupCombo Boxa yaklaşıp geçiyor fakat bu seferde AddObject ile uğraşmak istemdeiğimden işlemler olmuyordu AddObject siz olmayacak anlaşıldı.
stnonstop
Üye
Mesajlar: 149
Kayıt: 22 Haz 2005 04:34

Mesaj gönderen stnonstop »

Kod: Tümünü seç

SubeNameComboBox->Items->AddObject(DM->IBQuery1->FieldValues["SUBENAME"], TObject(DM->IBQuery1->FieldValues["SUBE_ID"]));
DM->IBQuery1->Next();
Gibi bir kod yazmaya çalışıyorum fakat

[C++ Error] KasaNoDuzeltFormUnt.cpp(52): E2285 Could not find a match for 'TObject::TObject(Variant)'
[C++ Error] KasaNoDuzeltFormUnt.cpp(52): E2459 VCL style classes must be constructed using operator new

şeklinde hata alıyorum. bunu nasıl aşabilirim ???? TObject ti bu şekilde kullanamıyacam
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Mesaj gönderen sadettinpolat »

FieldValues["SUBE_ID"] yerine fieldbyname(SUBE_ID).AsString tarzı bir yol dene. 1. örnekte geriye variant döndüğünden dolayı bir sıkıntı çıkıyor olabilir...
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
stnonstop
Üye
Mesajlar: 149
Kayıt: 22 Haz 2005 04:34

Mesaj gönderen stnonstop »

Kod: Tümünü seç

int SubeID;

SubeID = DM->IBQuery1->FieldValues["SUBE_ID"];
SubeNameComboBox->Items->AddObject(DM->IBQuery1->FieldValues["SUBENAME"], (TObject *) SubeID));
DM->IBQuery1->Next(); 
sorun çözüldü. sadettinpolat tın da dediği gibi geriye variant diye döndüğünden hata çıkıyormuş. Sağolun.

Not: BCB 6 da bir türlü
...->fieldbyname(SUBE_ID).AsString şeklinde tanımlama yapamadım Structure required on left side of . or .* şeklinde bir hata alıyordum.

-------------------------------------------
Kod a ufak bir eksiklik vardı onu düzelttim
En son stnonstop tarafından 27 Tem 2005 04:37 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Mesaj gönderen sadettinpolat »

bildiğim kadarıyla vcl her iki platformda da aynı özellik ve metodlara sahip. yazım konusunda bir sıkıntı olabilir. yardım bölümünde detaylı bilgi bulabilirsiniz.
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
stnonstop
Üye
Mesajlar: 149
Kayıt: 22 Haz 2005 04:34

Mesaj gönderen stnonstop »

Kod: Tümünü seç

void __fastcall TKasaNoDuzeltForm::FormShow(TObject *Sender)
{
  AnsiString SQL;
  int RecCnt, SubeID, MusteriID;
  SQL  = "select * from KASANO where KASANO_ID = '"+KasaIDEdit->Text+"' ";

  KasaNoEdit->DataSource = DM->dsKasaEdit;
  DM->QuerySelectSetup(DM->IBKasaEdit, SQL);

  // SubeNameComboBox ve MusteriNameComboBox Textlerinin Ön seçimli olarak alınması
  SQL  = "select SUBE.SUBENAME, MUSTERI.MUSTERI_NAME ";
  SQL += "from SUBE, MUSTERI ";
  SQL += "where SUBE.SUBE_ID = '"+DM->IBKasaEdit->FieldValues["SUBE_ID"]+"' ";
  SQL += "  and MUSTERI.MUSTERI_ID = SUBE.MUSTERI_ID";

  DM->QuerySelectSetup(DM->IBQuery1, SQL);
  SubeNameComboBox->Text = DM->IBQuery1->FieldValues["SUBENAME"];
  MusteriNameComboBox->Text = DM->IBQuery1->FieldValues["MUSTERI_NAME"];

  // SubeNameComboBox Doldurulması
  SQL  = "select * from SUBE where MUSTERI_ID = '"+DM->IBKasaEdit->FieldValues["MUSTERI_ID"]+"' ";
  DM->QuerySelectSetup(DM->IBQuery1, SQL);
  DM->IBQuery1->Last();
  RecCnt = DM->IBQuery1->RecordCount;
  DM->IBQuery1->First();
  for (int i=0; i<RecCnt; i++)
  {
    SubeID = DM->IBQuery1->FieldValues["SUBE_ID"];
    SubeNameComboBox->Items->AddObject(DM->IBQuery1->FieldValues["SUBENAME"], (TObject*) SubeID);
    DM->IBQuery1->Next();
  }
  // MusteriNameComboBox Doldurulması
  SQL = "select * from MUSTERI ";
  DM->QuerySelectSetup(DM->IBQuery1, SQL);
  DM->IBQuery1->Last();
  RecCnt = DM->IBQuery1->RecordCount;
  DM->IBQuery1->First();
  for (int i=0; i<RecCnt; i++)
  {
    MusteriID = DM->IBQuery1->FieldValues["MUSTERI_ID"];
    MusteriNameComboBox->Items->AddObject(DM->IBQuery1->FieldValues["MUSTERI_NAME"], (TObject*) MusteriID);
    DM->IBQuery1->Next();
  }
}
//---------------------------------------------------------------------------

void __fastcall TKasaNoDuzeltForm::SubeNameComboBoxChange(TObject *Sender)
{
 AnsiString SQL;
 ShowMessage(SubeNameComboBox->ItemIndex);
}
//---------------------------------------------------------------------------

void __fastcall TKasaNoDuzeltForm::MusteriNameComboBoxChange(
      TObject *Sender)
{
  AnsiString SQL;
  int MusteriID, RecCnt, SubeID;

  /* MusteriComboBox sında backspacese basılması nedeniyle oluşan hatayı engeller ;*/
  if (! MusteriNameComboBox->Enabled)
  {
    MusteriNameComboBox->Enabled = true;
    MusteriNameComboBox->Text    = "";
    MusteriNameComboBox->SetFocus();
    return;
  }
  /* MusteriNameComboBox sında olmayan bir item ın seçilmeye çalıştığı sırada
  oluşan out of index hatasının oluşmasını engeller */
  if (MusteriNameComboBox->ItemIndex == -1)
  {
   return;
  }
  /* ----------------------------------------------------------------------*/
  MusteriID = int(MusteriNameComboBox->Items->Objects[MusteriNameComboBox->ItemIndex]);
  SQL  = "select * from SUBE where MUSTERI_ID = '"+IntToStr(MusteriID)+"' ";
  DM->QuerySelectSetup(DM->IBQuery1, SQL);
  DM->IBQuery1->Last();
  RecCnt = DM->IBQuery1->RecordCount;
  DM->IBQuery1->First();

  if (RecCnt == 0)
  {
    return;
  }
  SubeNameComboBox->Items->Clear();
  SubeNameComboBox->Text = DM->IBQuery1->FieldValues["SUBENAME"];
  for (int i=0; i<RecCnt; i++)
  {
    SubeID = DM->IBQuery1->FieldValues["SUBE_ID"];
    SubeNameComboBox->Items->AddObject(DM->IBQuery1->FieldValues["SUBENAME"], (TObject*) SubeID);
    DM->IBQuery1->Next();
  }
}
//---------------------------------------------------------------------------

void __fastcall TKasaNoDuzeltForm::MusteriNameComboBoxKeyPress(
      TObject *Sender, char &Key)
{
 int intKey;
 intKey = int(Key);
 if (intKey == 13 )
 {
   MusteriNameComboBoxChange(Sender) ;
 }
 else if (intKey == 8)
 {
   // Backspacese basıldığında MusteriComboBoxı ayarlaması
   MusteriNameComboBox->Enabled = false;
   return;
 }
}
//---------------------------------------------------------------------------
Sonunda çözdüm. :) Umarım. İki combo boxu içindeki değerlerle birbirine bağlamayı düşünen arkadaşlara en azından bir fikir vermesi için yardımcı olur. Hoş ben BCB kullanıyorum ama benzer sonuçta...
Cevapla