Kod ile oluşturulan CheckBox'u Kullanma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
izmirlikemal
Üye
Mesajlar: 155
Kayıt: 10 Oca 2014 01:08
Konum: izmir/Buca

Kod ile oluşturulan CheckBox'u Kullanma

Mesaj gönderen izmirlikemal »

Merhaba Arkadaşlarım...
MSSQL veritabanında tablo oluşturma işini kodlama ile yapmaya çalışıyorum.
SSMS da ki 'Column name', 'Data type' ve 'Allow Nulls' sütunlarından ilk iki sütuna değer yazdırabiliyorum,
kod ile kaç adet data satırı varsa o kadar oluşturduğum Checkbox lara tıklayıp buradan aldığım true veya false değerine göre
'null' veya 'not null' değerini 'Allow Nulls' kolonuna yazdıramıyorum.
Kod ile oluşturduğum Edit grubunu Editler, Combobox gurubunu Comboxlar, CheckBox grubunu ise Ceket adıyla dinamik dizide tanımladım.
Aşağıdaki kod bloğunda /***** satırndan kullanarak işlemimi tamamlamak için ne yapmam gerekiyor.
Ben şöyle yapmaya çalışıyorum;
// var CEK:String;

if Ceket.checked=True CEK:=' null,' else CEK:='not null,'; ve bu CEK değişkenini
//**** satırda ' null,' sabiinin yerine kullanmak istiyorum ama olmuyor . Sürekli "Incorect syntax near '(' şeklinde hata mesajı alıyorum.
Arkadaşlarım kafayı yiyeceğim lütfen yardımcı olurmusunuz:
=======================================================
With Query.SQL do BEGIN
Add('create table '+Edit2.Text+' (');
for I := Low(Editler) to High(Editler) do
Begin
//Checkboxgrubunu(Ceket) burada kullanmaya çalışıyorum
Add(Editler.Text+' '+Comboboxlar.text+' null,');//*****
End;
Add(Edit4.Text +' '+Primary_Key_Dgskn+' not null,');
Add('primary key ('+Edit4.Text+')');
add(')');
END;
ertank
Kıdemli Üye
Mesajlar: 1653
Kayıt: 12 Eyl 2015 12:45

Re: Kod ile oluşturulan CheckBox'u Kullanma

Mesaj gönderen ertank »

Merhaba,

Daha kapsamlı şekilde (ünite ve form beraber) kod paylaşımı yapabilir misiniz?
Kullandığınız Delphi sürümünü de belirtebikir misiniz?
izmirlikemal
Üye
Mesajlar: 155
Kayıt: 10 Oca 2014 01:08
Konum: izmir/Buca

Re: Kod ile oluşturulan CheckBox'u Kullanma

Mesaj gönderen izmirlikemal »

Merhaba dostum ertank
Aşağıda programın tamamını paylaşıyorum; Ancak Denemelerimde sonuç alamadığım için CheckBox_Oluşturma Procedure'ünü ve ilgili satırlarını sildim. Bilginize.
NOT: Dephi 10.2.3 versiyonunu kullanıyorum.
Programı Çalıştırıp Resimler ile çalışmasını göstermeye çalıştım. Veritabanı seçimi ile datatype kısmını Combobox ile yaptım.Alan sayısını verdiğimde Alan adlarını belirten editler ile değişken tiplerini seçtiğim combobox ları kodla oluşturdum.
PROGRAM LINKI:
-------------------
Resimlerin linki:
https://i.hizliresim.com/EDBPdD.jpg
https://i.hizliresim.com/9N3mOQ.jpg
https://i.hizliresim.com/EDBPkn.jpg
https://i.hizliresim.com/7Dp65v.jpg
https://i.hizliresim.com/qvaGVD.jpg
https://i.hizliresim.com/k6aOoA.jpg
https://i.hizliresim.com/vPlj96.jpg
https://i.hizliresim.com/Q20Vq3.jpg
https://i.hizliresim.com/WDy7M2.jpg

Resimler sırasıyla programın akışını gösteriyor
En son izmirlikemal tarafından 31 Ağu 2018 12:50 tarihinde düzenlendi, toplamda 3 kere düzenlendi.
ertank
Kıdemli Üye
Mesajlar: 1653
Kayıt: 12 Eyl 2015 12:45

Re: Kod ile oluşturulan CheckBox'u Kullanma

Mesaj gönderen ertank »

DFM dosyası eksik. Bu şekli ile formu oluşturmak zaman alacaktır.

Formu ve kodu birlikte sıkıştırılmış dosya yapıp bir dosya paylaşım sitesi üzerinden paylaşabilirsiniz. Tam Editör & İzleme butonunu tıklayıp mesaja ek olarak göndermeniz de mümkün.
izmirlikemal
Üye
Mesajlar: 155
Kayıt: 10 Oca 2014 01:08
Konum: izmir/Buca

Re: Kod ile oluşturulan CheckBox'u Kullanma

Mesaj gönderen izmirlikemal »

ertank arkadaşım paylaşımımı güncelledim.
ertank
Kıdemli Üye
Mesajlar: 1653
Kayıt: 12 Eyl 2015 12:45

Re: Kod ile oluşturulan CheckBox'u Kullanma

Mesaj gönderen ertank »

Merhaba,

Öncelikle gönderdiğiniz kod ile ilgili olarak;
1- Kod yazarken begin..end, try..except..end, try..finally..end gibi blok arasında kalan kodları bu blokların başlangıç kolonundan en az iki karakter daha sağa doğru kaydırarak yazın. Bu şekilde yazılmış kod gözle takip ve anlaşılması çok daha kolay olmaktadır.
2- her bir "begin" ve "end" ifadesini ayrı satıra yazmaya gayret edin.
3- ADOConnect sınıfını kod içinde oluşturmak zorunda değilsiniz. Form üzerine veya daha güzeli bir DataModule üzerine bir tane ekleyip kod içinde onu kullanabilirsiniz. Zira CreateDatabase() ve CreateTable() prosedürleri her çalıştığında hafıza kaçağı oluşuyor. Create ettiğiniz sınıf için Free kullanmamışsınız. Project -> View Source ekranını açıp aşağıdaki gibi bir ifade eklerseniz sadece debug modunda çalışır iken uygulamayı kapattığınızda var ise size hafıza kaçağı uyarısı yapacaktır. Release olarak build edilmiş EXE uygulamada bu ifade çalıştırılmayacak ve olsa dahi hafıza kaçağı uyarı mesajı gözükmeyecektir:

Kod: Tümünü seç

{$IFDEF DEBUG}
ReportMemoryLeaksOnShutdown := True;
{$ENDIF}
4- Sadece bu form derlendiği zaman Delphi alt kısımda mesajlar bölümünde birçok ipucu ve uyarı mesajı veriyordu. Bu mesajların tamamını inceleyip gidermenizde fayda var. Hepsi düzeltilebilir mesajlar.
5- Enter tuşuna basıldığı zaman her defasında Windows hata sesi çıkarıyor hoparlörden. Bir süre sonra rahatsız edici olabiliyor. Form özelliklerinden KeyPreview = True ve OnKeyPress() olayında da "if Key = #13 then Key := #0;" gibi bir ifade yazılarak bunun önüne geçilebilir.
6- Kullanıcıyı mutlaka enter tuşuna basmaya zorlamışsınız. Bu programcının kullanım şeklidir. Ancak zorunlu olması şahsi görüşüm gereksiz.
7- Kullanıcıyı PrimaryKey veri türü seçimi için mutlaka fare kullanmaya zorlamışsınız. Ben şahsen yazmaya başladıktan sonra mümkün mertebe işlerimi klavye kullanarak tekrar fareye gerek kalmadan yapmayı severim. Bu gibi konuları göz önünde bulundurmanızda fayda var.
8- Database oluşturma kodunuzda sabit olarak aşağıdaki dizini belirtiyorsunuz:

Kod: Tümünü seç

'FILENAME = ''C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\'+VT_Adi+'.mdf'', ' +
Bu çok doğru bir yaklaşım değil. SQL Server tamamen SQL komutu kullanarak ve kurulu olduğu dizin farketmeksizin database oluşturmaya izin verir. İnternette biraz araştırma yapmanızda fayda var. Yukarıdaki kod 64Bit işletim sistemine 32Bit SQL Server kurulu olması halinde hata verip çalışmayacaktır. Aynı şekilde DATA dizini SQL Server kurulumunda kullanıcıya sorulan bir değişkendir. Farklı bir yer belirtilerek yapılmış olan sunucu kurulumlarında yine yukarıdaki kod çalışmayacaktır.

Esas sorununuzla ilgili olarak;
- Gönderilen kodu anlayabildiğim kadarıyla "CreateDatabase()" prosedürünü hatalı kullanıyorsunuz. Bunun için ek bir buton olmalı ve kullanıcı alan tanımlarını yaptıktan sonra bu butonu tıklayarak ilgili prosedür sadece bir defa çağırılmalı. Ekrandaki "Oluştur" butonu adını da Ekranı Hazırla veya benzer bir ifade ile değiştirmeniz daha anlaşılır olmasını sağlayacaktır. Siz ilgili prosedürü FormCreate(), ComboBox2Click() olaylarında gerek olmadığı halde çağırıyorsunuz gibi anladım.

- Oluştur butonunu tıkladığınız zaman ekranda alan tanımlarını yapacak bileşenleri oluşturmadan direk "CreateTable()" prosedürünü çağırmışsınız. Böyle olunca tablo oluşturma kodunuzdaki aşağıdaki satırın hiç önemi kalmıyor

Kod: Tümünü seç

for I := Low(Editler) to High(Editler) do Add(Editler[i].Text+'  '+Comboboxlar[i].text+' null,');
Çünkü "Low(Editler) = High(Editler) = 0" oluyor.

Son olarak, zaten birçok database oluşturma aracı var iken siz Edit ve ComboBox kullanarak alan adı girdirmeye çalışıyorsunuz. En genel örnek olarak SQL Server Management Studio bu iş için bir "GRID" kullanmış. Bence yaklaşımınızı gözden geçirip siz de StringGrid veya DevExpress cxGrid (database bağlantısı olmayacak şekilde) veya herhangi bir başka grid yapısı kullanmayı düşünün.
izmirlikemal
Üye
Mesajlar: 155
Kayıt: 10 Oca 2014 01:08
Konum: izmir/Buca

Re: Kod ile oluşturulan CheckBox'u Kullanma

Mesaj gönderen izmirlikemal »

Sayın ertank
Verdiğiniz bilgileri değerlendireceğim. Önerilerinizi dikkate alacağım. Teşekkür ederim. Hayırlı nasipler dileğimdir.
Cevapla